Source code for exosim.tasks.parse.parseOpticalElement
import exosim.output as output
import exosim.utils.klass_factory as klass_factory
from exosim.tasks.load import LoadOpticalElement
from exosim.tasks.task import Task
[docs]class ParseOpticalElement(Task):
"""
Given the element parameters, it parses the optical element and returns a dictionary.
It also applyes the time variation if provided.
Returns
-------
dict
dictionary of :class:`~exosim.models.signal.Radiance` and :class:`~exosim.models.signal.Dimensionless`,
represeting the radiance and efficiency of the optical element.
"""
def __init__(self):
"""
Parameters
__________
parameters: dict
dictionary contained the sources 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.
output: :class:`~exosim.output.output.Output` (optional)
output file
"""
self.add_task_param("parameters", "optical element parameters dict")
self.add_task_param("wavelength", "wavelength grid")
self.add_task_param("time", "time grid")
self.add_task_param("output", "output file", None)
[docs] def execute(self):
parameters = self.get_task_param("parameters")
self.debug("parsing: {}".format(parameters["value"]))
wl = self.get_task_param("wavelength")
tt = self.get_task_param("time")
element_task = (
klass_factory.find_task(
parameters["task_model"], LoadOpticalElement
)
if "task_model" in parameters.keys()
else LoadOpticalElement
)
task_instance = element_task()
radiance, efficiency = task_instance(
parameters=parameters, wavelength=wl, time=tt
)
output_file = self.get_task_param("output")
if output_file:
if issubclass(output_file.__class__, output.Output):
og_ = output_file.create_group(parameters["value"])
radiance.write(og_, "radiance")
efficiency.write(og_, "efficiency")
out = {"radiance": radiance, "efficiency": efficiency}
self.set_output(out)