Source code for exorad.tasks.foregroundHandler

from collections import OrderedDict

import astropy.units as u
import numpy as np

from .task import Task
from exorad.models.foregrounds.skyForegrounds import SkyForeground
from exorad.models.foregrounds.zodiacalForeground import ZodiacalFrg
from exorad.utils.passVal import PassVal


[docs] class EstimateZodi(Task): """ It estimate the zodiacal radiance in the target direction for a specific wl range Parameters ----------- zodi: dict zodiacal foreground description target: Target target class wl_range: (float, float) wavelength range to investigate. (wl_min, wl_max) Returns ------- Target: updated target class """ def __init__(self): self.addTaskParam("zodi", "zodiacal foreground description") self.addTaskParam("target", "target class") self.addTaskParam("wl_range", "wavelength range to investigate")
[docs] def execute(self): self.info("estimating zodiacal foreground") zodi_dict = self.get_task_param("zodi") target = self.get_task_param("target") wl_min, wl_max = self.get_task_param("wl_range") wl = ( np.logspace( np.log10((wl_min.to(u.um)).value), np.log10((wl_max.to(u.um)).value), PassVal.working_R, ) * u.um ) if "ra" in target.star.__dict__.keys(): zodi = ZodiacalFrg( wl=wl, description=zodi_dict, coordinates=( target.star.__dict__["ra"], target.star.__dict__["dec"], ), ) else: zodi = ZodiacalFrg(wl=wl, description=zodi_dict) if not hasattr(target, "foreground"): setattr(target, "foreground", OrderedDict()) target.foreground["zodi"] = zodi.radiance self.set_output(target)
[docs] class EstimateForeground(Task): """ It estimate the foreground radiance in the target direction for a specific wl range Parameters ----------- foreground: dict foreground description target: Target target class wl_range: (float, float) wavelength range to investigate. (wl_min, wl_max) Returns ------- Target: updated target class """ def __init__(self): self.addTaskParam("foreground", "foreground description") self.addTaskParam("target", "target class") self.addTaskParam("wl_range", "wavelength range to investigate")
[docs] def execute(self): self.info("estimating custom foreground") foreground_dict = self.get_task_param("foreground") target = self.get_task_param("target") wl_min, wl_max = self.get_task_param("wl_range") wl = ( np.logspace( np.log10((wl_min.to(u.um)).value), np.log10((wl_max.to(u.um)).value), PassVal.working_R, ) * u.um ) foreground_name = foreground_dict["value"] foreground = SkyForeground(wl, foreground_dict) if not hasattr(target, "foreground"): setattr(target, "foreground", OrderedDict()) target.foreground[foreground_name] = foreground.skyFilter if not hasattr(target, "skyTransmission"): from exorad.models.signal import Signal setattr( target, "skyTransmission", Signal(wl, foreground.skyFilter.transmission), ) else: target.skyTransmission.data *= foreground.skyFilter.transmission self.set_output(target)
[docs] class EstimateForegrounds(Task): """ It estimate the foreground radiance in the target direction for a specific wl range Parameters ----------- foregrounds: dict foregrounds description target: Target target class wl_range: (float, float) wavelength range to investigate. (wl_min, wl_max) Returns ------- Target: updated target class """ def __init__(self): self.addTaskParam("foregrounds", "foregrounds description") self.addTaskParam("target", "target class") self.addTaskParam("wl_range", "wavelength range to investigate")
[docs] def execute(self): self.info("estimating foregrounds") target = self.get_task_param("target") foregrounds = self.get_task_param("foregrounds") wl_min, wl_max = self.get_task_param("wl_range") estimateZodi = EstimateZodi() estimateForeground = EstimateForeground() if isinstance(foregrounds, OrderedDict): for foreground in foregrounds: if foreground == "zodiacal": target = estimateZodi( zodi=foregrounds["zodiacal"], target=target, wl_range=(wl_min, wl_max), ) else: target = estimateForeground( foreground=foregrounds[foreground], target=target, wl_range=(wl_min, wl_max), ) else: if foregrounds["value"] == "zodiacal": target = estimateZodi( zodi=foregrounds, target=target, wl_range=(wl_min, wl_max) ) else: target = estimateForeground( foreground=foregrounds, target=target, wl_range=(wl_min, wl_max), ) self.set_output(target)