Importing other atmospheric components#

This page documents the method SignalCreation.Lidar.Lidar.import_other_atmospheric_component(), which loads additional atmospheric species into the SignalCreation.Lidar.Lidar dataset, such as ozone, along with their climatological profiles and absorption cross-sections.

These auxiliary fields are essential for optical transmission and DIAL-type ozone retrievals.

Overview#

##############################
# 3. Other Atmospheric Data  #
##############################
lidar.import_other_atmospheric_component("ozone")

This method complements SignalCreation.Lidar.Lidar.import_atmospheric_component() by adding species-specific data (currently ozone) to the internal dataset _lidar. The resulting variables include:

  • Ozone climatology (mean and standard deviation)

  • Ozone absorption cross-sections for each active LIDAR wavelength

Method signature#

def import_other_atmospheric_component(
    self,
    atm_cpt: str | list = 'all'
) -> None:
    """
    Import into the dataset other atmospheric components (like ozone)
    """

Parameters#

Parameter

Description

atm_cpt

Component(s) to import (e.g., "ozone" or list of names). If "all" (default), imports all known species.

Currently supported components#

  • ozone : adds climatological and spectroscopic data for ozone

  • Other atmospheric species will be added in future versions (e.g., SO₂, NO₂)

XML configuration#

All input files are defined in the XML parameter file, under the <Read> section. Example configuration for ozone:

<Dial>
  <Read>

    <!-- Ozone climatology -->
    <Climatology_ozone_file>
      <filenames type="relativepath">
        Configuration_files/Climatology_files/climatology_ozone_ohp.nc
      </filenames>
      <format>netcdf</format>
    </Climatology_ozone_file>

    <!-- Ozone absorption cross-sections -->
    <Cross_section_file>
      <filenames type="relativepath">
        Configuration_files/Main_files/Ozone_cross_section/O3_CRS_BDM_218K.dat,
        Configuration_files/Main_files/Ozone_cross_section/O3_CRS_BDM_228K.dat,
        Configuration_files/Main_files/Ozone_cross_section/O3_CRS_BDM_243K.dat,
        Configuration_files/Main_files/Ozone_cross_section/O3_CRS_BDM_273K.dat,
        Configuration_files/Main_files/Ozone_cross_section/O3_CRS_BDM_295K.dat
      </filenames>
      <format>Bass And Paur files</format>
      <fill_value>nan</fill_value>
    </Cross_section_file>

  </Read>
</Dial>

Fields description#

  • Climatology_ozone_file Points to a NetCDF file containing ozone climatological profiles (mean and standard deviation). The file must contain altitude as the vertical coordinate and optionally time or month dimensions.

  • Cross_section_file Defines one or more text data files containing ozone absorption cross-sections at different temperatures. The supported format (e.g., Bass and Paur, BDM, etc.) must match the reader implemented in the SignalCreation.CrossSection.CrossSection class.

  • fill_value Defines how missing values should be handled (default: nan).

Supported ozone cross-section formats#

The program currently supports four cross-section file formats. Use one of the following strings in the XML tag <Cross_section_file><format>…</format>:

Format string (XML)

Internal constant

Notes

SERDYUNCHENKO values file

SERDYUNCHENKO_VALUES_FILE

Tabulated Serdyuchenko values

SERDYUNCHENKO coefficient file

SERDYUNCHENKO_COEFFICIENT_FILE | Serdyuchenko polynomial coefficients

BDM files

BDM_FILES

Brion–Daumont–Malicet temperature sets

Bass And Paur files

BP_FILES

Classic Bass & Paur datasets

Example (choose the correct format string for your dataset):

<Dial>
  <Read>
    <Cross_section_file>
      <filenames type="relativepath">
        Configuration_files/Main_files/Ozone_cross_section/O3_CRS_BDM_218K.dat,
        Configuration_files/Main_files/Ozone_cross_section/O3_CRS_BDM_228K.dat,
        Configuration_files/Main_files/Ozone_cross_section/O3_CRS_BDM_243K.dat,
        Configuration_files/Main_files/Ozone_cross_section/O3_CRS_BDM_273K.dat,
        Configuration_files/Main_files/Ozone_cross_section/O3_CRS_BDM_295K.dat
      </filenames>
      <format>BDM files</format>
      <fill_value>nan</fill_value>
    </Cross_section_file>
  </Read>
</Dial>

Warning

The <format> value must match exactly one of the four supported strings above. Otherwise the code raises a RuntimeError indicating the allowed types.

Tip

If you switch to Serdyuchenko data, update both the filenames and the format, e.g.:

<format>SERDYUNCHENKO values file</format> or <format>SERDYUNCHENKO coefficient file</format>.

Processing steps#

  1. Checks and validation Ensures requested components are supported (currently only ozone). Raises a runtime error if the component is unknown.

  2. Ozone climatology import Reads the file defined under Climatology_ozone_file and loads:

    • Climatology_ozone (mean profile)

    • Climatology_ozone_std (standard deviation)

    These profiles are interpolated on the LIDAR altitude grid and stored as xarray.DataArray objects.

  3. Cross-section import Reads the ozone absorption cross-sections defined in Cross_section_file. Each section is loaded and stored in the internal dictionary _cross_section["Ozone"].

  4. Wavelength loop For each wavelength present in the LIDAR raw data (laser and received), the method computes and stores the corresponding ozone cross-section as a function of altitude.

    The resulting variables are named:

    • ozone_cross_section_<λ> (e.g., ozone_cross_section_355)

  5. Dataset update All resulting arrays are added to the internal dataset _lidar via tf.add_new_dataarray_to_dataset(), with proper units and metadata.

Example usage#

from SignalCreation.Lidar import Lidar

lidar = Lidar("Configuration_files/Parameters/example_station.xml", "2024-03-28")
lidar.import_lidar_data()
lidar.import_atmospheric_component()
lidar.import_other_atmospheric_component("ozone")

print(lidar._lidar[["Climatology_ozone", "ozone_cross_section_355"]])

Resulting variables in _lidar#

Variable

Description

Climatology_ozone

Mean ozone number density (m⁻³)

Climatology_ozone_std

Standard deviation of ozone (m⁻³)

ozone_cross_section_<λ>

Absorption cross-section (m²) at λ nm

Units and conventions#

  • All concentration values are expressed in number density (m⁻³).

  • Cross-sections are expressed in m² per molecule.

  • Altitude is interpolated on the same grid as the LIDAR signal.

  • Wavelengths are retrieved automatically from channel metadata in _lidar.

Note

These ozone profiles are primarily used for: - computing optical transmissions, - comparing retrieval outputs with climatology, - or constraining inversion algorithms.

Status and development#

Warning

Currently, only ozone is implemented and tested in production. The structure is designed to accommodate other species in the future (SO₂, NO₂, etc.).

Planned enhancements include:

  • Interpolation of climatology by month and latitude

  • Temperature-dependent cross-section interpolation

  • Integration with ACTRIS standard datasets for species climatologies

  • Consistency check between auxiliary files and retrieval configuration

See also#