Source code for taurex.cia.cia

"""
Contains the abstract class used by all collisionally induced absorption
objects.
"""

from taurex.log import Logger
import numpy as np


[docs]class CIA(Logger): """ *Abstract class* This is the base class for collisionally induced absorption opacities. To function in Taurex3, it requires concrete implementations of: - :func:`wavenumberGrid` - :func:`compute_cia` - :func:`temperatureGrid` Parameters ---------- name : str Name to use for logging pair_name : str pair of molecules this class represents. e.g. 'H2-H2' or 'H2-He' """ def __init__(self, name, pair_name): super().__init__(name) self._pair_name = pair_name @property def pairName(self): """ The assigned pair of molecules of this CIA Returns ------- str The pair of molecules of this object in the form: ``Molecule1``-``Molecule2`` """ return self._pair_name @property def pairOne(self): """ The name of the first molecule in the pair Returns ------- str First molecule in the pair """ return self._pair_name.split('-')[0] @property def pairTwo(self): """ The name of the second molecule in the pair Returns ------- str Second molecule in the pair """ return self._pair_name.split('-')[-1]
[docs] def compute_cia(self, temperature): """ Computes the collisionaly induced cross-section for a given temeprature Unimplemented, this must be implemented in any derived class to be considered compatible in Taurex3 The rules are: 1. It must accept temperature in Kelvin (K) 2. If the temperature falls outside of :func:`temperatureGrid` it must be set to zero 3. The returned array must be of equal size to :func:`wavenumberGrid` Parameters ---------- temperature : float Temeprature in Kelvin Returns ------- :obj:`array` CIA cross section at desired temeprature on its native grid Raises ------ NotImplementedError Only if derived class does not implement this """ raise NotImplementedError
@property def wavenumberGrid(self): """ The native wavenumber grid (cm-1) of the CIA. Must be implemented in derived classes Returns ------- :obj:`array` Native wavenumber grid Raises ------ NotImplementedError Only if derived class does not implement this """ raise NotImplementedError @property def temperatureGrid(self): """ The native temperature grid of the CIA cross-sections. Returns ------- :obj:`array` Native temeprature grid in Kelvin Raises ------ NotImplementedError Only if derived class does not implement this """ raise NotImplementedError
[docs] def cia(self, temperature, wngrid=None): """ For a given temperature, computes the appropriate cross section. If wavenumber grid ( :obj:`wngrid` ) is provided then the cross-section is interpolated to it. Parameters ---------- temperature : float Temeprature in Kelvin wngrid : :obj:`array` , optional Wavenumber grid to interpolate to Returns ------- :obj:`array` CIA cross section at desired temeprature on either its native grid or interpolated on :obj:`wngrid` if supplied """ orig = self.compute_cia(temperature) if wngrid is None: return orig else: return np.interp(wngrid, self.wavenumberGrid, orig)