Source code for exosim.tasks.sed.loadCustom

import numpy as np
from astropy import units as u
from astropy.io import ascii

import exosim.models.signal as signal
import exosim.utils.checks as checks
from exosim.tasks.task import Task


[docs]class LoadCustom(Task): r""" Loads a custom SED from a file and scaled it by the solid angle :math:`\pi \left( \frac{R}{D} \right)^2`. Returns ------- :class:`~exosim.models.signal.Sed` Star Sed """ def __init__(self): """ Parameters ----------- R: :class:`~astropy.units.Quantity` or float star radius. If no units are attached is considered as expressed in `m` D: :class:`~astropy.units.Quantity` or float star distance. If no units are attached is considered as expressed in `m` filename: str custom sed file path """ self.add_task_param("filename", "custom sed filename") self.add_task_param("R", "star radius") self.add_task_param("D", "star distannce")
[docs] def execute(self): self.info("loading custom sed") fname = self.get_task_param("filename") R = self.get_task_param("R") D = self.get_task_param("D") ph = ascii.read(fname, format="ecsv") wl_k = checks.find_key( ph.keys(), ["Wavelength", "wavelength", "wl"], self ) ph_wl = ph[wl_k].data * ph[wl_k].unit sed_k = checks.find_key(ph.keys(), ["Sed", "sed"], self) ph_sed = ph[sed_k].data * ph[sed_k].unit R = checks.check_units(R, u.m, self) D = checks.check_units(D, u.m, self) ph_sed *= np.pi * (R / D) ** 2 * u.sr print(ph_sed.unit) sed = signal.Sed(spectral=ph_wl, data=ph_sed) self.debug("custom sed used : {}".format(fname)) self.set_output(sed)