Validation against Chu et al. (2021)
fluxfootprints.representativeness reimplements the footprint-representativeness
method of:
Chu, H., Luo, X., Ouyang, Z., et al. (2021). Representativeness of Eddy-Covariance flux footprints for areas surrounding AmeriFlux sites. Agricultural and Forest Meteorology 301–302, 108350. doi:10.1016/j.agrformet.2021.108350
The authors released their inputs and results as a Zenodo archive (doi:10.5281/zenodo.4015350, Datasets S1–S6), which lets us check our implementation against the published numbers rather than only against synthetic fixtures. This page records that comparison.
What is compared
We recompute the Sect. 2.2 metrics — fetch X80, area A80, symmetry S80 (Eq. 1), seasonal overlap O80,season (Eq. 2), and day–night overlap O80,daynight (Eq. 3) — from Dataset S2, the authors’ own monthly footprint climatology rasters, and compare them against Dataset S1, the site-year metrics the authors published for those same rasters.
Driving the comparison from S2 rather than from raw flux data is deliberate: it isolates our metric code from the upstream climatology model, so a mismatch points at the metrics rather than at a difference in how the footprints were built.
The tests live in tests/test_chu2020_validation.py. They are marked slow and
skip unless CHU2020_DATA points at a local copy of the archive:
CHU2020_DATA="/path/to/Chu et al dataset" pytest tests/test_chu2020_validation.py
Sites
Four site-years spanning the regimes the paper contrasts:
Site |
IGBP |
Year |
Regime |
|---|---|---|---|
US-NR1 |
ENF |
2011 |
Subalpine forest; drainage flow makes nights far-reaching and asymmetric |
US-SRM |
WSA |
2017 |
Semi-arid savanna; the most asymmetric climatology of the set |
US-Ne1 |
CRO |
2010 |
Irrigated maize; canopy growth drives strong seasonal variation |
US-ARM |
CRO |
2011 |
Rain-fed cropland; the strongest seasonal variation of the set |
US-NR1 and US-SRM are the paper’s two asymmetric exemplars, quoted with nighttime S80 of 0.31 and 0.18. US-Ne1 and US-ARM carry the lowest seasonal overlap here (nighttime O80,season of 0.80 and 0.61), which is the paper’s signature of a canopy that changes through the growing season.
Grid handling
The S2 rasters are EPSG:4326, sum to exactly 1.0, and carry explicit zeros
outside the 80 % contour — so their positive cells are exactly the cells inside
the contour, which is what footprint_fetch and footprint_area accept for an
already-truncated climatology.
Our functions want tower-centred metre offsets instead. Rather than resample,
the tests re-register each raster onto a common grid indexed by integer cell
offsets from the tower. This is exact: within a site-year every raster shares
one cell size, and each is registered so the tower falls on a cell centre to
better than 10⁻⁴ of a cell, so months differ only in which rectangle of the
common lattice they cover. Zero-padding to the union rectangle preserves each
month’s unit sum, which the overlap indices require. Grid spacing in metres
comes from pyproj.Geod on the WGS84 ellipsoid; tower coordinates come from
Dataset S5 rather than being hard-coded.
X80 and A80 are month-wise means over the site-year (S1 reports a standard deviation alongside each, so the published values are means). S80 is Eq. 1 applied to those means — that is the reading which reproduces the published values; averaging the monthly S80 instead misses US-NR1’s nighttime value by 0.03.
Results
Measured 2026-08-30 against the full archive. “Ours” is recomputed from S2; “published” is the S1 value.
US-NR1 2011 — 78 × 54 cells, 16.35 × 16.65 m, 12 months
Metric |
Ours |
Published |
Residual |
|---|---|---|---|
X80 day |
328.67 m |
331.94 m |
−0.99 % |
X80 night |
664.12 m |
668.39 m |
−0.64 % |
A80 day |
157 135 m² |
157 104 m² |
+0.02 % |
A80 night |
448 741 m² |
449 040 m² |
−0.07 % |
S80 day |
0.4630 |
0.4538 |
+0.0092 |
S80 night |
0.3239 |
0.3199 |
+0.0039 |
O80,season day |
0.9290 |
0.9393 |
−0.0103 |
O80,season night |
0.8103 |
0.8520 |
−0.0418 |
O80,daynight |
0.8673 |
0.8681 |
−0.0007 |
US-SRM 2017 — 80 × 51 cells, 7.75 × 7.10 m, 12 months
Metric |
Ours |
Published |
Residual |
|---|---|---|---|
X80 day |
168.88 m |
170.49 m |
−0.95 % |
X80 night |
348.56 m |
351.62 m |
−0.87 % |
A80 day |
49 017 m² |
49 042 m² |
−0.05 % |
A80 night |
70 952 m² |
71 094 m² |
−0.20 % |
S80 day |
0.5471 |
0.5371 |
+0.0100 |
S80 night |
0.1859 |
0.1830 |
+0.0028 |
O80,season day |
0.8687 |
0.8740 |
−0.0053 |
O80,season night |
0.8750 |
0.8810 |
−0.0059 |
O80,daynight |
0.6988 |
0.7172 |
−0.0184 |
US-Ne1 2010 — 54 × 83 cells, 5.81 × 6.02 m, 12 months
Metric |
Ours |
Published |
Residual |
|---|---|---|---|
X80 day |
189.94 m |
191.97 m |
−1.05 % |
X80 night |
219.62 m |
221.50 m |
−0.85 % |
A80 day |
44 959 m² |
45 054 m² |
−0.21 % |
A80 night |
56 903 m² |
56 965 m² |
−0.11 % |
S80 day |
0.3966 |
0.3891 |
+0.0075 |
S80 night |
0.3755 |
0.3696 |
+0.0060 |
O80,season day |
0.7870 |
0.7966 |
−0.0096 |
O80,season night |
0.7841 |
0.7952 |
−0.0111 |
O80,daynight |
0.9553 |
0.9558 |
−0.0005 |
US-ARM 2011 — 120 × 139 cells, 4.39 × 4.26 m, 12 months
Metric |
Ours |
Published |
Residual |
|---|---|---|---|
X80 day |
226.31 m |
227.53 m |
−0.54 % |
X80 night |
255.68 m |
256.65 m |
−0.38 % |
A80 day |
73 951 m² |
73 986 m² |
−0.05 % |
A80 night |
90 581 m² |
90 626 m² |
−0.05 % |
S80 day |
0.4596 |
0.4549 |
+0.0047 |
S80 night |
0.4411 |
0.4380 |
+0.0031 |
O80,season day |
0.7038 |
0.7069 |
−0.0031 |
O80,season night |
0.5990 |
0.6091 |
−0.0101 |
O80,daynight |
0.9480 |
0.9495 |
−0.0014 |
Tolerances and why
Metric |
Tolerance |
Worst residual |
Mechanism |
|---|---|---|---|
X80 |
2 % relative |
−1.05 % |
Cell-centre distance deficit |
A80 |
1 % relative |
−0.21 % |
Whole-cell counting |
S80 |
0.02 absolute |
+0.0100 |
X80 deficit propagated through Eq. 1 |
O80,daynight |
0.03 absolute |
−0.0184 |
Per-month pairing, averaged |
O80,season |
0.05 absolute |
−0.0418 |
Geometric mean over the common support |
Every tolerance is at least twice the largest residual observed, so the tests assert agreement rather than merely pinning current behaviour.
The residuals are systematic and signed, not noise, which is what makes them explainable:
X80 is low at every site-year.
footprint_fetchmeasures to cell centres, while the authors’ fetch reaches the contour itself. The deficit is bounded by half a cell diagonal — 11.6 m at US-NR1, or 3.5 % of its daytime X80 — so the 2 % tolerance is a real constraint rather than a vacuous one. The test asserts the one-sidedness explicitly: measuring to cell centres cannot overshoot.S80 is high at every site-year, by 0.003–0.010. That is exactly the X80 deficit propagating through S80 = A80 / (π·X80²): a 1 % low fetch inflates S80 by about 2 %.
A80 agrees to 0.21 % or better. Both implementations count whole cells on the same lattice, so only a contour cell’s membership can differ.
O80,season is the loosest. Eq. 2 is a geometric mean over the cells positive in every month, so it is dominated by the month of smallest support and is the metric most sensitive to float32 round-off in the rasters’ near-zero edge cells. The one residual that reaches 0.042 is US-NR1 at night, whose monthly footprints swing widely (X80 s.d. 173 m on a 668 m mean) — precisely the case that amplifies this.
Qualitative findings reproduced
Beyond the numeric comparison, the tests confirm our metrics reproduce the paper’s conclusions:
Nighttime footprints reach farther and cover more ground than daytime at all four sites, as the paper reports for >95 % of its site-years.
The two asymmetric exemplars land at the quoted values and classify the same way the published S1 values do against
ASYMMETRY_THRESHOLD(0.30). Worth noting: the two sit on opposite sides of that line. US-SRM (0.186) is well under it, while US-NR1 (0.324) is just above — low enough for the paper to discuss alongside US-SRM, but not actually under the flag. The published values behave the same way (0.183 and 0.320), and US-NR1 is above 0.30 in every year S1 reports (0.3199, 0.3108, 0.3074).The cropland sites vary more seasonally than the forest site: US-Ne1 and US-ARM fall below 0.85 daytime O80,season while evergreen US-NR1 stays above 0.9, matching the Sect. 3.2 attribution to canopies that change through the growing season.
The climatology model upstream
The tests above hold the climatology fixed and check our metrics. The complementary check — build the climatology ourselves and compare it with the published raster — lives in the validation-data workspace, because it needs raw AmeriFlux BASE data as well as the archive:
Reader and comparison utilities |
|
Raster subset, inventory and reference metrics |
|
Model-versus-reference comparison |
|
Reports |
|
The case is US-ARM 2011, all twelve months, daytime and nighttime, at the 4 m system: the one site-year where a Chu site-year, a raw BASE record held locally, and an existing preparation script coincide. The modelled climatology is run on the published raster’s own cell lattice, so registration is exact and nothing is resampled.
What it found, in one line each:
Orientation reproduces. The modelled centroid bearing is within 6° of the published one in every one of the 24 month-periods, and the 16-sector weight profiles correlate at 0.988–1.000.
Shape reproduces. Taking our source area at the reference’s own size in cells, the two regions overlap at IoU 0.94–0.98.
Extent is looser — X80 within −25 % to +16 %, median about −8 % — and it is looser for a structural reason. The tail of a climatology is flat, so A80 gains about 11 % for every additional per cent of enclosed mass and is 1.8 times larger at the 85 % contour than at the 80 %; the published 80 % source area is where our 76–84 % contour falls. A few per cent of difference in the mass distribution therefore reads as tens of per cent of A80.
The unshared inputs dominate that residual. Chu et al. publish neither their roughness length, their displacement height, nor their boundary-layer height. Swapping our fitted z0 for the
0.1 × canopyrule alone moves X80 by 15–17 percentage points, well past the residual being explained.
The moral for the metric functions is the useful part: X80 and A80 are not the right things to assert agreement on between two implementations unless their inputs are shared. Bearing, sector profile, and area-matched IoU are.
One convention is worth repeating because getting it wrong is silent: the 80 %
contour is an absolute mass, not a share of what the model domain happened to
capture. _source_weight_threshold accumulates density × cell_area until it
reaches 0.8, and so does the reference FFP implementation. Taking 0.8 of the
captured mass instead moves A80 by about 30 % on this benchmark, with no error
raised anywhere.
Limitations
The comparison covers the Sect. 2.2 footprint-geometry metrics only. The categorical (S4) and continuous (S5/S6) representativeness evaluations are not yet validated against the archive; they are covered by unit tests against synthetic fixtures.
Four site-years of 712 are checked. They were chosen to span regimes and to include the paper’s named exemplars, not sampled at random.
Because the comparison starts from Dataset S2, it validates the metric code but not the climatology model that produces the footprints upstream. That gap is covered separately — see the climatology comparison below.
Numbering caution:
representativeness_table(results, dataset)maps"S5"to site-month statistics and"S6"to site-level regressions, which is swapped relative to this data release, where S5 is site-level and S6 is site-month. The module appears to number the paper’s supplementary tables rather than these datasets. Check which numbering is meant before mapping columns across.