Source code for exosim.tasks.detector.applyDeadPixelMapNumpy

import numpy as np
from astropy.io import ascii
from numba import jit, prange

from exosim.output import Output
from exosim.tasks.detector import ApplyDeadPixelsMap
from exosim.tasks.task import Task
from exosim.utils.iterators import iterate_over_chunks


[docs]class ApplyDeadPixelMapNumpy(ApplyDeadPixelsMap): """ It masks the dead pixel in the array given a numpy map. The input must be a NPY format file (see `numpy documentation <https://numpy.org/devdocs/reference/generated/numpy.lib.format.html>`_) containing a boolean map marking with True the dead pixels. The map should be indicated under ``dp_map_filename`` keyword. """
[docs] def model(self, subexposures, parameters, output): dead_pixels_map = np.ones( (subexposures.shape[1], subexposures.shape[2]) ) dead_map = np.load(parameters["detector"]["dp_map_filename"]) if output: if issubclass(output.__class__, Output): out_grp = output.create_group("dead_pixel_map") out_grp.write_array("dead_pixel_map", dead_map) dead_pixels_map = np.invert(dead_map.astype(bool)).astype(int) for chunk in iterate_over_chunks( subexposures.dataset, desc="applying dead pixel map" ): subexposures.dataset[chunk] = self.add_dead_pixels( subexposures.dataset[chunk], dead_pixels_map ) subexposures.output.flush()
@staticmethod @jit(nopython=True, parallel=True)
[docs] def add_dead_pixels( ndrs: np.ndarray, dead_pixels_map: np.ndarray ) -> np.ndarray: ndrs = ndrs.astype(np.float64) dead_pixels_map = dead_pixels_map.astype(np.float64) output = np.empty_like(ndrs) for t in prange(ndrs.shape[0]): output[t] = ndrs[t] * dead_pixels_map return output