Source code for exosim.tasks.sed.createPlanckStar

import numpy as np
from astropy import units as u
from astropy.modeling.physical_models import BlackBody

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


[docs]class CreatePlanckStar(Task): r""" Create a star SED using the Planck function. The star emission is simulated by :class:`astropy.modeling.physical_models.BlackBody`. The resulting sed is then converted into :math:`W/m^2/sr/\mu m` and scaled by the solid angle :math:`\pi \left( \frac{R}{D} \right)^2`. Returns ------- :class:`~exosim.models.signal.Sed` Star Sed Examples -------- >>> from exosim.tasks.sed import CreatePlanckStar >>> import astropy.units as u >>> import numpy as np >>> createPlanckStar = CreatePlanckStar() >>> wl = np.linspace(0.5, 7.8, 10000) * u.um >>> T = 6086 * u.K >>> R = 1.18 * u.R_sun >>> D = 47 * u.au >>> sed = createPlanckStar(wavelength=wl, T=T, R=R, D=D) >>> import matplotlib.pyplot as plt >>> plt.plot(sed.spectral, sed.data[0,0]) >>> plt.ylabel(sed.data_units) >>> plt.xlabel(sed.spectral_units) >>> plt.show() .. plot:: mpl_examples/createPlanckStar.py """ def __init__(self): """ Parameters __________ wavelength: :class:`~numpy.ndarray` or :class:`~astropy.units.Quantity` wavelength grid. If no units are attached is considered as expressed in `um` T: :class:`~astropy.units.Quantity` or float star temperature. If no units are attached is considered as expressed in `K` 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` """ self.add_task_param("wavelength", "wavelength grid") self.add_task_param("T", "star temperature") self.add_task_param("R", "star radius") self.add_task_param("D", "star distannce")
[docs] def execute(self): wl = self.get_task_param("wavelength") T = self.get_task_param("T") R = self.get_task_param("R") D = self.get_task_param("D") wl = checks.check_units(wl, u.um, self) T = checks.check_units(T, u.K, self) R = checks.check_units(R, u.m, self) D = checks.check_units(D, u.m, self) omega_star = np.pi * (R / D) ** 2 * u.sr bb = BlackBody(T) bb_ = bb(wl).to(u.W / u.m**2 / u.sr / u.um, u.spectral_density(wl)) sed = signal.Sed(spectral=wl, data=omega_star * bb_) self.debug("star plack source created: {}".format(sed.data)) self.set_output(sed)