Source code for exosim.tasks.radiometric.computeSignalsChannel

import astropy.units as u

from exosim.tasks.task import Task

from .aperturePhotometry import AperturePhotometry


[docs]class ComputeSignalsChannel(Task): """ It estimates the radiometric signals on the input focal plane.. Returns -------- :class:`astropy.units.Quantity` photometry Raises -------- TypeError: if the output is not :class:`~astropy.units.Quantity` UnitsError: wrong output units 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 ---------- table: :class:`astropy.table.QTable` apertures table focal plane: :class:`~exosim.output.output.Output` focal plane in the HDF5 file parameters: dict dictionary contained the channel parameters. This is usually parsed from :class:`~exosim.tasks.load.loadOptions.LoadOptions` """ self.add_task_param("table", "channel table") self.add_task_param("focal_plane", "focal_plane") self.add_task_param("parameters", "channel parameters dict", None)
[docs] def execute(self): table = self.get_task_param("table") focal_plane = self.get_task_param("focal_plane") parameters = self.get_task_param("parameters") photometry = self.model(table, focal_plane, parameters) if not isinstance(photometry, u.Quantity): self.error("wrong output format") raise TypeError("wrong output format") if not photometry.unit == u.ct / u.s: self.error("wrong output units") raise u.UnitsError("wrong output units") self.set_output(photometry)
[docs] def model(self, table, focal_plane, parameters): """ It estimates the radiometric signals on the input focal plane.. It uses :func:`photutils.aperture.aperture_photometry` with the apertures from :class:`~exosim.tasks.radiometric.estimateApertures.EstimateApertures`. Parameters ---------- table: :class:`astropy.table.QTable` apertures table focal plane: :class:`~exosim.output.output.Output` focal plane in the HDF5 file parameters: dict dictionary contained the channel parameters. This is usually parsed from :class:`~exosim.tasks.load.loadOptions.LoadOptions` Returns -------- :class:`astropy.units.Quantity` photometry """ # prepare the focal plane self.debug("extracting focal plane. Oversampling removed") osf = focal_plane["metadata"]["oversampling"][()] focal_plane_units = u.Unit(focal_plane["data_units"][()]) focal_plane = ( focal_plane["data"][0, osf // 2 :: osf, osf // 2 :: osf] * focal_plane_units ) aperturePhotometry = AperturePhotometry() self.debug("aperture photometry for source focal plane") signal_in_phot = aperturePhotometry( table=table, focal_plane=focal_plane ) return signal_in_phot * focal_plane_units