Source code for pypeit.scripts.run_pypeit

"""
Main execution script for ``PypeIt`` reduction pipelines.

.. include common links, assuming primary doc root is up one directory
.. include:: ../include/links.rst
"""

from pypeit.scripts import scriptbase


[docs]class RunPypeIt(scriptbase.ScriptBase): # TODO: Combining classmethod and property works in python 3.9 and later # only: https://docs.python.org/3.9/library/functions.html#classmethod # Order matters. In python 3.9, it would be: # # @classmethod # @property # # Because we're not requiring python 3.9 yet, we have to leave this as a # classmethod only:
[docs] @classmethod def name(cls): """ Return the name of the executable. """ return 'run_pypeit'
[docs] @classmethod def usage(cls): """ Print pypeit usage description. """ import textwrap import pypeit from pypeit.spectrographs import available_spectrographs spclist = ', '.join(available_spectrographs) spcl = textwrap.wrap(spclist, width=70) descs = '## ' descs += '\x1B[1;37;42m' + 'PypeIt : ' descs += 'The Python Spectroscopic Data Reduction Pipeline v{0:s}'.format(pypeit.__version__) \ + '\x1B[' + '0m' + '\n' descs += '## ' descs += '\n## Available spectrographs include:' for ispcl in spcl: descs += '\n## ' + ispcl return descs
[docs] @classmethod def get_parser(cls, width=None): import argparse parser = super().get_parser(description=cls.usage(), width=width, formatter=argparse.RawDescriptionHelpFormatter) parser.add_argument('pypeit_file', type=str, help='PypeIt reduction file (must have .pypeit extension)') parser.add_argument('-v', '--verbosity', type=int, default=2, help='Verbosity level between 0 [none] and 2 [all]') parser.add_argument('-r', '--redux_path', default=None, help='Path to directory for the reduction. Only advised for testing') parser.add_argument('-m', '--do_not_reuse_calibs', dest='reuse_calibs', default=True, action='store_false', help='Do not load previously generated calibrations, even ones made ' 'during the run.') parser.add_argument('-s', '--show', default=False, action='store_true', help='Show reduction steps via plots (which will block further ' 'execution until clicked on) and outputs to ginga. Requires ' 'remote control ginga session via ' '"ginga --modules=RC,SlitWavelength &"') # TODO: JFH Should the default now be true with the new definition. parser.add_argument('-o', '--overwrite', default=False, action='store_true', help='Overwrite any existing files/directories') parser.add_argument('-c', '--calib_only', default=False, action='store_true', help='Only run on calibrations') return parser
[docs] @staticmethod def main(args): import os from IPython import embed from pypeit import pypeit from pypeit import msgs # Load options from command line splitnm = os.path.splitext(args.pypeit_file) if splitnm[1] != '.pypeit': msgs.error('Input file must have a .pypeit extension!') logname = splitnm[0] + ".log" # Instantiate the main pipeline reduction object pypeIt = pypeit.PypeIt(args.pypeit_file, verbosity=args.verbosity, reuse_calibs=args.reuse_calibs, overwrite=args.overwrite, redux_path=args.redux_path, calib_only=args.calib_only, logname=logname, show=args.show) if args.calib_only: calib_dict = pypeIt.calib_all() else: pypeIt.reduce_all() msgs.info('Data reduction complete') # QA HTML msgs.info('Generating QA HTML') pypeIt.build_qa() msgs.close() return 0