Source code for exosim.tasks.detector.loadPixelsNonLinearityMap

import h5py

import exosim.output as output
from exosim.output.hdf5.utils import recursively_read_dict_contents
from exosim.tasks.task import Task


[docs]class LoadPixelsNonLinearityMap(Task): """ Loads the pixels non-linearuty map Returns -------- dict channel non linearity map Raises ------ KeyError: if the output do not have the `map` key Notes ----- This is a default class with standardised inputs and outputs. The user can load this class and overwrite the "model" method to implement a custom Task to replace this. """ def __init__(self): """ Parameters __________ parameters: dict dictionary containing the parameters. This is usually parsed from :class:`~exosim.tasks.load.loadOptions.LoadOptions` output: :class:`~exosim.output.output.Output` (optional) output file """ self.add_task_param("parameters", "channel parameters dict") self.add_task_param("output", "output file", None)
[docs] def execute(self): self.info("loading pixels non-linearity map") parameters = self.get_task_param("parameters") pnl_dict_map = self.model(parameters) # checking output if "map" not in pnl_dict_map: self.error("map missing in pixel non-linearity map") raise KeyError("map missing in pixel non-linearity map") self.debug("pnl_variation_map: {}".format(pnl_dict_map["map"])) output_file = self.get_task_param("output") if output_file: if issubclass(output_file.__class__, output.Output): output_file.store_dictionary( pnl_dict_map, "pixel_non_linearity" ) self.set_output(pnl_dict_map)
[docs] def model(self, parameters: dict) -> dict: """ Parameters ---------- parameters: dict dictionary contained the channel parameters. This is usually parsed from :class:`~exosim.tasks.load.loadOptions.LoadOptions` Returns -------- dict channel pixel non-linearity map """ file_name = parameters["detector"]["pnl_filename"] ch_name = parameters["value"] with h5py.File(file_name, "r") as f: pnl_dict = recursively_read_dict_contents(f[ch_name]) return pnl_dict