Source code for jwst.outlier_detection.outlier_detection_stack_step

"""Step defined for outlier detection for stacked observations."""

from stdatamodels.jwst import datamodels

from jwst.datamodels import ModelContainer

from ..stpipe import Step
from . import outlier_detection


[docs] class OutlierDetectionStackStep(Step): """Class definition for stacked outlier detection. Flag outlier bad pixels and cosmic rays in the DQ array of each input image of a stack of exposures, which in the case of TSO data are from the same data cube. Input images can listed in an input association file or already opened with a ModelContainer. DQ arrays are modified in place. By default, resampling has been disabled. The 'resample_data' attribute can be reset to 'True' to turn on resampling if desired for the data. Parameters ----------- input : asn file or ~jwst.datamodels.ModelContainer Single filename association table, or a datamodels.ModelContainer. """ class_alias = "outlier_detection_stack" spec = """ weight_type = option('ivm','exptime',default='ivm') pixfrac = float(default=1.0) kernel = string(default='square') # drizzle kernel fillval = string(default='INDEF') nlow = integer(default=0) nhigh = integer(default=0) maskpt = float(default=0.7) snr = string(default='4.0 3.0') scale = string(default='0.5 0.4') backg = float(default=0.0) save_intermediate_results = boolean(default=False) resample_data = boolean(default=False) good_bits = string(default="~DO_NOT_USE") # DQ flags to allow """
[docs] def process(self, input): """Step interface for performing outlier_detection processing.""" with datamodels.open(input) as input_models: if not isinstance(input_models, ModelContainer): self.log.warning("Input is not a ModelContainer.") self.log.warning("Outlier detection stack step will \ be skipped.") result = input_models.copy() result.meta.cal_step.outlier_detection = "SKIPPED" return result self.log.info("Performing outlier detection on stack of \ {} inputs".format(len(input_models))) self.input_models = input_models reffiles = {} pars = { 'weight_type': self.weight_type, 'pixfrac': self.pixfrac, 'kernel': self.kernel, 'fillval': self.fillval, 'nlow': self.nlow, 'nhigh': self.nhigh, 'maskpt': self.maskpt, 'snr': self.snr, 'scale': self.scale, 'backg': self.backg, 'save_intermediate_results': self.save_intermediate_results, 'resample_data': self.resample_data, 'good_bits': self.good_bits } # Set up outlier detection, then do detection step = outlier_detection.OutlierDetection(self.input_models, reffiles=reffiles, **pars) step.do_detection() for model in self.input_models: model.meta.cal_step.outlier_detection = 'COMPLETE' return self.input_models