Source code for jwst.lib.exposure_types

"""Module for lists of modes grouped in different ways."""

from stdatamodels.jwst.datamodels import JwstDataModel

from jwst.associations.lib.dms_base import (
    ACQ_EXP_TYPES,
    IMAGE2_NONSCIENCE_EXP_TYPES,
    IMAGE2_SCIENCE_EXP_TYPES,
    SPEC2_SCIENCE_EXP_TYPES,
)

IMAGING_TYPES = set(
    tuple(ACQ_EXP_TYPES)
    + tuple(IMAGE2_SCIENCE_EXP_TYPES)
    + tuple(IMAGE2_NONSCIENCE_EXP_TYPES)
    + ("fgs_image", "fgs_focus")
)

SPEC_TYPES = SPEC2_SCIENCE_EXP_TYPES

# FGS guide star exposures
FGS_GUIDE_EXP_TYPES = [
    "fgs_acq1",
    "fgs_acq2",
    "fgs_fineguide",
    "fgs_id-image",
    "fgs_id-stack",
    "fgs_track",
]

# NIRSPEC lamp mode spec types
NRS_LAMP_MODE_SPEC_TYPES = [
    "brightobj",
    "fixedslit",
    "ifu",
    "msaspec",
]

__all__ = [
    "is_nrs_lamp",
    "is_nrs_linelamp",
    "is_nrs_flatlamp",
    "is_nrs_slit_linelamp",
    "is_nrs_ifu_linelamp",
    "is_nrs_ifu_flatlamp",
    "is_nrs_ifu_lamp",
    "is_nrs_msaspec_lamp",
    "is_nrs_msaspec_linelamp",
    "is_nrs_msaspec_flatlamp",
    "is_nrs_autoflat",
    "is_moving_target",
]


[docs] def is_nrs_lamp(datamodel): """ Check if exposure type is nrs_lamp or nrs_autowave. Parameters ---------- datamodel : `~stdatamodels.jwst.datamodels.JwstDataModel` JWST data model. Returns ------- status : bool `True` if it is. """ exp_type = datamodel.meta.exposure.type.lower() return exp_type in ["nrs_lamp", "nrs_autowave"]
[docs] def is_nrs_linelamp(datamodel): """ Check if lamp state is lin or ref. Parameters ---------- datamodel : `~stdatamodels.jwst.datamodels.JwstDataModel` JWST data model. Returns ------- status : bool `True` if it is. """ lamp_state = datamodel.meta.instrument.lamp_state.lower() return lamp_state[0:3] in ["lin", "ref"]
[docs] def is_nrs_flatlamp(datamodel): """ Check if lamp state is flat. Parameters ---------- datamodel : `~stdatamodels.jwst.datamodels.JwstDataModel` JWST data model. Returns ------- status : bool `True` if it is. """ lamp_state = datamodel.meta.instrument.lamp_state.lower() return lamp_state[0:4] == "flat"
[docs] def is_nrs_slit_linelamp(datamodel): """ Check NRS slit line lamp. Specifically, check if lamp mode is msaspec, fixedslit, or brightobj when lamp state is lin or ref and exposure type is nrs_autowave or nrs_lamp. Parameters ---------- datamodel : `~stdatamodels.jwst.datamodels.JwstDataModel` JWST data model. Returns ------- status : bool `True` if it is. """ lamp_mode = datamodel.meta.instrument.lamp_mode.lower() exp_type = datamodel.meta.exposure.type.lower() return ( lamp_mode in ["msaspec", "fixedslit", "brightobj"] and is_nrs_linelamp(datamodel) and exp_type in ["nrs_autowave", "nrs_lamp"] )
[docs] def is_nrs_ifu_linelamp(datamodel): """ Check if lamp mode is ifu and lamp state is lin or ref. Parameters ---------- datamodel : `~stdatamodels.jwst.datamodels.JwstDataModel` JWST data model. Returns ------- status : bool `True` if it is. """ lamp_mode = datamodel.meta.instrument.lamp_mode.lower() return lamp_mode == "ifu" and is_nrs_linelamp(datamodel)
[docs] def is_nrs_ifu_flatlamp(datamodel): """ Check if lamp mode is ifu and lamp state is flat. Parameters ---------- datamodel : `~stdatamodels.jwst.datamodels.JwstDataModel` JWST data model. Returns ------- status : bool `True` if it is. """ lamp_mode = datamodel.meta.instrument.lamp_mode.lower() return lamp_mode == "ifu" and is_nrs_flatlamp(datamodel)
[docs] def is_nrs_ifu_lamp(datamodel): """ Check if lamp mode is ifu and exposure type is nrs_lamp or nrs_autowave. Parameters ---------- datamodel : `~stdatamodels.jwst.datamodels.JwstDataModel` JWST data model. Returns ------- status : bool `True` if it is. """ lamp_mode = datamodel.meta.instrument.lamp_mode.lower() return lamp_mode == "ifu" and is_nrs_lamp(datamodel)
[docs] def is_nrs_msaspec_lamp(datamodel): """ Check if lamp mode is msaspec and exposure type is nrs_lamp or nrs_autowave. Parameters ---------- datamodel : `~stdatamodels.jwst.datamodels.JwstDataModel` JWST data model. Returns ------- status : bool `True` if it is. """ lamp_mode = datamodel.meta.instrument.lamp_mode.lower() return lamp_mode == "msaspec" and is_nrs_lamp(datamodel)
[docs] def is_nrs_msaspec_linelamp(datamodel): """ Check if lamp mode is msaspec and lamp state is lin or ref. Parameters ---------- datamodel : `~stdatamodels.jwst.datamodels.JwstDataModel` JWST data model. Returns ------- status : bool `True` if it is. """ lamp_mode = datamodel.meta.instrument.lamp_mode.lower() return lamp_mode == "msaspec" and is_nrs_linelamp(datamodel)
[docs] def is_nrs_msaspec_flatlamp(datamodel): """ Check if lamp mode is msaspec and lamp state is flat. Parameters ---------- datamodel : `~stdatamodels.jwst.datamodels.JwstDataModel` JWST data model. Returns ------- status : bool `True` if it is. """ lamp_mode = datamodel.meta.instrument.lamp_mode.lower() return lamp_mode == "msaspec" and is_nrs_flatlamp(datamodel)
[docs] def is_nrs_autoflat(datamodel): """ Check of exposure type is nrs_autoflat. Parameters ---------- datamodel : `~stdatamodels.jwst.datamodels.JwstDataModel` JWST data model. Returns ------- status : bool `True` if it is. """ exp_type = datamodel.meta.exposure.type return exp_type.lower() == "nrs_autoflat"
[docs] def is_moving_target(datamodel): """ Determine if a moving target exposure. Parameters ---------- datamodel : `~stdatamodels.jwst.datamodels.JwstDataModel` or dict JWST data model or flattened metadata dictionary. Returns ------- status : bool `True` if it is. """ if isinstance(datamodel, JwstDataModel): if ( hasattr(datamodel.meta.target, "type") and datamodel.meta.target.type is not None and datamodel.meta.target.type.lower() == "moving" ): return True return False elif isinstance(datamodel, dict): # assume datamodel is a dictionary of metadata from read_metadata if ( "meta.target.type" in datamodel and datamodel["meta.target.type"] is not None and datamodel["meta.target.type"].lower() == "moving" ): return True return False else: raise TypeError(f"Expected JwstDataModel or dict, got {type(datamodel)} instead.")