Source code for liger_iris_pipeline.datamodels.referencefile

import warnings

from stdatamodels.validate import ValidationWarning
from stdatamodels.dynamicdq import dynamic_mask

from .model_base import LigerIRISDataModel
from .dqflags import pixel


__all__ = ['ReferenceFileModel']


[docs] class ReferenceFileModel(LigerIRISDataModel): """ A base data model for Liger and IRIS calibration reference data. """ schema_url = "https://oirlab.github.io/schemas/ReferenceFileModel.schema" def __init__(self, init=None, **kwargs): super().__init__(init=init, **kwargs) self._no_asdf_extension = True
[docs] def save(self, path, dir_path=None, *args, **kwargs): """ Save data model. If the 'dq' and 'dq_def' exist they need special handling. """ if (self.hasattr('dq_def') and self.hasattr("dq") and self.dq is not None and self.dq_def is not None): # Save off uncompressed DQ array. Compress DQ array # according to 'dq_def' for save. Then restore # uncompressed DQ array. dq_orig = self.dq.copy() self.dq = dynamic_mask(self, pixel, inv=True) output_path = super().save(path, dir_path, *args, **kwargs) self.dq = dq_orig else: output_path = super().save(path, dir_path, *args, **kwargs) return output_path
[docs] def print_err(self, message): if self._strict_validation: raise ValueError(message) else: warnings.warn(message, ValidationWarning)
@staticmethod def _generate_filename( instrument : str, detector : str, reftype : str, date : str, version : str ): """IRIS_IMG1_FLAT_20240101T000000_0.0.1.fits""" # TODO: Automate versioning if instrument.lower() == 'iris': instrument = 'IRIS' elif instrument.lower() == 'liger': instrument = 'Liger' else: raise ValueError(f"Unknown instrument {instrument}") return f"{instrument}_{detector.upper()}_{reftype}_{date}_{version}.fits"
[docs] def generate_filename( self, instrument : str | None = None, detector : str | None = None, reftype : str | None = None, date : str | None = None, version : str | None = None ): instrument = instrument if instrument is not None else self.instrument detector = detector if detector is not None else self.meta.instrument.detector reftype = reftype if reftype is not None else self.meta.reftype date = self.meta.date.replace(':', '').replace('-', '')[0:15] version = self.meta.ref_version if self.meta.ref_version is not None else '0.0.1' return self._generate_filename( instrument=instrument, detector=detector, reftype=reftype, date=date, version=version )