Source code for exosim.tasks.chainTask
import exosim.models.signal as signal
from .task import Task
[docs]class ChainTask(Task):
"""
Abstract class to operate on a :class:`~exosim.models.signal.Signal` and return a :class:`~exosim.models.signal.Signal`.
Returns
--------
:class:`~exosim.models.signal.Radiance`
optical element radiance
"""
def __init__(self):
"""
Parameters
__________
signal: :class:`~exosim.models.signal.Signal`
input signal
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
"""
self.add_task_param("signal", "input signal")
self.add_task_param("wavelength", "wavelength grid")
self.add_task_param("time", "time grid")
self.add_task_param("parameters", "optical element parameters dict")
[docs] def execute(self):
input_signal = self.get_task_param("signal")
parameters = self.get_task_param("parameters")
wl = self.get_task_param("wavelength")
tt = self.get_task_param("time")
output_signal = self.model(
signal=input_signal, parameters=parameters, wavelength=wl, time=tt
)
if issubclass(output_signal, signal.Signal):
self.set_output(output_signal)
else:
self.error("output is not a Signal")
raise TypeError("output is not a Signal")
[docs] def model(self, parameters, wavelength, time):
"""
Parameters
----------
signal: :class:`~exosim.models.signal.Signal`
input signal
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.
Returns
--------
:class:`~exosim.models.signal.Signal`
output signal c
"""
raise NotImplementedError