Emission

Module: sasktran.emission

Classes that describe emissions occuring within the atmosphere and are typically thermal or photochemical. The overall purpose of the Emissions classes is to provide the volume emission rate as a function of wavelength at any location in the atmosphere.

sasktran.EmissionTable(altitude_m, wavel_nm, ...)

Defines an emission in the atmosphere represented with a table of volume emission rates on an altitude/wavelength grid.

sasktran.EmissionThermal([emissivity])

Class used to enable thermal emissions within the HR radiative transfer model.

sasktran.HITRANPhotoChemical(chemical_name, ...)

Calculates the photo-chemical emission from an excited molecular upper state.

sasktran.HITRANPhotoChemical_O2_ABand(...[, ...])

Calculates the photo-chemical emission from the O2 A-Band around 762 nm.

sasktran.HITRANPhotoChemical_O2_SingletDelta(...)

Calculates the photo-chemical emission from the O2 Singlet Delta around 1.27 microns.

sasktran.ABandEmission(altArray_km)

Emission Base Class

class sasktran.Emission(name: str)

Bases: EmissionBase

Class which represents the emission of a species in the atmosphere. Most of the time it is not recommended to use this class and more specific classes, such as EmissionTable, should be used instead.

Parameters:

name (str) – Name handle of the emission to create.

isotropic_emission(latitude: float, longitude: float, altitude: float, mjd: float, wavelengths: array, isground=False)

Calculates the isotropic emission rate.

Parameters:
  • atmospheric_state (sasktran.Climatology) – Atmospheric state (sometime called background climatology, corresponds to sasktran.Atmosphere.atmospheric_state). Typically the background climatology must support temperature and pressure, e.g. msis90. Some optical properties may not need a background climatology, for example Mie aerosols, however one must still be passed in for the function to operate.

  • latitude (float) – Latitude in degrees.

  • longitude (float) – Longitude in degrees.

  • altitude (float) – Altitude in meters.

  • mjd (float) – Modified Julian Date.

  • wavelengths (np.array) – Wavelengths in nm.

  • isground (bool, Optional) – Set to true if this is a ground emission, default is False.

Returns:

emission – Array of emissions in [photons/sec/nm/ster/cm2], same length at wavelengths

Return type:

np.ndarray

EmissionTable

class sasktran.EmissionTable(altitude_m: ndarray, wavel_nm: ndarray, volumeemission: ndarray)

Bases: Emission

Defines an emission in the atmosphere represented with a table of volume emission rates on an altitude/wavelength grid.

Parameters:
  • altitude_m (np.ndarray) – Array of altitudes in [m] defining the altitude dimension of the emission grid

  • wavel_nm (np.ndarray) – Array of wavelengths in [nm] defining the wavelength dimension of the altitude grid

  • volumeemission (np.ndarray) – Two dimensional array of volume emission rates in [photons/nm/sec/ster] with dimension (len(alts), len(wavel))

Examples

>>> import sasktran as sk
>>> alts = np.arange(500, 100500, 1000)
>>> wavel = np.linspace(300, 350, 50)
>>> ver = np.ones((len(alts), len(wavel)))
>>> emission = sk.EmissionTable(alts, wavel, ver)
>>> print(emission)
Emission of type: USERDEFINED_WAVELENGTHHEIGHT

EmissionThermal

class sasktran.EmissionThermal(emissivity=1.0)

Bases: Emission

Class used to enable thermal emissions within the HR radiative transfer model. Currently only works as part of a full radiative transfer calculation.

Examples

>>> import sasktran as sk
>>> emission = sk.EmissionThermal()
>>> geometry = sk.VerticalImage()
>>> geometry.from_sza_saa(sza=60, saa=60, lat=0, lon=0, tanalts_km=[10, 20, 30, 40], mjd=54372, locallook=0,         satalt_km=600, refalt_km=20)
>>> atmosphere = sk.Atmosphere()
>>> atmosphere['ozone'] = sk.Species(sk.O3OSIRISRes(), sk.Labow())
>>> atmosphere['air'] = sk.Species(sk.Rayleigh(), sk.MSIS90())
>>> atmosphere.emissions['thermal'] = emission
>>> engine = sk.EngineHR(geometry, atmosphere, wavelengths=[1000])
>>> engine.num_orders_of_scatter = 1
>>> engine.include_emissions = True
>>> engine.calculate_radiance()
array([[ 0.01218222,  0.00270503,  0.00055809,  0.00013423]])

