# S2S-FM-VN target definitions. THESE ARE LOCKED (project prompt). # Do not reopen or "improve"; a sensitivity experiment against an alternative # is allowed only if clearly labelled and never replaces the primary definition. period: {start_year: 2003, end_year: 2022} # reforecast/obs overlap horizon: {lt_min: 0, lt_max: 45} # lead days p90: percentile: 90 reference_years: [2003, 2022] # fixed, computed ONCE, not fold-specific window_half_days: 15 # centred cyclic 31-day window (d-15..d+15) window_wraps_year: true leap_handling: "29 Feb pooled with 28 Feb (calendar-day index 59); 365 fixed indices" archive: data/processed/P90_2003_2022.nc ehd_threshold: rule: "min(P90(s,d), 35.0)" # min, NEVER max cap_degC: 35.0 archive: data/processed/EHD_THRESHOLD_2003_2022.nc ehd: "1 if Tx(s,t) >= EHD_THRESHOLD(s,d) else 0" exceedance: "max(Tx(s,t) - EHD_THRESHOLD(s,d), 0)" weeks: # lead-day ranges, inclusive. W7 is a 4-day PARTIAL week. W1: [0, 6] W2: [7, 13] W3: [14, 20] W4: [21, 27] W5: [28, 34] W6: [35, 41] W7: [42, 45] # partial; verified separately, never pooled with W1-W6 headline: [W1, W2, W3, W4, W5, W6] no_moving_7day_windows: true weekly_targets: EHD_COUNT: "number of EHDs in the week (0..7 for W1-W6, 0..4 for W7)" EHE_WEEK: "1 if EHD_COUNT >= 1" HW2_WEEK: "1 if EHD_COUNT >= 2 (anywhere in the week, NO consecutive condition)" SEV_WEEK: "sum over EHDs in the week of exceedance (degC day)" episode: # detected on CONTINUOUS daily sequence BEFORE weekly aggregation definition: ">= 2 CONSECUTIVE EHDs" distinct_from_HW2_WEEK: true characteristics: {duration_days: "t_end-t_start+1", i_mean_degC: "mean exceedance", i_max_degC: "max exceedance", severity_degC_day: "summed exceedance"} cross_week_accounting: # an episode crossing a week boundary is ONE event HW_ONSET: "onset counted once, in the week it starts" HW_ACTIVE: "1 for every week the episode overlaps" HW_DAYS: "only the episode days that fall inside the week" HW_SEV_ACTIVE: "only the exceedance that falls inside the week" full_duration_and_severity: "onset week only; never duplicated across weeks" censoring: buffer_days_before_lt0: 6 buffer_days_after_lt45: 6 official_horizon_unchanged: true left_censored: "episode touches earliest available day; contributes to HW_ACTIVE/HW_DAYS but is NOT an onset" right_censored: "episode touches latest available day; contributes to onset/active but NEVER to full-duration statistics" contingency: reference_probability_threshold: 0.5 # fixed