Methodology — how the aurora score is computed
This page documents the algorithm behind the one-word answer ("GO / MAYBE / LOW / NO") on every city page. Reproducibility matters, so the formulae are published in plain text.
1. Inputs (real-time, refreshed at most every 15 minutes)
- Kp index — planetary geomagnetic index, 0–9 integer (NOAA SWPC 3-day forecast + observed).
- Solar wind Bz — north–south component of interplanetary magnetic field (DSCOVR, L1 point, ~30 min leading indicator).
- Solar wind speed and density — DSCOVR real-time.
- Cloud cover — Open-Meteo hourly total cloud, low cloud, and mid cloud at city coordinates.
- Moon phase and illumination — computed locally from Astronomical Algorithms (Jean Meeus).
- Twilight windows — civil/nautical/astronomical, computed from sun position.
- Bortle class — pre-computed grid lookup, city-level value.
- Magnetic latitude — WMM 2025 simplified lookup, city-level.
2. Per-factor score (each 0–10)
Each factor is reduced to a single number. The full mapping is below.
2.1 Kp score
We use a magnetic-latitude-dependent threshold. Thresholds are derived from NOAA OVATION and public empirical studies:
| Magnetic latitude | Kp ≥ | Score |
|---|---|---|
| ≥ 67° | 3 | 10 |
| 60–67° | 4 | 10 |
| 55–60° | 5 | 10 |
| 50–55° | 6 | 10 |
| 45–50° | 7 | 10 |
| < 45° | 8 | 10 |
Kp one unit below threshold = 8; two units below = 5; three below = 2; four below or worse = 0.
2.2 Cloud score
Linear mapping of total cloud cover %: 0% → 10, 20% → 9, 40% → 7, 60% → 4, 80% → 1, 100% → 0. Low cloud is weighted 0.6 vs 0.4 for total cloud (low cloud blocks the aurora more because it sits below).
2.3 Moon score
From lunar illumination %: 0% → 10, 30% → 8, 50% → 5, 70% → 2, 100% → 0. When moon is below horizon at the relevant hour the factor is re-rated to 10.
2.4 Darkness score
Binary check at the focus hour (default 23:00 local): astronomical twilight (sun < −18°) → 10; nautical twilight → 6; civil → 2; day → 0.
2.5 Bortle / light pollution score
Bortle class 1 → 10, 2 → 9, 3 → 8, 4 → 6, 5 → 4, 6 → 2, 7 → 1, 8–9 → 0. Adjusted by ±2 if a bright aurora is expected to wash out skyglow anyway.
3. Total score and label
Weighted sum: Kp × 0.35 + Cloud × 0.25 + Moon × 0.15 + Darkness × 0.15 + Pollution × 0.10.
- GO: total ≥ 7.0 AND Kp score ≥ 8.
- MAYBE: total 5.5–6.9 OR Kp score 5–7.
- LOW: total 4.0–5.4.
- NO: total < 4.0.
4. Best window within the night
For a "GO" or "MAYBE" night we then scan each hour from sunset+90 min to sunrise−30 min, compute the per-hour score, and return the contiguous run with the highest median. The hero line reports this window.
5. Direction and photography
Approximate compass direction (typically north for the auroral oval over Europe / North America, south for Australia / New Zealand) is computed from the city-to-oval-centre great-circle bearing, not from local magnetic north. Photography tips (ISO/shutter) are derived from a lookup based on Kp and Bortle class.
6. Refresh cadence
NOAA updates Kp every 15 minutes (00/15/30/45 past the hour). Open-Meteo updates hourly. We refresh our cache at top of each 15-min mark. Cloud cover forecasts are valid for the next 48 hours, beyond that we degrade gracefully to 27-day Kp-only scoring with a NO label and a banner.
7. Known limitations (read these)
- Substorm onset is not predictable from L1 data alone — we treat "MAYBE" below Kp 6 as honest uncertainty.
- Local tropospheric inversions can clear the sky in <30 min — Open-Meteo's hourly resolution will miss these.
- The OVATION model is empirical, not physical; it is biased slightly low at substorm onset.
- Bortle class is gridded at ~1 km; within a city, large differences exist.