HITRANPhotoChemical

class sasktran.HITRANPhotoChemical(chemical_name: str, wavenumber_range: Tuple[float, float], atmospheric_state_climatology: Climatology, excited_upper_state_climatology: Tuple[Climatology, str], lower_state_global_quanta_filter: str, upper_state_global_quanta_filter: str, self_broadening_climatology: Tuple[Climatology, str] = (None, ''), isotope_filter: int = 0, use_cache: bool = True)

Bases: Emission

Calculates the photo-chemical emission from an excited molecular upper state. This work was originally developed to model the molecular oxygen atmospheric emissions due to A-band and singlet delta etc. but can also be used for OH and other molecular bands in the hitran database. This class wraps the SasktranIF Emission object, HITRAN_PHOTOCHEMICAL and users are encouraged to refer to the available documentation within that package.

The HITRANPhotoChemical object calculates the photo-chemical emission of a molecular band (assumed vibrational) using the Einstein-A coefficients given in the Hitran database. The code calculates the spectral emission of a single electron statistically distributed across the vibrational band. All spectral lines are modelled using a Voigt profile. The user must explicitly select an appropriate wavenumber range, and upper and lower quanta so only lines from the target vibrational band are selected from the Hitran database. The user can specify the climatology used to calculate pressure and temperature used in the Voigt profile claculation. By default the MSIS90 model is used.

The user must provide a climatology object that returns the number of electrons in the excited upper state. The climatology object can be as simple as a user-defined profile or as complex as a photochemical model. The HITRANPhotoChemical object thermalizes the distribution of these electrons across the upper band using a Boltzmann distribution.

The HITRANPhotoChemical object can account for self-broadening of the line-shapes but requires the user to provide a climatology object for the number density of the molecule of interest. If no climatology is provided then self-braodening is ignored.

