Source code for exosim.tasks.sed.prepareSed
import warnings
from exosim.tasks.sed import CreatePlanckStar, LoadCustom, LoadPhoenix
from exosim.tasks.task import Task
warnings.filterwarnings("ignore", category=UserWarning, append=True)
[docs]class PrepareSed(Task):
"""
Returns a source SED.
The SED depends on the source type selected. This Task analyse the inputs and return the desired SED.
Returns
-------
:class:`~exosim.models.signal.Sed`
Star Sed
Examples
---------
We first define all the inputs and then we show how to produce the star sed:
>>> from exosim.tasks.sed import LoadPhoenix
>>> wavelength = np.linspace(0.5, 7.8, 10000) * u.um
>>> T = 5778 * u.K
>>> R = 1 * u.R_sun
>>> D = 1 * u.au
>>> M = 1 * u.Msun
>>> z = 0.0
>>> g = (cc.G * M.si / R.si ** 2).to(u.cm / u.s ** 2)
>>> logg = np.log10(g.value)
To produce a planck star:
>>> prepareSed = LoadPhoenix()
>>> sed = PrepareSed(source_type='planck', wavelength=wavelength, T=T, R=R, D=D)
To load a Phoenix star:
>>> sed_l = prepareSed(source_type='phoenix', path=phoenix_stellar_model, T=T, R=R, D=D, logg=logg, z=z)
"""
def __init__(self):
"""
Parameters
__________
source_type: str
source type, can be `planck`, `phoenix` or `custom`. Default is `planck`
wavelength: :class:`~numpy.ndarray` or :class:`~astropy.units.Quantity` (optional)
wavelength grid. If no units are attached is considered as expressed in `um`
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 (optional)
Phoenix file path
path: str (optional)
Phoenix directory path
T: :class:`~astropy.units.Quantity` or float (optional)
star temperature. If no units are attached is considered as expressed in `K`
z: float (optional)
star metallicity.
logg: float (optional)
star logG.
"""
self.add_task_param("source_type", "source type", "planck")
self.add_task_param("wavelength", "wavelength grid", None)
self.add_task_param("R", "star radius")
self.add_task_param("D", "star distance")
self.add_task_param("T", "star temperature", None)
self.add_task_param("logg", "star logG", None)
self.add_task_param("z", "star metallicity", None)
self.add_task_param("path", "phoenix spectra path", None)
self.add_task_param("filename", "phoenix file name", None)
[docs] def execute(self):
self.info("loading source Sed")
source_type = self.get_task_param("source_type")
source_type = source_type.lower()
if source_type == "planck":
wl = self.get_task_param("wavelength")
T = self.get_task_param("T")
R = self.get_task_param("R")
D = self.get_task_param("D")
createPlanckStar = CreatePlanckStar()
sed = createPlanckStar(wavelength=wl, T=T, R=R, D=D)
elif source_type == "phoenix":
path = self.get_task_param("path")
filename = self.get_task_param("filename")
R = self.get_task_param("R")
D = self.get_task_param("D")
T = self.get_task_param("T")
logg = self.get_task_param("logg")
z = self.get_task_param("z")
loadPhoenix = LoadPhoenix()
sed = loadPhoenix(
filename=filename, path=path, T=T, R=R, D=D, logg=logg, z=z
)
elif source_type == "custom":
filename = self.get_task_param("filename")
R = self.get_task_param("R")
D = self.get_task_param("D")
loadCustom = LoadCustom()
sed = loadCustom(filename=filename, R=R, D=D)
else:
self.error("not supported source type")
raise KeyError("not supported source type")
self.set_output(sed)