035 — QC threshold sensitivity sweep#
Run the four science-validation tests across a grid of QC threshold combinations (cycle-confidence x day-score) to identify the operating point that maximises validation pass-rate without over-pruning data.
Output: 035_threshold_sensitivity.csv + .json for the
publication-quality scorecard.
Runs on the bundled synthetic sample (sweep grid produces a small output since validation skips on synthetic).
from palmwtc.config import DataPaths
from palmwtc.validation import DEFAULT_CONFIG
paths = DataPaths.resolve()
print(paths.describe())
print(f"Validation DEFAULT_CONFIG keys: {list(DEFAULT_CONFIG)[:6]}...")
DataPaths (source=sample (bundled synthetic), site=libz):
raw_dir = /home/runner/work/palmwtc/palmwtc/src/palmwtc/data/sample/synthetic
processed_dir = /home/runner/work/palmwtc/palmwtc/src/palmwtc/data/sample/Data/Integrated_QC_Data
exports_dir = /home/runner/work/palmwtc/palmwtc/src/palmwtc/data/sample/exports
config_dir = /home/runner/work/palmwtc/palmwtc/src/palmwtc/data/sample/config
extras = <none>
Validation DEFAULT_CONFIG keys: ['co2_flux_col', 'h2o_flux_col', 'co2_slope_col', 'radiation_col', 'temp_col', 'vpd_col']...
# Sensitivity sweep across (cycle_confidence, day_score) grid
# uses run_science_validation under the hood. On synthetic, all
# validation runs report "skipped" — sweep returns an empty grid.
print("[stub] full sensitivity sweep is run-on-real-data only.")
print("API: from palmwtc.validation import run_science_validation")
print(" for thr_cyc in [0.4, 0.5, 0.6]:")
print(" for thr_day in [0.5, 0.6, 0.7]:")
print(" result = run_science_validation(cycles, ...)")
[stub] full sensitivity sweep is run-on-real-data only.
API: from palmwtc.validation import run_science_validation
for thr_cyc in [0.4, 0.5, 0.6]:
for thr_day in [0.5, 0.6, 0.7]:
result = run_science_validation(cycles, ...)
The sweep output drives the production threshold choice in
palmwtc.windows.DEFAULT_CONFIG. For palmwtc 0.1 the defaults match
those validated on the LIBZ dataset; updates require a fresh sweep.