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.

The absorption-shape test — does a ratio spectrum have a gas's shape?

The absorption-shape test

A matched filter scores each pixel by one projection of its spectrum onto methane’s target, so anything that removes light under methane’s 2.3 μm band scores: carbonate and clay soils, salt pans, dark water, shadows, striping. A segmentation network on the matched-filter map learns plume shapes, which a plume-shaped confounder also has. The absorption-shape test (Xiang et al. [1]; Růžička et al. [2]) goes back to the radiances. Given two sets of pixels, the in-pixels whose absorption is tested and the out-pixels they are compared with, it pairs each in-pixel with an out-pixel of the same surface, divides them, and asks whether the ratio has the shape of the gas’s transmittance. It returns the fitted column ΔX^\widehat{\Delta X} and the misfit DnormD_{\text{norm}}: a similarity between a ratio spectrum and a transmittance, another retrieval product beside the matched filter’s column. EMIT’s daily methane digest alerts without review when DnormD_{\text{norm}} is below 0.3.

The test knows nothing of plumes. Which pixels form the two sets, and what to decide from the scores, is the caller’s: plumax.vetting takes a candidate’s strongest pixels as the in-pixels and a background pool around it as the out-pixels.

The test is more selective than the matched filter because it tests the shape of the absorption across a window of bands, where the matched filter tests one projection. That projection is the matched filter’s α^(x)=(x−μ)⊤Σ−1t / t⊤Σ−1t\hat\alpha(x) = (x - \mu)^\top \Sigma^{-1} t \,/\, t^\top \Sigma^{-1} t. A surface whose spectrum departs from the background mean by dd scores d⊤Σ−1t / t⊤Σ−1td^\top \Sigma^{-1} t \,/\, t^\top \Sigma^{-1} t, whatever the shape of dd, so a carbonate’s dip that overlaps methane’s band scores positive. Many spectra with different shapes give the same score, because the filter keeps one number from the BB bands it sees. The absorption-shape test keeps the shape: it builds the in-pixels’ absorption spectrum band by band and asks whether all of it agrees with methane.

1. The ratio of a pixel pair

Write Lin(λ)L_{\text{in}}(\lambda) for the radiance of an in-pixel, under the gas’s enhancement, and Lout(λ)L_{\text{out}}(\lambda) for an out-pixel, ρ\rho and ρ′\rho' for their surface reflectances, F0F_0 for the solar irradiance, θs\theta_s for the solar zenith angle, TatmT_{\text{atm}} for the vertical one-way transmittance of everything but the enhancement, mm for the two-way air mass and ΔX\Delta X for the column enhancement in mol/m². Columns are also quoted in ppm·m, as EMIT quotes them: 1 ppm·m is 10−6 nair×110^{-6}\, n_{\text{air}} \times 1 m, with nair=p/(kBTNA)n_{\text{air}} = p / (k_B T N_A) the molar density of air where the enhancement is, which is 4.03×10−54.03 \times 10^{-5} mol/m² in the bottom layer of the US standard atmosphere (≈954.8 hPa and 285.0 K, ~500 m), where the windows’ presets take it. Other conventions give other constants: 4.23×10−54.23 \times 10^{-5} at the surface (1013.25 hPa, 288.15 K) and 4.46×10−54.46 \times 10^{-5} at STP (273.15 K). For a Lambertian surface,

Lin(λ)=F0cos⁡θsπρ(λ)Tatm(λ)mE(λ;ΔX)+ϵ,Lout(λ)=F0cos⁡θsπρ′(λ)Tatm(λ)m+ϵ′,L_{\text{in}}(\lambda) = \frac{F_0 \cos\theta_s}{\pi} \rho(\lambda) T_{\text{atm}}(\lambda)^{m} E(\lambda; \Delta X) + \epsilon, \qquad L_{\text{out}}(\lambda) = \frac{F_0 \cos\theta_s}{\pi} \rho'(\lambda) T_{\text{atm}}(\lambda)^{m} + \epsilon',

