Source code for exosim.tools.adcGainEstimator

import numpy as np

from .exosimTool import ExoSimTool


[docs]class ADCGainEstimator(ExoSimTool): """ It computes the desired ADC gain, given the number of bits used by the ADC and the maximum number of counts in the pixel to represent. Returns -------- dict ADC gain factors Examples ---------- >>> import exosim.tools as tools >>> >>> tools.ADCGainEstimator(options_file='tools_input_example.xml') """ def __init__(self, options_file, output=None): """ Parameters __________ parameters: dict dictionary containing the parameters. This is usually parsed from :class:`~exosim.tasks.load.loadOptions.LoadOptions` """ super().__init__(options_file) self.info("creating dead pixel map") for ch in self.ch_list: gain_factor, dtype_max_val, int_type = self.model( self.ch_param[ch] ) self.info("---------- {} --------".format(ch)) self.info("gain factor: {}".format(gain_factor)) self.info("max adc value: {}".format(dtype_max_val)) self.info("integer dtype: {}".format(int_type)) # prepare scheme output read_dict = { "gain factor": gain_factor, "max adc value": dtype_max_val, "integer dtype": int_type, } self.results.update({ch: read_dict})
[docs] def model(self, parameters): """ Parameters ---------- parameters: dict dictionary contained the sources parameters. This is usually parsed from :class:`~exosim.tasks.load.loadOptions.LoadOptions` Returns -------- float: adc gain factor int: max adc value str: data type used in ExoSim """ self.info("converting to digital") if "ADC_num_bit" in parameters["detector"].keys(): bits_num = parameters["detector"]["ADC_num_bit"] if isinstance(bits_num, float): if not bits_num.is_integer(): self.error("number of ADC bits should be integer") raise TypeError("number of ADC bits should be integer") self.debug( "ADC set to {} bits.".format( parameters["detector"]["ADC_num_bit"] ) ) else: bits_num = 32 self.debug("ADC set to 32 bit by dfault.") if bits_num > 32: self.error("max bits number supported is 32.") raise ValueError("max bits number supported is 32.") dtype_max_val = 2**bits_num - 1 int_type = np.dtype("int32") if bits_num <= 16: int_type = np.dtype("int16") if bits_num <= 8: int_type = np.dtype("int8") if "ADC_max_value" in parameters["detector"].keys(): desired_max = parameters["detector"]["ADC_max_value"] else: desired_max = parameters["detector"]["well_depth"] * 1.1 gain_factor = dtype_max_val / desired_max return gain_factor, dtype_max_val, int_type