This page documents the application of the Complete Data Fusion (CDF) algorithm to IASI / EUMETSAT Level 2 atmospheric sounding products. EUMETSAT distributes IASI Level 2 data in two complementary formats: an EPS netCDF format covering temperature (T), water vapour (H2O) and ozone (O3) profiles encoded in Principal Component (PC) space, and a FORLI-native binary format (EPS CODA, .nat) covering ozone (O3), carbon monoxide (CO) and nitric acid (HNO3) retrieved by the FORLI algorithm. Both formats use the same underlying PC-compressed representation, and the CDF tools reconstruct full profile-space covariance matrices and averaging kernels from the stored eigenvectors and eigenvalues.
1. Overview
| Provider | EUMETSAT — European Organisation for the Exploitation of Meteorological Satellites, Darmstadt, Germany |
| Instrument | IASI (Infrared Atmospheric Sounding Interferometer) — nadir-viewing Fourier-transform spectrometer, spectral range 645–2760 cm−1 |
| Platform | MetOp-A / MetOp-B / MetOp-C (EUMETSAT/ESA) — sun-synchronous polar orbit, ≈ 817 km altitude |
| Product | IASI Level 2 — atmospheric temperature, humidity and trace gas profiles (IASSND02) |
| Retrieval algorithm | EPS OEM (Optimal Estimation Method, PC-compressed) for T, H2O, O3 · FORLI (Fast Optimal Retrievals on Layers for IASI) for O3, CO, HNO3 |
| Tested constituents | T · H2O · O3 (EPS netCDF) · O3 · CO · HNO3 (FORLI-native) |
| File formats | NetCDF-4 classic (CF-1.7) for EPS products · EPS CODA binary (.nat) for FORLI products |
| CDF readers | IASInetcdfReader (cdftools.readers.iasi_netcdf_reader) · IASIepsFORLIReader (cdftools.readers.iasiforli_epscoda_reader) |
| Vertical levels | 101 levels: T (nlt), H2O (nlq), O3-EPS (nlo) · 41 layers: O3-FORLI, HNO3 (nl_o3, nl_hno3) · 19 layers: CO (nl_co) |
| PC dimensions (max) | T: 28 · H2O: 18 · O3-EPS: 10 · O3/HNO3-FORLI: 21 · CO-FORLI: 10 |
| Test orbit | MetOp-B, orbit 47134, 2021-10-18 08:38–10:20 UTC |
| CDF status | Tested — CDF(2022) passes for all constituents; CDF(2015) not fully negligible for O3-FORLI, CO, HNO3 (see §§7–9); T and H2O fail initially in profile space, pass after Gram–Schmidt expansion |
2. FAIR References
IASI Level 2 data are publicly distributed by EUMETSAT through the EUMETSAT Data Store. Access requires registration. Metadata verified on 2026-04-11 against the global attributes of the test file.
| Product title | IASI Level 2 — Temperature and Humidity Profiles, Cloud and Surface Properties, and Trace Gas Profiles |
| Product ID | EO:EUM:DAT:METOP:IASSND02 |
| Data access | EUMETSAT Data Store — search for product ID EO:EUM:DAT:METOP:IASSND02 |
| Institution | EUMETSAT, Darmstadt, Germany |
| Product version (test file) | Native format version 11.0 · netCDF format version 3.0 · Processor version 6.5 |
| NetCDF conventions | CF-1.7, Unidata Dataset Discovery v1.0 |
| License | Copyright EUMETSAT. Data available under EUMETSAT Data Policy (free access after registration). |
| Product documentation | Product Generation Specification (DMT-743506) · Product User Manuals for CO (Nov 2021) and HNO3 (Apr 2022) — available from the EUMETSAT Data Store product page |
| Contact | ops@eumetsat.int |
3. Dataset Description
EUMETSAT processes IASI spectra in near-real time and distributes the Level 2 sounding products globally. The product suite covers the full atmospheric column from surface to the stratosphere and includes two distinct sub-systems:
EPS netCDF format — T, H2O, O3
Temperature, water vapour and ozone profiles are retrieved by an Optimal Estimation Method (OEM) operating in Principal Component (PC) space. For each constituent the retrieval is compressed into a small number of PC coefficients (10–28 components depending on the species) which compactly encode both the state vector and the error covariance. The netCDF file stores:
- The retrieved and a-priori profiles on 101 pressure levels in physical units
- The error data as a packed vector in PC space (
ozone_error,temperature_error,water_vapour_error) - Quality flags:
flag_itconv(OEM convergence),flag_retcheck(retrieval check),flag_iasibad(IASI measurement quality)
The CDF tools reconstruct the full profile-space covariance matrix and averaging kernel by expanding from PC space using the eigenvectors and eigenvalues stored in an auxiliary file (COF_STV). The CDF test is performed independently in PC space (native representation) and in profile space (expanded), and also with the complete vertical basis for H2O and O3.
FORLI-native format — O3, CO, HNO3
Ozone, carbon monoxide and nitric acid are retrieved by the FORLI (Fast Optimal Retrievals on Layers for IASI) algorithm, which also uses a PC-compressed optimal estimation scheme. The data are distributed in the EPS native binary format (CODA, .nat files). For each retrieval the file stores:
- The PC-space state vector (
{spname}_X_{spname}) and a priori ({spname}_CP_{spname}_A) - The eigenvalues (
{spname}_H_EIGENVALUES) and eigenvectors ({spname}_H_EIGENVECTORS) of the Fisher information matrix - The number of significant PC components (
{spname}_NPCA) and the layer height grid (FORLI_LAYER_HEIGHTS_{spname}) - A quality flag (
{spname}_QFLAG: 2 = full quality, 1 = partial quality)
The CDF reader (IASIepsFORLIReader) reconstructs the Fisher matrix H = VΛVᵀ, inverts it to obtain the noise covariance in PC space, and then expands everything to profile space using the stored eigenvectors. The a priori covariance Sa is loaded from a species-specific source (a relative covariance matrix for CO stored in the reader; a pickle file for O3 and HNO3).
4. Temperature (T) — EPS netCDF
4.1 State Vector and Vertical Grid
The temperature state vector contains 101 levels from the surface to the top of atmosphere (TOA). Pressure levels are stored in the netCDF variable pressure_levels_temp (Pa, common to all products in the file). The CDF test is performed directly in physical units (Kelvin) with no logarithmic transformation.
Principal Component space: up to 28 PCs (dimension npct); the error covariance is stored as a packed triangular vector of length 406 (nerrt = npct × (npct+1)/2 = 28×29/2). A 5-sigma outlier filter is applied in PC space before the CDF test.


