Source code for exosim.tasks.astrosignal.estimateAstronomicalSignal
from exosim.output import output
from exosim.tasks.task import Task
from exosim.utils.types import ArrayType
[docs]class EstimateAstronomicalSignal(Task):
"""
It is a base class for all astronomical signal estimation tasks.
If an output file is provided, the signal model is stored in the output file.
Returns
-------
ArrayType
returns the planetary signal in a 2D array (wavelength, time)
"""
def __init__(self) -> None:
"""
Parameters
----------
timeline : :class:`astropy.units.Quantity`
timeline to compute the signal
wl_grid : :class:`astropy.units.Quantity`
wavelength grid
ch_parameters : dict
channel parameters, by default {}
source_parameters : dict
sourec parameters, by default {}
output : :class:`exosim.output.output.Output` (optional)
output file, by default None
"""
self.add_task_param("timeline", "timeline")
self.add_task_param("source_parameters", "")
self.add_task_param("ch_parameters", "")
self.add_task_param("wl_grid", "")
self.add_task_param("output", "", None)
[docs] def execute(self):
timeline = self.get_task_param("timeline")
source_parameters = self.get_task_param("source_parameters")
ch_parameters = self.get_task_param("ch_parameters")
wl_grid = self.get_task_param("wl_grid")
new_timeline, model = self.model(
timeline, wl_grid, ch_parameters, source_parameters
)
# store the signal model in the output file
output_file = self.get_task_param("output")
if output_file and issubclass(output_file.__class__, output.Output):
output_file.write_array(
"signal_model",
model,
metadata={
"wavelength_axis": 0,
"time_axis": 1,
},
)
output_file.write_quantity("model_timeline", new_timeline)
output_file.write_quantity("model_wavelength", wl_grid)
output_file.store_dictionary(source_parameters, "parameters")
self.set_output([new_timeline, model])
[docs] def model(
self,
timeline: ArrayType,
wl_grid: ArrayType,
ch_parameters: dict = {},
source_parameters: dict = {},
) -> ArrayType:
"""Astronomical signal model to implement.
Parameters
----------
timeline : :class:`astropy.units.Quantity`
timeline to compute the signal
wl_grid : :class:`astropy.units.Quantity`
wavelength grid
ch_parameters : dict, optional
channel parameters, by default {}
source_parameters : dict
source parameters, by default {}
Returns
-------
ArrayType
returns the planetary signal in a 2D array (wavelength, time)
Raises
------
NotImplementedError
if the model is not implemented
"""
raise NotImplementedError