x02·intermediate

Where will the aurora be visible tonight?

Earth Science Heliophysics
atmosphere Datasets: 1 20–45 min
The synthesis

Watch the solar wind leave the Sun (Heliophysics), then catch the aurora it triggers in Earth's night imagery (Earth). One physical chain, two divisions.

The aurora (the "northern lights") is a glow in the night sky that appears when a stream of charged particles from the Sun slams into the air high above Earth's poles. From orbit, a satellite looking down at the dark side of the planet can actually *see* that glow as faint light over places where the ground should be pitch black. So you're hunting for unexpected brightness in nighttime satellite imagery, then tracing it back to the storm of solar particles that set it off.

Where will the aurora be visible tonight?

The aurora (the “northern lights”) is a glow in the night sky that appears when a stream of charged particles from the Sun slams into the air high above Earth’s poles. From orbit, a satellite looking down at the dark side of the planet can actually see that glow as faint light over places where the ground should be pitch black. So you’re hunting for unexpected brightness in nighttime satellite imagery, then tracing it back to the storm of solar particles that set it off.

Which data to use, and how

Use this dataset: VIIRS Black Marble / Day-Night Band (short name VNP46A2). The Day/Night Band is a sensor tuned to be so light-sensitive it picks up city lights, moonlight, and auroral glow at night. Start here because the aurora shows up as a feature you can look at directly.

Then do these steps (the runnable cell further down does this on stand-in data; this is just the idea):

  1. Pick a polar region in its long night. Somewhere near the Arctic or Antarctic during the dark winter months, so there’s no daylight drowning out the faint glow.
  2. Pull the night imagery for the nights you care about, and look for diffuse brightness spread across the sky where there are no city lights to explain it. That arc of glow is the aurora.
  3. Find when a storm hit. Check the solar-wind early-warning data (the DSCOVR bridge, described below) for a sudden jump in particle speed or a flip in the magnetic field. That’s the trigger for a geomagnetic storm.
  4. Line the two up. Match the bright auroral night in the imagery to the solar-wind shock that arrived ~30–60 minutes earlier. That connects the effect you see from orbit to its cause out in space.

Below, “How a scientist answers this” names the exact tools, and the Run it cell does it live on synthetic data so you can see each step work.

What you can find out

  • See the aurora directly. The auroral glow shows up in the VIIRS Day/Night Band over the polar night.
  • Connect a bright auroral night to its cause. Match it to the solar-wind shock that triggered it, so you can see one physical chain from Sun to sky.

What it can’t tell you

  • Exactly what the aurora will look like hours from now. Predicting the precise shape and position of the curtains ahead of time needs a full model of Earth’s magnetic environment (a magnetosphere model). The imagery only shows you what already happened.
  • The aurora when it’s cloudy. The night band can’t see through clouds; on a cloudy night it just images the tops of the clouds, and the glow underneath is hidden.

Gotchas to watch for

  • You need real darkness. The Day/Night Band reads faint light, so daylight, twilight, or even a bright moon can wash out the aurora. Stick to the deep polar night (winter months near the poles) for the cleanest view.
  • Cloud cover blocks the glow. Clouds sit between the satellite and the aurora, so a cloudy scene tells you nothing about the lights below. Pick clear nights, or check several nights so a clear one fills the gap.
  • The cause arrives before the effect. The solar wind is measured a million miles upstream (the DSCOVR spacecraft), so its readings lead the aurora by ~30–60 minutes. When you match them up, expect that time offset. Don’t look for them at the exact same minute.

The real-data code

The Run it cell above runs the method on synthetic data with no login. Below is the whole recipe against the real archive: search the polar night imagery, open each granule, find diffuse glow over dark ground, pick the brightest night, and plot it. It needs a free Earthdata Login.

import earthaccess, numpy as np, xarray as xr
import matplotlib.pyplot as plt

earthaccess.login(strategy="netrc")

# A polar region in its long winter night (West, South, East, North) —
# here, northern Scandinavia / the Arctic, in the dark winter months.
aoi = (10.0, 65.0, 30.0, 75.0)

# 1. Find VIIRS Black Marble Day/Night Band granules over the polar night.
grans = earthaccess.search_data(short_name="VNP46A2", bounding_box=aoi,
                                temporal=("2024-12-01", "2025-02-28"))
print(f"{len(grans)} nights found")