4.2 Test File
| Filename | W_XX-EUMETSAT-Darmstadt,HYPERSPECT+SOUNDING,METOPB+IASI_C_EUMP_20211018083854_47134_eps_o_l2.nc |
| Sensing time | 2021-10-18 08:38:54 – 10:20:53 UTC |
| Platform / orbit | MetOp-B (M01), orbit 47134 |
| Grid size | 765 scan lines × 120 pixels across track (91,800 total IFOVs per half-orbit) |
| CDF test script | scripts/05_PNRR_filetest/02_IASI_T_Netcdf.py |


4.3 Completeness Test Results
Products passing the completeness filter: flag_itconv == 5 (OEM converged), flag_retcheck == 0 (retrieval check OK), flag_iasibad == 0 (IASI data quality OK), and 5-sigma outlier filter in PC space. Completeness test: all 28 PC coefficients, all 101 profile levels, and all averaging kernel rows present and finite for each passing product.
| Test | Result |
|---|---|
| Products passing quality filter | Subset of the test half-orbit after OEM convergence + IASI quality + 5σ filter |
| State vector completeness | PASS — T profile (101 levels) complete for all passing products |
| Covariance matrix completeness | PASS — Stot, Sε, Sa, A reconstructed and positive definite |
| Total error maps | PASS — see Fig. 5 (Stot spatial distribution) |

4.4 Auto-consistency Test Results
The auto-consistency test is performed both in the native PC space (28-dimensional) and in profile space (expanded to 101 levels). In profile space the initial test fails because \mathbf{S}_x has rank 28 and \mathbf{S}_{ai}^{-1} is not well-defined; passing results are obtained after applying the Gram–Schmidt orthonormal extension procedure.
PC space
| # | IASI-T principal components auto-consistency test results | \max(|\Delta x|)\% | (|\Delta\mathrm{DOFs}|)\% |
|---|---|---|---|
| 1 | CDF(2022) total error VCM inversion | <0.000001 | <0.000001 |
| 2 | CDF(2015) noise error VCM inversion | <0.000001 | <0.000001 |


