Source code for kcwidrp.primitives.CorrectGain

from keckdrpframework.primitives.base_primitive import BasePrimitive
from kcwidrp.primitives.kcwi_file_primitives import parse_imsec, \
    kcwi_fits_writer


[docs]class CorrectGain(BasePrimitive): """ Convert raw data numbers to electrons. Uses the ATSECn FITS header keywords to divide image into amp regions and then corrects each region with the corresponding GAINn keyword. Updates the following FITS header keywords: * GAINCOR: sets to ``True`` if operation performed. * BUNIT: sets to `electron`. * HISTORY: records the operation. Uses the following configuration parameter: * saveintims: if set to ``True`` write out a \*_gain.fits file with gain corrected. Default is ``False``. Updates image in returned arguments. """ def __init__(self, action, context): BasePrimitive.__init__(self, action, context) self.logger = context.pipeline_logger def _perform(self): # Header keyword to update key = 'GAINCOR' keycom = 'Gain corrected?' # print(self.action.args.ccddata.header) number_of_amplifiers = self.action.args.namps bsec, dsec, tsec, direc, amps, aoff = self.action.args.map_ccd namps = len(amps) if namps != number_of_amplifiers: self.logger.warning("Amp count disagreement!") for amplifier in amps: # get amp section section = self.action.args.ccddata.header['ATSEC%d' % amplifier] parsed_section, read_forward = parse_imsec(section) # get gain for this amp gain = self.action.args.ccddata.header['GAIN%d' % amplifier] self.logger.info( "Applying gain correction of %.3f in section %s" % (gain, self.action.args.ccddata.header['ATSEC%d' % amplifier])) self.action.args.ccddata.data[ parsed_section[0]:(parsed_section[1]+1), parsed_section[2]:(parsed_section[3]+1)] *= gain self.action.args.ccddata.header[key] = (True, keycom) self.action.args.ccddata.header['BUNIT'] = ('electron', 'Pixel units') self.action.args.ccddata.unit = 'electron' log_string = CorrectGain.__module__ self.action.args.ccddata.header['HISTORY'] = log_string self.logger.info(log_string) if self.config.instrument.saveintims: kcwi_fits_writer(self.action.args.ccddata, table=self.action.args.table, output_file=self.action.args.name, output_dir=self.config.instrument.output_directory, suffix="gain") return self.action.args
# END: class CorrectGain()