Parameters:
  • chemical_name (str) – Chemical abbreviation of the molecule of interest. Typically O2, OH etc.

  • wavenumber_range (Tuple[float,float]) – A two element tuple specifying the range of wavenumbers in cm-1 used to select spectral lines from the Hitran database. The selection range should span the entire wavenumber range of the target vibrational band. The range is used along with the lower_state_global_quant_filter and upper_state_global_quanta_filter to select all the lines associated with the target vibrational band. The first element should be the lower wavenumber. The second element should be the upper wavenumber. Both are in cm-1.

  • lower_state_global_quanta_filter (str, optional) – The quanta filter used to select spectral lines in the given wavenumber that match the lower quantum state. These quanta are given in the Hitran data records as the V′ and V′′ fields and are strings similar to “X 0”. The code will only accept spectral lines that match the lower state filter. The code ignores spaces but is case sensitive and order sensitive. i.e ‘X 0’ is not the same as ‘0 X’. This option requires the user to be familiar with the Hitran 160 character records and is comfortable reading the Hitran files to ascertain the notation used in the database files. The default is an empty string,””, which disables the filter and matches all spectral lines regardless of lower state quanta, this is usually not the desired behaviour and the string must be set.

  • upper_state_global_quanta_filter (str, optional) – Same as lower_global_quanta_filter except for the upper state. The default is the empty string, “” which is not correct for isolating upper state vibrational levels.

  • climatology) (atmospheric_state_climatology(object) – The climatology object used to calculate pressure and temperature for the Voigt profile calculations.

  • excited_upper_state_climatology (Tuple[ object, str]) – A two element tuple providing the climatology object to be used for calculation of the total number of excited upper state molecules in molecules/cm3. The first element is the Climatology object that captures the photo-chemistry of the atmosphere. It can be as simple as a user defined height profile or a more complicted photo-chemical model. The climatology object should provide the number of excited molecules consistent with the selected spectral lines, i.e. they are referring to the same vibrational band etc. The second element is the climatology handle used by the excited upper-state climatology to acquire the number of excited molecules per cm3. A typical value for the oxygen molecule is ‘SKEMISSION_PHOTOCHEMICAL_O2’. A full list of valid climatology handles is available in the SasktranIF documentation.

  • climatology) – The climatology object used to calculate pressure and temperature for the Voigt profile calculations.

  • self_broadening_climatology (Tuple[ object, str]) – Optional. A two element tuple providing the climatology object to be used for self-broadening calculations. The first element is a Climatology object that must provide the number density of the target molecule in molecules/cm3. The second element is the climatology handle used by the self-broadening climatology to acquire the number of molecules/cm3 of the target molecule. A typical value for the oxygen molecule is ‘SKCLIMATOLOGY_O2_CM3’. A full list of climatology handles is available in the SasktranIF documentation. This climatology is used along with the pressure and temperature values from the atmospheric_state_climatology to calculate the partial pressure of the molecule which is used in the self broadening calculation. If no climatology is provided then self broadening is ignored. For reference, ignoring this item leads to an error on the order of 1% for O2 in the A-band.

  • isotope_filter (int, optional) – Optional Allows the HITRAN object to load in just one isotope of the requested molecule. The value set must match one of the isotope labels used for the given molecule in the HITRAN database file, molparam.txt. Note that the code does not adjust the line strength but uses the line strength value as written in the HITRAN database. This means you may have to account for and/or remove the abundance automatically built into the HITRAN database line strength values. A value of 0 will load all isotopes in the Hitran database. Default is 0. Most users will not change this value.

  • use_cache (bool, optional) – Optional. Species that this emission object will create an internal cache of signals in wavelength and location. This feature is provided for RT engines, such as HR, SO, Disco and MC, that internally need to calculate the Voigt profile at many locations for one wavelength while the Voigt line profile code is much more efficient if performed across all wavenumbers at each location. This feature, if active, is only used inside method skif_object when the input arguments have an ‘engine’ keyword. The default is True.

HITRANPhotoChemical_O2_ABand

class sasktran.HITRANPhotoChemical_O2_ABand(excited_upper_state_climatology: Tuple[Climatology, str], atmospheric_state_climatology: Climatology, self_broadening_climatology: Tuple[Climatology, str] = (None, ''), isotope_filter: int = 0, use_cache: bool = True)

Bases: HITRANPhotoChemical

Calculates the photo-chemical emission from the O2 A-Band around 762 nm. This is a small wrapper around the HitranPhotoChemical class. The O2 A-band spectral lines cover the wavelength range 748 nnm to 780 nm, correspondiong to 12820.0 to 13369.0 cm-1.

Parameters:
  • climatology) (atmospheric_state_climatology(object) – The climatology object used to calculate pressure and temperature for the Voigt profile calculations.

  • excited_upper_state_climatology (Tuple[ object, str]) – A two element tuple providing the climatology object to be used for calculation of the total number of O2 A-band molecules in molecules/cm3. The first element is the Climatology object that captures the photo-chemistry of the atmosphere. It can be as simple as a user defined height profile or a more complicated photo-chemical model. The climatology object should provide the number of excited molecules in the oxygen A-band The second element is the climatology handle used by the excited upper-state climatology to acquire the number of excited molecules per cm3. A typical value for the oxygen molecule is ‘SKEMISSION_PHOTOCHEMICAL_O2’. A full list of valid climatology handles is available in the SasktranIF documentation.

  • climatology) – Optional. See HitranPhotoChemical for a description of this parameter.

  • self_broadening_climatology (Tuple[ object, str]) – Optional. See HitranPhotoChemical for a description of this parameter.

  • isotope_filter (int, optional) – Optional. See HitranPhotoChemical for a description of this parameter.

  • use_cache (boo, optional) – Optional. See HitranPhotoChemical for a description of this parameter.

Examples

