Source code for exosim.tasks.sed.createCustomSource

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

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


[docs]class CreateCustomSource(Task): """ Creates a custom SED from input parameters. Returns ------- :class:`~exosim.models.signal.Sed` Star Sed Raises ------ TypeError: if the output is not a :class:`~exosim.models.signal.Sed` class Notes ----- This is a default class with standardised inputs and outputs. The user can load this class and overwrite the "model" method to implement a custom Task to replace this. """ def __init__(self): """ Parameters ----------- parameters: dict dictionary containing the source parameters. This is usually parsed from :class:`~exosim.tasks.load.loadOptions.LoadOptions` """ self.add_task_param("parameters", "source parameters")
[docs] def execute(self): self.info("Create custom sed") parameters = self.get_task_param("parameters") sed = self.model(parameters) # checking output if not isinstance(sed, signal.Sed): self.error("wrong output format") raise TypeError("wrong output format") self.debug("sed: {}".format(sed.data)) self.set_output(sed)
[docs] def model(self, parameters): """ Parameters ---------- parameters: dict dictionary contained the source parameters. This is usually parsed from :class:`~exosim.tasks.load.loadOptions.LoadOptions`. Returns -------- :class:`~exosim.models.signal.Sed` source sed """ R = parameters["R"].si D = parameters["D"].si T = parameters["T"].si wl_min = parameters["wl_min"] wl_max = parameters["wl_max"] n_points = parameters["n_points"] wl = np.linspace(wl_min, wl_max, n_points) 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_) return sed