q35·intermediate

When a dust storm blows in, how bad is the air — and who's downwind?

atmosphereair-qualitypublic-health Datasets: 3 30–60 min
Find the data for your area

Draw a rectangle to pick your area of interest, then see what NASA data covers it (live, here in your browser) or download a ready-to-run notebook with your AOI pre-filled. The notebook runs in any Python environment — it needs a free Earthdata Login to fetch the data.

Current AOI: -30, 12 → -18, 22 (Tropical Atlantic off West Africa (Saharan dust))

A big dust outbreak is one of the few air-quality events you can watch from space as it happens — a brown river of Saharan dust pouring off West Africa and riding the trade winds across the Atlantic. NASA's **MERRA-2** reanalysis (`M2T1NXAER`) gives an hourly, global map of how thick the dust is in the air and how much of it is down at the surface where people breathe it, going back to 1980 — so you can follow one storm hour by hour and see where the plume is headed. **Verified locally.** For the tropical Atlantic off West Africa (12–22 °N) during the June 2020 "Godzilla" Saharan plume, the MERRA-2 `DUEXTTAU` field (dust [aerosol optical depth](/glossary/aerosol-optical-depth/) at 550 nm) read a **peak of 3.48** (area mean 1.71) at 17:30 UTC on 18 Jun 2020 — an extraordinarily opaque sky, since an AOD above ~1 already means heavily hazed sun. The companion `DUSMASS25` field (surface dust in the PM2.5 size range) peaked around **341 µg m⁻³** in the same box — many times any healthy daily air-quality limit, if that surface concentration were over a populated coastline.

When a dust storm blows in, how bad is the air — and who’s downwind?

A big dust outbreak is one of the few air-quality events you can watch from space as it happens — a brown river of Saharan dust pouring off West Africa and riding the trade winds across the Atlantic. NASA’s MERRA-2 reanalysis (M2T1NXAER) gives an hourly, global map of how thick the dust is in the air and how much of it is down at the surface where people breathe it, going back to 1980 — so you can follow one storm hour by hour and see where the plume is headed.

Verified locally. For the tropical Atlantic off West Africa (12–22 °N) during the June 2020 “Godzilla” Saharan plume, the MERRA-2 DUEXTTAU field (dust aerosol optical depth at 550 nm) read a peak of 3.48 (area mean 1.71) at 17:30 UTC on 18 Jun 2020 — an extraordinarily opaque sky, since an AOD above ~1 already means heavily hazed sun. The companion DUSMASS25 field (surface dust in the PM2.5 size range) peaked around 341 µg m⁻³ in the same box — many times any healthy daily air-quality limit, if that surface concentration were over a populated coastline.

What you can answer

  • How thick the dust is overhead right now (or any past hour back to 1980)DUEXTTAU, the dust-only optical depth at 550 nm (unitless; higher = more dust blocking the sun)
  • How much dust is down at breathing levelDUSMASS25 (PM2.5-size surface dust) and DUSMASS (total), in kg m⁻³; multiply by 1e9 for µg m⁻³
  • Where the plume is heading, hour by hour — step through the hourly granules and watch the centre of mass move west across the ocean with the trade winds
  • Roughly how many people sit downwind — overlay WorldPop population on the plume’s path to estimate exposed populations along a coastline or city
  • Whether satellites saw the same thing — cross-check the reanalysis against MODIS MOD04 aerosol optical depth retrieved directly from the imagery

What you can NOT answer with these datasets alone

  • The exact PM2.5 a person actually breathed — MERRA-2 is a ~50 km model reanalysis, not a street-level monitor; local terrain, indoor air, and microclimate all matter
  • Health outcomes — high dust raises respiratory and cardiovascular risk, but linking a plume to ER visits needs hospital/clinic data, not satellites
  • Dust vs. other pollutionDUEXTTAU is dust-specific, but real air also carries smoke, sea salt, and industrial particles that change what “bad air” means locally
  • Sub-50 km detail — a single neighbourhood, valley, or near-source dust devil is finer than the grid; pair with ground monitors or higher-resolution imagery
  • Future forecasts — this is a reanalysis of what already happened, not a forward forecast; use an operational dust forecast model for “tomorrow”

Code template (Python, cloud-direct)

Verified locally. M2T1NXAER is a global hourly NetCDF of MERRA-2 aerosol diagnostics; open one granule lazily and slice your bounding box before reading. DUEXTTAU is unitless dust optical depth; DUSMASS25 is surface PM2.5-dust in kg m⁻³ (× 1e9 → µg m⁻³).

import os, re, earthaccess, xarray as xr, numpy as np

# load Earthdata creds from .env without `source` (passwords can break the shell)
for line in open(".env"):
    m = re.match(r'\s*(?:export\s+)?([A-Z0-9_]+)\s*=\s*(.*)\s*$', line)
    if m: os.environ.setdefault(m.group(1), m.group(2).strip().strip('"').strip("'"))
earthaccess.login(strategy="environment")   # free Earthdata Login

W, S, E, N = -30, 12, -18, 22               # tropical Atlantic off West Africa
g = earthaccess.search_data(short_name="M2T1NXAER",
                            temporal=("2020-06-18", "2020-06-22"),
                            bounding_box=(W, S, E, N))

ds  = xr.open_dataset(earthaccess.open(g[:1])[0])
sub = ds.sel(lon=slice(W, E), lat=slice(S, N))

aod = sub["DUEXTTAU"]                        # dust optical depth (unitless)
print("dust AOD  peak:", round(float(aod.max()), 2),
      " mean:", round(float(aod.mean()), 2))

pm  = sub["DUSMASS25"] * 1e9                 # surface PM2.5 dust, µg m⁻³
print("surface dust peak:", round(float(pm.max()), 1), "µg/m³")

# follow the plume: loop the hourly granules, slice the same bbox each hour,
# and overlay WorldPop population along the downwind coastline to estimate exposure
How a scientist answers this
Parameters
Hourly MERRA-2 aerosol diagnostics (M2T1NXAER, global, 1980–): dust aerosol optical depth at 550 nm (`DUEXTTAU`, unitless) overhead and surface dust mass (`DUSMASS25` for PM2.5-size, `DUSMASS` total, kg m⁻³; ×1e9 for µg m⁻³) at breathing level; MODIS AOD (MOD04) for independent satellite confirmation and WorldPop for population downwind.
Method
Extract the hourly `DUEXTTAU` and `DUSMASS25` fields over the plume box to follow the storm in time (peak and area-mean), map the plume's advance hour by hour, and overlay WorldPop to estimate population under surface-dust concentrations exceeding health limits; an AOD > ~1 indicates heavily hazed skies.
Validation
Cross-check MERRA-2 dust AOD against independent MODIS MOD04 satellite AOD (clear-sky only), recall MERRA-2 is a reanalysis (model + assimilation) so surface PM2.5 is modeled not measured, and compare against ground PM monitors where available before drawing health conclusions.
In plain EnglishFollow the dust hour by hour — how thick it is overhead and how much is down where people breathe — and lay a population map underneath to see who's downwind in the worst of it.

Make it yours → Set the plume bounding box, the storm dates/hours, and the surface-dust health threshold in the notebook for your event.

Run the core method · no login

The correlation between two signals at the heart of this question — runnable on synthetic data, right here. The full earthaccess code template further down does it on real NASA data (needs an Earthdata login).

editable · runs in your browser

Datasets used