Source code for modules.flat_fielding.src.flat_fielding


import configparser
import numpy as np
from astropy.io import fits

# Pipeline dependencies
from kpfpipe.logger import start_logger
from kpfpipe.primitives.level0 import KPF0_Primitive
from kpfpipe.models.level0 import KPF0

# External dependencies
from keckdrpframework.models.action import Action
from keckdrpframework.models.arguments import Arguments
from keckdrpframework.models.processing_context import ProcessingContext

# Local dependencies
from modules.flat_fielding.src.alg import FlatFieldingAlg
#from modules.utils.frame_combine import frame_combine

# Global read-only variables
DEFAULT_CFG_PATH = 'modules/flat_fielding/configs/default.cfg'

[docs] class FlatFielding(KPF0_Primitive): """ This module defines class `FlatFielding,` which inherits from `KPF0_Primitive` and provides methods to perform the event `flat fielding` in the recipe. Args: KPF0_Primitive: Parent class action (keckdrpframework.models.action.Action): Contains positional arguments and keyword arguments passed by the `FlatFielding` event issued in recipe. context (keckdrpframework.models.processing_context.ProcessingContext): Contains path of config file defined for `flat_fielding` module in master config file associated with recipe. Attributes: rawdata (kpfpipe.models.level0.KPF0): Instance of `KPF0`, assigned by `actions.args[0]` masterflat (kpfpipe.models.level0.KPF0): Instance of `KPF0`, assigned by `actions.args[1]` data_type (kpfpipe.models.level0.KPF0): Instance of `KPF0`, assigned by `actions.args[2]` config_path (str): Path of config file for the computation of flat fielding. config (configparser.ConfigParser): Config context. logger (logging.Logger): Instance of logging.Logger alg (modules.flat_fielding.src.alg.FlatFielding): Instance of `FlatFielding,` which has operation codes for flat fielding. """ def __init__(self, action:Action, context:ProcessingContext) -> None: """ FlatFielding constructor. Args: action (keckdrpframework.models.action.Action): Contains positional arguments and keyword arguments passed by the `FlatFielding` event issued in recipe: `action.args[0]`(kpfpipe.models.level0.KPF0)`: Instance of `KPF0` containing raw image data `action.args[1]`(kpfpipe.models.level0.KPF0)`: Instance of `KPF0` containing master flat data `action.args[2]`(kpfpipe.models.level0.KPF0)`: Instance of `KPF0` containing the instrument/data type context (keckdrpframework.models.processing_context.ProcessingContext): Contains path of config file defined for `flat_fielding` module in master config file associated with recipe. """ #Initialize parent class KPF0_Primitive.__init__(self,action,context) #Input arguments self.raw_file=self.action.args[0] self.masterflat=self.action.args[1] self.ffi_exts=self.action.args[2] self.data_type=self.action.args[3] #Input configuration self.config=configparser.ConfigParser() try: config_path=context.config_path['flat_fielding'] except: config_path = DEFAULT_CFG_PATH self.config.read(config_path) #Start logger self.logger=start_logger(self.__class__.__name__,config_path) if not self.logger: self.logger=self.context.logger self.logger.info('Loading config from: {}'.format(config_path)) #Flat Fielding algorithm setup #Option 1 self.alg=FlatFieldingAlg(self.raw_file,self.ffi_exts,self.data_type,config=self.config,logger=self.logger) #Preconditions #Postconditions #Perform - primitive`s action def _perform(self) -> None: """ Primitive action - perform flat division by calling method `flat_fielding` from FlatFielding. Returns the flat-corrected raw data, L0 object. Returns: Arguments object(np.ndarray): Level 0, flat-corrected, raw observation data """ #self.masterflat = fits.open(self.masterflat) #Option 1: masterflat = fits.open(self.masterflat) if self.logger: self.logger.info("Flat-fielding: dividing raw image by master flat") flat_result=self.alg.flat_fielding(masterflat) return Arguments(self.alg.get())