Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Multi-gas absorption LUT

Multi-gas absorption LUT — CH4_4, CO2_2, H2_2O

This notebook exercises the multi-gas orchestration layer in plumax.hapi_lut.multi. Two patterns are covered:

  1. Separate-per-gas LUTs — one NetCDF per species, each on its own natural spectral range. Used when downstream tools want the widest possible window for each gas individually.

  2. Combined LUT — a single NetCDF with one cross-section variable per gas on the shared spectral range. Used when several gases are retrieved jointly within the same instrument band (e.g. CH4_4 + H2_2O interference correction in a TROPOMI SWIR fit).

The math is identical to the single-gas case from CH4 absorption cross-section LUT; here we just loop over GasConfig entries.

1. Separate-per-gas LUTs on a common small window

We narrow the three gases to a shared 500-cm⁻¹ methane window (4000–4500 cm⁻¹) for runtime — the registry defaults would have H2_2O fetch 21 000 cm⁻¹ of lines, which is overkill for a tutorial.

GasConfig(CH4, M6, I1)
GasConfig(CO2, M2, I1)
GasConfig(H2O, M1, I1)

create_multi_gas_luts runs the fetch → compute → wrap → save pipeline from notebook 01 in a loop. Gases whose NetCDF already exists are skipped (pass force_recompute=True to override).

Note: we monkey-patch the registry with the narrowed configs below since create_multi_gas_luts looks up names in ATMOSPHERIC_GASES. In production code you’d subclass or rebuild the registry.

HAPI version: 1.3.0.0
To get the most up-to-date version please check http://hitran.org/hapi
ATTENTION: Python versions of partition sums from TIPS-2021 are now available in HAPI code

           MIT license: Copyright 2021 HITRAN team, see more at http://hitran.org. 

           If you use HAPI in your research or software development,
           please cite it using the following reference:
           R.V. Kochanov, I.E. Gordon, L.S. Rothman, P. Wcislo, C. Hill, J.S. Wilzewski,
           HITRAN Application Programming Interface (HAPI): A comprehensive approach
           to working with spectroscopic data, J. Quant. Spectrosc. Radiat. Transfer 177, 15-30 (2016)
           DOI: 10.1016/j.jqsrt.2016.03.005

           ATTENTION: This is the core version of the HITRAN Application Programming Interface.
                      For more efficient implementation of the absorption coefficient routine, 
                      as well as for new profiles, parameters and other functional,
                      please consider using HAPI2 extension library.
                      HAPI2 package is available at http://github.com/hitranonline/hapi2

Using /root/.cache/plumax/hitran

CH4
                     Lines parsed: 39817

Data is fetched from http://hitran.org

BEGIN DOWNLOAD: CH4
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
Header written to /root/.cache/plumax/hitran/CH4.header
END DOWNLOAD
                     Lines parsed: 39817
PROCESSED
Using /root/.cache/plumax/hitran

CH4
                     Lines parsed: 39817
{'air': 0.999998, 'self': 2e-06}
14.517897 seconds elapsed for abscoef; nlines = 39817
{'air': 0.999998, 'self': 2e-06}
14.354403 seconds elapsed for abscoef; nlines = 39817
{'air': 0.999998, 'self': 2e-06}
14.067736 seconds elapsed for abscoef; nlines = 39817
{'air': 0.999998, 'self': 2e-06}
13.839799 seconds elapsed for abscoef; nlines = 39817
{'air': 0.999998, 'self': 2e-06}
14.510198 seconds elapsed for abscoef; nlines = 39817
{'air': 0.999998, 'self': 2e-06}
14.240977 seconds elapsed for abscoef; nlines = 39817
{'air': 0.999998, 'self': 2e-06}
14.504378 seconds elapsed for abscoef; nlines = 39817
{'air': 0.999998, 'self': 2e-06}
14.498769 seconds elapsed for abscoef; nlines = 39817
{'air': 0.999998, 'self': 2e-06}
14.577606 seconds elapsed for abscoef; nlines = 39817
Using /root/.cache/plumax/hitran

CH4
                     Lines parsed: 39817