with E(λ;ΔX)E(\lambda; \Delta X) the band transmittance of the enhancement along the two-way path and ϵ,ϵ′\epsilon, \epsilon' sensor noise. Averaged over NN pairs, the ratio keeps only the enhancement and what the two surfaces do not share:

R(λ)=1N∑nLin,n(λ)1N∑nLout,n(λ)≈η(λ)E(λ;ΔX),η=ρˉ/ρˉ′.R(\lambda) = \frac{\frac{1}{N} \sum_n L_{\text{in}, n}(\lambda)}{\frac{1}{N} \sum_n L_{\text{out}, n}(\lambda)} \approx \eta(\lambda) E(\lambda; \Delta X), \qquad \eta = \bar\rho / \bar\rho' .

Pairing exists to make η\eta smooth: an in-pixel matched to an out-pixel of the same material makes η\eta close to one and slowly varying in λ\lambda.

Three assumptions sit inside the ≈\approx: the two pixels of a pair share their sun, path and atmosphere; the EE in RR is an average over the pairs rather than the transmittance of one column; and the noise is small once the pairs are averaged. The derivation below makes each one explicit.

Derivation: what survives the ratio

Write Cn=F0cos⁡θs Tatmm/πC_n = F_0 \cos\theta_s\, T_{\text{atm}}^{m} / \pi for the factor that pair nn’s two pixels share. They share it when the out-pixels lie near the in-pixels, so both pixels see the same sun, elevation and water vapour; different pairs need not share it. Leaving out the noise,

R=∑nCnρnEn∑nCnρn′=∑nCnρn∑nCnρn′⏟η⋅∑nwnEn∑nwn⏟Eˉ,wn=Cnρn,R = \frac{\sum_n C_n \rho_n E_n}{\sum_n C_n \rho'_n} = \underbrace{\frac{\sum_n C_n \rho_n}{\sum_n C_n \rho'_n}}_{\eta} \cdot \underbrace{\frac{\sum_n w_n E_n}{\sum_n w_n}}_{\bar E}, \qquad w_n = C_n \rho_n ,

with En=E(λ;ΔXn)E_n = E(\lambda; \Delta X_n). This is an identity, not an approximation, and it says three things.

η\eta is a ratio of brightness-weighted mean reflectances. Pairing on bands that methane does not absorb makes ρn≈ρn′\rho_n \approx \rho'_n pair by pair outside methane’s band. Pairing cannot see a mismatch that exists only inside methane’s band, such as a carbonate’s dip at 2.3 μm, so that mismatch stays in η\eta, and it is the fit and the score that must reject it.

Eˉ\bar E is a mean of transmittances, not the transmittance of the mean column. EE is decreasing and convex in ΔX\Delta X, so Jensen’s inequality gives Eˉ≥E(ΔX‾)\bar E \ge E(\overline{\Delta X}) with ΔX‾=∑nwnΔXn/∑nwn\overline{\Delta X} = \sum_n w_n \Delta X_n / \sum_n w_n. The column that reproduces Eˉ\bar E is therefore at most ΔX‾\overline{\Delta X}: an enhancement whose column varies across the pairs is fitted with a smaller column than its weighted mean.

The ratio is taken after averaging. For independent noisy quantities aa and bb with means μa,μb\mu_a, \mu_b and relative standard deviation sbs_b of bb, a second-order expansion of 1/b1/b gives E[a/b]≈(μa/μb)(1+sb2)\mathbb{E}[a/b] \approx (\mu_a / \mu_b)(1 + s_b^2). Averaging NN pairs first divides sb2s_b^2 by NN; dividing each pair and then averaging leaves the bias at the size of a single pixel’s sb2s_b^2. The bias is largest for dark pixels, whose LoutL_{\text{out}} has the lowest signal-to-noise ratio.

2. The transmittance from the forward model

The reference implementation [3] reads EE from MODTRAN tables over solar and view zenith, elevation, water vapour and the enhancement’s strength. radtrax computes it for the scene itself: with yby_b the band radiance of ForwardModel for unit albedo,

