Optical Properties#

Class Objects#

class sasktran2.optical.O3DBM[source]#

Bases: OpticalDatabaseGenericAbsorber

Tabulated high resolution cross-sections of O3 measured by Daumont, Brion and Malicet in the early 1990’s [1]. The wavelength range slightly varies with temperature but covers the entire UV to NIR region, from 194.50 nm to 830.00 nm at 0.01 to 0.02 nm resolution. The cross-section data were collected at 0.01-0.02 nm resolution and each wavelength/cross-section table varies in size from 22,052 to 63,501 entries. The data consists of 5 tables of wavelength versus cross-section for 5 temperatures.

Notes

Temerature Range

Measurements are provided at 5 temperatures covering typical stratospheric and tropospheric conditions:

218 K
228 K
243 K
273 K
295 K
Wavelength Range

The wavelength range of each temperature table is slightly different and is given below. Note that most of the temperature variation occurs in the Huggins band between 315 and 360 nm:

218K -> 194.50nm to 650.01nm
228K -> 194.50nm to 520.01nm
243K -> 194.50nm to 519.01nm
273K -> 299.50nm to 520.01nm
295K -> 195.00nm to 830.00nm

We looked into temperature interpolation and while DBM suggest that a quadratic interpolation scheme [3] they do not indicate an explicit technique. We tested several quadratic fitting routines and found that a truncated linear fit in temperature was visually more appealing than any of the quadratic fits and had none of the undesirable artifacts (excessive curvature etc.) that naturally arise with quadratic curve fitting. Consequently this object uses a truncated linear fit in temperature.

Data Source

These data are an exact replication of the data files:

O3_CRS_BDM_218K.dat
O3_CRS_BDM_228K.dat
O3_CRS_BDM_243K.dat
O3_CRS_BDM_273K.dat
O3_CRS_BDM_295K.dat

Data is from the IGACO site, http://igaco-o3.fmi.fi/ACSO/cross_sections.html. The files were copied on July 16-July 25 2012.

References

Raises:

OSError – If the file could not be found

class sasktran2.optical.NO2Vandaele[source]#

Bases: OpticalDatabaseGenericAbsorber

Calculates the absorption cross section of NO2 molecules from 230 nm to 1000 nm at 220 K to 294 K following [1]

Raises:

OSError – If the Vandaele file cannot be found

class sasktran2.optical.HITRANUV(name: str, version: str = '2022')[source]#

Bases: OpticalDatabaseGenericAbsorber

HITRAN UV cross-sections for a given constituent. The constituent must be one of the following: [“O3”, “NO2”, “BrO”, “SO2”]

These are the files that you obtain from the HITRAN website when selecting UV cross sections. Note that usually these are not very good, and you should use a specific database for each constituent instead such as O3DBM. The HITRAN UV cross sections are only provided for convenience.

Specific Issues
O3

We have noticed the Ozone cross sections are unreasonably large in the region < 310 nm, and does not match the source data. We do not recommend using this.

NO2

Even though the HITRAN database specifically says all cross sections are given in vacuum wavenumbers, this one seems to be specified in air wavenumbers. We have converted it to vacuum wavenumbers manually. After doing so it matches the Vandaele source files relatively well.

Parameters:
  • name (str) – Constituent

  • version (str, optional) – HITRAN version number, currently only “2022” is supported, by default “2022”

Raises:

OSError – If the databases are not installed

class sasktran2.optical.HITRANTabulated(name: str, res='01nm')[source]#

Bases: OpticalDatabaseGenericAbsorber

Loads in a database tabulated from HITRAN line entries as a function of pressure/temperature that have been reduced to a given resolution.

This requires the extended databases to be downloaded, e.g. by running sk.appconfig.download_extended_databases()

Currently supported species and resolutions are:

H2O : 01nm
O2 : 01nm
Parameters:
  • name (str) – Species name

  • res (str, optional) – Resolution of the database to load in, by default “01nm”

Raises:

OSError – If the specified file cannot be found

class sasktran2.optical.HITRANCollision(name: str)[source]#

Bases: OpticalDatabaseGenericAbsorber

Loads collision induced absorption (CIA) cross sections compiled from data found at https://hitran.org/cia/.

This requires the extended databases to be downloaded, e.g. by running sk.appconfig.download_extended_databases()

Currently supported species are:

O2O2
Parameters:

name (str) – Species name

class sasktran2.optical.database.OpticalDatabase(db_filepath: Path)[source]#

Bases: OpticalProperty

An optical property that is defined by a database file. This is just a base class to handle file loading, derived classes must be used as actual optical properties.

Parameters:

db_filepath (Path) – Path to the optical database file

Raises:

OSError – If xarray is not installed

class sasktran2.optical.database.OpticalDatabaseGenericAbsorber(db_filepath: Path)[source]#

Bases: OpticalDatabase

A purely absorbing optical property defined by a database file. The database must contain the following

  • xs : The absorption cross section in [m^2]

xs must be a function of either wavelength_nm or wavenumber_cminv, and optionally temperature and pressure.

Parameters:

db_filepath (Path) – Path to the database file

class sasktran2.optical.database.OpticalDatabaseGenericScatterer(db_filepath: Path)[source]#

Bases: OpticalDatabase

A purely scattering optical property defined by a database file. The database must contain the following

  • xs_total : The total cross section in [m^2]

  • xs_scattering : The scattering cross section in [m^2]

  • lm_a1 : the legendre coefficients for the phase function

All variables must be a function of either wavelength_nm or wavenumber_cminv, and optionally any other dimension such as particle size.

Parameters:

db_filepath (Path) – Path to the database file

Special Modules#

sasktran2.optical.rayleigh.rayleigh_cross_section_bates(wavelengths_um: array, n2_percentage: float = 78.084, o2_percentage: float = 20.946, ar_percentage: float = 0.934, co2_percentage: float = 0.036) array[source]#

Calculates the Rayleigh scattering cross section in units of [m**2] for a given refractive index according to the Bates approximation. Cross section is returned back at (0C, 1013.25 hPa)

Parameters:
  • wavelengths_um (np.array) – Wavelengths in [um]

  • n2_percentage (float, Optional) – Percentage of N2, default 78.084%

  • o2_percentage (float, Optional) – Percentage of O2, default 20.946%

  • ar_percentage (float, Optional) – Percentage of Ar, default 0.934%

  • co2_percentage (float, Optional) – Percentaage of CO2, default 0.036%

Returns:

  • np.array – The rayleigh scattering cross section in units [m**2]

  • np.array – The effective King factor [unitless]