Profile space — initial test
Both formulations fail. The profile vector has 98 elements (101-level grid with 3 boundary conditions). The failure is caused by \mathbf{S}_{ai}^{-1} in the CDF equations, since \mathbf{S}_x (rank 28) is not invertible in the 98-dimensional profile space.
| # | IASI-T profiles auto-consistency test results | \max(|\Delta x|)\% | (|\Delta\mathrm{DOFs}|)\% |
|---|---|---|---|
| 1 | CDF(2022) total error VCM inversion | 1133.888985 | 65.286803 |
| 2 | CDF(2015) noise error VCM inversion | 25189.233417 | 150.506404 |


Profile space — complete vertical basis, Gram–Schmidt expansion
A new \mathbf{S}_{ai} is constructed via the Gram–Schmidt procedure: the 98×98 orthonormal basis \mathbf{V}_n extends the 28-column eigenvector basis \mathbf{V}, and the remaining 70 diagonal entries of the expanded covariance are set six orders of magnitude below the smallest element of \mathbf{S}_x (eq. 54). The averaging kernel is then expanded from PC space to profile space as \mathbf{A}_i = \mathbf{V}_n \mathbf{A}_{i,\mathrm{pc}} \mathbf{V}_n^T (eq. 55), and \mathbf{S}_i is derived from eq. 48 using this expanded AK. Both steps together are necessary: expanding only \mathbf{S}_{ai} without expanding the AK leaves a CDF(2015) error of ~51%, which is not negligible. With both expansions the test passes for both formulations.
| # | IASI-T profiles auto-consistency test results (Gram–Schmidt) | \max(|\Delta x|)\% | (|\Delta\mathrm{DOFs}|)\% |
|---|---|---|---|
| 1 | CDF(2022) total error VCM inversion | 0.000006 | <0.000001 |
| 2 | CDF(2015) noise error VCM inversion | 0.000054 | 0.000068 |
4.5 CDF Variables Mapping — Temperature
| CDF quantity | Reader attribute | netCDF variable | Units / notes |
|---|---|---|---|
| State vector x | p.t |
atmospheric_temperature |
K; scale_factor=0.01 |
| A priori xa | p.t_apriori |
fg_atmospheric_temperature |
K (first-guess / background) |
| Pressure grid | p.pressure |
pressure_levels_temp |
Pa (file) → hPa (reader); 101 levels; scale_factor=0.01 |
| Noise error — PC space | — | temperature_error |
Packed triangular vector in PC space (length 406); stored as packed int32→float32 |
| Total covariance Stot | p.vcm_tot |
— | Reconstructed via V·Sε,pc·Vᵀ expansion to profile space (K²) |
| Noise covariance Sε | p.vcm |
— | Derived: Sε = Stot − A·Sa·Aᵀ |
| A priori covariance Sa | p.vcm_a |
— | Reconstructed from auxiliary eigenvectors/eigenvalues (COF_STV file) |
| Averaging kernel A | p.ak |
— | Reconstructed in PC space, expanded to 101×101 profile-space matrix |
| Quality filter | — | flag_itconv, flag_retcheck, flag_iasibad |
Accepted if itconv=5 AND retcheck=0 AND iasibad=0; additionally 5σ filter in PC space |
5. Water Vapour (H2O) — EPS netCDF
5.1 State Vector and Vertical Grid
The water vapour state vector contains 101 levels (dimension nlq). The retrieval uses 18 PC components (npcw); the noise error is stored as a packed triangular vector of length 171 (nerrw). A 5-sigma outlier filter is applied in PC space. The CDF test is performed in PC space, profile space, and profile space with the complete vertical basis.

5.2 Test File
Same EPS netCDF half-orbit file as the temperature product (MetOp-B, orbit 47134, 2021-10-18). CDF test script: 02_IASI_H2O_Netcdf.py (productname='IASI-H2O', iproduct=10).


