Source code for kcwidrp.primitives.CalcPrelimDisp

from keckdrpframework.primitives.base_primitive import BasePrimitive

import math


[docs]class CalcPrelimDisp(BasePrimitive): """ Calculate dispersion based on configuration parameters. The parameters of the grating equation are calculated as: * BLUE * alpha = grating_angle - 13 - adjustment_angle * adjustment_angle = (180 for BH and 0 for all other gratings) * RED * alpha = 155.892 - grating_angle * BLUE & RED * beta = camera_angle - alpha dispersion = cos(beta)/rho/focal_length x (pixel_scale x binning) * 1.e4 """ def __init__(self, action, context): BasePrimitive.__init__(self, action, context) self.logger = context.pipeline_logger def _pre_condition(self): self.logger.info("Checking for master arc") if 'MARC' in self.action.args.ccddata.header['IMTYPE']: return True else: return False def _perform(self): # get binning y_binning = self.action.args.ybinsize # 0 - compute alpha if 'BLUE' in self.action.args.ccddata.header['CAMERA'].upper(): preliminary_alpha = self.action.args.grangle - 13.0 - \ self.action.args.adjang else: # red_grat_norm_angle = 156.1748047 # Caltech AIT value red_grat_norm_angle = 155.892 preliminary_alpha = red_grat_norm_angle - self.action.args.grangle # 1 - compute preliminary angle of diffraction preliminary_beta = self.action.args.camangle - preliminary_alpha # 2 - compute preliminary dispersion preliminary_dispersion = math.cos(preliminary_beta/math.degrees(1.)) / \ self.action.args.rho / self.config.instrument.FCAM * \ (self.config.instrument.PIX*y_binning) * 1.e4 preliminary_dispersion *= math.cos( self.config.instrument.GAMMA/math.degrees(1.)) self.logger.info("Initial alpha, beta (deg): %.3f, %.3f" % (preliminary_alpha, preliminary_beta)) self.logger.info("Initial calculated dispersion (A/binned pix): %.3f" % preliminary_dispersion) self.context.prelim_disp = preliminary_dispersion log_string = CalcPrelimDisp.__module__ self.action.args.ccddata.header['HISTORY'] = log_string self.logger.info(log_string) return self.action.args
# END: class CalcPrelimDisp()