Data and code from: Characterizing wildfire behavior with ECOSTRESS land surface temperature across four California case studies
Data files
May 04, 2026 version files 6.84 GB
-
Datasets.zip
6.84 GB
-
Part_I_Raw_Data_Processing.mlx
6.25 KB
-
Part_II_ROS_HS_dNBR_Analysis.py
35.12 KB
-
Part_III_Validation_Hotspots_SpatialStats_Maps.R
39.24 KB
-
README.md
16.77 KB
Abstract
Since 2000, wildfires in the western United States have increased in both frequency and intensity due to climate warming, prolonged drought, and expanded human activity. Although geostationary systems enable rapid detection and moderate-resolution sensors offer broad coverage, a gap persists for high-spatial-resolution thermal observations that can assess fine-scale fire behavior. The ECOsystem Spaceborne Thermal Radiometer Experiment on Space Station (ECOSTRESS) provides 70-meter land surface temperature (LST) observations with multi-day revisit intervals, providing enhanced spatial detail for active-fire analysis. In this study, we evaluate the capability of ECOSTRESS Level 2 LST data, which uses 5 thermal bands, to characterize wildfire behavior across four California fires: Carr (2018), Kincade (2019), August Complex (2020), and Dixie (2021). We developed a consistent framework to identify hotspots (LST ≥ 60°C), estimate a satellite-derived rate-of-spread (ROS) proxy using the 95th percentile radial expansion from ignition, and assess relationships between mean active-fire temperature and mean post-fire burn severity (dNBR). Across all fires, median hotspot temperatures ranged from 62 to 77°C, while 95th percentile values ranged from 117 to 179°C, indicating right-skewed radiometric distributions. The ROS proxy showed directional variability, with median values typically between ~0.05 to ~3 km/day and substantial heterogeneity among quadrants. Regression indicates consistent positive relationships between mean active-fire temperature and mean burn severity, with R² values from 0.51 to 0.88. These relationships were stronger in smaller, short-duration fires. Our findings indicate that ECOSTRESS provides valuable high-spatial-resolution thermal observations that can resolve fire growth patterns and link active-fire thermal dynamics to subsequent burn severity.
ECOSTRESS LST Wildfire Analysis
Code and data repository for "Characterizing Wildfire Behavior with ECOSTRESS Land Surface Temperature Across Four California Case Studies." This repository contains the complete processing workflow, analysis scripts, and datasets used to characterize fire behavior, rate of spread, hotspot distributions, burn severity relationships, and spatial validation of ECOSTRESS LST against VIIRS fire radiative power across the Carr (2018), Kincade (2019), August Complex (2020), and Dixie (2021) fires.
Repository Structure
├── README.md
├── Part_I_Raw_Data_Processing.mlx # MATLAB live script (raw HDF5 to daily GeoTIFFs)
├── Part_II_ROS_HS_dNBR_Analysis.py # Python — ROS, hotspots, dNBR, regression
├── Part_III_Validation.py # Python — ECOSTRESS vs VIIRS spatial validation
├── Datasets/
│ ├── Raw Files - Part I/ # Part I input — example raw granules (Carr Fire)
│ │ └── Raw L1 and L2 ECOSTRESS HDF5 files (9) # Outputs 4 daily Carr Fire LST GeoTIFFs via Part I
│ ├── Processed_LST/ # Part I output → Part II input
│ │ ├── Carr_Fire_LST/
│ │ │ ├── HDF5_YYYYMMDDTHHMMSS.tif # Daily gridded ECOSTRESS LST GeoTIFFs (Part II input)
│ │ │ ├── REDBLUE1.mat # Custom colormap for LST maps (Part II)
│ │ │ └── LatLonSubsetted.mat # Reference lat/lon grid
│ │ ├── Kincade_Fire_LST/
│ │ │ ├── HDF5_YYYYMMDDTHHMMSS.tif
│ │ │ ├── REDBLUE1.mat
│ │ │ └── LatLonSubsetted.mat
│ │ ├── August_Fire_LST/
│ │ │ ├── HDF5_YYYYMMDDTHHMMSS.tif
│ │ │ ├── REDBLUE1.mat
│ │ │ └── LatLonSubsetted.mat
│ │ └── Dixie_Fire_LST/
│ │ ├── HDF5_YYYYMMDDTHHMMSS.tif
│ │ ├── REDBLUE1.mat
│ │ └── LatLonSubsetted.mat
│ ├── Burn_Perimeters/ # Part II input — Burn perimeters (WGS84)
│ │ ├── Carr_Fire_Perim.shp (+ .shx, .dbf, .prj)
│ │ ├── Kincade_Fire_Perim.shp
│ │ ├── August_Fire_Perim.shp
│ │ └── Dixie_Fire_Perim.shp
│ ├── dNBR/ # Part II input — dNBR from Google Earth Engine
│ │ ├── Carr_Fire_L8_dNBR.tif # Landsat-8
│ │ ├── Kincade_Fire_L8_dNBR.tif # Landsat-8
│ │ ├── August_Fire_S2_dNBR.tif # Sentinel-2
│ │ └── Dixie_Fire_S2_dNBR.tif # Sentinel-2
│ └── Validation_VIIRS_ECO/ # Part III input
│ ├── All_ECOSTRESS/ # ECOSTRESS hotspot points + perimeters for Part III
│ │ ├── Carr_Fire_Perim.shp (+ sidecars) # Burn perimeters (Part III copies)
│ │ ├── Kincade_Fire_Perim.shp
│ │ ├── August_Fire_Perim.shp
│ │ ├── Dixie_Fire_Perim.shp
│ │ ├── CarrFire_ECOSTRESS_Hotspots_Raw_CLIPPED.shp (+ .dbf, .shx) # Hotspot point shapefile
│ │ ├── KincadeFire_ECOSTRESS_Hotspots_Raw_CLIPPED.shp
│ │ ├── AugustFire_ECOSTRESS_Hotspots_Raw_CLIPPED.shp
│ │ └── DixieFire_ECOSTRESS_Hotspots_Raw_CLIPPED.shp
│ └── All_VIIRS_Points/ # VIIRS active fire detections for Part III
│ ├── Carr_VIIRS.shp (+ .dbf, .shx) # FRP point shapefiles
│ ├── Kincade_VIIRS.shp
│ ├── August_VIIRS.shp
│ └── Dixie_VIIRS.shp
Study fires
| Fire | Year | Location | Ignition Date |
|---|---|---|---|
| Carr Fire | 2018 | Shasta County, CA | July 23, 2018 |
| Kincade Fire | 2019 | Sonoma County, CA | October 23, 2019 |
| August Complex Fire | 2020 | Mendocino/Trinity/Tehama Counties, CA | August 15, 2020 |
| Dixie Fire | 2021 | Butte/Plumas Counties, CA | July 13, 2021 |
Data
ECOSTRESS — Files for Part I: ECO_L2_LSTE.002 (swath) and ECO_L1B_GEO.002 HDF5 files of interest can be downloaded at NASA Earthdata (https://search.earthdata.nasa.gov). Nine unprocessed LST HDF5 are provided to produce 4 processed ECOSTRESS LST files needed for Part I. Processed ECOSTRESS LST files are provided to run Part II.
VIIRS — VIIRS active fire detections (medium and high confidence) used for spatial validation of ECOSTRESS hotspot patterns. Provided as point shapefiles per fire.
dNBR — Differenced Normalized Burn Ratio derived from pre- and post-fire Landsat-8/Sentinel-2 imagery via Google Earth Engine, used to characterize burn severity across each fire perimeter.
Burn Perimeters — CalFire shapefiles (WGS84).
Colormap — REDBLUE1.mat, custom colormap used for LST visualization.
Variable descriptions for HDF5 and .mat files
ECOSTRESS HDF5 files (Datasets/Raw Files - Part I/)
A small set of nine example L1B GEO and L2 LSTE granules (ECOSTRESS Collection 2, v002) is provided as Part I demo input. Full granule access is via NASA Earthdata (https://search.earthdata.nasa.gov). L1 and L2 granules are paired by the acquisition timestamp embedded in the filename (YYYYMMDDTHHMMSS).
The Part I MATLAB script reads the following datasets from each granule:
From L1B GEO (ECOv002_L1B_GEO_*.h5):
/Geolocation/latitude— pixel-center latitude (decimal degrees, WGS84). Valid range: −90 to 90./Geolocation/longitude— pixel-center longitude (decimal degrees, WGS84). Valid range: −180 to 180.
From L2 LSTE (ECOv002_L2_LSTE_*.h5):
/SDS/LST— Land surface temperature, uint16. Apply scale factor 0.02 (no offset) to convert to Kelvin. Fill value: 0. Valid range: 7500–65535. Units: K./SDS/QC— 16-bit quality control flags (uint16) used to mask non-best-quality pixels per the ECOSTRESS L2 LSTE User Guide./SDS/cloud_mask— uint8. 0 = clear, 1 = cloudy. Fill value: 255.
For complete descriptions of all variables and metadata in ECOSTRESS L1B GEO and L2 LSTE products, see the NASA ECOSTRESS L2 LSTE User Guide on the LP DAAC site.
MATLAB .mat files
REDBLUE1.mat (identical across all fires)
REDBLUE1— Custom diverging colormap, 256×3 double array of RGB triplets, values in [0, 1]. Ramps from pure blue[0, 0, 1]through white to dark red (~[0.59, 0, 0]). Used for LST visualization in Part II.
LatLonSubsetted.mat (one per fire provided; dimensions and bounds differ per fire to match each fire's footprint)
latg— Reference latitude grid, 2D double array. Units: decimal degrees, WGS84.long— Reference longitude grid, 2D double array, same dimensions aslatg. Units: decimal degrees, WGS84.- Together these define the grid onto which all daily LST scenes for a given fire are resampled in Part I. Each daily GeoTIFF for that fire shares the dimensions and extent of
latg/long.
Processed daily GeoTIFFs (HDF5_YYYYMMDDTHHMMSS.tif)
Single-band Float64 GeoTIFFs produced by Part I and provided (one folder per fire under Datasets/Processed_LST/).
- Dimensions and geographic extent are fire-specific and match the corresponding
LatLonSubsetted.matfor that fire. - CRS: WGS84 geographic (EPSG:4326).
- NoData: NaN (cloud-masked, low-quality, or off-swath pixels).
- Units: Kelvin (native ECOSTRESS L2 LSTE units, preserved through Part I). Part II converts to °C (
LST_C = LST_K − 273.15) before applying the 60 °C hotspot threshold and all downstream analyses. - Filename timestamp
YYYYMMDDTHHMMSS= ECOSTRESS overpass acquisition time (UTC).
dNBR GeoTIFFs (Datasets/dNBR/)
Single-band rasters from Google Earth Engine. Stored values are dNBR × 1000; Part II divides by 1000 on load. Burn severity classes applied after scaling: Low (0.1–0.27), Moderate-Low (0.27–0.44), Moderate-High (0.44–0.66), High (≥ 0.66). CRS: WGS84.
Shapefiles
Burn perimeters (Datasets/Burn_Perimeters/*_Perim.shp) — Polygon shapefiles, CRS: WGS84 (EPSG:4326). Standard CalFire attributes (e.g., FIRE_NAME, YEAR_, ALARM_DATE, CONT_DATE, GIS_ACRES).
ECOSTRESS hotspot points (Datasets/Validation_VIIRS_ECO/All_ECOSTRESS/*_ECOSTRESS_Hotspots_Raw_CLIPPED.shp) — Point shapefiles of pixels ≥ 60 °C clipped to the fire perimeter, used as input for Part III. Attributes include LST value (°C), acquisition date, and acquisition time.
VIIRS detections (Datasets/Validation_VIIRS_ECO/All_VIIRS_Points/*_VIIRS.shp) — Point shapefiles of medium- and high-confidence active fire detections. Attributes include FRP (fire radiative power, MW), confidence flag, acquisition date and time, and satellite (Suomi-NPP / NOAA-20).
Workflow
The analysis is split into three parts:
Part I: Raw Data Processing (MATLAB)
Script: Part_I_Raw_Data_Processing.m
For each fire, L1 and L2 HDF5 granules are matched by acquisition timestamp and processed through:
- Quality control filtering using QC bit flags (per ECOSTRESS L2 documentation)
- Scale factor application to convert to physical units (Kelvin)
- L1–L2 merging (geolocation from L1 paired with LST from L2) for existing pairs
- Gridding and interpolation onto a uniform lat/lon grid
- Export as daily GeoTIFFs (one file per overpass:
HDF5_YYYYMMDDTHHMMSS.tif)
Note: The user is welcome to download HDF5 files of interest or skip Part I.
Part II: Analysis (Python)
Script: Part_II_ROS_HS_dNBR_Analysis.py
Reads the processed daily GeoTIFFs from Part I and follows this process:
- Step 0 — Fire selection (uncomment the fire of interest; Carr Fire is the uncommented default but paths need to be updated to run. Close each window to continue the run.)
- Step 1 — Load daily GeoTIFFs into a 3D array (H × W × N scenes)
- Step 2 — Data availability analysis (threshold sensitivity from 0–1000 °C in 60 °C increments)
- Step 3 — LST temperature maps
- Step 4 — Rate of spread (ROS) proxy computation:
- Scenes with < 60% valid (non-NaN) data in the full scene are excluded
- Hot pixels defined as ≥ 60 °C
- d95 = 95th percentile of great-circle distances from ignition to hot pixels
- ROS proxy = d95 / elapsed time since ignition (km/day)
- Computed for full scene (AVG) and four quadrants (Q1–Q4) defined by ignition location
- Time series plots and boxplots (log y-axis)
- Step 5 — Cumulative hotspot maps and temperature distributions (≥ 60 °C)
- Step 6 — dNBR processing:
- Load Landsat/Sentinel dNBR GeoTIFF, scale by /1000
- Reproject to ECOSTRESS grid via bilinear interpolation
- Plots interpolated dNBR and the burn severity classes (Low, Moderate-Low, Moderate-High, High)
- Step 7 — Mean burn severity vs mean temperature regression:
- Bins active fire pixels (≥ 60 °C) by dNBR severity (0.1–0.7 in 0.1 increments)
- Computes mean temperature and mean severity per bin
- Plots linear regression
Part III: Spatial Validation — ECOSTRESS LST vs VIIRS FRP (R)
Script: Part_III_Validation_Hotspots_SpatialStats_Maps.R
Validates ECOSTRESS LST hotspot patterns against VIIRS fire radiative power (FRP) detections across all four fires using a common 500 m fishnet grid. Kincade Fire is excluded from spatial autocorrelation analyses due to insufficient spatial replication.
- Load fire perimeters, ECOSTRESS hotspot points, and VIIRS detections (medium/high confidence)
- Load ECOSTRESS hotspot point shapefiles (clipped to perimeters) and VIIRS active fire detections (medium/high confidence only)
- Create 500 m fishnet grids clipped to each fire perimeter (UTM projection)
- Aggregate ECOSTRESS LST and VIIRS FRP to the 500 m grid (mean, median, max, sd, count per cell)
- Descriptive statistics per fire
- Rank correlations (Spearman, Kendall) between mean LST and mean FRP per grid cell
- Q–Q plots comparing ECOSTRESS LST and VIIRS FRP quantile distributions with Q1–Q3 reference line
- Mean spatial maps of LST and FRP per fire
- Univariate Moran's I for LST and FRP (k = 8 nearest neighbours)
- Bivariate Moran's I testing spatial co-dependence between LST and FRP
- Getis-Ord Gi* hotspot maps identifying statistically significant spatial clusters of high LST and FRP
- Copula analysis fitting Gaussian, Clayton, Gumbel, and t copulas to the joint LST–FRP distribution, with model selection by AIC
Software and execution context
All scripts were developed and tested on Windows 10/11. Working directories and file paths must be updated at the top of each script to point to the local copy of the Datasets/ folder before running.
Part I — MATLAB
- MATLAB version: R2022b
- Toolboxes required: Mapping Toolbox (used for georeferenced raster I/O and
geotiffwrite) - External packages: none beyond MathWorks toolboxes
- Working directory / paths to set inside the script:
inputPath— folder containing raw L1B GEO and L2 LSTE HDF5 files (e.g.,Datasets/Raw Files - Part I/)outputPath— destination folder for processed daily GeoTIFFs
Part II — Python
-
Python version: 3.11.14 (Anaconda distribution recommended)
-
Required packages (tested versions):
-
numpy 2.4.1
-
pandas (conda-forge build)
-
rasterio 1.4.4
-
geopandas (conda-forge build)
-
shapely (conda-forge build)
-
matplotlib 3.10.8
-
scipy 1.17.0
-
scikit-learn 1.8.0
-
Working directory / paths to set inside the script:
-
In Step 0, uncomment the fire configuration block for the fire of interest (Carr Fire is uncommented by default).
-
Update all data paths in the active fire block to point to the local
Datasets/directory (processed LST folder, burn perimeter shapefile, dNBR GeoTIFF,LatLonSubsetted.mat,REDBLUE1.mat). -
Execution note: Close each plot as they come up to advance to the next step/plots.
Part III — R
-
R version: 4.5.3 (Windows 11 x64)
-
IDE: RStudio 2026.01.2+418
-
Required packages (tested versions):
-
sf 1.1.0
-
spdep 1.4.2
-
terra 1.9.11
-
raster 3.6.32
-
dplyr 1.2.0
-
ggplot2 4.0.2
-
copula 1.1.7
-
Working directory / paths to set inside the script: update the data directory variable at the top of the script to point to the local
Datasets/Validation_VIIRS_ECO/folder. All four fires are processed sequentially in one execution.
Usage
Part I
- Open
Part_I_Raw_Data_Processing.min MATLAB. - The Carr Fire is set as default and will run with the few provided raw files. Users are welcome to download additional raw LST files of interest or skip Part I.
- Set
inputPathto the folder containing the raw L1/L2 HDF5 files (Datasets/Raw Files - Part I/). - Set
outputPathto the desired output folder for processed GeoTIFFs. - Run the script.
Part II
- Open
Part_II_ROS_HS_dNBR_Analysis.py. - In Step 0, uncomment the fire configuration block for the fire of interest (Carr Fire will run by default but paths need to be updated).
- Run via Anaconda Prompt:
conda activate [User's environment]
cd "path/to/repository"
python Part_II_ROS_HS_dNBR_Analysis.py
- Close each plot window as it appears to continue execution.
Part III
- Open
Part_III_Validation_Hotspots_SpatialStats_Maps.Rin RStudio. - Update the path to the data directory at the top of the script.
- Run the full script — all four fires are processed sequentially.
Notes
- Nine raw HDF5 ECOSTRESS LST granules for the Carr Fire are provided to run Part I. The user is encouraged to download additional raw granules of interest, freely available from NASA Earthdata.
- The 500 m fishnet resolution in Part III was chosen to approximate the VIIRS pixel footprint.
- Kincade Fire is excluded from spatial statistics (Moran's I, Bivariate Moran, Getis-Ord Gi*) due to insufficient spatial replication.
- Minor numerical differences may arise if reprocessing from raw data due to interpolation method differences.