5.3 Completeness Test Results
| State vector completeness | PASS |
| Covariance / AK completeness | PASS — Stot, Sε, Sa, A all finite and positive definite |
5.4 Auto-consistency Test Results
Same structure as temperature: test in PC space (passes), initial profile space test (fails), and profile space after Gram–Schmidt expansion (passes). The state vector principal components refer to the natural logarithm of the ratio of the retrieved and a priori profiles.
PC space
| # | IASI-H2O principal components auto-consistency test results | \max(|\Delta x|)\% | (|\Delta\mathrm{DOFs}|)\% |
|---|---|---|---|
| 1 | CDF(2022) total error VCM inversion | <0.000001 | <0.000001 |
| 2 | CDF(2015) noise error VCM inversion | <0.000001 | <0.000001 |


Profile space — initial test
Both formulations fail for the same reason as temperature: \mathbf{S}_x has rank 18 and \mathbf{S}_{ai}^{-1} is not well-defined in the full profile space.
| # | IASI-H2O profiles auto-consistency test results | \max(|\Delta x|)\% | (|\Delta\mathrm{DOFs}|)\% |
|---|---|---|---|
| 1 | CDF(2022) total error VCM inversion | 200.000000 | 24.807156 |
| 2 | CDF(2015) noise error VCM inversion | 200.564100 | 99.588141 |


Profile space — complete vertical basis, Gram–Schmidt expansion
After the Gram–Schmidt expansion of \mathbf{S}_{ai} (analogous to the T case, using diagonal matrices \Lambda_{x_a} and \Lambda_x for the logarithmic H2O representation), the test is repeated.
| # | IASI-H2O profiles auto-consistency test results (Gram–Schmidt) | \max(|\Delta x|)\% | (|\Delta\mathrm{DOFs}|)\% |
|---|---|---|---|
| 1 | CDF(2022) total error VCM inversion | 0.002466 | <0.000001 |
| 2 | CDF(2015) noise error VCM inversion | 10.883059 | 0.000206 |


5.5 CDF Variables Mapping — Water Vapour
| CDF quantity | Reader attribute | netCDF variable | Units / notes |
|---|---|---|---|
| State vector x | p.w |
atmospheric_water_vapor |
kg kg⁻¹ (scale_factor=1e-7) → converted to ppmv by reader |
| A priori xa | p.w_apriori |
fg_atmospheric_water_vapor |
kg kg⁻¹ (first-guess) |
| Pressure grid | p.pressure |
pressure_levels_humidity |
Pa → hPa; 101 levels |
| Noise error — PC space | — | water_vapour_error |
Packed triangular vector, length 171, PC space |
| Total / noise / a priori covariances | p.vcm_tot, p.vcm, p.vcm_a |
— | Reconstructed via eigenvector expansion (as for T) |
| Averaging kernel A | p.ak |
— | Reconstructed in PC space, expanded to 101×101 |
6. Ozone (O3) — EPS netCDF Format
6.1 State Vector and Vertical Grid
The EPS netCDF ozone product contains 101 levels (dimension nlo), encoded in 10 PC components (npco). The noise error vector has length 55 (nerro). The CDF test uses rcond=1e-7 for the CDF(2015) inversion. Tests are performed in PC space, profile space, and with the complete vertical basis.

6.2 Test File
Same EPS netCDF half-orbit file as T and H2O (MetOp-B, orbit 47134, 2021-10-18). CDF test script: 02_IASI_O3_Netcdf.py (productname='IASI-EPS-O3', iproduct=10).


6.3 Completeness Test Results
| State vector completeness | PASS |
| Covariance / AK completeness | PASS |
6.4 Auto-consistency Test Results
The O3-EPS product uses 10 PC components. The auto-consistency test is confirmed in PC space for both CDF formulations. In profile space the test fails in both the initial and the Gram–Schmidt expanded configurations; the Gram–Schmidt procedure here is applied directly to the profile space (unlike T and H2O where it extends the eigenvector basis). CDF(2022) in the GS-expanded profile space is numerically small but CDF(2015) gives ~6.4%, which is not negligible.
PC space
| # | IASI-O3-EPS PC space auto-consistency test results | \max(|\Delta x|)\% | (|\Delta\mathrm{DOFs}|)\% |
|---|---|---|---|
| 1 | CDF(2022) total error VCM inversion | <0.000001 | <0.000001 |
| 2 | CDF(2015) noise error VCM inversion | <0.000001 | <0.000001 |


