Source code for pypeit.spectrographs.util

"""
Spectrograph utility methods.
"""
from IPython import embed

import os.path

import numpy as np

from astropy.io import fits

from pypeit import spectrographs
from pypeit import msgs


[docs]def load_spectrograph(spec): """ Instantiate a spectrograph from the available subclasses of :class:`~pypeit.spectrographs.spectrograph.Spectrograph`. Args: spec (:obj:`str`, :class:`~pypeit.spectrographs.spectrograph.Spectrograph`): The spectrograph to instantiate. If the input object is ``None`` or has :class:`~pypeit.spectrographs.spectrograph.Spectrograph` as a base class, the instance is simply returned. If it is a string, the string is used to instantiate the relevant spectrograph instance. Returns: :class:`~pypeit.spectrographs.spectrograph.Spectrograph`: The spectrograph used to obtain the data to be reduced. Raises: PypeItError: Raised if the input is a string that does not select a recognized PypeIt spectrograph. """ if spec is None or isinstance(spec, spectrographs.spectrograph.Spectrograph): return spec classes = spectrographs.spectrograph_classes() if spec in classes.keys(): return classes[spec]() # Check if we were given a file, and if so try to read the spectrograph type from its header if os.path.isfile(spec): header = fits.getheader(spec) if 'PYP_SPEC' in header: pyp_spec = header['PYP_SPEC'] if pyp_spec in classes.keys(): spectrograph = classes[pyp_spec]() if 'DISPNAME' in header: spectrograph.dispname = header['DISPNAME'] return spectrograph else: msgs.error(f'Unknown PYP_SPEC {pyp_spec} found in {spec}') else: msgs.error(f'{spec} did not contain PYP_SPEC in its header') msgs.error('{0} is not a supported spectrograph.'.format(spec))