Source code for pyrad.lbl.hitran.lorentz

from numpy import pi, power


[docs]class Lorentz(object): """Lorentz line profile. Attributes: halfwidth: Pressure-broadened halfwidth [cm-1]. parameters: List of HITRAN parameter names. """ def __init__(self): self.parameters = ["gamma_air", "gamma_self", "n_air"] self.halfwidth = None
[docs] def update(self, spectral_lines, temperature, pressure, partial_pressure): """Calculate per-spectral-line pressure-broadened halfwidths. Args: spectral_lines: SpectralLines object. temperature: Temperature [K]. pressure: Pressure [atm]. partial_pressure: Partial pressure [atm]. """ self.halfwidth = pressure_broadened_halfwidth(pressure, partial_pressure, temperature, spectral_lines.n_air, spectral_lines.gamma_air, spectral_lines.gamma_self)
[docs] def profile(self, spectral_lines, v, index): """Calculate lorentz profiles. Args: spectral_lines: SpectralLines object. v: Wavenumber [cm-1]. index: Spectral line index. Returns: Line broadening [cm]. """ return lorentz_profile(v - spectral_lines.v[index], self.halfwidth[index])
[docs]def pressure_broadened_halfwidth(pressure, partial_pressure, temperature, n, gamma_air, gamma_self): """Calculates pressure-broadened line halfwidth. Args: pressure: Pressure [atm]. partial_pressure: Partial pressure [atm]. temperature: Temperature [K] n: Air-broadened temperature dependence powers. gamma_air: Air-broadened halfwidth [cm-1 atm-1]. gamma_self: Self-broadened halfwidth [cm-1 atm-1]. Returns: Pressure-broadened line halfwidth [cm-1]. """ return power((296./temperature), n) * \ (gamma_air*(pressure - partial_pressure) + gamma_self*partial_pressure)
[docs]def lorentz_profile(dv, halfwidth): """Calculates a Lorentzian line profile. Args: dv: Wavenumber distance from line center [cm-1]. halfwidth: Pressure-broadened line half-width [cm -1]. Returns: Lorentz line profile broadening [cm]. """ return halfwidth/(pi*(halfwidth*halfwidth + dv*dv))