Eb(ΔX)=yb(xatm+ΔX)yb(xatm),E_b(\Delta X) = \frac{y_b(x_{\text{atm}} + \Delta X)}{y_b(x_{\text{atm}})},

on a grid of ΔX\Delta X, with the enhancement in the bottom layer by default (transmittance_table). The albedo cancels because Beer–Lambert radiance is linear in it. That holds exactly for radtrax’s BeerLambert solver, which has no path radiance or multiple scattering, and for an albedo that is constant across each band’s response. A reflectance that varies inside one band reweights the wavenumbers the band averages over, which is a small effect when the reflectance is smooth over one band’s width. The curve of growth is built in: lines saturate, so a strong enhancement absorbs less per molecule than the weak-absorption slope εb=−∂ln⁡yb/∂ΔX\varepsilon_b = -\partial \ln y_b / \partial \Delta X at 0 predicts, the matched filter’s target from unit_absorption_target. Fitting with a constant coefficient, Eb≈exp⁡(−εbΔX)E_b \approx \exp(-\varepsilon_b \Delta X), biases the column low: by 1.4, 2.8 and 7.7 % at 0.05, 0.1 and 0.3 mol/m² on the synthetic spectrum.

Derivation: why a constant coefficient biases the column low

Band bb averages the wavenumbers ν\nu of its response with a weight wb(ν)≥0w_b(\nu) \ge 0, normalised so that ∫wb dν=1\int w_b\, d\nu = 1, that combines the response, the solar irradiance and the ambient transmittance. With σ(ν)\sigma(\nu) methane’s cross-section in m²/mol at the enhancement’s layer,

Eb(ΔX)=∫wb(ν) e−mσ(ν)ΔX dν,εb=−dln⁡EbdΔX∣ΔX=0=m∫wb(ν) σ(ν) dν.E_b(\Delta X) = \int w_b(\nu)\, e^{-m \sigma(\nu) \Delta X}\, d\nu , \qquad \varepsilon_b = -\left.\frac{d \ln E_b}{d \Delta X}\right|_{\Delta X = 0} = m \int w_b(\nu)\, \sigma(\nu)\, d\nu .

The exponential is convex, so Jensen’s inequality gives

Eb(ΔX)≥exp⁡(−mΔX∫wbσ dν)=e−εbΔX,E_b(\Delta X) \ge \exp\left(-m \Delta X \int w_b \sigma\, d\nu\right) = e^{-\varepsilon_b \Delta X},

with equality only if σ\sigma is constant across the band. Physically, the line cores saturate first: once e−mσΔX≈0e^{-m\sigma\Delta X} \approx 0 at a line’s centre, more methane removes no more light there, and the band darkens only through the line wings. A model e−εbΔXe^{-\varepsilon_b \Delta X} predicts more absorption than there is for every ΔX>0\Delta X > 0, so it reaches the observed transmittance with a smaller column, and the deficit grows with the enhancement’s strength.

Taking logarithms does not remove the effect. ln⁡Eb(ΔX)\ln E_b(\Delta X) is the cumulant generating function of mσm\sigma under the weight wbw_b, evaluated at −ΔX-\Delta X. That function is convex, and it is linear only when σ\sigma is constant across the band. A model that is linear in ΔX\Delta X in log-radiance, such as the matched filter on ln⁡L\ln L, has the same low bias for strong enhancements.

3. Windows, pairs and the ratio

A gas’s AbsorptionWindow names the bands the transmittance is fitted on and the bands where the gas absorbs; pairing compares only the bands outside the absorbing ones. EMIT’s CH₄ window fits 2100–2440 nm and keeps 1640–1690 and 2100–2440 nm out of pairing; its CO window fits and excludes 2278–2441 nm.

Given the in-pixels II and the out-pixels OO, as flat indices into the image (pair_pixels), with s(p)s(p) pixel pp’s radiance on the pairing bands, pairing is one to one, minimising the total Euclidean distance, and keeps the best-matched half:

