Overview

This document is a quality-control pass over the data behind AdaptSAT. It assembles, in one place, what is actually in the six databases the tool draws on - Climate Toolbox climate and fire-weather, Anderegg mortality risk, Davis post-fire recruitment, Holden thermal regeneration, Hoecker vegetation turnover, and Prasad species habitat - so we can see the values, check them for sentinels and gaps, and evaluate each layer’s spatial coverage against the percentile logic the sensitivity engine will use. It is a first step toward calibrating the sensitivity and RAD trigger logic: where coverage is thin, the percentile signal is less decisive, and that is exactly the kind of thing we need to settle before wiring thresholds into the app.

A few conventions orient the rest of the document. All Section and Province summaries use USFS Cleland Sections (National Hierarchical Framework of Ecological Units / ECOMAP; Cleland et al. 1997), n = 188, EPSG:5070, clipped to the western states. Everything is moderate-emissions: RCP-4.5 for Climate Toolbox and Davis, SSP2-4.5 for Anderegg, Holden, and Prasad, with Hoecker a single +2 C turnover score. Value-map fills are Section medians (a median, not a mean, because high-relief terrain makes a mean a topographic artifact), and these maps are QC overviews - the app delivers a point value at the user’s coordinate, not a Section aggregate. Projection windows are not aligned across sources (2040-2069 for Climate Toolbox and Anderegg, ~2035-2065 for Holden, 2031-2050 for Davis, 2071-2100 for Prasad), so each figure states its own horizon and they should not be cross-read as a common date.

1 · Data sources and variable summary

AdaptSAT draws on six datasets, explored in this document. Climate Toolbox supplies downscaled climate and fire-weather (MACAv2-METDATA plus a monthly water-balance model, a 17-20 GCM ensemble) at ~4 km. Anderegg et al. 2022 contributes modeled wildfire, climate-stress, and insect-mortality risk at ~4 km; its baseline is modeled near-present rather than observed, and the climate-stress layer includes co-occurring insect mortality. Davis et al. 2023 gives post-fire conifer recruitment probability at ~4 km, where low values mean regeneration failure and the likely/unlikely thresholds are species-specific. Holden et al. 2024 provides potential soil-surface temperature and thermal regeneration probability on exposed, post-disturbance ground at 250 m - a seedling thermal barrier, not a canopy climate. Hoecker & Davis yields a Bray-Curtis vegetation-turnover score at ~280 m; the 51 categorical classes behind it are analyzed in the Hoecker section. Prasad et al. 2025 maps tree-species habitat quality and colonization likelihood at ~20 km. Each variable’s baseline, projection window, scenario, units, and exact statistics are in the table below.

Decoded variable fields with exact statistics. Scan min and max first for sentinels (such as -9999) or unit slips, and pct_na for coverage gaps. Five rows per page.

2 · Value maps

Each variable is one combined figure, self-titled, with baseline, moderate-emissions projection, and change panels side by side (cropped to the western data so the panels align with no eastern dead space). Each panel carries its own caption and colour key; the change panel is diverging on a symmetric scale - red is an increase, blue a decrease (not good versus bad, so wetter or snowier increases also read red). A few variables are single-panel: Very Large Fire Potential (no RCP-4.5 projection at source, baseline only) and Hoecker turnover (a single change metric). Complete figures are also in value_maps.pdf.

Climate Toolbox

Downscaled CMIP5 climate and fire-weather (MACAv2-METDATA + monthly water-balance model, ~4 km). These are the core climate drivers - temperature, precipitation, VPD, water balance, snow, fire-danger days - feeding Fire Risk, Water Stress, Insect & Disease, and Seedling Survival. Baseline 1971-2000, projection 2040-2069 (RCP-4.5). ::: mapfig :::

Anderegg

Modeled disturbance/mortality risk (Anderegg et al. 2022, CarbonPlan, ~4 km): annual burn-area exposure (fire), climate-stress mortality (drought + co-occurring insects), and insect mortality. Baseline is a modeled ~2020s, not observed; projection 2040-2069 (SSP2-4.5). The fire layer is a per-pixel expected annual burned fraction. ::: mapfig :::

Davis

Probability of post-fire conifer recruitment (Davis et al. 2023, ~4 km), per species under low- and high-severity fire. Low values mean natural regeneration is unlikely; thresholds are species-specific. Baseline 1981-2000, projection 2031-2050 (RCP-4.5). Feeds Fire Risk, Seedling Survival, and Shifting Species. ::: mapfig :::

Holden

