MODIS Satellite Data
This guide describes how to process MODIS (Moderate Resolution Imaging Spectroradiometer) Level 2 aerosol data in MELODIES MONET. MODIS provides global aerosol optical depth (AOD) observations from both the Terra and Aqua satellites.
Overview
MELODIES MONET supports MODIS Level 2 Collection 6.1 aerosol products:
MOD04_L2 - Terra MODIS Aerosol Product (10:30 AM local equatorial crossing time)
MYD04_L2 - Aqua MODIS Aerosol Product (1:30 PM local equatorial crossing time)
These products contain aerosol optical depth retrieved using the Dark Target and Deep Blue algorithms, providing near-global coverage at 10 km resolution.
Data Access
MODIS aerosol data can be obtained from NASA Earthdata:
File Naming Convention
MODIS L2 files follow this naming pattern:
M?D04_L2.AYYYYDDD.HHMM.0CC.timestamp.hdf
Where:
M?D04_L2- Product identifier (MOD04_L2 for Terra, MYD04_L2 for Aqua)AYYYYDDD- Acquisition date (A = Aqua/Terra, YYYY = year, DDD = day of year)HHMM- Acquisition time (UTC)0CC- Collection version (e.g., 061 for Collection 6.1)timestamp- Production timestamp.hdf- HDF4 file format
Example: MOD04_L2.A2020253.1830.061.2020254021156.hdf
Recommended Directory Structure
Organize MODIS files by satellite and year for efficient processing:
$HOME/Data/MODIS/
├── Terra/
│ └── C61/
│ └── 2020/
│ ├── 253/
│ │ ├── MOD04_L2.A2020253.*.hdf
│ │ └── ...
│ └── 254/
│ └── ...
└── Aqua/
└── C61/
└── 2020/
└── ...
Quick Start
Create a YAML control file specifying your analysis parameters
Run the processing script to grid MODIS swath data
Output gridded NetCDF for analysis or model comparison
Example YAML Configuration
analysis:
start_time: '2020-09-09'
end_time: '2020-09-12'
time_interval: '24h'
output_dir: $HOME/Plots
debug: True
regrid: True
target_grid: obs_grid
obs_grid:
start_time: '2020-09-09'
end_time: '2020-09-12'
ntime: 72
nlat: 180
nlon: 360
obs:
Terra_MODIS:
obs_type: 'sat_swath_clm'
sat_type: 'modis_l2'
filename: $HOME/Data/MODIS/Terra/C61/2020/*/MOD04_L2.*.hdf
variables:
AOD_550_Dark_Target_Deep_Blue_Combined:
minimum: 0.0
maximum: 10.0
scale: 0.001
units: none
Example Processing Script
from melodies_monet import driver
# Initialize analysis
an = driver.analysis()
an.control = 'control_modis_l2.yaml'
an.read_control()
# Open model data (if pairing with model)
an.open_models()
# Setup observation grid
an.setup_obs_grid()
# Setup regridders for model-obs pairing
an.setup_regridders()
# Process each time interval
for time_interval in an.time_intervals:
print(f'Processing: {time_interval}')
an.open_obs(time_interval=time_interval)
an.update_obs_gridded_data()
# Normalize gridded data
an.normalize_obs_gridded_data()
# Save to NetCDF
an.obs_gridded_dataset.to_netcdf('MODIS_gridded.nc')
Processing Workflow
The MODIS processing workflow consists of these steps:
1. File Discovery and Time Subsetting
MELODIES MONET uses the subset_MODIS_l2() function to filter MODIS files
by time interval based on the filename timestamp. This enables efficient
processing of large data archives.
2. Data Loading
The MONETIO library (mio.sat._modis_l2_mm) reads MODIS HDF files and extracts:
Latitude/Longitude - Geolocation arrays
Scan_Start_Time - Observation timestamps
AOD variables - Aerosol optical depth retrievals
The data is returned as an OrderedDict of xarray Datasets, keyed by datetime strings.
3. Quality Filtering (Optional)
Apply quality filters using the filter_dict option:
obs:
Terra_MODIS:
data_proc:
filter_dict:
Quality_Assurance_Land:
oper: '>='
value: 3
4. Gridding
Swath observations are accumulated onto a uniform latitude-longitude-time grid:
Grid cells are defined by
obs_gridparameters (ntime, nlat, nlon)Multiple observations within a grid cell are averaged
Observation counts per grid cell are tracked
5. Output
The gridded dataset contains:
{obs}_{variable}_data- Gridded AOD values{obs}_{variable}_count- Number of observations per grid cell
Available MODIS Variables
The primary aerosol variable is:
- AOD_550_Dark_Target_Deep_Blue_Combined
Combined Dark Target and Deep Blue AOD at 550 nm. This merged product provides the best spatial coverage by using Dark Target over vegetated and dark surfaces and Deep Blue over bright surfaces (deserts, urban areas).
Additional variables available in MOD04_L2/MYD04_L2 include:
Optical_Depth_Land_And_Ocean- Dark Target AODDeep_Blue_Aerosol_Optical_Depth_550_Land- Deep Blue AOD over landAngstrom_Exponent_1_Ocean- Angstrom exponent (ocean)AOD_550_Dark_Target_Deep_Blue_Combined_QA_Flag- Quality assurance flags
Model Pairing
To compare MODIS observations with model output, add a model section with mapping:
model:
MERRA2:
mod_type: reanalysis
files: $HOME/Data/MERRA2/tavg1_2d_aer_Nx/*nc4
regrid:
base_grid: $HOME/Data/Grids/merra2_grid.nc
method: bilinear
mapping:
Terra_MODIS:
TOTEXTTAU: AOD_550_Dark_Target_Deep_Blue_Combined
Aqua_MODIS:
TOTEXTTAU: AOD_550_Dark_Target_Deep_Blue_Combined
Models tested with MODIS:
MERRA2 - NASA reanalysis (TOTEXTTAU variable)
CAM-chem FV - CESM atmospheric chemistry model
WRF-Chem - Regional weather/chemistry model
Best Practices
Time Interval Selection
Use
time_interval: '24h'for daily processing to manage memoryShorter intervals (e.g.,
'6h') may be needed for very large domains
Grid Resolution
nlat: 180, nlon: 360gives 1-degree resolution (global)nlat: 720, nlon: 1440gives 0.25-degree resolution (higher detail)Balance resolution with available memory and processing time
Quality Control
Apply minimum/maximum bounds to filter unrealistic values
The
scale: 0.001factor converts integer-stored AOD to physical unitsConsider filtering by quality flags for research applications
Example: Processing Both Terra and Aqua
Process both MODIS sensors for maximum temporal coverage:
obs:
Terra_MODIS:
obs_type: 'sat_swath_clm'
sat_type: 'modis_l2'
filename: $HOME/Data/MODIS/Terra/C61/2020/*/MOD04_L2.*.hdf
variables:
AOD_550_Dark_Target_Deep_Blue_Combined:
minimum: 0.0
maximum: 10.0
scale: 0.001
units: none
Aqua_MODIS:
obs_type: 'sat_swath_clm'
sat_type: 'modis_l2'
filename: $HOME/Data/MODIS/Aqua/C61/2020/*/MYD04_L2.*.hdf
variables:
AOD_550_Dark_Target_Deep_Blue_Combined:
minimum: 0.0
maximum: 10.0
scale: 0.001
units: none
Troubleshooting
No files found
Verify the filename glob pattern matches your file naming
Check that files exist in the specified directories
Ensure time interval covers the file timestamps
Memory errors
Reduce the time interval (e.g., from
'24h'to'6h')Process a smaller spatial domain
Reduce grid resolution
Empty output
Check that MODIS files contain data for your region of interest
Verify variable names match those in the HDF files
Enable
debug: Truefor additional output
See Also
Supported Datasets - Full list of supported observations and models
MODIS YAML Configuration Reference - MODIS YAML configuration reference
Description of All YAML Options - Complete YAML configuration reference
Description of Tutorial Examples - Additional examples