Source code for jwst.group_scale.group_scale_step

from stdatamodels.jwst import datamodels

from ..stpipe import Step
from . import group_scale


__all__ = ["GroupScaleStep"]


[docs] class GroupScaleStep(Step): """ GroupScaleStep: Rescales group data to account for on-board frame averaging that did not use FRMDIVSR = NFRAMES. All groups in the exposure are rescaled by FRMDIVSR/NFRAMES. """ class_alias = "group_scale"
[docs] def process(self, input): # Open the input data model with datamodels.RampModel(input) as input_model: # Always work on a copy result = input_model.copy() # Try to get values of NFRAMES and FRMDIVSR to see # if we need to do any rescaling nframes = result.meta.exposure.nframes frame_divisor = result.meta.exposure.frame_divisor # If we didn't find NFRAMES, we don't have enough info # to continue. Skip the step. if nframes is None: self.log.warning('NFRAMES value not found') self.log.warning('Step will be skipped') result.meta.cal_step.group_scale = 'SKIPPED' return result # If we didn't find FRMDIVSR, then check to see if NFRAMES # is a power of 2. If it is, rescaling isn't needed. if frame_divisor is None: if (nframes & (nframes - 1) == 0): self.log.info('NFRAMES={} is a power of 2; correction not needed'.format(nframes)) self.log.info('Step will be skipped') result.meta.cal_step.group_scale = 'SKIPPED' return result # Compare NFRAMES and FRMDIVSR. If they're equal, # rescaling isn't needed. elif nframes == frame_divisor: self.log.info('NFRAMES and FRMDIVSR are equal; correction not needed') self.log.info('Step will be skipped') result.meta.cal_step.group_scale = 'SKIPPED' return result # Do the scaling group_scale.do_correction(result) return result