Source code for jwst.refpix.refpix_step

from stdatamodels.jwst import datamodels

from ..stpipe import Step
from ..lib import pipe_utils
from . import reference_pixels
from . import irs2_subtract_reference


__all__ = ["RefPixStep"]


[docs] class RefPixStep(Step): """ RefPixStep: Use reference pixels to correct bias drifts """ class_alias = "refpix" spec = """ odd_even_columns = boolean(default=True) # Compute reference signal separately for even/odd columns use_side_ref_pixels = boolean(default=True) # Use side reference pixels for reference signal for each row side_smoothing_length = integer(default=11) # Median window smoothing height for side reference signal side_gain = float(default=1.0) # Multiplicative factor for side reference signal before subtracting from rows odd_even_rows = boolean(default=True) # Compute reference signal separately for even- and odd-numbered rows ovr_corr_mitigation_ftr = float(default=3.0) # Factor to avoid overcorrection of bad reference pixels for IRS2 preserve_irs2_refpix = boolean(default=False) # Preserve reference pixels in output irs2_mean_subtraction = boolean(default=False) # Apply a mean offset subtraction before IRS2 correction """ reference_file_types = ['refpix']
[docs] def process(self, input): # Load the input science data with datamodels.RampModel(input) as input_model: if pipe_utils.is_irs2(input_model): # Flag bad reference pixels first datamodel = input_model.copy() irs2_subtract_reference.flag_bad_refpix( datamodel, n_sigma=self.ovr_corr_mitigation_ftr, flag_only=True) # If desired, do the normal refpix correction before IRS2, without # side pixel handling if self.irs2_mean_subtraction: if self.use_side_ref_pixels: self.log.info('Turning off side pixel correction for IRS2') self.use_side_ref_pixels = False reference_pixels.correct_model( datamodel, self.odd_even_columns, self.use_side_ref_pixels, self.side_smoothing_length, self.side_gain, self.odd_even_rows) # Now that values are updated, replace bad reference pixels irs2_subtract_reference.flag_bad_refpix(datamodel, replace_only=True) # Get the necessary refpix reference file for IRS2 correction self.irs2_name = self.get_reference_file(datamodel, 'refpix') self.log.info(f'Using refpix reference file: {self.irs2_name}') # Check for a valid reference file if self.irs2_name == 'N/A': self.log.warning('No refpix reference file found') self.log.warning('RefPix step will be skipped') datamodel.meta.cal_step.refpix = 'SKIPPED' return datamodel # Load the reference file into a datamodel irs2_model = datamodels.IRS2Model(self.irs2_name) # Apply the IRS2 correction scheme result = irs2_subtract_reference.correct_model( datamodel, irs2_model, preserve_refpix=self.preserve_irs2_refpix) if result.meta.cal_step.refpix != 'SKIPPED': result.meta.cal_step.refpix = 'COMPLETE' irs2_model.close() return result else: # Not an NRS IRS2 exposure. Do the normal refpix correction. datamodel = input_model.copy() status = reference_pixels.correct_model(datamodel, self.odd_even_columns, self.use_side_ref_pixels, self.side_smoothing_length, self.side_gain, self.odd_even_rows) if status == reference_pixels.REFPIX_OK: datamodel.meta.cal_step.refpix = 'COMPLETE' elif status == reference_pixels.SUBARRAY_DOESNTFIT: self.log.warning("Subarray doesn't fit in full-sized array") datamodel.meta.cal_step.refpix = 'SKIPPED' elif status == reference_pixels.BAD_REFERENCE_PIXELS: self.log.warning("No valid reference pixels, refpix step skipped") datamodel.meta.cal_step.refpix = 'SKIPPED' elif status == reference_pixels.SUBARRAY_SKIPPED: datamodel.meta.cal_step.refpix = 'SKIPPED' return datamodel