Forecast & truth on one common grid (Zarr v3 via zarrita.js + deck.gl);
pairs computed live in the browser (fcst − truth), stats via DuckDB-WASM, streamed from
Cloudflare R2. ← gallery
loading…
—
––
Verification statistics — DuckDB-WASM over metplus_stat.parquet
Pick any slice of the full 1.53 M-row stat archive — one SQL query, HTTP range reads over
the Parquet, all client-side. (Models de-identified; the regional WRF run shows as WRF-REG.)
initializing DuckDB-WASM…
Honesty note: SQL AVG(stat_value) across cycles is a
mean of per-cycle statistics — a quick look, not MET's ratio-of-sums aggregation (which needs the raw
partial sums; the gallery's stat apps do it exactly). Trends and model ordering read the same; absolute values
can differ slightly.
IO monitor — what did this page actually transfer?
—
time to first map frame
—
map/store range-GETs · MB
—
Parquet range-GETs · MB
—
last SQL query
page-context store reads metered directly; Parquet reads happen inside the
DuckDB worker and are metered by a pass-through service worker (no caching).
Live verification — computed in the browser from the raw grids
Current difference frame (forecast − truth over the common grid) — the "pairs" MET would
write to _pairs.nc, here derived live by subtracting two same-grid arrays. Select
Difference above and scrub.
—
matched cells
—
bias (fcst − truth)
—
RMSE
—
MAE
Parity oracle — the browser recomputes MET's 2×2 contingency from a real precip case's
matched fcst/obs and checks it against MET's own .stat.