π⋆=arg⁡min⁡π:I→O injective∑i∈I∥s(i)−s(π(i))∥2.\pi^\star = \arg\min_{\pi: I \to O \text{ injective}} \sum_{i \in I} \left\lVert s(i) - s(\pi(i)) \right\rVert_2 .

The kept pairs give the ratio (2) (ratio_spectrum). These are the reference package’s settings, pv/config/config.yaml.

Why each setting

Pairing uses only bands that methane does not absorb. If methane’s bands took part, pairing would favour out-pixels that happen to be dark there and cancel part of the absorption. The Euclidean distance on radiance matches brightness as well as shape, so it makes η\eta close to one and not only flat.

One to one. If one out-pixel served many in-pixels, its noise and any surface mismatch would enter many pairs at once. The injective assignment (7) is a linear assignment problem, solved exactly by the Hungarian algorithm (scipy.optimize.linear_sum_assignment).

The best-matched half. Dropping the worst-matched pairs trades a factor of 2\sqrt{2} in noise for a smaller and smoother surface mismatch in η\eta. The reference code does not give its reason for choosing a half.

Out-pixels free of the gas. An out-pixel that carries the enhancement too cancels the signal being tested. Choosing out-pixels with a small matched-filter score, below the window’s mf_background_mol_m2, keeps them out; that choice is the caller’s.

4. The fit and the score

The continuum is a Legendre series on the window, P(λ;c)=∑k=0K−1ckPk(x)P(\lambda; c) = \sum_{k=0}^{K-1} c_k P_k(x) with x∈[−1,1]x \in [-1, 1], the basis of PolynomialAlbedo:

(ΔX^,c^)=arg⁡min⁡ΔX,c∑λ(R(λ)−P(λ;c)E(λ;ΔX))2.(\widehat{\Delta X}, \hat c) = \arg\min_{\Delta X, c} \sum_{\lambda} \left( R(\lambda) - P(\lambda; c) E(\lambda; \Delta X) \right)^2 .

