EFAST spatio-temporal fusion with phenocam validation.
Find a file
2026-06-11 16:34:49 +02:00
.gitignore Improved .gitignore. 2026-06-11 16:24:50 +02:00
.pre-commit-config.yaml Added pre-commit checks. 2026-06-11 16:34:49 +02:00
.python-version Added efast. 2025-12-22 10:10:23 +01:00
1-phenocam.py Ran linter. 2026-06-11 16:33:14 +02:00
2-phenocam-screening.py Ran linter. 2026-06-11 16:33:14 +02:00
3-sentinel-data.py Ran linter. 2026-06-11 16:33:14 +02:00
4-fusion.py Ran linter. 2026-06-11 16:33:14 +02:00
5-metrics.py Added pre-commit checks. 2026-06-11 16:34:49 +02:00
common.js Moved webapp to top level. 2026-06-10 15:33:07 +02:00
fix-tile-boundary.py Added pre-commit checks. 2026-06-11 16:34:49 +02:00
index.html Adjusted title. 2026-06-11 16:28:22 +02:00
LICENSE Added MIT licence. 2026-06-11 16:03:12 +02:00
pyproject.toml Renamed project. 2026-06-11 16:20:47 +02:00
README.md Updated README. 2026-06-11 16:14:05 +02:00
uv.lock Switching horses. 2026-06-10 14:18:06 +02:00

EFAST fusion with phenocam validation.

End-to-end pipeline from selecting sites from the global PhenoCam Network to run EFAST spatio-temporal fusion with Sentinel-2 / Sentinel-3 and validate GCCs accross sensors. The five numbered steps cover site selection, Sentinel data acquisition, different fusion orders, and accuracy metrics, all feeding a static web QA viewer.


Pipeline overview

Step Script What it does
1 1-phenocam.py Download PhenoCam metadata and one_day_summary GCC CSVs
2 2-phenocam-screening.py Apply PhenoCam count, SNR, and proximity gates to select feasible sites
3 3-sentinel-data.py Acquire S2 (Earth Search COG) and S3 OLCI SYN L2 (CDSE OpenEO); prepare REFL, DIST_CLOUD, and composite GeoTIFFs
4 4-fusion.py Run EFAST BtI (fuse reflectance → GCC) and ItB (fuse GCC directly) for each screened site
5 5-metrics.py Extract PhenoCam-matched timeseries, compute NSE/RMSE/r baselines and fusion metrics, emit per-site JSON and webapp manifest

Quick start

uv sync
uv run python 1-phenocam.py --evaluation-year 2025
uv run python 2-phenocam-screening.py --evaluation-year 2025
uv run python 3-sentinel-data.py --evaluation-year 2025
uv run python 4-fusion.py --evaluation-year 2025
uv run python 5-metrics.py --evaluation-year 2025

All steps accept --evaluation-year (default 2025) and --site (optional, for single-site runs). Steps 35 are resumable — existing output files are skipped.

# single site
uv run python 3-sentinel-data.py --evaluation-year 2025 --site ICOSFR-Fon1
uv run python 4-fusion.py --evaluation-year 2025 --site ICOSFR-Fon1
uv run python 5-metrics.py --evaluation-year 2025 --site ICOSFR-Fon1

Credentials

Step 3 S3 download uses CDSE OpenEO (SENTINEL3_SYN_L2_SYN). Set CDSE_USER and CDSE_PASSWORD in ../.env at the workspace root. S2 uses AWS Earth Search COG range reads (no auth required).


Outputs (under data/)

Artifact Step Role
phenocam/{year}.json 1 Site list + sites_dir pointer
phenocam/{year}/{site}.json, {site}_1day.csv 1 Raw API payload and GCC CSV
phenocam_screening/{year}.json / .csv 2 Gate results (pass/fail per site)
sentinel_data/{year}/{site}/prepared/s2/ 3 S2 REFL + DIST_CLOUD GeoTIFFs
sentinel_data/{year}/{site}/prepared/s3/ 3 S3 composite GeoTIFFs
fusion/{year}/{site}/bti/, .../itb/ 4 BtI fused reflectance + GCC; ItB fused GCC
metrics/{year}/{site}/ 5 Per-site timeseries, metrics, covariates JSON
metrics/manifest.json 5 Webapp manifest (years + site metadata)

Web viewer

python3 -m http.server 8080 runs the webapp on http://localhost:8000/index.html. Requires step 5 output (data/metrics/manifest.json).


License

MIT