Source code for exosim.tasks.instrument.propagateForegrounds
import astropy.units as u
from joblib import Parallel, delayed
from exosim.tasks.instrument import ComputeSolidAngle
from exosim.tasks.task import Task
from exosim.utils import RunConfig
[docs]class PropagateForegrounds(Task):
"""
it propagates the foreground though the channel.
Returns
-------
`~collections.OrderedDict`
dictionary of :class:`~exosim.models.signal.Radiance` and :class:`~exosim.models.signal.Dimensionless`,
represeting the radiance and efficiency of the path.
"""
def __init__(self):
"""
Parameters
__________
light_path: `~collections.OrderedDict`
dictionary of :class:`~exosim.models.signal.Radiance` and :class:`~exosim.models.signal.Dimensionless`,
represeting the radiance and efficiency of the path.
responsivity: :class:`~exosim.models.signal.Signal`
channel responsivity
parameters: dict
channel parameter dictionary. This is usually parsed from :class:`~exosim.tasks.load.loadOptions.LoadOptions`
"""
self.add_task_param("light_path", "sources dictionary")
self.add_task_param("responsivity", "channel responsivity")
self.add_task_param("parameters", "channel parameters dict")
[docs] def execute(self):
light_path = self.get_task_param("light_path")
parameters = self.get_task_param("parameters")
responsivity = self.get_task_param("responsivity")
# for rad in [k for k in light_path.keys() if 'radiance' in k]:
# computeSolidAngle = ComputeSolidAngle()
# solid_angle = computeSolidAngle(parameters=parameters,
# other_parameters=light_path[
# rad].metadata)
# light_path[rad] *= solid_angle * responsivity
# light_path[rad].to(u.ct / u.s / u.um)
computeSolidAngle = ComputeSolidAngle()
Parallel(n_jobs=RunConfig.n_job, require="sharedmem")(
delayed(self._computation_model)(
rad,
computeSolidAngle,
parameters,
light_path[rad].metadata,
responsivity,
light_path,
)
for rad in [k for k in light_path.keys() if "radiance" in k]
)
self.set_output(light_path)
def _computation_model(
self,
rad,
computeSolidAngle,
parameters,
other_parameters,
responsivity,
light_path,
):
solid_angle = computeSolidAngle(
parameters=parameters, other_parameters=other_parameters
)
light_path[rad] *= solid_angle * responsivity
light_path[rad].to(u.ct / u.s / u.um)