← Burning Activity Calendar

FireZone — historical harmonization report

Data and provenance

NASA FIRMS country archives for Morocco. MODIS 2000–2025 and VIIRS Suomi NPP 2012–2025. All 40 files were retrieved from their recorded NASA URLs and their original SHA-256 hashes verified. There are 43,301 original rows and 30,287 eligible detections. Retained scientific version strings are MODIS 6.03 (2000–2022), 61.03 (2023–2025) and VIIRS 2. No NRT files are included. NASA's country subset determines the geographic extent. The original rows, exact UTC times, platform, confidence, FRP, scan/track footprint and file/line provenance are retained separately.

NASA promotes open sharing with source citation and its data-use disclaimer. See country archives, archive availability and FIRMS attribution and disclaimer. This pilot uses the country archive's actual versions, which differ from the current archive portal's Collection 6.1 description.

Outcome and models

We measure occupied 5 km equal-area EPSG:6933 cell-day/illumination strata. MODIS raw totals retain Terra and Aqua separately in exported rows. Calibration uses Aqua alone and S-NPP alone to limit changes in platform sampling. Eligible detections have type=0 and MODIS confidence ≥30 or VIIRS nominal/high. These confidence filters have different meanings. Distinct spatial cells count once per UTC day and D/N stratum.

The baseline is unscaled VIIRS occupancy versus Aqua occupancy. The adjusted model fits separate nonnegative through-origin coefficients for day and night from 2013–2018 pairs. A pair requires positive detections by both sensors with median detection times within 90 minutes in the region. Coefficients are local to each region. No previously harmonized input product is corrected again. Raw detection-count disagreement is reported in its own units. Calibration requires at least 20 training pairs per stratum.

Held-out results

Primary metric fixed before evaluation: occupancy MAE. RMSE and signed VIIRS-minus-Aqua bias are also reported. Training is 2013–2018. Primary evaluation is 2019–2022, within MODIS 6.03. Transfer to MODIS 61.03 in 2023–2025 and all monthly and seasonal breakdowns, including matched-month aggregate errors, are in evaluation.json. No best-model selection is performed on these holdouts.

RegionMethodPairsMAERMSEBias
moroccoraw_hotspot_counts2728.52205882352941121.7580275922676958.147058823529411
moroccooccupancy_baseline2722.0992647058823532.99079470060659161.8860294117647058
moroccoharmonized2720.99222372411412351.4991691715916493-0.6974224612423021
rifraw_hotspot_counts1569.6089743589743624.075602077302569.237179487179487
rifoccupancy_baseline1561.21794871794871781.81164325463135320.9487179487179487
rifharmonized1560.8250345917455131.1767283320314188-0.5650229667200343
atlasraw_hotspot_counts553.65454545454545488.4713420639020573.3636363636363638
atlasoccupancy_baseline550.61.00.38181818181818183
atlasharmonized550.79638826185101590.9923013045416692-0.7448389082700595

Interpretation and uncertainty

Agreement is conditional on positive paired detection days. Without swath/cloud masks, missing detections cannot identify observed fire-free cells. This selection excludes days detected by only one sensor. Applying coefficients to unpaired days is an extrapolation. A harmonized value is an estimated Aqua-equivalent activity unit. It cannot quantify independent fires or burned hectares. The 400-replicate monthly-block bootstrap quantifies coefficient uncertainty only, not prediction, cloud, geolocation or version-transfer uncertainty. The calendar exposes missing files separately from zero eligible detections. January 2012 and sensor-start months are incomplete. Current/future months are withheld from seasonal comparisons.

Monthly historical medians exclude the selected year and incomplete months, use at least five years, and stay within the selected sensor basis. Ratios are unavailable for zero medians. A 2× median threshold flags unusual historical activity descriptively. MODIS historical observation availability and orbital drift remain unresolved. Propagation simulations are a separate scenario-exploration feature and do not validate this harmonization.

Reproduction

Python 3.11+ with requests and pyproj. Install dependencies locally with python -m pip install --target .calendar-deps requests pyproj.

python scripts/fire_calendar.py fetch --years 2000:2025
python scripts/fire_calendar.py build
python scripts/fire_calendar.py verify
python -m unittest discover -s tests -p test_fire_calendar.py
npm test
npm run typecheck
npm run build
# With FireZone running locally:
python scripts/check_calendar_http.py

The server reads prepared files and caches them in memory. File revision checks invalidate that cache after data are rebuilt; reload the page to read the new revision. Requests never download the historical archive. Raw CSV exports include quality-excluded rows and eligibility flags, while the calendar aggregates eligible rows. Region and selected year range apply to both exports.

Source manifest · Protocol · All results · Checksums