Source code for desk.set_up.scale_dusty

import numpy as np
from astropy.table import Column, vstack
from desk.set_up import config


[docs] def scale_vexp( expansion_velocities: np.ndarray, luminosities: np.ndarray ) -> np.ndarray: """Scales expansion velocity by the luminosity and gas-to-dust ratio see: Elitzur & Ivezić 2001, MNRAS, 327, 403 (https://ui.adsabs.harvard.edu/abs/2001MNRAS.327..403E/abstract) Parameters ---------- expansion_velocities : array expansion velocities from original model grid. luminosities : array unique luminosity values created by generate_model_luminosities. Returns ------- scaled_expansion_velocities: array scaled expansion velocities. """ scaled_expansion_velocities = ( np.array(expansion_velocities) * (np.array(luminosities) / 10000) ** 0.25 * (config.target["assumed_gas_to_dust_ratio"] / 200) ** (-0.5) ) return scaled_expansion_velocities
[docs] def scale_mdot(mass_loss_rates: np.ndarray, luminosities: np.ndarray) -> np.ndarray: """Scales mass loss rates by the luminosity and gas-to-dust ratio see: Elitzur & Ivezić 2001, MNRAS, 327, 403 (https://ui.adsabs.harvard.edu/abs/2001MNRAS.327..403E/abstract) Parameters ---------- mass_loss_rates : array mass-loss rates from original model grid. luminosities : array unique luminosity values created by generate_model_luminosities. Returns ------- scaled_mdot: array scaled mass loss rates. """ scaled_mdot = ( np.array(mass_loss_rates) * ((np.array(luminosities) / 10000) ** 0.75) * (config.target["assumed_gas_to_dust_ratio"] / 200) ** 0.5, )[0] return scaled_mdot
[docs] def scale(_outputs, _models, luminosities: np.ndarray, scaling_factor: float): """Scale DUSTY models and outputs. Parameters ---------- _outputs : astropy table grid outputs. _models : astropy table grid models. luminosities : array 1-D array of luminosities scaling_factor : float Scaling factor to scale grids to distance. Returns ------- full_outputs : astropy table Updated astropy table with scaled vexp, and mdot. full_model_grid : astropy table astropy table with sclaed fluxes """ full_outputs = vstack(([_outputs] * len(luminosities))) # create lum col lum_col = Column( np.ndarray.flatten(np.array([np.full(len(_outputs), x) for x in luminosities])), name="lum", dtype="int", ) # get log normalization for model full_outputs["norm"] = np.log10(full_outputs["norm"] / scaling_factor * lum_col) # replace vexps and mdots with scaled values scaled_vexp_col = Column(scale_vexp(full_outputs["vexp"], lum_col), "scaled_vexp") scaled_mdot_col = Column(scale_mdot(full_outputs["mdot"], lum_col), "scaled_mdot") full_outputs.add_columns([lum_col, scaled_vexp_col, scaled_mdot_col]) full_outputs.remove_columns(["vexp", "mdot"]) # scale grid_fluxes full_model_grid = vstack( [(_models["flux_wm2"] / scaling_factor * lum_val) for lum_val in luminosities] ) return full_outputs, full_model_grid