Listening for events…

Scope Freeze — Neutron Monitor Locationdex (neutron_monitor)

Status: FROZEN 2026-06-19 · Kind: neutron_monitor · Family: Locationdex (the third dex family; slot = a place). Brick A of the build. Owner: Mike (rulings) + Claude (engine room).

This is the pilot kind for the Locationdex family (docs/locationdex-framework.md). Mike's ruling 2026-06-19: when the Locationdex idea came up for safecast radiation, safecast turned out to be ~half mobile drive-surveys (a roving sensor is not a location), so it is a poor first test. Pilot the family on a clean fixed-station network instead, where every slot is unambiguously a place. Mike picked NMDB neutron monitors from four candidate networks.

The one decision a Locationdex scope must make: what is a slot

A slot is one neutron-monitor station — a fixed geographic site that hosts a cosmic-ray detector and reports a continuous count-rate series. Slot ID = the NMDB station code (OULU, JUNG, SOPO, …). This mirrors how an Eventdex slot is one event and a Yeardex slot is one year: here the addressable thing is a place.

A station is a place, so unlike a year ("a year is not a place", Yeardex is sweep-none) a Locationdex slot could later support a spatial sweep (what else did our sensors see near this station). For this pilot the slot is catalog + measured-series summary; the spatial sweep is deferred-v2.

Roster (deep pull, not the thin live slice)

The live nmdb_cosmic_rays fetcher hard-codes 6 reference stations (4 have staged data). The full NMDB network is larger. Per the no-spiking rule (feedback_no_spiking_global), the spine is a deep pull of the full published roster: parsed straight from the NMDB station registry (https://www.nmdb.eu/nest/help.php station table for code/name/country/cutoff-rigidity/altitude, plus per-station pages and the help-page map markers for coordinates).

Result: 64 stations, 22 countries, 100% with coordinates. (A small-model read of the page guessed "71"; the authoritative HTML table parse gives 64 — the roster is parsed programmatically, not retyped, so the count is the real one.) Coordinate provenance is recorded per station: 51 from station pages, 10 from the registry map, 3 inherited from a co-located "bare"-detector twin (DOMB→DOMC, ICRB→ICRO, MWSB→MWSN). South Pole detectors (SOPO/SOPB) carry lon = 0 by convention (longitude is undefined at the pole; lat −90 locates them).

Slot contents (frozen)

Each station slot carries:

  • Identity: station code, full name, country.
  • Place: latitude, longitude, altitude (m), and coord_src provenance.
  • Instrument character: effective vertical cutoff rigidity (GV) — the station's permanent geomagnetic sensitivity, what makes one neutron-monitor site different from another.
  • Measured-series summary (cited to nmdb_cosmic_rays): count of staged observations, first/last observation time, mean/min/max recorded flux, unit. Stations with no staged series yet carry a null summary and has_series = false — they are real registry places we hold but do not yet stream.
  • Citations: nmdb_stations (the registry) + nmdb_cosmic_rays (the flux series), per the universal multi-source cited-slot rule.

Measured-reality call: IN

A neutron-monitor count rate is a direct measurement of secondary cosmic-ray flux at that place; the registry is the recorded fact of where the instrument sits. No model, no projection. IN, the same posture as fema/landuse (records of what is, cited to the keeper of record).

Storage

  • Spine source nmdb_stations (registry; active=False — a roster is revised occasionally, not a 60-second feed; re-run the reload to refresh). One observation per station, with lat/lon (a place, unlike a Yeardex year-slot whose geo stays null), metadata in extra_json.
  • Slots in data/location_storehouse/neutron_monitor/<code>.json, a third sibling of event_storehouse/ and year_storehouse/, reusing the shared event_storehouse write + disk-rebuilt-index machinery via its base_dir argument.

Frozen vs open

Frozen (2026-06-19): slot = one station; slot ID = station code; full-roster deep pull (64 stations); slot contents above; measured-reality IN; location_storehouse layout.

Open / deferred-v2: the spatial sweep (a station is a place, so "what else did we measure near it" is buildable later); enriching the live nmdb_cosmic_rays fetcher to stream all 64 stations rather than 6; bringing safecast in later as the "binned mobile" Locationdex special case.

Live Feed