Data & Methods
Data source
All diagnostics on this site are built from ERA5 hourly atmospheric reanalysis, downloaded from the Copernicus Climate Data Store.
- Spatial extent: 15°N–45°N, 125°W–95°W (the Southwest US and northern Mexico)
- Temporal coverage: 1991–2025, June through October each year
- Pressure levels: 250, 500, 700, and 850 hPa
- Variables: geopotential and specific humidity at each level, plus total column water vapor (TCWV) from the single-levels product
Hourly data is collapsed to four daily time slices (00Z, 06Z, 12Z, 18Z) and averaged into a single daily value per pixel, per variable, per level. Geopotential is converted to geopotential meters (÷ 9.80665); specific humidity is converted to g/kg (× 1000).
Climatological baseline
“Normal” means the 1991–2025 mean for that exact calendar day, computed independently for every pixel, then smoothed with a 5-day rolling window along the time axis to reduce day-to-day sampling noise. Every anomaly shown anywhere on this site — daily dashboard, Hovmöller, or 5-day grid — is the actual value minus this same pixel-by-pixel baseline.
Ridge (“H”) detection
The monsoon ridge marker is found with a two-pass focal-smoothing search over the 500 hPa height field, restricted to a search box that excludes the Pacific subtropical high so it isn’t mistaken for the NAM ridge:
- Macro pass: a broad 15×15-cell smoothing identifies the general high-pressure region, then isolates the single largest contiguous patch within 10 m of that region’s maximum height.
- Micro pass: within that patch, a finer 5×5-cell smoothing pinpoints the exact centroid — the cells within 2 m of the local maximum — which becomes the plotted “H” position.
This two-stage approach keeps the ridge marker stable day to day instead of jumping to a noisy single-pixel maximum.
Daily dashboard
Each year page’s daily player is a four-panel figure: observed TCWV/Z500/Q700 with the tracked ridge (top-left), that day’s anomaly vs. the 1991–2025 baseline (bottom-left), the precipitation that day’s atmospheric setup produced (top-right), and its anomaly (bottom-right).
The precipitation panels are deliberately offset one calendar day from the atmospheric panels. ERA5’s “day D” (the 00/06/12/18Z UTC mean) covers roughly 5–6pm local on day D−1 through late morning on day D — overnight into the following morning, missing day D’s own afternoon convection entirely. NOAA CPC’s precipitation “day D” file, by contrast, is a 12Z-to-12Z UTC accumulation (roughly 5–6am local day D−1 through 5–6am local day D), so it’s dominated by rain that fell the previous afternoon and evening, not day D’s. Pairing the two datasets under the same date label would show the atmospheric setup for day D next to rain that mostly fell the day before. Instead, the precipitation panels pull CPC’s day D+1 file, which is the one that actually contains day D’s own afternoon/evening convective window — so what’s shown is the rain that the displayed atmospheric setup produced, not leftover rain from the day prior. The precipitation panel title always states the actual CPC date it’s drawing from, and the figure’s footnote spells out the offset.
As with the pentad and seasonal summary views, precipitation anomaly is computed against the 1991–2025 5-day-smoothed climatology (not a noisier single-day baseline), and the CPC source’s land-only coverage means the basemap distinguishes true ocean (blue) from dry land (brown) rather than mapping both to one blank color.
Hovmöller diagrams
Each day’s TCWV field is zonally averaged — collapsed across longitude — within a fixed corridor (115°W–105°W, spanning the core Gulf of California moisture pathway) for every latitude row from 15°N to 45°N. Stacking that average by date produces one date-by-latitude image per season, with the 25 kg/m² contour marking the leading edge of monsoon-relevant moisture. The same procedure applied to the climatological baseline gives the dashed “normal” line plotted alongside the observed one.
5-day pentad grids
The season is divided into 25 consecutive 5-day blocks running June 10 through October 12 (the same blocking used in the climatology grid on the Basics & Climatology page). The absolute grid shows each block’s mean TCWV, Z500, and Q700; the anomaly grid shows that same block’s mean values minus the equivalently-blocked 35-year baseline, computed pixel by pixel — not just a difference of two already-averaged maps. The precipitation grid shows each block’s total rainfall (a sum, not a mean, since it’s a 5-day accumulation) from the same CPC gauge-based precipitation source used in the Seasonal Summary tab, with the Absolute grid’s TCWV and Q700 isolines overlaid so atmospheric moisture and realized rainfall can be read side by side, block by block. The precipitation anomaly grid shows that same 5-day total minus the 1991–2025 precipitation climatology, using the same brown (dry) → white (normal) → teal (wet) scale as every other anomaly on this site, scaled to a 5-day rather than season-long range.
Full-season summary
Each year page’s Seasonal Summary tab compresses the whole June–October season into a four-panel report card: mean atmospheric state, precipitation total, atmospheric anomaly footprint, and precipitation anomaly.
Precipitation comes from NOAA CPC’s Global Unified Gauge-Based Analysis of Daily Precipitation — a 0.5° global daily analysis built from roughly 30,000 gauge reports, covering 1979–present. It’s a different source and grid than the ERA5 atmospheric fields, so it’s downloaded, cropped, and baselined independently (src/13_download_precip.R, src/14_process_precip_climatology.R), using the same 1991–2025 calendar-day baseline convention as the rest of the site — not NOAA’s own pre-built long-term-mean files, which use different (and shorter) base periods.
The mean-state panel marks a single season-mean ridge position (“H”), computed the same two-pass focal-smoothing way as the daily ridge detection but run once on the season-mean 500 hPa field rather than once per day. An earlier version of this page traced the ridge’s day-by-day path across the whole season; that turned out to be too visually noisy to read, so it was replaced with this single seasonal marker.
Tropical cyclone tracks
Named storm tracks (position, name, and classification) come from NOAA NCEI’s IBTrACS best-track archive — the Eastern North Pacific and North Atlantic basins, 1991–present, cached locally by src/21_fetch_tropical_tracks.R. Tracks are not geographically pre-filtered to the NAM domain; the full basin history is kept so a storm’s approach is visible before it crosses into whatever figure is showing it.
Each track position carries a storm classification from NOAA’s usa_status field, simplified on this site to two stages:
- Tropical — the system is currently a tropical depression, tropical storm, or hurricane (
TD,TS,HU/HR). - Post-Tropical — the system is no longer a fully tropical cyclone: extratropical (
EX), post-tropical (PT), a remnant low that’s neither tropical, subtropical, nor extratropical (LO), a subtropical depression/storm (SD/SS), a tropical wave (WV), a disturbance (DB), dissipating (DS), moved inland (IN), or unclassified (XX).
Not every storm shows a Post-Tropical stage — NOAA stops issuing best-track positions once a system’s circulation is no longer identifiable, so a storm that dissipates quickly (for example, crossing mountainous terrain) may simply end rather than continuing on as a marked remnant low.
The overlay appears on the daily dashboard, 5-day pentad grids, and full-season summary — Observed panel only, in each case — as a colored track that switches from solid to dashed at the tropical/post-tropical transition. On the Hovmöller diagram, rather than a full track, colored points mark each day a storm’s position fell within the same longitude corridor the diagram zonally averages over, labeled at the storm’s northernmost point within that corridor.
Color conventions
- TCWV, observed: brown → cream → green → teal → blue → purple, 5–65 kg/m²
- TCWV, anomaly: brown (dry) → white (normal) → teal (wet), ±15 kg/m²
- Z500 height contours: gray, 5500–6000 m
- Z500 anomaly contours: steelblue dashed (negative / trough), hotpink solid (positive / ridge)
- Precipitation, observed: pale yellow → green → blue, 0–400 mm (season total)
- Precipitation, anomaly: the same brown (dry) → white (normal) → teal (wet) scale used for TCWV anomalies, ±150 mm (season total) — deliberately reused so “brown = dry, teal = wet” means the same thing everywhere on the site, regardless of variable
- Tropical cyclone tracks: magenta, solid while Tropical; cyan, dashed once Post-Tropical
These conventions are held constant across the daily dashboard, Hovmöller diagrams, pentad grids, and seasonal summary so a color always means the same thing no matter which view you’re looking at.
ENSO status (RONI)
Each season page shows a 5-cell heat strip (June–October) of the Relative Oceanic Niño Index (RONI), NOAA CPC’s current standard ENSO diagnostic (it replaced the older ONI in February 2026). RONI is a 3-month running-mean Niño 3.4 sea-surface-temperature anomaly, relative to the 1991–2020 base period; each monsoon month uses its centered 3-month value (June = MJJ, July = JJA, August = JAS, September = ASO, October = SON). The same ±0.5°C thresholds used for the legacy ONI still apply: values at or above +0.5°C are El Niño, at or below −0.5°C are La Niña, and anything in between is Neutral.
This is shown as background context for each season, not as a predictor built into any of the other diagnostics — the ENSO–NAM relationship is a modest modulator at best, nothing like the strong ENSO signal seen in Southwest winter precipitation. Data comes from NOAA CPC’s RONI table via src/12_fetch_enso_roni.R, cached locally so page generation doesn’t depend on a live connection to NOAA.
Reproducibility
The full processing pipeline — download, daily aggregation, climatology, anomalies, and every figure on this site — is implemented in R (terra, ecmwfr, ggplot2, tidyterra, patchwork) and lives in the project’s src/ directory, numbered in pipeline order from data download through figure generation.
The full source code, including the R processing pipeline and this Quarto site, is available on GitHub: github.com/mcrimmins/monsoonTracker.
Much of this site’s code and written content was developed with the assistance of Claude (Anthropic), specifically Claude Sonnet 5, working interactively with Mike Crimmins.
Period of record & planned improvements
This site currently covers 1991–2025 as a fixed historical archive — it is not a live monitor, and the record does not yet extend into the current season. Planned improvements include:
- Extending the period of record back to 1979, the start of the modern ERA5-compatible reanalysis era, to roughly double the climatological sample.
- Precipitation-based metrics — now included in the Seasonal Summary tab, the 5-day pentad grids, and the daily dashboard.
- Surface station analyses, pairing reanalysis fields with observed station data at key monsoon-corridor locations.
- Near-real-time monitoring, so the current season updates automatically as it unfolds rather than requiring a full-season reprocessing.