# 2. Open each gridded HDF5-EOS granule and read the nightly radiance.
#    VNP46A2 stores moonlight-corrected DNB radiance plus a mandatory QA
#    flag; we keep only clear, snow/cloud-free, good-quality pixels.
def glow_over_dark_ground(fh):
    ds = xr.open_dataset(fh, group="HDFEOS/GRIDS/VNP_Grid_DNB/Data Fields",
                         engine="h5netcdf")
    rad = ds["Gap_Filled_DNB_BRDF-Corrected_NTL"].astype("float32") * 0.1
    qa  = ds["Mandatory_Quality_Flag"]            # 0 = high quality
    rad = rad.where((rad > 0) & (rad < 6553) & (qa == 0))
    # City lights are bright, compact, persistent. The aurora is faint and
    # diffuse: subtract the per-scene median (the steady lit background) and
    # keep the broad, low-level excess spread across otherwise-dark ground.
    background = float(rad.median())
    excess = (rad - background).where(rad < 5 * background)   # drop city cores
    return float(excess.where(excess > 0).mean()), rad

# 3. Score every night by its diffuse excess brightness; the peak night is
#    the auroral candidate to line up against the DSCOVR solar-wind shock.
scores, scenes = [], []
for fh in earthaccess.open(grans):
    s, rad = glow_over_dark_ground(fh)
    scores.append(s); scenes.append(rad)
scores = np.array(scores)
peak = int(np.nanargmax(scores))

# 4. Verdict + plot the brightest night's imagery.
print(f"Brightest diffuse glow on night #{peak} of {len(scores)} "
      f"(excess radiance {scores[peak]:.3f} nW/cm2/sr) — aurora candidate")
fig, (a1, a2) = plt.subplots(1, 2, figsize=(11, 4))
a1.plot(scores, marker="o"); a1.axvline(peak, ls="--", c="r")
a1.set_xlabel("night"); a1.set_ylabel("diffuse excess radiance")
scenes[peak].plot(ax=a2, cmap="magma", vmax=float(np.nanpercentile(scenes[peak], 99)))
a2.set_title("brightest polar night"); plt.tight_layout(); plt.show()

# Cross-check: a true aurora should line up with a DSCOVR solar-wind shock
# arriving ~30-60 min earlier (see the bridge below). A clear, moonless night
# is essential — moonlight or clouds (gotchas above) mimic the same diffuse glow.

Where the data comes from

This question spans two NASA divisions that usually live apart. The Earth side is the VIIRS Day/Night Band, archived at LAADS, which photographs the auroral glow during polar night. The Heliophysics side is DSCOVR, a spacecraft parked a million miles upstream at the L1 point between Earth and the Sun. Its plasma-magnetometer measures the incoming solar wind ~30–60 minutes before it reaches Earth, giving the physical cause for the auroral effect seen from orbit. One physical chain, two divisions.

Sources

How a scientist answers this
Parameters
VIIRS Day/Night Band radiance from Black Marble VNP46A2 (nW·cm⁻²·sr⁻¹, ~500 m) imaging auroral emission during polar night; solar-wind driver from DSCOVR plasma/magnetometer at L1 (speed km·s⁻¹, density, and Bz interplanetary magnetic-field component in nT) ~30–60 min upstream.
Method
Identify auroral glow in the DNB over the night side (separating it from city lights and clouds by location and morphology), and time-align a bright auroral night with the preceding DSCOVR solar-wind shock — a southward Bz and elevated speed/density — to connect cause to effect.
Validation
Confirm DNB brightening is aurora and not moonlit cloud or anthropogenic light using the moon-phase/cloud QA flags, and corroborate timing against the Kp/geomagnetic index; note the DNB still sees cloud tops so overcast hides the curtain.
In plain EnglishThe night-vision satellite band shows the aurora glowing over the dark polar regions, and a space-weather sensor upstream of Earth shows the solar-wind gust that lit it up about half an hour earlier.

Make it yours → Pick the night and polar AOI in the notebook and pull the matching DSCOVR solar-wind window.

🧪 Virtual Mock Lab stand-in data · runs in your browser · no login

A safe place to practise the method on GPM_3IMERGM. The code is the real earthaccess workflow, but we feed it stand-in data shaped like the real product — so you can run it, change the numbers, and break it without an account. When you want the real data, use the recipe under “The real-data code” above, or download the notebook below.

editable · runs in your browser

From another NASA division

Heliophysics
DSCOVR Solar Wind (Plasma-Magnetometer)
Solar-wind speed and magnetic field measured a million miles upstream — the ~30–60 min early warning for geomagnetic storms.
DSCOVR_PlasMag · L1, real-time
Recipe ready · not yet run The recipe and the Virtual Mock Lab above are ready to use. We haven't yet run this question end-to-end on real data, so it has no verified answer yet — only the questions we've actually computed carry one. That's the honest line between a method and a result.