For fixed ΔX\Delta X the model is linear in cc, so c^(ΔX)\hat c(\Delta X) is a least-squares solve; profiling over the grid of ΔX\Delta X gives ΔX^\widehat{\Delta X} with no starting point (fit_transmittance). The score divides out the continuum, q=R/P(c^)q = R / P(\hat c), and compares qq with the fitted transmittance relative to qq’s own spread (Xiang et al.'s eq. 11, d_norm):

Dnorm=mean⁡λ∣q(λ)−E(λ;ΔX^)∣mean⁡λ∣q(λ)−qˉ∣.D_{\text{norm}} = \frac{\operatorname{mean}_\lambda \left| q(\lambda) - E(\lambda; \widehat{\Delta X}) \right|}{\operatorname{mean}_\lambda \left| q(\lambda) - \bar q \right|} .

A perfect fit gives 0. With no methane, ΔX^=0\widehat{\Delta X} = 0, E=1E = 1 and qˉ≈1\bar q \approx 1, so numerator and denominator agree and Dnorm≈1D_{\text{norm}} \approx 1.

ΔX^\widehat{\Delta X} is the column of the mean transmittance over the pairs, not the mean column, since EE is convex in ΔX\Delta X ((3)); it is a score, not a retrieval of the column.

The profile fit, written out

Let V∈RB×KV \in \mathbb{R}^{B \times K} hold the Legendre polynomials at the window’s bands, Vλk=Pk(xλ)V_{\lambda k} = P_k(x_\lambda) with xλ=2(λ−λmin⁡)/(λmax⁡−λmin⁡)−1x_\lambda = 2(\lambda - \lambda_{\min}) / (\lambda_{\max} - \lambda_{\min}) - 1. For fixed ΔX\Delta X, the model in (8) is A(ΔX) cA(\Delta X)\, c with A(ΔX)=diag⁡(E(ΔX)) VA(\Delta X) = \operatorname{diag}(E(\Delta X))\, V, so

c^(ΔX)=(A⊤A)−1A⊤R,RSS(ΔX)=∥(I−ΠA(ΔX))R∥22,\hat c(\Delta X) = \left(A^\top A\right)^{-1} A^\top R, \qquad \mathrm{RSS}(\Delta X) = \left\lVert \left(I - \Pi_{A(\Delta X)}\right) R \right\rVert_2^2 ,

with ΠA=A(A⊤A)−1A⊤\Pi_A = A (A^\top A)^{-1} A^\top the orthogonal projector onto the columns of AA. The grid point kk of least RSS\mathrm{RSS} needs no starting point: it is the global minimum over the grid. ΔX^\widehat{\Delta X} then refines it between the nodes: it is the vertex of the parabola through RSS\mathrm{RSS} at three neighbouring nodes around kk (the first or last three at a grid end), clipped to their span; E(ΔX^)E(\widehat{\Delta X}) interpolates ln⁡E\ln E linearly between the two rows around it, and c^\hat c is solved again there. The refined fit replaces the node’s only where the parabola is convex and the refit lowers the residual, so a fit exact on a node stays there. If RSS≈au2+bu3\mathrm{RSS} \approx a u^2 + b u^3 near its minimum, with uu the distance to it, and the nodes are hh apart, the vertex is off by (b/2a)(3δ2−h2)(b / 2a)(3\delta^2 - h^2), with δ\delta the middle node’s distance to the minimum: at most ∣b∣h2/a|b| h^2 / a, against h/2h / 2 for the node alone. That matters for weak enhancements: on a 0.005 mol/m² grid, a noise-free 62 ppm·m (0.0025 mol/m²) ratio would otherwise sit on a node and score Dnorm≈0.5D_{\text{norm}} \approx 0.5; refined, it scores below 10-3. The grid starts at 0, which imposes ΔX≥0\Delta X \ge 0: a ratio whose best fit wants no methane, or less than none, sits on that boundary at ΔX^=0\widehat{\Delta X} = 0.

Least squares is the maximum-likelihood fit when the errors in RR are independent across bands and have equal variance. Neither holds exactly. The noise in RR is larger in bands with less light, and the leftover surface mismatch in η\eta is smooth in λ\lambda, so it is correlated across bands.

How much of methane’s shape the continuum leaves

Linearise for a weak enhancement in log space, where the continuum is additive: ln⁡R≈Va−ε ΔX+n\ln R \approx V a - \varepsilon\, \Delta X + n, treating ln⁡P\ln P as lying in the span of VV and taking n∼N(0,σ2I)n \sim \mathcal{N}(0, \sigma^2 I). Profiling out aa (the Frisch–Waugh–Lovell theorem) leaves

ΔX^=−ε⊥⊤ln⁡Rε⊥⊤ε⊥,Var⁡(ΔX^)=σ2∥ε⊥∥22,ε⊥=(I−ΠV)ε.\widehat{\Delta X} = -\frac{\varepsilon_\perp^\top \ln R}{\varepsilon_\perp^\top \varepsilon_\perp}, \qquad \operatorname{Var}\left(\widehat{\Delta X}\right) = \frac{\sigma^2}{\lVert \varepsilon_\perp \rVert_2^2}, \qquad \varepsilon_\perp = \left(I - \Pi_V\right) \varepsilon .

Only the part of methane’s band shape that a polynomial of degree K−1K - 1 cannot reproduce informs ΔX^\widehat{\Delta X}. Each added degree removes another direction from ε⊥\varepsilon_\perp and inflates the variance; with K=BK = B the continuum fits anything, and ΔX\Delta X is not identifiable. This is the sense in which eleven continuum terms on 46 bands leave little of methane’s shape to score (7. Where radtrax departs from the reference code).

The basis does not change this. Legendre polynomials and monomials of the same degree span the same space, so they give the same ε⊥\varepsilon_\perp and, in exact arithmetic, the same fit. What the Legendre basis changes is conditioning: monomials of λ\lambda near 2300 nm are nearly collinear, and the least-squares solve loses digits to that.

The same algebra says what the test can reject. A confounder that adds dd to ln⁡R\ln R shifts ΔX^\widehat{\Delta X} by −ε⊥⊤d/∥ε⊥∥2-\varepsilon_\perp^\top d / \lVert \varepsilon_\perp \rVert^2 and leaves the rest of (I−ΠV)d(I - \Pi_V) d in the residual. The test rejects a confounder only to the extent that its shape, once the continuum is removed, differs from methane’s.

What DnormD_{\text{norm}} measures

Write q=E(ΔX^)+rq = E(\widehat{\Delta X}) + r, with rr the residual. The numerator of (9) is mean⁡λ∣r∣\operatorname{mean}_\lambda |r|, the part of qq the fit leaves unexplained. The denominator is qq’s spread about its own mean, which is the absorption the fit explains plus the residual. DnormD_{\text{norm}} is an L1 analogue of the fraction of variance unexplained, 1−R21 - R^2.

It is not purely a test of shape. Let the residual have size σq\sigma_q per band and the fitted transmittance vary across the window by δ\delta. When δ≫σq\delta \gg \sigma_q, DnormD_{\text{norm}} is of order σq/δ\sigma_q / \delta; when δ≪σq\delta \ll \sigma_q, numerator and denominator are both about σq\sigma_q and DnormD_{\text{norm}} tends to 1. A real but weak enhancement therefore scores like none. For NN pairs of pixels with signal-to-noise ratio SNR, σq≈2/(SNRN)\sigma_q \approx \sqrt{2} / (\mathrm{SNR}\sqrt{N}), so a fixed threshold such as 0.3 also depends on the sensor’s noise, on the number of pairs and on the window, besides the continuum’s degree.

It can exceed 1, when the fitted transmittance has structure that qq lacks.

The fit and the score optimise different things. The fit minimises the L2 norm of R−PER - P E; the score is an L1 norm on q=R/Pq = R / P. ΔX^\widehat{\Delta X} therefore does not minimise DnormD_{\text{norm}}'s numerator, though the difference is small when PP is close to 1.

5. Plume vetting lives in plumax

Plume vetting runs this test on matched-filter candidates, and that part is about plumes, so it lives in plumax as plumax.vetting, which imports radtrax: the in-pixels are a candidate’s seeds, its strongest matched-filter pixels; the out-pixels are a background pool around them, outside every candidate, with a small matched-filter score; a null from the same scene (copies of the candidate’s mask placed where there is no candidate) calibrates DnormD_{\text{norm}} into a p-value; and the decision on a candidate, with the worked example on a synthetic EMIT scene, is plumax’s too. radtrax stays the plume-agnostic half: windows, transmittance, pairing given two pixel sets, the ratio, the fit and DnormD_{\text{norm}}.

6. What radtrax computes

StepEquationFunctionIssue
A gas’s fitting and pairing bandsAbsorptionWindow, AbsorptionWindow.ch4_emit, AbsorptionWindow.co_emit#155
Transmittance on a grid of ΔX\Delta X(4)transmittance_table#154
One-to-one pairs of two pixel sets and the ratio(7), (2)pair_pixels, ratio_spectrum#149
Profile fit and score(8), (9)fit_transmittance, TransmittanceFit, d_norm#150

All of them live in radtrax.retrieval.absorption, beside the matched filter.

7. Where radtrax departs from the reference code

Footnotes
  1. Xiang, C., et al. (2024). A novel spectroscopic method for vetting methane point sources. AGU Fall Meeting, abstract A21K-1903.

  2. Růžička, V., Thompson, D. R., Fahlen, J. E., et al. (2026). Fully automatic trace gas plume detection. arXiv:2605.03372.

  3. EMIT Science Data System (2025). plume-vetting, revision 47fc6ad. https://github.com/emit-sds/plume-vetting (Apache-2.0).