Source code for exosim.tasks.instrument.loadPsf

import exosim.output as output
from exosim.tasks.task import Task


[docs]class LoadPsf(Task): """ It loads the PSFs from files. Returns ------- :class:`~numpy.ndarray` cube of psfs. axis=0 is time, axis=1 is wavelength, axis=2 is spatial direction, axis=3 is spectral direction. :class:`~numpy.ndarray` cube normalization factors. It contains the volume of each psf. axis=0 is time, axis=1 is wavelength. """ def __init__(self): """ Parameters __________ parameters: dict dictionary containing the parameters. This is usually parsed from :class:`~exosim.tasks.load.loadOptions.LoadOptions` wavelength: :class:`~astropy.units.Quantity` wavelength grid. time: :class:`~astropy.units.Quantity` time grid. filename: str PSF input file output: :class:`~exosim.output.output.Output` (optional) output file """ self.add_task_param("wavelength", "wavelength grid") self.add_task_param("time", "temporal grid") self.add_task_param("parameters", "channel parameters dict") self.add_task_param("filename", "PSF input file") self.add_task_param("output", "output file", None)
[docs] def execute(self): self.info("loading psf") wavelength = self.get_task_param("wavelength") time = self.get_task_param("time") filename = self.get_task_param("filename") parameters = self.get_task_param("parameters") psf_cube = self.model(filename, parameters, wavelength, time) norms = psf_cube.sum(axis=-1).sum(axis=-1) output_file = self.get_task_param("output") if output_file and issubclass(output_file.__class__, output.Output): output_group = output_file.create_group("psf") output_group.write_array( "psf_cube", psf_cube, metadata={ "spatial fp_axis": 2, "spectral_fp_axis": 3, "wavelength_axis": 1, "time_axis": 0, }, ) output_group.write_array("norm", norms) output_group.write_quantity("wavelength", wavelength) self.set_output([psf_cube, norms])
[docs] def model(self, filename, parameters, wavelength, time): """ Parameters ---------- filename: str PSF input file parameters: dict dictionary containing the parameters. This is usually parsed from :class:`~exosim.tasks.load.loadOptions.LoadOptions` wavelength: :class:`~astropy.units.Quantity` wavelength grid. Returns ------- :class:`~numpy.ndarray` cube of psfs. axis=0 is time, axis=1 is wavelength, axis=2 is spatial direction, axis=3 is spectral direction. """ raise NotImplementedError