diff --git a/call_efast.py b/call_efast.py index a67e10d..a170a9a 100644 --- a/call_efast.py +++ b/call_efast.py @@ -100,6 +100,7 @@ def prepare_s2(season, site_position, site_name, cleaning_strategy="aggressive", temp_normalized = s2_output_dir / f"temp_{s2_file.name}" with rasterio.open(s2_file) as src: + # S2 L2A: use DN/10000 (Earth Search AWS differs from ESA spec; offset caused many transparent pixels) data = src.read().astype("float32") / 10000.0 profile = src.profile.copy() profile.update({"dtype": "float32", "nodata": 0}) diff --git a/post_process.py b/post_process.py index f2bcc43..1e1fb48 100644 --- a/post_process.py +++ b/post_process.py @@ -31,8 +31,13 @@ def process_cropped(season, site_position, site_name, cleaning_strategy="aggress valid = ~np.isnan(data) & (data > 0.001) rows = np.any(valid, axis=(0, 2)) cols = np.any(valid, axis=(0, 1)) - r0, r1 = np.where(rows)[0][[0, -1]] - c0, c1 = np.where(cols)[0][[0, -1]] + row_idx = np.where(rows)[0] + col_idx = np.where(cols)[0] + if len(row_idx) == 0 or len(col_idx) == 0: + print(f"[PROCESS] Skipping {fusion_file.name} (no valid pixels)") + continue + r0, r1 = row_idx[0], row_idx[-1] + c0, c1 = col_idx[0], col_idx[-1] w, h = c1 - c0 + 1, r1 - r0 + 1 window = windows.Window(c0, r0, w, h) data_crop = src.read(window=window) diff --git a/run.py b/run.py index 6c95225..3bd7116 100644 --- a/run.py +++ b/run.py @@ -19,12 +19,12 @@ def run_pipeline(season, site_position, site_name): """Run pipeline from existing raw data (no downloads).""" try: # Download steps (skipped - use existing data in data/{site_name}/{season}/raw/) - download_s2(season, site_position, site_name) + #download_s2(season, site_position, site_name) # download_s3(season, site_position, site_name) # download_phenocam(season, site_position, site_name) # download_phenocam_greenness(season, site_position, site_name) - print(f"Generating NDVI for raw data: {site_name}, {season}") + #print(f"Generating NDVI for raw data: {site_name}, {season}") #create_ndvi_timeseries_raw(season, site_position, site_name) print(f"Running EFAST fusion for all scenarios: {site_name}, {season}")