Source code for xicsrt.__main__

# -*- coding: utf-8 -*-
"""
.. Authors:
   Novimir Antoniuk Pablant <npablant@pppl.gov>

A command line interface for the XICSRT raytracer.
"""

import sys
import numpy as np
import argparse
import io

from xicsrt.util import mirlogging

from xicsrt import xicsrt_raytrace
from xicsrt import xicsrt_multiprocessing
from xicsrt import xicsrt_io

from xicsrt._version import __version__

m_log = mirlogging.getLogger(__name__)

def _get_parser():
    parser = argparse.ArgumentParser(
        "\n  xicsrt"
        ,description = f"""
xicsrt version {__version__}

description:
  Perform an XICSRT raytrace from the command line.

  The input to this command should be an XICSRT configuration dictionary
  in json format. (Pickle and hdf5 formats are also supported.)


example 1:
  xicsrt config.json
  
example 2: 
  python -m xicsrt config.json

"""
        ,formatter_class=lambda prog: argparse.RawDescriptionHelpFormatter(prog, width=79))

    parser.add_argument(
        'config_file',
        type=str,
        nargs='?',
        default='config.json',
        help='The path to the configuration file for this run.',
        )

    parser.add_argument(
        '--numruns',
        type=int,
        default=None,
        metavar='N',
        help="Number of runs.",
        )

    parser.add_argument(
        '--numiter',
        type=int,
        default=None,
        metavar='N',
        help="Number of iterations per run.",
        )

    parser.add_argument(
        '--seed',
        type=int,
        default=None,
        metavar='N',
        help="The random seed to use.",
        )

    parser.add_argument(
        '--save',
        action='store_true',
        help="Save the results.",
        )

    parser.add_argument(
        '--images',
        action='store_true',
        help="Save intersection images.",
        )

    parser.add_argument(
        '--suffix',
        type=str,
        default=None,
        metavar='STR',
        help="A suffix to add to the output files.",
        )

    parser.add_argument(
        '--path',
        type=str,
        default=None,
        metavar='STR',
        help="Directory in which to store output.",
        )

    parser.add_argument(
        '--multiprocessing',
        '--mp',
        action='store_true',
        help="Use multiprocessing.",
        )

    parser.add_argument(
        '--processes',
        type=int,
        default=None,
        metavar='N',
        help="Number of processes to use for muliprocessing.",
        )

    parser.add_argument(
        '--version',
        action='store_true',
        help="Show the version number.",
        )

    parser.add_argument(
        '--debug',
        action='store_true',
        help="Show debugging output in the log.",
        )

    return parser

[docs] def run(): """ Parse command line arguments and run XICSRT. """ global args parser = _get_parser() args = parser.parse_args() if args.version: print(f'{__version__}') return if args.debug: log_level = mirlogging.DEBUG else: log_level = mirlogging.INFO mirlogging.defaultConfig(level=log_level, force=True) config = xicsrt_io.load_config(args.config_file) if args.suffix: config['general']['output_suffix'] = args.suffix if args.numruns: config['general']['number_of_runs'] = args.numruns if args.numiter: config['general']['number_of_iter'] = args.numiter if args.seed: config['general']['random_seed'] = args.seed if args.path: config['general']['output_path'] = args.path if args.save: config['general']['save_results'] = args.save if args.images: config['general']['save_images'] = args.images if args.multiprocessing: result = xicsrt_multiprocessing.raytrace(config, processes=args.processes) else: result = xicsrt_raytrace.raytrace(config)
# Generate the module docstring from the helpstring. parser = _get_parser() with io.StringIO() as ff: parser.print_help(ff) help_string = ff.getvalue() help_string = '| '+'\n| '.join(help_string.splitlines()) __doc__ += '\n' __doc__ += help_string if __name__ == "__main__": run()