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

Quick Start

  1. Create a YAML control file specifying your analysis parameters

  2. Run the processing script to grid MODIS swath data

  3. 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_grid parameters (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 AOD

  • Deep_Blue_Aerosol_Optical_Depth_550_Land - Deep Blue AOD over land

  • Angstrom_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 memory

  • Shorter intervals (e.g., '6h') may be needed for very large domains

Grid Resolution

  • nlat: 180, nlon: 360 gives 1-degree resolution (global)

  • nlat: 720, nlon: 1440 gives 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.001 factor converts integer-stored AOD to physical units

  • Consider 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: True for additional output

See Also