q04·intermediate
Did a wildfire impact downwind air quality, and how far did the smoke reach?
atmospherefireair-qualitypublic-health Datasets: 6 20–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:
-125, 35 → -115, 42 (California + western Nevada)On this page
Did a wildfire impact downwind air quality?
What you can answer
- Fire pixel locations within hours of detection (FIRMS NRT)
- Smoke plume direction + transport distance (OMI UV Aerosol Index, MODIS True Color RGB, TEMPO HCHO)
- Downwind HCHO / NO₂ spike (TEMPO over NA; OMI/TROPOMI globally)
- Burn-scar extent + severity post-event (MCD64A1, HLS NBR)
- Population exposure estimate when combined with gridded population (SEDAC legacy or external)
What you can NOT answer with these alone
- Surface PM₂.₅ concentrations without combining with EPA AirNow or chemistry-transport model
- Health impact — requires epidemiology + exposure modeling beyond pure remote sensing
- Specific particle composition without ground-based or aircraft sampling
Code template
import earthaccess, requests
import xarray as xr
import pandas as pd
earthaccess.login(strategy="netrc")
# Example: California wildfire complex, July 2024
fire_window = ("2024-07-15", "2024-08-15")
aoi = (-125, 35, -115, 42) # CA + western NV
# 1. FIRMS NRT fire pixels — REST API (no auth needed for public NRT)
firms_url = ("https://firms.modaps.eosdis.nasa.gov/api/area/csv/"
f"YOUR_KEY/VIIRS_SNPP_NRT/{aoi[1]},{aoi[0]},{aoi[3]},{aoi[2]}/"
f"7/2024-07-15")
fires = pd.read_csv(firms_url)
# 2. TEMPO HCHO during the event
tempo_hcho = earthaccess.search_data(short_name="TEMPO_HCHO_L2",
bounding_box=aoi, temporal=fire_window)
# 3. MERRA-2 winds at 850 hPa for plume direction
merra = earthaccess.search_data(short_name="M2I3NPASM", # instantaneous 3-hourly
bounding_box=aoi, temporal=fire_window)
# 4. Overlay: fire pixels + HCHO column + wind vectors → smoke trajectory
# 5. MCD64A1 for post-event burned-area scar
burn = earthaccess.search_data(short_name="MCD64A1", bounding_box=aoi,
temporal=("2024-08-01", "2024-09-01"))
Expected output
- Map: fire pixels (red) + HCHO column (purple gradient) + wind vectors → visualizes smoke trajectory
- Time-series: HCHO column averaged over downwind AOI before/during/after the event
- Burn-scar polygon overlaid on pre-event Landsat true-color
Caveats
- FIRMS is NRT, not analysis-grade. Use MCD64A1 (monthly) for the authoritative burn-area record.
- TEMPO HCHO is the smoke chemistry proxy, NOT direct smoke aerosol; pair with MODIS AOD or OMI Aerosol Index.
- PBL height matters. Above the boundary layer, plume disperses faster; check MERRA-2 PBLH for the period.
- Cloud contamination during smoke events is tricky — smoke can look like cloud in some retrievals; check MOD06 cloud flags.
- TEMPO is North America only. Use OMI/TROPOMI for global fires (e.g., Amazon, Siberia, Indonesia).
Cross-DAAC composition
ASDC (TEMPO) + GES DISC (OMI, MERRA-2) + LP DAAC (MCD64A1) + LANCE (FIRMS). Uniform Earthdata Login except FIRMS NRT (separate API key).
Sources
- FIRMS API: https://firms.modaps.eosdis.nasa.gov/api/
- TEMPO HCHO: https://asdc.larc.nasa.gov/project/TEMPO
- MCD64A1: https://lpdaac.usgs.gov/products/mcd64a1v061/
⚲ How a scientist answers this
Parameters
FIRMS near-real-time fire pixels (MODIS+VIIRS, with fire radiative power) to locate the source; TEMPO L2 tropospheric NO2 and HCHO columns (molecules/cm2, hourly over North America) or OMI HCHO + UV Aerosol Index globally as the smoke-chemistry signal; MERRA-2 850 hPa wind and PBL height for advection; MOD06 cloud properties to separate smoke from cloud. MCD64A1 gives post-event burned-area extent.
Method
Build the smoke transport vector from MERRA-2 winds, then compute downwind HCHO/NO2 and Aerosol-Index anomalies as the departure of the event-period column from a pre-fire (or same-season climatological) baseline along the plume axis; transport distance is the along-wind extent where the Aerosol Index exceeds its background threshold. Use the aerosol index plus MOD06 to mask cloud so elevated smoke is not mistaken for cloud.
Validation
Cross-check satellite-inferred surface impact against ground monitors (EPA AirNow/OpenAQ) since columns are not surface PM2.5; confirm plume attribution by aligning FIRMS detections with wind direction; note optical retrievals fail under thick cloud and that the aerosol index responds to absorbing aerosol height, not concentration.
In plain EnglishFind where the fire is burning, use the winds to see which way the smoke blew, and measure how far downwind the haze and smoke chemistry rose above normal levels. Satellites show the smoke overhead, but ground sensors are still needed to know what people are actually breathing.
Make it yours → Set the fire bounding box, the event date window, and the baseline period in the notebook, and swap TEMPO for OMI/TROPOMI outside North America.
Datasets used
FIRMS
Where fires are burning right now
FIRMS (Fire Information for Resource Management System)
LANCE/FIRMS (cross-DAAC, NASA Goddard hosted) · 1 km (MODIS) / 375 m (VIIRS)
MCD64A1
Where land has burned
MODIS Combined Burned Area Monthly 500m
LP DAAC · 500 m
MERRA-2
A weather & climate record back to 1980
MERRA-2 Modern-Era Retrospective Analysis for Research and Applications
GES DISC · 0.5° × 0.625°