Potential soil-surface temperature (95th pct) and thermal probability of regeneration on exposed, post-disturbance ground (Holden et al. 2024, 250 m) - a seedling thermal barrier, not a canopy climate. Below ~0.58 a site is thermally marginal. Baseline 1982-2018, projection ~2050 (SSP2-4.5). Feeds Seedling Survival and Shifting Species. ::: mapfig :::

Hoecker (vegetation turnover)

Bray-Curtis dissimilarity between contemporary and projected +2 C vegetation composition (Hoecker & Davis, ~280 m): 0 = no change, 1 = complete turnover. A single Section-median map - there is no baseline/projection/change triad because the score is itself a change metric (baseline dissimilarity = 0). Feeds Shifting Species. ::: mapfig :::

3 · Hoecker categorical vegetation

51-class vegetation, contemporary versus the +2 C plurality-vote future (veg_future_vote1). A 280 m cell is 0.0784 km^2. The focus here is forest dynamics - whether forest persists, opens to woodland, or is lost - so the all-class detail is reduced to a single orientation map.

Overall vegetation transition rate by Section (share of each Section’s cells that change class):

Forest-based transitions

The 51 classes are collapsed into structural bins so that forest loss can be read separately from canopy opening. Forest = interior aspen-mixed conifer (29), the conifer forest classes (31-44), and Mediterranean subalpine forest/woodland (45). Woodland = the woodland classes (23-28), pinyon-juniper woodland/shrubland (27, within that range), pine woodland & savanna (30), and subalpine woodland (46). Everything else is non-forest (barren/sparse, grassland, shrubland, subalpine non-forest, wetland/riparian). Forest and woodland are kept as distinct bins on purpose: it lets forest -> woodland (canopy opening, thinning toward an open structure) be separated from forest -> non-forest (outright forest loss).

Forest fate by Section, with baseline forest area (cells x 0.0784 km^2), sorted by area lost out of forest:

4 · Prasad species range shifts

End-of-century (2071-2100), SSP2-4.5, ~20 km. Prasad has no Section grain by design (20 km is too coarse per Section), so all maps are on the native point grid over a Section outline.

How to read the fate matrices. Each cell counts species-points whose baseline habitat-quality class (rows) becomes a given end-of-century class under SSP2-4.5 (columns). The diagonal is no class change. Mass below the diagonal (toward Low and Absent) is habitat loss; mass above it is gain. Color is on a log scale because the no-change cells dominate. The first matrix is all species-points; the second restricts to species established at baseline (Medium or High and Occupied), which removes the large Absent-to-Absent cell and shows the trajectory of the community actually present today.

5 · Coverage maps

AdaptSAT’s analysis universe is the 188 Cleland Sections that overlap the western states, and the coverage maps are cropped to that western extent. A Section renders grey where the source has no data.

How much data is there, and at what grain? Sections and Provinces differ in size, so the number of source cells falling inside each one differs too. The table below counts, per source and grain, how many units have thin coverage. This matters for the percentile-distinctiveness signal, which reads each unit’s 99th percentile and compares it across units: where a unit holds few cells, its p99 rests on very few points, so the percentile is less decisive (around 500 points only ~5 sit above the 99th percentile, so the tail is noisy, and well below that it collapses toward the maximum). We mark units under 500 points sparse and 500-1000 marginal. This is about percentile resolution, not the median value-map fill, which is stable from far fewer points. Province vs. Section grain: pooling to Province reduces thin cells but does not eliminate them (Anderegg and Davis still leave thin Provinces), so the comparison in the table guides the grain choice rather than defaulting to one.

A thin Section is often not a data problem. Four of the five sources - Anderegg, Davis, Holden, Hoecker - store rows only where their target cover exists (masked to presence), so a low count usually means little forest or relevant cover in that Section, not coarse sampling: those Sections may simply have little at stake. Climate Toolbox is the exception - it is a full CONUS climate grid, so its per-Section counts track Section area; a thin CT Section is a small Section, full stop.

Reading the maps. Each source is one figure with Section and Province panels side by side, cropped to the western data (the panels share a crop box so no data-bearing unit is cut off). Each data-bearing unit is filled by point count on a log scale; no number is printed on the map. Grey is no data for that source - so a Section where a Davis species is absent reads grey. There is no on-map flag for thin coverage: the sparse (<500) and marginal (500-1000) Sections are enumerated in the tables above and below, which are the sole record of which units are thin. Static choropleths for every source are also in coverage_maps.pdf.

Climate Toolbox

