Phenological Metrics — Phenology Pipeline
This page covers metrics computed by the phenology pipeline (src/vi_phenology.py):
one row per year per region in a CSV, enabled with the --metrics flag.
The pixel phenology pipeline computes a related but distinct set of 19 per-pixel metrics stored as spatial map layers (one band per metric in a NetCDF). See Pixel Phenology Pipeline — Metrics.
Computed per year, per region, per VI from the smoothed daily series. Enable with --metrics.
Requires a smoothing method (--smooth-method must not be none).
Metrics
Metric |
Column |
Description |
|---|---|---|
SOS |
|
Start of Season: first date VI crosses the amplitude threshold going up |
POS |
|
Peak of Season: date and value of annual maximum |
EOS |
|
End of Season: last date VI is still above the amplitude threshold |
LOS |
|
Length of Season: EOS − SOS in days |
IVI |
|
Integrated VI: trapezoidal area under the smooth curve between SOS and EOS |
Greening rate |
|
Mean slope (VI/day) from SOS to POS |
Senescence rate |
|
Mean slope (VI/day) from POS to EOS (negative for a declining curve) |
Floor NDVI |
|
Annual minimum of the smooth curve (dry-season trough). Derived directly from the curve — no biome-specific DOY window needed. |
Ceiling NDVI |
|
Annual maximum of the smooth curve (= POS value) |
Season length |
|
Days above |
Green-up rate |
|
|
Peak count |
|
Number of peaks detected by |
Peak separation |
|
Calendar days between the two tallest peaks (NaN if n_peaks < 2) |
Relative peak amplitude |
|
|
Valley depth |
|
Normalised trough depth between peaks: |
CV |
|
Coefficient of variation of raw (unsmoothed) observations across the full time series. Same value on every year row for a given (vi, region). |
SOS/EOS Threshold
SOS and EOS are determined relative to the annual amplitude:
baseline = annual minimum VI
amplitude = annual peak − baseline
threshold = baseline + sos_threshold × amplitude
--sos-threshold controls the fraction of amplitude (default 0.20 = 20%).
Annual Windows — --year-start-doy
--year-start-doy sets the day of year at which each annual phenology window begins
(default 1 = January 1). The correct value depends on biome and rainfall regime, not
simply on hemisphere.
The rule: place the window boundary at the VI minimum for the target region. Placing it at or near the seasonal peak will cause SOS/EOS detection to fail or produce nonsensical results.
Biome / regime |
Peak VI |
VI minimum |
Recommended |
|---|---|---|---|
Northern Hemisphere temperate |
Jun–Aug |
Dec–Jan |
|
Southern Hemisphere summer-rainfall (Savanna, Highveld) |
Dec–Jan |
Jun–Jul |
|
Southern Hemisphere winter-rainfall (Cape fynbos, Mediterranean) |
Jun–Aug |
Dec–Jan |
|
--year-start-doy only affects how annual windows are split for metric computation. It does
not affect the annual phenology plot, which always groups by calendar year and displays
January through December.
CLI Parameters
Argument |
Default |
Description |
|---|---|---|
|
off |
Compute and export phenological metrics |
|
|
Amplitude fraction for SOS/EOS detection |
|
|
Day of year to begin each annual phenology window (1–365) |
|
|
Minimum NDVI prominence for a peak to be counted by bimodality detection (only active when |
|
|
Minimum separation in days between detected peaks (only active when |
Output Files
Per-region metrics are written to {VI}_{region}_metrics.csv in the per-region subdirectory.
When --shapefile-field yields multiple regions for a shapefile, a combined
{VI}_{shapefile_stem}_metrics.csv is also written to the shapefile root folder.
For full output file details, see Output.