Data is fetched from http://hitran.org

BEGIN DOWNLOAD: CO2
  65536 bytes written to /root/.cache/plumax/hitran/CO2.data
  65536 bytes written to /root/.cache/plumax/hitran/CO2.data
  65536 bytes written to /root/.cache/plumax/hitran/CO2.data
  65536 bytes written to /root/.cache/plumax/hitran/CO2.data
  65536 bytes written to /root/.cache/plumax/hitran/CO2.data
Header written to /root/.cache/plumax/hitran/CO2.header
END DOWNLOAD
                     Lines parsed: 1652
PROCESSED
Using /root/.cache/plumax/hitran

CH4
                     Lines parsed: 39817
CO2
                     Lines parsed: 1652
{'air': 0.9996, 'self': 0.0004}
0.696691 seconds elapsed for abscoef; nlines = 1652
{'air': 0.9996, 'self': 0.0004}
0.592834 seconds elapsed for abscoef; nlines = 1652
{'air': 0.9996, 'self': 0.0004}
0.471782 seconds elapsed for abscoef; nlines = 1652
{'air': 0.9996, 'self': 0.0004}
0.673076 seconds elapsed for abscoef; nlines = 1652
{'air': 0.9996, 'self': 0.0004}
0.647662 seconds elapsed for abscoef; nlines = 1652
{'air': 0.9996, 'self': 0.0004}
0.472540 seconds elapsed for abscoef; nlines = 1652
{'air': 0.9996, 'self': 0.0004}
0.650782 seconds elapsed for abscoef; nlines = 1652
{'air': 0.9996, 'self': 0.0004}
0.688041 seconds elapsed for abscoef; nlines = 1652
{'air': 0.9996, 'self': 0.0004}
0.499448 seconds elapsed for abscoef; nlines = 1652
Using /root/.cache/plumax/hitran

CH4
                     Lines parsed: 39817
CO2
                     Lines parsed: 1652

Data is fetched from http://hitran.org

BEGIN DOWNLOAD: H2O
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
Header written to /root/.cache/plumax/hitran/H2O.header
END DOWNLOAD
                     Lines parsed: 4100
PROCESSED
Using /root/.cache/plumax/hitran

CH4
                     Lines parsed: 39817
H2O
                     Lines parsed: 4100
CO2
                     Lines parsed: 1652
{'air': 0.99, 'self': 0.01}
1.780204 seconds elapsed for abscoef; nlines = 4100
{'air': 0.99, 'self': 0.01}
1.680048 seconds elapsed for abscoef; nlines = 4100
{'air': 0.99, 'self': 0.01}
1.486082 seconds elapsed for abscoef; nlines = 4100
{'air': 0.99, 'self': 0.01}
1.711456 seconds elapsed for abscoef; nlines = 4100
{'air': 0.99, 'self': 0.01}
1.660397 seconds elapsed for abscoef; nlines = 4100
{'air': 0.99, 'self': 0.01}
1.631283 seconds elapsed for abscoef; nlines = 4100
{'air': 0.99, 'self': 0.01}
1.636269 seconds elapsed for abscoef; nlines = 4100
{'air': 0.99, 'self': 0.01}
1.693258 seconds elapsed for abscoef; nlines = 4100
{'air': 0.99, 'self': 0.01}
1.719812 seconds elapsed for abscoef; nlines = 4100
  CH4: ch4_absorption_lut.nc  (0.47 MB)
  CO2: co2_absorption_lut.nc  (0.44 MB)
  H2O: h2o_absorption_lut.nc  (0.48 MB)

1a. Overlay the three gases on the same axis

At T=260T = 260 K, p=0.6p = 0.6 atm, the three cross-sections have dramatically different magnitudes and structures. Water vapour dominates between the CH4_4 and CO2_2 band heads — this is exactly why operational SWIR retrievals co-retrieve H2_2O as a nuisance parameter.

<Figure size 1100x400 with 1 Axes>

2. Combined LUT — single file, one variable per gas

