Summary
The historic (1995-2014) NDWS (number-of-water-stress-days) monthly rasters produced by this repo are saturated: mean/max ≈ 0.95 across essentially every pixel, every month, every year of 1995-2014 — i.e. nearly every land pixel reads as water-stressed ~29 of 30 days, all year, every year. The matching future ssp245 NDWS for the same GCM is normal (mean/max ≈ 0.70).
This is an input problem, not a classification problem: downstream classification in hazards_prototype/R/2_calculate_haz_freq.R is correct given these inputs.
Downstream impact (hazards_prototype CR-068)
In the Atlas hazard_exposure product the saturation makes the historic panel un-comparable to the future panels:
- Historic
heat, heat+wet, wet single-hazard categories come out 0 — that mass is bundled into dry+* combinations, because the saturated dry co-occurs with every other hazard (CR-068 finding (b)).
- Residual NaN in the rebaked
hazard_exposure parquet concentrate in Luanda admin1 (180/6,021 cells for AGO) — the saturation signature; the only remaining NaN cluster after the na.rm=TRUE ENSEMBLE-writer fix landed downstream (CR-068 finding (c), downstream of this).
Evidence
- Historic monthly NDWS rasters: mean/max ≈ 0.95 uniform across pixels/months/years 1995-2014.
- Same GCM, ssp245 future NDWS: mean/max ≈ 0.70 (normal spread).
- Full root-cause walk in dispatch
2026-05-26_hazards-repo-ndws-historic-saturation.md (Stage 1 raster probe + Stage 2A NDWS root-cause, logs cr068_stage1_raster_probe_* + cr068_stage2a_ndws_root_cause_*).
Ask
Investigate the historic NDWS calculation in this repo (water-balance / PET inputs or the dry-day counting logic for the 1995-2014 window). Once fixed and the historic NDWS rasters are republished, the downstream Atlas hazard_exposure rebake clears CR-068 (b) + (c).
Related
Summary
The historic (1995-2014) NDWS (number-of-water-stress-days) monthly rasters produced by this repo are saturated: mean/max ≈ 0.95 across essentially every pixel, every month, every year of 1995-2014 — i.e. nearly every land pixel reads as water-stressed ~29 of 30 days, all year, every year. The matching future ssp245 NDWS for the same GCM is normal (mean/max ≈ 0.70).
This is an input problem, not a classification problem: downstream classification in
hazards_prototype/R/2_calculate_haz_freq.Ris correct given these inputs.Downstream impact (hazards_prototype CR-068)
In the Atlas
hazard_exposureproduct the saturation makes the historic panel un-comparable to the future panels:heat,heat+wet,wetsingle-hazard categories come out 0 — that mass is bundled intodry+*combinations, because the saturateddryco-occurs with every other hazard (CR-068 finding (b)).hazard_exposureparquet concentrate in Luanda admin1 (180/6,021 cells for AGO) — the saturation signature; the only remaining NaN cluster after thena.rm=TRUEENSEMBLE-writer fix landed downstream (CR-068 finding (c), downstream of this).Evidence
2026-05-26_hazards-repo-ndws-historic-saturation.md(Stage 1 raster probe + Stage 2A NDWS root-cause, logscr068_stage1_raster_probe_*+cr068_stage2a_ndws_root_cause_*).Ask
Investigate the historic NDWS calculation in this repo (water-balance / PET inputs or the dry-day counting logic for the 1995-2014 window). Once fixed and the historic NDWS rasters are republished, the downstream Atlas
hazard_exposurerebake clears CR-068 (b) + (c).Related
AdaptationAtlas/hazards_prototypeCR-068 + Pattern-B reconciliation Pattern B: hazard_exposure value('any') exceeds standalone crop-livestock_all VoP per-admin1 — reconcile (probe first, no blind re-bake) hazards_prototype#12 (the Luanda NaN poisons that admin0 rollup).