CONUS climate grid (not forest-masked): points-per-Section track Section area, so a thin CT Section is a small one, not a gap.

Total points: 189,815 across all Sections with data.

Coverage flags. 3 of 90 Sections with data are sparse (<500 points) and 14 marginal (500-1000); at Province grain, 0 of 18 are sparse and 0 marginal.

Anderegg et al. 2022

Masked to the modeled extent; baseline is modeled near-present (~2020s), not observed.

Total points: 42,394 across all Sections with data.

Coverage flags. 54 of 85 Sections with data are sparse (<500 points) and 16 marginal (500-1000); at Province grain, 7 of 17 are sparse and 2 marginal.

Davis et al. 2023

Coverage is per species (one 2-panel figure each). High and low severity share an identical per-species mask, so severity is collapsed - one figure per species, not per species x severity. A Section reads grey where that species is absent.

Total points: 2,001,180 across all Sections with data.

Coverage flags. 15 of 74 Sections with data are sparse (<500 points) and 4 marginal (500-1000); at Province grain, 2 of 17 are sparse and 0 marginal.

White / Grand fir

Subalpine fir

Lodgepole pine

Engelmann spruce

Ponderosa / Jeffrey pine

Douglas-fir

Holden et al. 2024

Masked to presence; PSST is potential exposed post-disturbance soil-surface temperature (a regeneration barrier), not a canopy climate.

Total points: 49,110,927 across all Sections with data.

Coverage flags. 0 of 90 Sections with data are sparse (<500 points) and 0 marginal (500-1000); at Province grain, 0 of 18 are sparse and 0 marginal.

No sparse or marginal Sections for this source.

Hoecker & Davis

Covers all 51 vegetation classes incl. grassland/shrubland/barren, so coverage is broad (not forest-restricted).

Total points: 62,689,815 across all Sections with data.

Coverage flags. 0 of 90 Sections with data are sparse (<500 points) and 0 marginal (500-1000); at Province grain, 0 of 18 are sparse and 0 marginal.

No sparse or marginal Sections for this source.

6 · Distributions

Per source: exact SQL-binned histograms of every grid cell’s value across the western extent (full min-to-max range, so sentinels show up as isolated bars at the edges), with the RCP-4.5 / SSP2-4.5 projection overlaid (outline) on the baseline (filled). The bars are counts of individual grid cells by value - pooled across all Sections, not per-Section - so they show the overall shape of the data, where its mass sits, and how that mass shifts under projection, which is what makes them useful for spotting sentinels and sanity-checking ranges. (The percentile-distinctiveness signal the engine uses works within each Section’s own distribution, which a pooled histogram doesn’t show directly; this view is for range and shape QC.) Hoecker is single-series (one turnover score, no baseline/projection pair). Full set: distributions.pdf.

Watch: Davis recruitment columns must sit in [0, 1], and the low-severity recruitment distribution should sit to the right of (higher than) its paired high-severity one; swe_mam, pab, and the Anderegg fire layer spike at zero by ecology (not a sentinel); freeze-date variables should stay within a plausible day-of-year band.

Climate Toolbox

Variable Season Units
High Fire Danger Days summer (JJA) days (FM100 < 20th pctile)
High Fire Danger Days fall (SON) days (FM100 < 20th pctile)
Percent Area Burned annual % burned/yr
Maximum Temperature summer (JJA) °F
Very Large Fire Potential summer (JJA) very-large-fire index
Very Large Fire Potential fall (SON) very-large-fire index
Vapor Pressure Deficit summer (JJA) kPa
Climatic Water Deficit summer (JJA) inches
Precipitation annual inches
Precipitation summer (JJA) inches
Soil Moisture summer (JJA) inches
Snow Water Equivalent (spring) spring (MAM) inches
Growing Degree Days (base 41°F) annual GDD (base 41°F)
Minimum Temperature winter (DJF) °F
First Fall Freeze annual day of year
Last Spring Freeze annual day of year
Number of Warm Days annual days > 86°F
Mean Temperature annual °F

Anderegg et al. 2022

Variable Season Units
Annual Burn Area Risk NA expected fraction burned/yr
Climate-Stress Mortality Risk NA fraction of basal area/yr
Insect-Driven Mortality Risk NA fraction of basal area/yr

Davis et al. 2023