Profile space — initial test
Both formulations fail: \mathbf{S}_{ai}^{-1} is not well-defined in the full profile space because \mathbf{S}_x is rank-deficient.
| # | IASI-O3-EPS profile space auto-consistency test results | \max(|\Delta x|)\% | (|\Delta\mathrm{DOFs}|)\% |
|---|---|---|---|
| 1 | CDF(2022) total error VCM inversion | 200.000000 | 110.291038 |
| 2 | CDF(2015) noise error VCM inversion | 13513.640678 | 51.114552 |


Profile space — complete vertical basis, Gram–Schmidt expansion
| # | IASI-O3-EPS profiles auto-consistency test results | \max(|\Delta x|)\% | (|\Delta\mathrm{DOFs}|)\% |
|---|---|---|---|
| 1 | CDF(2022) total error VCM inversion | 0.007583 | 0.000001 |
| 2 | CDF(2015) noise error VCM inversion | 6.444653 | 0.004407 |


6.5 CDF Variables Mapping — O3 (EPS netCDF)
| CDF quantity | Reader attribute | netCDF variable | Units / notes |
|---|---|---|---|
| State vector x | p.o3 |
atmospheric_ozone |
kg m⁻² (scale_factor=1e-8) → ppmv (reader conversion) |
| A priori xa | p.o3_apriori |
fg_atmospheric_ozone |
kg m⁻² (scale_factor=1e-8) |
| Pressure grid | p.pressure |
pressure_levels_ozone |
Pa → hPa; 101 levels; scale_factor=0.01 |
| Noise error — PC space | — | ozone_error |
Packed triangular vector, length 55, PC space |
| Total / noise / a priori covariances | p.vcm_tot, p.vcm, p.vcm_a |
— | Reconstructed via eigenvector expansion; rcond=1e-7 (CDF2015) |
| Averaging kernel A | p.ak |
— | Reconstructed in PC space, expanded to 101×101 |
7. Ozone (O3) — FORLI-native Format
7.1 State Vector and Vertical Grid
The FORLI ozone product uses 41 atmospheric layers (dimension nl_o3) from surface to 60 km TOA. Layer heights are stored in the EPS CODA field GIADR/FORLI_LAYER_HEIGHTS_o3 (m); the reader converts them to geometric altitude (km) and then to pressure (hPa) via a standard atmosphere. Up to 21 PC components are used (neva_o3 = 21); the reader reconstructs profile-space quantities by inverting the Fisher information matrix H = VΛVᵀ. The CDF test uses rcond=1e-12.

7.2 Test File
| Filename | IASI_SND_02_M01_20211018083854Z_20211018102053Z_N_O_20211018093752Z.nat |
| Sensing time | 2021-10-18 08:38:54 – 10:20:53 UTC (same orbit as EPS netCDF above) |
| Format | EPS native CODA binary — read via IASIepsFORLIReader (CODA library required) |
| CDF test script | scripts/05_PNRR_filetest/04_IASI-O3.py (productname='IASI-FORLI-O3') |


7.3 Completeness Test Results
Quality filter: o3_QFLAG ∈ {1, 2} AND o3_NPCA > 0.
| State vector completeness | PASS |
| Covariance / AK completeness | PASS — Stot, Sε, Sa, A positive definite after Fisher matrix inversion |
7.4 Auto-consistency Test Results
The FORLI-native O3 product has 6 PCs; the profile space is treated as the state vector directly (41 layers), with full-rank 41×41 covariance (no Gram–Schmidt expansion needed). In the CDF(2015) pseudo-inversion of \mathbf{S}_{ni}, eigenvalues smaller than twelve orders of magnitude below the largest are discarded. CDF(2022) passes; CDF(2015) differences are little but not completely negligible.
| # | IASI-EUMETSAT O3-FORLI auto-consistency test results | \max(|\Delta x|)\% | (|\Delta\mathrm{DOFs}|)\% |
|---|---|---|---|
| 1 | CDF(2022) total error VCM inversion | <0.000001 | <0.000001 |
| 2 | CDF(2015) noise error VCM inversion | 3.708312 | <0.000001 |


