Source code for jwst.datamodels.multislit

from . import model_base
from .image import ImageModel
from .slit import SlitModel, SlitDataModel


__all__ = ['MultiSlitModel']



[docs]class MultiSlitModel(model_base.DataModel): """ A data model for multi-slit images. This model has a special member `slits` that can be used to deal with an entire slit at a time. It behaves like a list:: >>> multislit_model.slits.append(image_model) >>> multislit_model.slits[0] >>> multislit[0] <SlitModel> If ``init`` is a file name or an ``ImageModel`` or a ``SlitModel``instance, an empty ``SlitModel`` will be created and assigned to attribute ``slits[0]``, and the `data`, ``dq``, ``err``, ``var_rnoise``, ``var_poisson``and ``relsens`` attributes from the input file or model will be copied to the first element of ``slits``. Parameters ---------- init : any Any of the initializers supported by `~jwst.datamodels.DataModel`. """ schema_url = "multislit.schema.yaml" def __init__(self, init=None, **kwargs): if isinstance(init, (SlitModel, ImageModel)): super(MultiSlitModel, self).__init__(init=None, **kwargs) self.update(init) slitdata = SlitDataModel(init) self.slits.append(slitdata) return super(MultiSlitModel, self).__init__(init=init, **kwargs) def __getitem__(self, key): """ Returns a metadata value using a dotted name or a ``SlitModel``. """ if isinstance(key, str) and key.split('.')[0] == 'meta': res = super(MultiSlitModel, self).__getitem__(key) return res elif isinstance(key, int): # Return an instance of a SlitModel slit = self.slits[key] # returns an ObjectNode instance kwargs = {} items = dict(slit.items()) for key in items: if not key.startswith(('meta', 'extra_fits')): kwargs[key] = items[key] s = SlitModel(**kwargs) s.update(self) if slit.meta.hasattr('wcs'): s.meta.wcs = slit.meta.wcs return s else: raise ValueError("Invalid key {0}".format(key))