"""
Functions to retrieve and interpolate atmosphere profiles.
"""
import numpy as np
from astropy.units import Quantity
from scipy.interpolate import interp1d
from ..utils import get_table_dataset
from ..utils.deprecation import deprecated
__all__ = ["get_atmosphere_profile_table", "get_atmosphere_profile_functions"]
@deprecated(
since="v0.16.0", message="use ctapipe.atmosphere profiles from EventSource instead"
)
def get_atmosphere_profile_table(atmosphere_name="paranal"):
"""
Get an atmosphere profile table
Parameters
----------
atmosphere_name: str
identifier of atmosphere profile
Returns
-------
astropy.table.Table containing atmosphere profile with at least columns
'altitude' (m), and 'thickness' (g cm-2) as well as others.
"""
table_name = f"{atmosphere_name}.atmprof"
table = get_table_dataset(table_name=table_name, role="dl0.arr.svc.atmosphere")
return table
[docs]@deprecated(
since="v0.16.0", message="use ctapipe.atmosphere profiles from EventSource instead"
)
def get_atmosphere_profile_functions(atmosphere_name="paranal", with_units=True):
"""
Gives atmospheric profile as a continuous function thickness(
altitude), and it's inverse altitude(thickness) in m and g/cm^2
respectively.
Parameters
----------
atmosphere_name: str
identifier of atmosphere profile
with_units: bool
if true, return functions that accept and return unit quantities.
Otherwise assume units are 'm' and 'g cm-2'
Returns
-------
functions: thickness(alt), alt(thickness)
"""
tab = get_atmosphere_profile_table(atmosphere_name)
alt = tab["altitude"].to("m")
thick = (tab["thickness"]).to("g cm-2")
alt_to_thickness = interp1d(x=np.array(alt), y=np.array(thick))
thickness_to_alt = interp1d(x=np.array(thick), y=np.array(alt))
if with_units:
def thickness(a):
return Quantity(alt_to_thickness(a.to("m")), "g cm-2")
def altitude(a):
return Quantity(thickness_to_alt(a.to("g cm-2")), "m")
return thickness, altitude
return alt_to_thickness, thickness_to_alt