7.5 CDF Variables Mapping — O3 (FORLI-native)
| CDF quantity | Reader attribute | CODA path | Notes |
|---|---|---|---|
| State vector x | p.o3 |
MDR/o3_CP_o3_A × o3_X_o3 |
a priori × retrieved ratio (PC space); expanded to profile space |
| A priori xa | p.o3_apriori |
MDR/o3_CP_o3_A |
PC-space a priori profile |
| Layer heights / altitude | p.z (km) |
GIADR/FORLI_LAYER_HEIGHTS_o3 |
Metres → km; 41 layers + TOA at 60 km |
| Pressure grid | p.pressure (hPa) |
— | Derived from z via z2p() standard atmosphere |
| No. of PC components | p.npc |
MDR/o3_NPCA |
Per-pixel; up to 21 |
| Eigenvalues | p.eigvals |
MDR/o3_H_EIGENVALUES |
Eigenvalues Λ of Fisher matrix H |
| Eigenvectors | — | MDR/o3_H_EIGENVECTORS |
V (npc×nlayers); H = VΛVᵀ |
| A priori covariance Sa | p.vcm_a |
— | Loaded from pickle file (Sa_o3.pkl) |
| Total / noise covariance | p.vcm_tot, p.vcm |
— | Reconstructed from H and Sa |
| Quality flag | — | MDR/o3_QFLAG |
Accepted: 1 (partial) or 2 (full) AND NPCA > 0 |
8. Carbon Monoxide (CO) — FORLI-native Format
8.1 State Vector and Vertical Grid
The FORLI CO product uses 19 atmospheric layers (dimension nl_co) from surface to 60 km TOA. Up to 10 PC components are used (neva_co = 10). The a priori covariance Sa is a 19×19 relative covariance matrix hardcoded in the reader for CO. The CDF test uses rcond=1e-12.

8.2 Test File
Same FORLI .nat file as O3-FORLI (MetOp-B, orbit 47134, 2021-10-18). CDF test script: 05_IASI-CO.py (productname='IASI-FORLI-CO', spname='co').


8.3 Completeness Test Results
Quality filter: co_QFLAG ∈ {1, 2} AND co_NPCA > 0.
| State vector completeness | PASS |
| Covariance / AK completeness | PASS |
8.4 Auto-consistency Test Results
Same test file and quality flags as O3-FORLI. State vector: 3 PCs; profile treated directly in profile space (19 layers). In the CDF(2015) pseudo-inversion, eigenvalues smaller than twelve orders of magnitude below the largest are discarded. CDF(2022) passes; CDF(2015) differences are little but not completely negligible.
| # | IASI-EUMETSAT CO auto-consistency test results | \max(|\Delta x|)\% | (|\Delta\mathrm{DOFs}|)\% |
|---|---|---|---|
| 1 | CDF(2022) total error VCM inversion | <0.000001 | <0.000001 |
| 2 | CDF(2015) noise error VCM inversion | 0.894201 | <0.000001 |


8.5 CDF Variables Mapping — CO (FORLI-native)
| CDF quantity | Reader attribute | CODA path | Notes |
|---|---|---|---|
| State vector x | p.co |
MDR/co_CP_co_A × co_X_co |
19-layer CO profile in profile space |
| A priori xa | p.co_apriori |
MDR/co_CP_co_A |
|
| Layer heights / pressure | p.z, p.pressure |
GIADR/FORLI_LAYER_HEIGHTS_co |
19 layers + TOA at 60 km; pressure derived via z2p() |
| No. of PC components | p.npc |
MDR/co_NPCA |
Up to 10 |
| Fisher matrix eigenvalues / vectors | p.eigvals |
MDR/co_H_EIGENVALUES, co_H_EIGENVECTORS |
|
| A priori covariance Sa | p.vcm_a |
— | Hardcoded 19×19 relative covariance matrix in reader |
| Total / noise covariance, AK | p.vcm_tot, p.vcm, p.ak |
— | Reconstructed from H and Sa; rcond=1e-12 |
9. Nitric Acid (HNO3) — FORLI-native Format
9.1 State Vector and Vertical Grid
The FORLI HNO3 product uses 41 atmospheric layers (dimension nl_hno3), the same layer count as O3-FORLI. Up to 21 PC components (neva_hno3 = 21). The a priori covariance Sa is loaded from a species-specific pickle file. The CDF test uses rcond=1e-12.

9.2 Test File
Same FORLI .nat file as O3-FORLI and CO (MetOp-B, orbit 47134, 2021-10-18). CDF test script: 06_IASI-HNO3.py (productname='IASI-FORLI-HNO3', spname='hno3').