Variable Season Units
Post-Fire Recruitment - Ponderosa / Jeffrey pine (low-severity fire) NA probability (0-1)
Post-Fire Recruitment - Ponderosa / Jeffrey pine (high-severity fire) NA probability (0-1)
Post-Fire Recruitment - Douglas-fir (low-severity fire) NA probability (0-1)
Post-Fire Recruitment - Douglas-fir (high-severity fire) NA probability (0-1)
Post-Fire Recruitment - White / Grand fir (low-severity fire) NA probability (0-1)
Post-Fire Recruitment - White / Grand fir (high-severity fire) NA probability (0-1)
Post-Fire Recruitment - Lodgepole pine (low-severity fire) NA probability (0-1)
Post-Fire Recruitment - Lodgepole pine (high-severity fire) NA probability (0-1)
Post-Fire Recruitment - Engelmann spruce (low-severity fire) NA probability (0-1)
Post-Fire Recruitment - Engelmann spruce (high-severity fire) NA probability (0-1)
Post-Fire Recruitment - Subalpine fir (low-severity fire) NA probability (0-1)
Post-Fire Recruitment - Subalpine fir (high-severity fire) NA probability (0-1)

Davis recruitment thresholds are species-specific - a thresh_high/thresh_low pair per species group from Davis et al., not a single global cutoff - so read each panel against its own likely / marginal / unlikely zones. Sanity checks: values stay in [0, 1], and each low-severity median sits above its paired high-severity median.

Holden et al. 2024

Variable Season Units
Potential Soil-Surface Temperature (95th pct) NA °F
Thermal Probability of Regeneration (10% canopy) NA probability (0-1)
Thermal Probability of Regeneration (20% canopy) NA probability (0-1)

The dashed line marks the 0.58 regeneration-viability threshold (the optimal classification cutoff from Holden et al.): below 0.58 a site is thermally marginal/unsuitable for forest. Holden has no stored binary layer - 0.58 is the binary. Where 140 F (60 C) falls within a PSST panel’s range, that lethal soil-surface band is also marked.

Hoecker & Davis

Variable Season Units
Vegetation Vulnerability (Bray-Curtis turnover) NA dissimilarity (0-1)

Hoecker’s score is a Bray-Curtis dissimilarity between contemporary and projected +2 C composition, scaled 0-1: 0 = no compositional change (future identical to today), 1 = complete turnover. Unlike the other sources it is itself a change metric with no separate baseline/projection pair (baseline dissimilarity is implicitly 0), which is why it gets a single-series histogram.

Open questions for the sensitivity & RAD logic

This QC pass raises two questions worth settling before the trigger logic is wired in. They matter more than the standing data caveats, which are noted briefly at the end.

1. How should thin Sections be handled? The percentile-distinctiveness signal needs enough cells in a unit for a stable tail; below ~500 the 99th percentile is noisy, and a handful of Sections (and, for the masked sources, more than a handful) fall under that. Pooling to Province grain reduces the problem but does not eliminate it. The choice isn’t obvious: do we (a) fall back to Province context whenever a Section is thin, accepting a coarser comparison; (b) withhold the percentile signal for that layer in that Section and let the threshold signal carry it; or (c) define an explicit “insufficient data” state that suppresses the trigger rather than firing on noise? Option (c) is the most honest but needs a fallback so a thin Section isn’t simply silent - perhaps a Province-level percentile with a confidence flag. This is a Signal 1 (percentile) problem specifically; the threshold signal is unaffected.

2. How should overlapping sensitivities be triggered gracefully? Many variables feed more than one sensitivity (max temperature and VPD into both Fire Risk and Seedling Survival; min temperature and growing-degree-days into Insect & Disease and Seedling Survival; Davis into three), as the Sensitivity column in Section 1 shows. A naive “flag the sensitivity if any of its variables fires” double-counts shared drivers and lets a sensitivity with more associated variables dominate. The concern-score normalization (proportion of a sensitivity’s variables flagged) is a start, but the cleaner question is how shared variables should contribute - once, weighted, or per-sensitivity - so that a single hot driver doesn’t light up three sensitivities and crowd the top-3 ranking. This is the place to design the trigger logic deliberately rather than inherit it.

Standing data caveats. Value-map fills are Section medians (a QC view, not the delivered point value). Projection horizons differ by source (see Overview). The Anderegg baseline is modeled ~2020s, not observed, and its fire layer is a per-pixel expected annual burned fraction. VLFP is RCP-8.5-only at source, so only its baseline is shown. Holden PSST is potential exposed post-disturbance soil-surface temperature, not a canopy climate. Prasad is ~20 km, too coarse for Section-grain stats, and its established filter uses the 4.5 Occupied tag as a baseline-presence proxy. Two edge Sections (313D, 413E) fall below 500 pixels.