create_combined_lut collapses the above into one NetCDF with variables CH4_cross_section, CO2_cross_section, H2O_cross_section on a shared (wavenumber, temperature, pressure) grid. The shared wavenumber axis is the intersection of the per-gas ranges — in our case the full 4000–4500 cm⁻¹ window since we narrowed all three gases to it.

Using /root/.cache/plumax/hitran

CH4
                     Lines parsed: 39817
H2O
                     Lines parsed: 4100
CO2
                     Lines parsed: 1652

Data is fetched from http://hitran.org

BEGIN DOWNLOAD: CH4
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
  65536 bytes written to /root/.cache/plumax/hitran/CH4.data
Header written to /root/.cache/plumax/hitran/CH4.header
END DOWNLOAD
                     Lines parsed: 39817
PROCESSED
Using /root/.cache/plumax/hitran

CH4
                     Lines parsed: 39817
H2O
                     Lines parsed: 4100
CO2
                     Lines parsed: 1652
{'air': 0.999998, 'self': 2e-06}
14.614377 seconds elapsed for abscoef; nlines = 39817
{'air': 0.999998, 'self': 2e-06}
14.561487 seconds elapsed for abscoef; nlines = 39817
{'air': 0.999998, 'self': 2e-06}
14.552822 seconds elapsed for abscoef; nlines = 39817
{'air': 0.999998, 'self': 2e-06}
14.875161 seconds elapsed for abscoef; nlines = 39817
{'air': 0.999998, 'self': 2e-06}
14.197351 seconds elapsed for abscoef; nlines = 39817
{'air': 0.999998, 'self': 2e-06}
14.752668 seconds elapsed for abscoef; nlines = 39817
{'air': 0.999998, 'self': 2e-06}
14.621797 seconds elapsed for abscoef; nlines = 39817
{'air': 0.999998, 'self': 2e-06}
14.417776 seconds elapsed for abscoef; nlines = 39817
{'air': 0.999998, 'self': 2e-06}
14.496371 seconds elapsed for abscoef; nlines = 39817
Using /root/.cache/plumax/hitran

CH4
                     Lines parsed: 39817
H2O
                     Lines parsed: 4100
CO2
                     Lines parsed: 1652

Data is fetched from http://hitran.org

BEGIN DOWNLOAD: CO2
  65536 bytes written to /root/.cache/plumax/hitran/CO2.data
  65536 bytes written to /root/.cache/plumax/hitran/CO2.data
  65536 bytes written to /root/.cache/plumax/hitran/CO2.data
  65536 bytes written to /root/.cache/plumax/hitran/CO2.data
  65536 bytes written to /root/.cache/plumax/hitran/CO2.data
Header written to /root/.cache/plumax/hitran/CO2.header
END DOWNLOAD
                     Lines parsed: 1652
PROCESSED
Using /root/.cache/plumax/hitran

CH4
                     Lines parsed: 39817
H2O
                     Lines parsed: 4100
CO2
                     Lines parsed: 1652
{'air': 0.9996, 'self': 0.0004}
0.729973 seconds elapsed for abscoef; nlines = 1652
{'air': 0.9996, 'self': 0.0004}
0.593299 seconds elapsed for abscoef; nlines = 1652
{'air': 0.9996, 'self': 0.0004}
0.494853 seconds elapsed for abscoef; nlines = 1652
{'air': 0.9996, 'self': 0.0004}
0.683780 seconds elapsed for abscoef; nlines = 1652
{'air': 0.9996, 'self': 0.0004}
0.680737 seconds elapsed for abscoef; nlines = 1652
{'air': 0.9996, 'self': 0.0004}
0.495262 seconds elapsed for abscoef; nlines = 1652
{'air': 0.9996, 'self': 0.0004}
0.747975 seconds elapsed for abscoef; nlines = 1652
{'air': 0.9996, 'self': 0.0004}
0.768098 seconds elapsed for abscoef; nlines = 1652
{'air': 0.9996, 'self': 0.0004}
0.531820 seconds elapsed for abscoef; nlines = 1652
Using /root/.cache/plumax/hitran

CH4
                     Lines parsed: 39817
H2O
                     Lines parsed: 4100
