Source code for ctapipe.instrument.atmosphere

"""
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