>>>    import sasktran as sk
>>>    import numpy as np
>>>
>>>    msis = sk.MSIS90()
>>>    constant = sk.ClimatologyUserDefined(np.array([0.0, 100000.0]), {'SKEMISSION_PHOTOCHEMICAL_O2': [1.0E6, 1.0E6]})
>>>    emission = sk.HITRANPhotoChemical_O2_ABand(msis, (constant, 'SKEMISSION_PHOTOCHEMICAL_O2'), self_broadening_climatology=(msis, 'SKCLIMATOLOGY_O2_CM3'))
>>>    wavelen  = np.arange(749.0, 779.0, 0.0001)
>>>    signal = emission.isotropic_emission(52.0, -106.0, 80000.0, 57005.8, wavelen, False)

HITRANPhotoChemical_O2_SingletDelta

class sasktran.HITRANPhotoChemical_O2_SingletDelta(atmospheric_state_climatology: Climatology, excited_upper_state_climatology: Tuple[Climatology, str], self_broadening_climatology: Tuple[Climatology, str] = (None, ''), isotope_filter: int = 0, use_cache: bool = True)

Bases: HITRANPhotoChemical

Calculates the photo-chemical emission from the O2 Singlet Delta around 1.27 microns. This is a small wrapper around the HitranPhotoChemical class. The O2 A-band spectral lines cover the wavelength range 1.223 microns to 1.321 microns, correspondiong to 7570 to 8172 cm-1.

Parameters:
  • climatology) (atmospheric_state_climatology(object) – The climatology object used to calculate pressure and temperature for the Voigt profile calculations.

  • excited_upper_state_climatology (Tuple[ object, str]) – A two element tuple providing the climatology object to be used for calculation of the total number of O2 A-band molecules in molecules/cm3. The first element is the Climatology object that captures the photo-chemistry of the atmosphere. It can be as simple as a user defined height profile or a more complicated photo-chemical model. The climatology object should provide the number of excited molecules in the oxygen A-band The second element is the climatology handle used by the excited upper-state climatology to acquire the number of excited molecules per cm3. A typical value for the oxygen molecule is ‘SKEMISSION_PHOTOCHEMICAL_O2’. A full list of valid climatology handles is available in the SasktranIF documentation.

  • self_broadening_climatology (Tuple[ object, str]) – Optional. See HitranPhotoChemical for a description of this parameter.

  • isotope_filter (int, optional) – Optional. See HitranPhotoChemical for a description of this parameter.

  • use_cache (boo, optional) – Optional. See HitranPhotoChemical for a description of this parameter.

Examples

>>>    import sasktran as sk
>>>    import numpy as np
>>>
>>>    msis = sk.MSIS90()
>>>    constant = sk.ClimatologyUserDefined(np.array([0.0, 100000.0]), {'SKEMISSION_PHOTOCHEMICAL_O2': [1.0E6, 1.0E6]})
>>>    emission = sk.HITRANPhotoChemical_O2_SingletDelta( msis, (constant, 'SKEMISSION_PHOTOCHEMICAL_O2'), self_broadening_climatology=(msis, 'SKCLIMATOLOGY_O2_CM3'))
>>>    wavelen  = np.arange(1223.0, 1321.0, 0.0001)
>>>    signal = emission.isotropic_emission(52.0, -106.0, 80000.0, 57005.8, wavelen, False)

ABandEmission

class sasktran.ABandEmission(altArray_km)

Bases: Emission

run_model(atmosphere, refPoint, sunPos)
Parameters:
  • atmosphere (sk.Atmosphere) – Atmospheric state to run the emission model at. Note that the atmosphere MUST contain the keys ‘ozone’, ‘air’, and ‘O2’

  • refPoint (List) – 4 element list of [latitude, longitude, altitude, mjd] which defines the location to run the model at. The altitude parameter is generally not used.

  • sunPos (np.array) – 3 element unit vector of (x, y, z) in geocentric coordinates pointing towards the sun.

Returns:

Source function for emission as a two dimensional array (wavelength, altitude), and corresponding wavelength array (wavlenA)

Return type:

Jemi_nm, wavlenA

See Also

Atmosphere

An object that describes the atmospheric constituents, and surface type to the engine. Atmospheric constituents are defined by a list of Species, and surfaces are defined by a given BRDF.