Operator's Guide ================ This guide is for pilots, flight operators, and anyone running the fire detection software without needing to understand the underlying physics. For algorithm details, see :doc:`science-guide`. Quick Start ----------- 1. **Install dependencies**:: pip install pyhdf numpy matplotlib torch scikit-learn pandas scipy earthaccess ``pyhdf`` requires HDF4 C libraries. On macOS with conda:: conda install -c conda-forge pyhdf 2. **Download the data** (requires a free `NASA Earthdata account `_):: python download_data.py # all 4 flights (~9 GB) python download_data.py --flight 04 # just one flight (~4 GB) python download_data.py --list # list files without downloading The script will prompt for your Earthdata credentials on first run and cache them for future use. Alternatively, place MASTER L1B HDF4 files manually in ``ignite_fire_data/``. 3. **Run a script**:: python mosaic_flight.py # standard mosaic + fire overlay python realtime_fire.py # real-time sweep simulation python plot_burn_locations.py # per-flight burn analysis python plot_vegetation.py # NDVI vegetation maps (daytime) python detect_fire.py # single-file fire detection python fire_ml.py # train ML fire detector All output goes to the ``plots/`` directory. Flights in the Dataset ---------------------- .. list-table:: :header-rows: 1 :widths: 15 15 30 10 10 20 * - Flight - Date - Description - Day/Night - Files - Fire Present? * - 24-801-03 - Oct 18, 2023 - Pre-burn data collection - Day - 9 - **No** -- collected before the burn * - 24-801-04 - Oct 19, 2023 - First fire flight - Day - 40 - **Yes** -- USFS Blowdown Prescribed Burn * - 24-801-05 - Oct 20, 2023 - Second fire flight (nighttime) - Night - 16 - **Yes** -- USFS Lakes Unit Prescribed Burn * - 24-801-06 - Oct 20, 2023 - Third fire flight - Day - 18 - **Yes** -- USFS Blowdown Prescribed Burn What Each Script Produces ------------------------- .. list-table:: :header-rows: 1 :widths: 25 40 35 * - Script - Purpose - Output Files * - ``download_data.py`` - Download MASTER L1B data from NASA Earthdata - ``ignite_fire_data/*.hdf`` * - ``mosaic_flight.py`` - Assemble flight lines into georeferenced mosaic with fire overlay - ``plots/mosaic_flight_*.png`` * - ``realtime_fire.py`` - Simulate real-time sweep-by-sweep fire detection - ``plots/realtime_*/frame_*.png`` * - ``plot_burn_locations.py`` - Per-flight 2x2 analysis (fire map, T4, SWIR, scatter) - ``plots/burn_locations_*.png`` * - ``plot_vegetation.py`` - 2x2 NDVI vegetation maps with fire overlay (daytime only) - ``plots/vegetation_*.png`` * - ``detect_fire.py`` - Single-file fire detection comparing pre-burn vs burn - ``plots/fire_detection_*.png``, ``plots/fire_map_burn.png`` * - ``fire_ml.py`` - Train MLP fire detector, produce prediction maps - ``plots/ml_*.png`` Reading the Outputs ------------------- Fire Overlay Colors ^^^^^^^^^^^^^^^^^^^ - **Red dots**: Fire detections that passed the absolute temperature threshold (T4 > 325 K daytime, 310 K nighttime). - **Orange dots** (in ``realtime_fire.py``): **Vegetation-confirmed fire** -- pixels where thermal fire is independently confirmed by NDVI drop (vegetation loss). Higher confidence than red-only. - **Orange dots** (in ``detect_fire.py``): Contextual anomaly detections -- pixels that are anomalously warm relative to their neighbors but below the absolute threshold. Background Layer ^^^^^^^^^^^^^^^^ The display automatically adapts based on available sunlight data: - **Daytime (NDVI background)**: Green tones show healthy vegetation, brown/red tones show bare soil or stressed vegetation. Fire appears as red dots overlaid on the vegetation map. - **Nighttime (T4 thermal background)**: Warm colors show terrain temperature. Fire appears as bright spots against the cooler background. The system detects day/night **per pixel** from actual NIR radiance levels, not from clock time. This handles cloud cover correctly -- if clouds block sunlight, those pixels show thermal background even during geometric daytime. Stats Box (Real-Time Simulation) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The ``realtime_fire.py`` output includes a stats box showing: - **Sweep N/M [NDVI or T4]**: Current sweep number and background type. - **Coverage**: Percentage of grid cells with data so far. - **Fire pixels**: Total confirmed fire pixels (after multi-pass filter). - **Veg-confirmed**: Fire pixels independently confirmed by vegetation loss (NDVI drop from baseline). These are shown as orange dots. - **Total fire area**: Estimated area in m\ :sup:`2` or hectares. - **Fire zones**: Number of spatially connected fire regions. - **Zone breakdown**: Top 5 zones by size with individual areas. What "Multi-Pass Confirmed" Means ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ When a pixel is observed by multiple flight lines (overlapping passes), the system requires fire to be detected in **at least 2 passes** before confirming it as fire. This eliminates false positives from solar reflection, which are angle-dependent and only trigger from one direction. Real fire emits in all directions and triggers consistently. Real-Time Simulation -------------------- ``realtime_fire.py`` processes one sweep at a time, building the mosaic incrementally. Each sweep produces a PNG frame showing the current state. To create an animated GIF from the frames:: convert -delay 50 -loop 0 plots/realtime_2480104/frame_*.png animation.gif This requires `ImageMagick `_. Data Requirements ----------------- The HDF4 files should be placed in ``ignite_fire_data/``. They are MASTER Level 1B files from the FireSense 2023 campaign, publicly available from the `NASA ASAP Data Archive `_. File Naming Convention ^^^^^^^^^^^^^^^^^^^^^^ :: MASTERL1B_2480104_20_20231019_2031_2033_V01.hdf | | | | | | | | | | | | | +-- Version | | | | | +------- End time (HHMM UTC) | | | | +------------ Start time (HHMM UTC) | | | +--------------------- Date (YYYYMMDD) | | +------------------------ Flight line number | +-------------------------------- Flight ID +------------------------------------------ Product: MASTER Level 1B Troubleshooting --------------- **"No module named 'pyhdf'"** Install HDF4 C libraries first, then ``pip install pyhdf``. On macOS: ``conda install -c conda-forge pyhdf``. **"No module named 'lib'"** Ensure the ``lib/`` directory is present in the project root. If you cloned from git and ``lib/`` is missing, check that ``.gitignore`` does not contain a bare ``lib/`` entry. **No HDF files found** Place MASTER L1B files in ``ignite_fire_data/`` relative to the project root. Files must match ``MASTERL1B_*.hdf``.