Source code for exosim.tasks.instrument.propagateSources
import astropy.units as u
from joblib import Parallel, delayed
from exosim.tasks.task import Task
from exosim.utils import RunConfig
[docs]class PropagateSources(Task):
"""
it propagates the sources though the channel.
It multiplies the stellar SED by the effective telescope area, the channel efficiency and the channel responsivity:
.. math::
S_{\\nu} = S_{\\nu}^{*} \\times A_{tel} \\times \\eta \\times R_{\\nu}
The result is in units of :math:`ct/s/\\mu m`
Returns
-------
dict
dictionary containing :class:`~exosim.models.signal.Signal`
"""
def __init__(self):
"""
Parameters
__________
sources: dict
dictionary containing :class:`~exosim.models.signal.Sed`
Atel: :class:`~astropy.units.Quantity`
effective telescope Area
efficiency: :class:`~exosim.models.signal.Dimensionless`
channel efficiency
responsivity: :class:`~exosim.models.signal.Signal`
channel responsivity
"""
self.add_task_param("sources", "sources dictionary")
self.add_task_param("Atel", "effective telescope Area")
self.add_task_param("efficiency", "channel efficiency")
self.add_task_param("responsivity", "channel responsivity")
[docs] def execute(self):
sources = self.get_task_param("sources")
Atel = self.get_task_param("Atel")
efficiency = self.get_task_param("efficiency")
responsivity = self.get_task_param("responsivity")
Parallel(n_jobs=RunConfig.n_job, require="sharedmem")(
delayed(self._propagate)(
source, Atel, efficiency, responsivity, sources
)
for source in sources.keys()
)
# for source in sources.keys():
# sources[source] *= Atel * efficiency * responsivity
# sources[source].to(u.ct / u.s / u.um)
self.set_output(sources)
def _propagate(self, source, Atel, efficiency, responsivity, sources):
sources[source] *= Atel * efficiency * responsivity
sources[source].to(u.ct / u.s / u.um)