CO2
                     Lines parsed: 1652

Data is fetched from http://hitran.org

BEGIN DOWNLOAD: H2O
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
  65536 bytes written to /root/.cache/plumax/hitran/H2O.data
Header written to /root/.cache/plumax/hitran/H2O.header
END DOWNLOAD
                     Lines parsed: 4100
PROCESSED
Using /root/.cache/plumax/hitran

CH4
                     Lines parsed: 39817
H2O
                     Lines parsed: 4100
CO2
                     Lines parsed: 1652
{'air': 0.99, 'self': 0.01}
1.728799 seconds elapsed for abscoef; nlines = 4100
{'air': 0.99, 'self': 0.01}
1.765727 seconds elapsed for abscoef; nlines = 4100
{'air': 0.99, 'self': 0.01}
1.626431 seconds elapsed for abscoef; nlines = 4100
{'air': 0.99, 'self': 0.01}
1.859660 seconds elapsed for abscoef; nlines = 4100
{'air': 0.99, 'self': 0.01}
1.752733 seconds elapsed for abscoef; nlines = 4100
{'air': 0.99, 'self': 0.01}
1.829859 seconds elapsed for abscoef; nlines = 4100
{'air': 0.99, 'self': 0.01}
1.862430 seconds elapsed for abscoef; nlines = 4100
{'air': 0.99, 'self': 0.01}
1.700506 seconds elapsed for abscoef; nlines = 4100
{'air': 0.99, 'self': 0.01}
1.746088 seconds elapsed for abscoef; nlines = 4100
<xarray.Dataset> Size: 1MB
Dimensions:            (wavenumber: 10000, temperature: 3, pressure: 3)
Coordinates:
  * wavenumber         (wavenumber) float64 80kB 4e+03 4e+03 ... 4.5e+03 4.5e+03
    wavelength         (wavenumber) float64 80kB ...
  * temperature        (temperature) float64 24B 220.0 260.0 300.0
  * pressure           (pressure) float64 24B 0.3 0.6 1.0
Data variables:
    CH4_cross_section  (wavenumber, temperature, pressure) float32 360kB ...
    CO2_cross_section  (wavenumber, temperature, pressure) float32 360kB ...
    H2O_cross_section  (wavenumber, temperature, pressure) float32 360kB ...
Attributes:
    title:        Combined Atmospheric Absorption LUT
    gases:        CH4, CO2, H2O
    line_shape:   Voigt profile
    conventions:  CF-1.8

2a. Effective opacity by gas

A useful diagnostic: weight each cross-section by a typical column density of the gas (Ngas=VMR⋅NairN_{\mathrm{gas}} = \mathrm{VMR} \cdot N_{\mathrm{air}}) to see which gas actually dominates the optical depth at a representative atmospheric state.

We use Loschmidt’s number at the surface (N0=2.69×1019N_0 = 2.69 \times 10^{19} molecules/cm³) scaled to T=260T = 260 K, p=0.6p = 0.6 atm, and the dry-air VMRs from our config.

<Figure size 1100x400 with 1 Axes>

Reading the plot. Even though CH4_4 has 200× larger σ\sigma than CO2_2 at its peaks, CO2_2’s 200× higher VMR closes most of the gap. H2_2O’s ~10% VMR swamps both at many wavenumbers — any methane retrieval in this window has to simultaneously fit a water-vapour column to avoid biased ε\varepsilon.

This is the interference-corrected retrieval picture: the matched filter in Differential Beer-Lambert plume retrieval from the LUT deals only with CH4_4 for clarity, but the LUT infrastructure is already set up to handle the joint fit.

3. Summary

  • create_multi_gas_luts = one NetCDF per species, useful for independently-retrieved gases.

  • create_combined_lut = one NetCDF, one variable per species, useful for joint fits in a shared band.

  • Column-weighted α(ν)=σ(ν)⋅Ngas\alpha(\nu) = \sigma(\nu) \cdot N_{\mathrm{gas}} shows which gas actually drives optical depth at representative VMRs — the right diagnostic for planning which species to include in a joint retrieval.