Source code for jwst.lib.dispaxis

import logging

log = logging.getLogger(__name__)

__all__ = ["get_dispersion_direction"]


[docs] def get_dispersion_direction(exposure_type, grating="ANY", filter_wh="ANY", pupil="ANY"): """ Get the dispersion direction. Parameters ---------- exposure_type : str The exposure type. grating : str The name of the optic in the grating wheel. filter_wh : str The name of the optic in the filter wheel. pupil : str The name of the optic in the pupil wheel. Returns ------- select : int or None The dispersion direction: * `None`: The dispersion direction is not meaningful or not defined. * 1: The dispersion direction is horizontal ("sky" coordinates). * 2: The dispersion direction is vertical ("sky" coordinates). """ exposure_type = exposure_type.upper() if grating is not None: grating = grating.upper() if filter_wh is not None: filter_wh = filter_wh.upper() if pupil is not None: pupil = pupil.upper() # The keys of the `by_exp_type` dictionary are values of exposure type. # If the dispersion direction is uniquely determined by the exposure # type, the associated value of by_exp_type[exposure_type] will be an # integer, the dispersion direction. If one or more parameters other # than the exposure type are needed, the value of # by_exp_type[exposure_type] will be a tuple of several strings; use # that tuple as the key for dictionary `second_pass`, and the value of # that will be the dispersion direction. by_exp_type = { # FGS science "FGS_DARK": None, "FGS_FOCUS": None, "FGS_IMAGE": None, "FGS_INTFLAT": None, "FGS_SKYFLAT": None, # FGS guide star "FGS_ACQ1": None, "FGS_ACQ2": None, "FGS_FINEGUIDE": None, "FGS_ID-IMAGE": None, "FGS_ID-STACK": None, "FGS_TRACK": None, # MIRI "MIR_4QPM": None, "MIR_CORONCAL": None, "MIR_DARKALL": None, "MIR_DARKIMG": None, "MIR_DARKMRS": None, "MIR_FLATALL": None, "MIR_FLATIMAGE": None, "MIR_FLATIMAGE-EXT": None, "MIR_FLATMRS": 2, "MIR_FLATMRS-EXT": 2, "MIR_IMAGE": None, "MIR_LRS-FIXEDSLIT": 2, "MIR_LRS-SLITLESS": 2, "MIR_WFSS": 2, "MIR_LYOT": None, "MIR_MRS": 2, "MIR_TACQ": None, # NIRISS "NIS_AMI": None, "NIS_DARK": None, "NIS_EXTCAL": None, "NIS_FOCUS": None, "NIS_IMAGE": None, "NIS_LAMP": None, "NIS_SOSS": 1, "NIS_TACQ": None, "NIS_TACONFIRM": None, "NIS_WFSS": (exposure_type, "ANY", filter_wh, "ANY"), # NIRCam "NRC_CORON": None, "NRC_DARK": None, "NRC_FLAT": None, "NRC_FOCUS": None, "NRC_GRISM": (exposure_type, "ANY", "ANY", pupil), "NRC_IMAGE": None, "NRC_WFSS": (exposure_type, "ANY", "ANY", pupil), "NRC_LED": None, "NRC_WFSC": None, "NRC_TACONFIRM": None, "NRC_TACQ": None, "NRC_TSGRISM": (exposure_type, "ANY", "ANY", pupil), "NRC_TSIMAGE": None, # NIRSpec "NRS_AUTOFLAT": 1, "NRS_AUTOWAVE": 1, "NRS_BRIGHTOBJ": 1, "NRS_CONFIRM": None, "NRS_DARK": None, "NRS_FIXEDSLIT": 1, "NRS_FOCUS": None, "NRS_IFU": 1, "NRS_IMAGE": None, "NRS_LAMP": 1, "NRS_MIMF": None, "NRS_MSASPEC": 1, "NRS_MSATA": None, "NRS_TACONFIRM": None, "NRS_TACQ": None, "NRS_TASLIT": None, "NRS_WATA": None, # Misc "N/A": None, "ANY": None, } if exposure_type not in by_exp_type.keys(): return None # The strings in each tuple are exposure_type, grating, filter_wh, pupil. second_pass = { ("NIS_WFSS", "ANY", "GR150R", "ANY"): 2, ("NIS_WFSS", "ANY", "GR150C", "ANY"): 1, ("NRC_GRISM", "ANY", "ANY", "GRISMR"): 1, ("NRC_GRISM", "ANY", "ANY", "GRISMC"): 2, ("NRC_TSGRISM", "ANY", "ANY", "GRISMR"): 1, ("NRC_WFSS", "ANY", "ANY", "GRISMR"): 1, ("NRC_WFSS", "ANY", "ANY", "GRISMC"): 2, } select = by_exp_type[exposure_type] if isinstance(select, int): return select else: if select in second_pass.keys(): return second_pass[select] else: log.warning("Error in get_dispersion_direction: %s not in `second_pass`", select) log.warning("Dispersion direction could not be determined.")