Source code for frei.phoenix

import numpy as np
import xarray as xr
import astropy.units as u
from expecto import get_spectrum

from .twostream import flux_unit

__all__ = [
    'get_binned_phoenix_spectrum'
]


def resolution(group):
    Delta_x = group.wavelength.max() - group.wavelength.min()
    return group.integrate('wavelength').expand_dims(
        dict(wavelength=[group.wavelength.mean()])
    ) / Delta_x


[docs]def get_binned_phoenix_spectrum(T_eff, g, wl_bins, lam, cache=True): """ Return a binned PHOENIX spectrum with effective temperature T_eff. Parameters ---------- T_eff : ~astropy.units.Quantity Effective temperature of the PHOENIX model to retrieve g : ~astropy.units.Quantity Surface gravity wl_bins : ~astropy.units.Quantity Wavelength bin edges lam : ~astropy.units.Quantity Wavelength bin centers cache : bool Cache downloaded PHOENIX spectrum Returns ------- binned_spectrum : ~astropy.units.Quantity PHOENIX spectrum binned to wavelength grid """ spec = get_spectrum(T_eff.value, log_g=np.log10(g.cgs.value), cache=cache) phoenix_xr = xr.DataArray( spec.flux.to(flux_unit).value, dims=['wavelength'], coords=dict(wavelength=spec.wavelength.to(u.um).value) ) phoenix_groups = phoenix_xr.groupby_bins("wavelength", wl_bins) phoenix_lowres = phoenix_groups.map(resolution) phoenix_lowres_padded = np.pad( phoenix_lowres, (0, len(lam) - phoenix_lowres.shape[0]) ) * flux_unit return phoenix_lowres_padded