9.3 Completeness Test Results
Quality filter: hno3_QFLAG ∈ {1, 2} AND hno3_NPCA > 0.
| State vector completeness | PASS |
| Covariance / AK completeness | PASS |
9.4 Auto-consistency Test Results
Same test file as O3-FORLI and CO. State vector: 2 PCs; profile treated in profile space (41 layers, partial columns in mol/cm²). CDF(2015) pseudo-inversion: eigenvalues smaller than twelve orders of magnitude below the largest are discarded. CDF(2022) passes; CDF(2015) differences are not negligible.
| # | IASI-EUMETSAT HNO3 auto-consistency test results | \max(|\Delta x|)\% | (|\Delta\mathrm{DOFs}|)\% |
|---|---|---|---|
| 1 | CDF(2022) total error VCM inversion | <0.000001 | <0.000001 |
| 2 | CDF(2015) noise error VCM inversion | 3.287208 | <0.000001 |


9.5 CDF Variables Mapping — HNO3 (FORLI-native)
| CDF quantity | Reader attribute | CODA path | Notes |
|---|---|---|---|
| State vector x | p.hno3 |
MDR/hno3_CP_hno3_A × hno3_X_hno3 |
41-layer HNO3 profile in profile space |
| A priori xa | p.hno3_apriori |
MDR/hno3_CP_hno3_A |
|
| Layer heights / pressure | p.z, p.pressure |
GIADR/FORLI_LAYER_HEIGHTS_hno3 |
41 layers + TOA at 60 km |
| No. of PC components | p.npc |
MDR/hno3_NPCA |
Up to 21 |
| Fisher matrix eigenvalues / vectors | p.eigvals |
MDR/hno3_H_EIGENVALUES, hno3_H_EIGENVECTORS |
|
| A priori covariance Sa | p.vcm_a |
— | Loaded from pickle file (Sa_hno3.pkl) |
| Total / noise covariance, AK | p.vcm_tot, p.vcm, p.ak |
— | Reconstructed from H and Sa; rcond=1e-12 |
10. Notes and Open Issues
- Two incompatible file formats from the same provider. The EPS netCDF (
_eps_o_l2.nc) and FORLI-native (.nat) files are generated by the same processing centre and cover the same orbit, but require completely different readers. TheIASInetcdfReaderuses the standardnetCDF4Python library; theIASIepsFORLIReaderrequires the CODA library and the CODA definition files for the EPS product format. - O3 tested in both formats. Ozone appears in both the EPS netCDF format (101 levels, 10 PCs) and the FORLI-native format (41 layers, up to 21 PCs). The two products are independent: they use different vertical grids, different error representations, and the EPS netCDF version is a global OEM retrieval while the FORLI version uses the dedicated FORLI algorithm. The CDF auto-consistency results differ accordingly.
- PC-space vs. profile-space CDF tests. For EPS netCDF products (T, H2O, O3), the CDF test can be run in the native PC space or expanded to profile space. Running in PC space is computationally lighter and avoids the rank deficiency introduced by the PC truncation. Results in the two spaces are shown side by side in sections 4–6.
- Complete basis expansion. For H2O and O3-EPS, an additional test is performed with the complete vertical basis (profile space without PC truncation). This is computationally more demanding but produces a more conservative error estimate. The complete-basis figures (Figs. 13, 19) should be compared with the standard profile-space figures (Figs. 12, 18).
- Sa synthesis for temperature. The T product’s a priori covariance was investigated in three variants (V1/V2/V3) during development to assess sensitivity to the choice of Sa. Only the standard variant (V1) is shown here. Additional synthesis results are available in the local results directory.
- CODA dependency. Reading FORLI-native files requires the CODA library (
import coda) with the EPS product type definitions installed. This is a non-standard dependency not available in the standard Python environment. Users wishing to run the CDF tools on FORLI data must install CODA separately. - EPS netCDF ozone units. The netCDF variable
atmospheric_ozonehas declared unitskg.m⁻²and scale_factor 1e-8. The reader applies a molecular-weight conversion (×28.97/48×10⁶) to obtain ppmv. This is consistent with the expected ozone mixing ratio range but should be verified against the Product Generation Specification (DMT-743506) when precise unit traceability is required.
