SPIRAL2 LLRF fault-diagnosis pipeline

A working companion to the pipeline behind the LLRF fault-diagnosis paper: how raw superconducting-cavity postmortem buffers become labeled events, features, and models. Built up together, step by step — each section below fills in with real plots and notes as we explore it in conversation, rather than all at once.

Raw files scanned 14,232
Events (V6) 2,109
Normal 1,066
Fault (7 categories) 1,043
Features 777

Pipeline at a glance

One trunk — extraction through feature engineering — then five independent consumers of the same feature matrix, converging into a shared explainability and reporting layer. This is an orientation diagram for our own exploration, distinct from the paper's own fig:pipeline_overview (still a hand-drawn placeholder there).

DATA FOUNDATION PREPROCESSING & FEATURES Raw postmortem files 14,232 files, 2019–2025 Ground-truth labeling Classify_PostMortemFile label ≠ Filtré Quality filter 2,110 events pass Preprocessing HP filter · align · Z-score Feature engineering 777 features (V6) MODELING — INDEPENDENT CONSUMERS OF THE FEATURE MATRIX Precursor detection Steps 04–05 · 386-feat. subset unsupervised ensemble + RF Binary classification Step 06 · full window LogReg / RF / XGBoost / SVM Multi-label classification Step 07 · 7 categories BR · CC · LP · 4× deep nets Root cause ID Step 08 target = argmax(y) Subtype clustering Step 09 · per category K-Means / Agglom. / GMM Explainability & reporting SHAP · results manifest → LaTeX macros
Raw LLRF postmortem buffers are decoded by PyPostMortem, labeled by the deterministic ground-truth classifier Classify_PostMortemFile into seven fault categories, quality-filtered, then preprocessed (high-pass filter, per-file trigger alignment, Z-score normalization) into a 777-feature matrix. Five modeling tasks each consume that matrix independently — root cause's target is the same fault-label vector multi-label classification uses, not multi-label's model output, so the two are siblings rather than chained. Diagram drawn from report/sections/03_system_description.tex and 04_methodology.tex as of the 2026-09-07 revision; no fabricated numbers.

00

Data foundation

prepare_data_cluster_v7.py Confirmed 2026-09-09

Every event starts as a raw postmortem buffer captured by the LLRF system's trigger logic across 27 monitored signals. Labels come from Classify_PostMortemFile, a deterministic classifier built on the first hardware fault-register bit to trip chronologically — not the older, less reliable summary ALM header field this pipeline used to rely on. Four of the seven categories get a further physics-threshold refinement on top of that hardware decode: a cavity-voltage fall of at least 50% within a bounded time window separates a genuine quench from a false alarm; the reflected-power/cavity-voltage ratio Ucav/Ucat > 8.5 marks an RF safety threshold exceedance; oscillation, gain, and beam-anomaly subtypes of RF regulation out of tolerance come from Z-score+FFT analysis of the drive and reflected signals. The remaining three categories are the hardware decode alone.

Of 14,232 raw files scanned (2019–2025), 102 fail to parse and 20 are zero-byte, leaving 14,109 ground-truth rows. Before any of the seven fault categories or Normal is even considered, each file must pass six validity checks — in order, so a file failing an earlier check is never evaluated against a later one. Chart below reflects the corrected classifier (re-run 2026-09-09, see the callout further down) — the check order and the four reliability/state checks are unchanged, only the feed-forward check's scope changed:

0 800 1,600 2,400 3,200 Feed-forward off (2021+ only) 3,229 KPI < 10 3,168 Loop OFF 2,878 AMPT > 10% 1,187 Ucav too low 753 Mask problem 28
11,243 of 14,109 files (79.7%) fail this filter, down from 85.0% before the fix — leaving 2,866 that pass. Feed-forward off is still the single largest reason but is no longer overwhelmingly dominant (was 8,205 files / 68% of all rejections when the check ran unscoped in every year; now 3,229 / 28.7%, since it no longer fires at all pre-2021). The files it stopped intercepting didn't all become valid — most now correctly fail a later check instead (KPI and Loop OFF absorbed most of the difference), which is exactly the cascade behaving as intended once the first gate is scoped correctly. AMPT/KPI are per-file acquisition-quality metrics, not state flags; Ucav/mask are direct signal/metadata validity checks. Counts from the re-run LLRF_result.csv, 2026-09-09.
Correction, applied and confirmed 2026-09-09 BEAM=NON in the header doesn't mean "no beam present" — it means feed-forward disabled, and the field has only been operationally meaningful since 2021 (before that it defaults to NON because feed-forward didn't exist yet: 2019 100.0%, 2020 96.4% of files header-flagged NON, vs. a genuine 50.3%→9.3% decline from 2021→2025). Classify_PostMortemFile's _check_filters() has been fixed to scope the check to 2021+ (gated on the acquisition's own header DATE field) and re-run against the full 2019–2025 corpus.
0% 25% 50% 75% 100% 100% 2019 96% 2020 50% 2021 31% 2022 37% 2023 24% 2024 9% 2025 field not yet meaningful
Share of each year's files flagged BEAM=NON (a raw header statistic, unaffected by the fix itself). 2019–2020 (faded bars) sit at a constant ~100%, consistent with feed-forward not existing yet; 2021 on is a genuine, declining operational choice.

Fixing the scope recovers real events — not an estimate this time, the classifier has actually been re-run against the full corpus and the before/after is a direct diff:

before fix after fix (confirmed) 0 200 400 600 800 +73 2019 +683 2020 2021 2022 2023 2024 2025
Ground-truth-passing events per year, before vs. after the fix, direct diff of the two CSVs. 2019: 0→73. 2020: 76→759. 2021–2025: exactly unchanged, 0 rows gained or lost in any of those five years — confirming the fix touches exactly what it should and nothing else.
2,110 → 2,866 +756 events (+35.8%), confirmed. All of the gain is 2019 (+73) and 2020 (+683); every other year is byte-identical to before. This is the corrected ground-truth pool — the feature-engineered dataset (V6, 2,109 events) has now been re-extracted against it as V7 (2,865 events, validated — see the Status note below). The stat strip at the top of this page and everything below step 00 still describes V6 until steps 01–08 are re-run against V7 (Phase 2, not started).

Is the header trustworthy, or could a stuck bit be discarding files that were actually running? — the coherence check from before the correction, still valid as a read of what the header field itself behaves like (the sample below was drawn from the old, unscoped Beam NON grouping, which mixes pre-2021 defaulted-NON files with genuine post-2021 feed-forward-off files — useful for checking the flag's physical meaning, not a current rejection-count figure; see the corrected counts above for that). For a random sample of files in each rejected group (n=100, plus a 150-file passing baseline mixing Normal and every fault category), we read the real cavity-voltage (Ucav) and drive (Uci) waveform amplitude via PyPostMortem, independent of the header flags that got the file rejected.

passes quality filter (baseline) rejected by quality filter baseline IQR (1.4–4.1 MV/m) 2022 10 07 CMB01-CAV2_0016: Ucav=3.220 MV/m 2021 12 03 CMA06_0006: Ucav=0.549 MV/m 2021 09 28 CMA01_0001: Ucav=1.288 MV/m 2023 10 17 CMB01-CAV1_0002: Ucav=3.259 MV/m 2023 10 10 CMB07-CAV1_0001: Ucav=6.518 MV/m 2021 07 21 CMA10_0006 10, 2E-4 FFOUI 1mA: Ucav=6.449 MV/m 2021 07 21 CMA11_0004: Ucav=0.443 MV/m 2021 07 21 CMA10avecff_0024: Ucav=1.072 MV/m 2021 12 03 CMA04_0005: Ucav=0.417 MV/m 2021 07 30 CMA10_0014: Ucav=6.449 MV/m 2021 11 16 CMB01-CAV1_0008: Ucav=4.062 MV/m 2022 09 30 CMB07-CAV2_0001: Ucav=3.118 MV/m 2022 10 07 CMB01-CAV2_0043: Ucav=3.220 MV/m 2023 11 16 CMA01_0005: Ucav=1.275 MV/m 2023 11 16 CMA05_0003: Ucav=1.686 MV/m 2022 09 15 CMA05_0002: Ucav=0.513 MV/m 2021 11 16 CMB03-CAV1_0001: Ucav=7.225 MV/m 2025 10 20 CMB01-CAV1_0001: Ucav=6.157 MV/m 2023 11 16 CMA02_0003: Ucav=1.329 MV/m 2021 07 21 CMA10avecff_0010: Ucav=1.537 MV/m 2025 10 18 CMA08_0019: Ucav=5.465 MV/m 2023 10 10 CMA06_0001: Ucav=1.964 MV/m 2022 08 30 CMA08_0007: Ucav=1.624 MV/m 2022 10 20 CMB06-CAV1_0001: Ucav=4.060 MV/m 2020 11 18 CMA01_0003_6kw: Ucav=0.633 MV/m 2021 07 21 CMA10avecff_0002: Ucav=6.449 MV/m 2025 10 13 CMB01-CAV1_0001: Ucav=6.475 MV/m 2022 09 13 CMB01-CAV2_0001: Ucav=2.892 MV/m 2021 12 03 CMB03-CAV2_0008: Ucav=3.286 MV/m 2023 10 19 CMB01-CAV2_0001: Ucav=5.418 MV/m 2022 10 12 CMB06-CAV1_0003: Ucav=6.771 MV/m 2025 10 17 CMA08_0016: Ucav=5.465 MV/m 2023 10 19 CMB06-CAV1_0001: Ucav=6.601 MV/m 2025 10 13 CMA04_0002: Ucav=1.479 MV/m 2022 10 14 CMA08_0001: Ucav=3.155 MV/m 2021 11 26 CMB02-CAV1_0008: Ucav=3.736 MV/m 2021 07 21 CMA10avecff_0023: Ucav=1.143 MV/m 2021 11 26 CMB02-CAV1_0025: Ucav=3.766 MV/m 2023 10 12 CMA04_0001 (1): Ucav=0.748 MV/m 2024 11 08 CMA02_0002: Ucav=0.671 MV/m 2024 11 28 CMA04_0001: Ucav=0.740 MV/m 2022 10 07 CMB01-CAV2_0042: Ucav=2.924 MV/m 2020 11 08 CMA07_0003: Ucav=0.700 MV/m 2020 11 18 CMA02_0001: Ucav=0.752 MV/m 2022 09 20 CMA08_0004: Ucav=1.588 MV/m 2024 11 04 CMA02_0002: Ucav=0.671 MV/m 2022 09 25 CMB07-CAV2_0008: Ucav=2.533 MV/m 2022 09 25 CMA03_0001: Ucav=1.396 MV/m 2025 10 13 CMB07-CAV1_0002: Ucav=6.518 MV/m 2024 11 20 CMA12_0001: Ucav=3.232 MV/m 2021 12 03 CMA03_0017: Ucav=0.390 MV/m 2025 10 14 CMA12_0001: Ucav=6.489 MV/m 2025 10 02 CMB02-CAV2_0001: Ucav=6.426 MV/m 2023 10 12 CMA11_0001: Ucav=2.633 MV/m 2021 12 03 CMB03-CAV1_0007: Ucav=3.539 MV/m 2023 09 22 CMA11_0001: Ucav=2.620 MV/m 2021 12 03 CMB01-CAV1_0006: Ucav=3.298 MV/m 2023 09 22 CMB03-CAV1_0002: Ucav=3.308 MV/m 2023 10 17 CMA08_0001: Ucav=3.131 MV/m 2024 09 27 CMB06-CAV2_0001: Ucav=6.113 MV/m 2021 11 30 CMB04-CAV1_0001: Ucav=3.403 MV/m 2025 10 14 CMA01_0001: Ucav=1.277 MV/m 2022 09 15 CMB01-CAV2_0001: Ucav=3.335 MV/m 2025 10 01 CMB06-CAV2_0001: Ucav=6.066 MV/m 2022 10 14 CMB07-CAV2_0005: Ucav=3.101 MV/m 2022 10 04 CMB07-CAV2_0003: Ucav=3.118 MV/m 2021 11 26 CMB02-CAV1_0021: Ucav=3.851 MV/m 2025 10 02 CMA07_0002: Ucav=3.163 MV/m 2021 07 21 CMA10avecff_0050: Ucav=2.598 MV/m 2023 11 16 CMB02-CAV1_0002: Ucav=6.732 MV/m 2024 11 26 CMA02_0001: Ucav=0.599 MV/m 2020 11 18 CMA02_0003_16kw_off 75-0.1 FF: Ucav=0.380 MV/m 2022 09 30 CMA12_0002: Ucav=5.569 MV/m 2023 10 19 CMB04-CAV1_0006: Ucav=3.278 MV/m 2022 10 07 CMB01-CAV2_0088: Ucav=2.972 MV/m 2022 09 14 CMB01-CAV2_0002: Ucav=3.247 MV/m 2021 07 21 CMA10avecff_0017: Ucav=0.191 MV/m 2021 07 21 CMA10avecff_0025: Ucav=1.187 MV/m 2023 08 07 CMA04_0001_DAbsence autorisation RF: Ucav=3.236 MV/m 2024 10 21 CMA11_0001 (1): Ucav=2.029 MV/m 2025 10 06 CMB07-CAV1_0001: Ucav=6.518 MV/m 2021 10 06 CMA12_0003: Ucav=7.887 MV/m 2025 10 18 CMB01-CAV2_0001: Ucav=5.155 MV/m 2025 10 03 CMA06_0001: Ucav=1.964 MV/m 2021 12 03 CMA12_0004: Ucav=3.958 MV/m 2023 10 19 CMA07_0001: Ucav=2.487 MV/m 2024 11 28 CMA02_0001: Ucav=0.679 MV/m 2023 10 19 CMB02-CAV1_0003 cw DPCI=+5: Ucav=6.685 MV/m 2021 11 26 CMB02-CAV1_0018: Ucav=3.810 MV/m 2022 10 14 CMB05-CAV2_0001: Ucav=6.139 MV/m 2021 12 03 CMB04-CAV2_0004: Ucav=3.536 MV/m 2024 09 12 CMB01-CAV1_0001 8000: Ucav=6.293 MV/m 2021 11 19 CMA09_0004: Ucav=1.303 MV/m 2021 12 03 CMB03-CAV1_0006: Ucav=3.539 MV/m 2021 10 06 CMA05_0001: Ucav=2.074 MV/m 2024 11 18 CMA04_0001: Ucav=2.105 MV/m 2024 09 27 CMA03_0001: Ucav=1.403 MV/m 2022 10 07 CMB01-CAV1_0003: Ucav=3.254 MV/m 2022 10 07 CMB01-CAV2_0035: Ucav=3.220 MV/m 2025 10 17 CMA09_0005: Ucav=6.911 MV/m 2025 10 02 CMA08_0003: Ucav=5.465 MV/m 2025 10 15 CMA07_0001: Ucav=3.163 MV/m 2024 11 27 CMA12_0001: Ucav=6.139 MV/m 2023 11 16 CMA03_0005: Ucav=1.405 MV/m 2025 10 17 CMA05_0004: Ucav=1.617 MV/m 2024 11 08 CMA09_0002: Ucav=2.333 MV/m 2025 10 02 CMB07-CAV1_0002: Ucav=6.518 MV/m 2022 10 20 CMB01-CAV2_0010: Ucav=2.985 MV/m 2022 10 14 CMB07-CAV2_0004: Ucav=3.119 MV/m 2025 10 02 CMA07_0003: Ucav=3.163 MV/m 2021 07 30 CMA05_0002: Ucav=0.417 MV/m 2021 11 26 CMB02-CAV1_0044: Ucav=3.861 MV/m 2023 11 04 CMA04_0004 0 mA: Ucav=1.479 MV/m 2024 09 27 CMB02-CAV1_0005_D Absence autorisation RF: Ucav=3.388 MV/m 2023 09 01 CMA08_0007: Ucav=1.587 MV/m 2024 11 04 CMA05_0003: Ucav=0.850 MV/m 2025 10 13 CMA05_0002: Ucav=1.699 MV/m 2023 11 16 CMA07_0004: Ucav=2.498 MV/m 2021 07 21 CMA01_0021: Ucav=1.204 MV/m 2021 12 03 CMA05_0007: Ucav=0.532 MV/m 2023 07 28 CMA01_0009: Ucav=2.971 MV/m 2021 11 16 CMB02-CAV2_0002 5mA: Ucav=6.323 MV/m 2020 11 12 CMA06_0022: Ucav=1.042 MV/m 2022 10 07 CMB01-CAV2_0098: Ucav=2.972 MV/m 2021 11 16 CMB01-CAV1_0010: Ucav=1.351 MV/m 2023 10 19 CMB01-CAV1_0001: Ucav=6.476 MV/m 2021 11 26 CMB02-CAV1_0029: Ucav=3.929 MV/m 2021 11 16 CMA06_0002: Ucav=2.136 MV/m 2022 09 30 CMA05_0006: Ucav=0.671 MV/m 2023 11 16 CMB05-CAV1_0005: Ucav=6.915 MV/m 2022 09 17 CMB01-CAV2_0001: Ucav=2.684 MV/m 2024 11 04 CMB02-CAV1_0003: Ucav=3.378 MV/m 2021 07 30 CMA07_0002: Ucav=0.549 MV/m 2022 10 07 CMB04-CAV2_0071: Ucav=3.074 MV/m 2023 11 16 CMB06-CAV2_0001: Ucav=6.065 MV/m 2024 09 26 CMB05-CAV1_0001 test delai rampe: Ucav=4.954 MV/m 2022 10 07 CMB01-CAV2_0047: Ucav=3.219 MV/m 2023 09 04 CMA01_0001: Ucav=1.277 MV/m 2021 07 30 CMA08_0001 BL D1.9mA 10 0,01: Ucav=3.440 MV/m 2023 10 19 CMB02-CAV1_0002 cw DPCI=-3: Ucav=6.685 MV/m 2024 10 02 CMB02-CAV1_0004_D Absence autorisation RF: Ucav=3.387 MV/m 2024 11 28 CMA01_0001: Ucav=0.632 MV/m 2023 10 12 CMB01-CAV1_0001: Ucav=3.257 MV/m 2022 09 17 CMA12_0012: Ucav=5.536 MV/m 2021 07 21 CMA10avecff_0016: Ucav=0.879 MV/m 2024 11 04 CMB03-CAV1_0001: Ucav=3.318 MV/m 2025 10 20 CMB01-CAV2_0001: Ucav=5.155 MV/m 2022 09 30 CMA07_0004: Ucav=3.390 MV/m 2022 10 07 CMB01-CAV2_0030: Ucav=3.220 MV/m 2022 09 29 CMB07-CAV1_0039: Ucav=0.482 MV/m GT-passing n=150 2020 10 22 CMA10_0001: Ucav=1.749 MV/m 2020 12 08 CMB02-CAV1_0001: Ucav=0.002 MV/m 2023 07 28 CMA12_0003_D Absence autorisation RF: Ucav=0.002 MV/m 2019 10 22 CMA03_0001: Ucav=0.003 MV/m 2022 10 12 CMB01-CAV2_0006: Ucav=1.360 MV/m 2020 10 09 CMA09_0001: Ucav=0.003 MV/m 2020 07 17 CMA10_0015: Ucav=0.012 MV/m 2020 07 29 CMB03-CAV1_0002: Ucav=0.003 MV/m 2020 07 17 CMA10_0001: Ucav=0.003 MV/m 2021 06 28 CMB01-CAV2_0045: Ucav=0.733 MV/m 2020 09 14 CMA01_0004: Ucav=2.318 MV/m 2024 09 25 CMA01_0006 def regul: Ucav=0.645 MV/m 2020 10 22 CMA11_0018: Ucav=0.126 MV/m 2022 11 29 CMB05-CAV2_0004: Ucav=0.002 MV/m 2021 08 29 CMB01-CAV2_0001: Ucav=0.003 MV/m 2019 09 20 CMB06-CAV2_0001: Ucav=0.002 MV/m 2020 07 23 CMB04-CAV2_0001: Ucav=0.004 MV/m 2022 11 09 CMA10_0001: Ucav=6.542 MV/m 2020 12 06 CMA12_0001: Ucav=0.002 MV/m 2022 12 08 CMA01_0002: Ucav=0.001 MV/m 2020 10 09 CMB05-CAV1_0005: Ucav=0.087 MV/m 2019 12 06 CMB02-CAV2_0001: Ucav=0.002 MV/m 2022 10 19 CMB01-CAV2_0005: Ucav=1.055 MV/m 2020 07 17 CMA10_0024: Ucav=0.012 MV/m 2020 11 06 CMA07_0001: Ucav=1.390 MV/m 2019 10 22 CMB07-CAV1_0002: Ucav=0.080 MV/m 2019 11 05 CMA11_0004: Ucav=0.009 MV/m 2019 11 06 CMA10_0015: Ucav=0.133 MV/m 2024 09 19 CMB07-CAV1_0001: Ucav=0.001 MV/m 2020 09 05 CMB06-CAV1_0001: Ucav=0.116 MV/m 2020 10 06 CMB04-CAV1_0002: Ucav=6.768 MV/m 2021 06 25 CMB03-CAV1_0002: Ucav=3.183 MV/m 2019 10 31 CMB02-CAV2_0002: Ucav=0.962 MV/m 2019 10 09 CMB02-CAV1_0010: Ucav=3.423 MV/m 2021 06 17 CMB03-CAV1_0001: Ucav=3.574 MV/m 2022 09 17 CMA12_0007: Ucav=2.220 MV/m 2019 10 09 CMB03-CAV2_0002: Ucav=1.652 MV/m 2021 06 22 CMA12_0002 exp 6.5 MVpm: Ucav=2.986 MV/m 2021 09 03 CMB01-CAV2_0005: Ucav=0.003 MV/m 2020 09 14 CMB02-CAV1_0004: Ucav=3.191 MV/m 2021 11 26 CMA11_0007: Ucav=1.793 MV/m 2020 07 29 CMB07-CAV1_0001: Ucav=0.001 MV/m 2019 11 13 CMA06_0001: Ucav=0.002 MV/m 2020 07 27 CMB05-CAV1_0003: Ucav=3.335 MV/m 2023 09 18 CMA10_0002: Ucav=0.003 MV/m 2021 08 23 CMB01-CAV1_0005: Ucav=3.533 MV/m 2020 09 14 CMB01-CAV1_0001: Ucav=3.323 MV/m 2023 08 10 CMA08_0001: Ucav=0.002 MV/m 2020 09 30 CMA06_0001: Ucav=1.097 MV/m 2020 12 02 CMA10_0002: Ucav=1.750 MV/m 2019 10 15 CMB06-CAV2_0007: Ucav=3.897 MV/m 2020 07 23 CMB07-CAV1_0002: Ucav=2.163 MV/m 2022 12 11 CMA11_0004: Ucav=2.330 MV/m 2020 11 09 CMA10_0006: Ucav=2.047 MV/m 2021 09 14 CMA08_0001: Ucav=1.731 MV/m 2021 09 03 CMA05_0009: Ucav=0.654 MV/m 2020 12 02 CMA01_0001: Ucav=0.001 MV/m 2023 11 09 CMB03-CAV2_0001: Ucav=0.001 MV/m 2022 04 27 CMB04-CAV2_0004: Ucav=0.002 MV/m 2019 12 05 CMA09_0001: Ucav=0.002 MV/m 2019 09 05 CMA11_0016: Ucav=1.314 MV/m 2024 10 24 CMA03_0004: Ucav=0.707 MV/m 2019 12 03 CMA09_0001: Ucav=0.002 MV/m 2020 08 27 CMA09_0001: Ucav=2.588 MV/m 2020 09 29 CMA11_0001: Ucav=4.816 MV/m 2022 08 23 CMB04-CAV1_0001: Ucav=0.003 MV/m 2022 08 30 CMA09_0003: Ucav=2.354 MV/m 2021 07 29 CMB02-CAV1_0022: Ucav=0.654 MV/m 2019 10 22 CMB07-CAV2_0001: Ucav=0.002 MV/m 2020 09 23 CMA02_0005: Ucav=0.018 MV/m 2019 12 06 CMA09_0002: Ucav=0.002 MV/m 2020 10 16 CMB03-CAV1_0003: Ucav=3.556 MV/m 2019 10 28 CMB05-CAV1_0006: Ucav=3.781 MV/m 2022 08 23 CMB07-CAV2_0005: Ucav=2.873 MV/m 2020 10 22 CMB07-CAV1_0001: Ucav=3.022 MV/m 2019 09 06 CMA07_0005: Ucav=0.002 MV/m 2020 12 06 CMB05-CAV1_0001: Ucav=0.001 MV/m 2019 11 26 CMB07-CAV1_0002: Ucav=0.002 MV/m 2022 04 27 CMB04-CAV1_0008: Ucav=0.002 MV/m 2020 09 22 CMA11_0014: Ucav=4.816 MV/m 2020 07 17 CMB07-CAV2_0002: Ucav=0.495 MV/m 2020 10 01 CMA01_0001: Ucav=0.001 MV/m 2020 10 09 CMA11_0013: Ucav=1.057 MV/m 2020 11 06 CMA02_0003 noFF 75-0.1 4.5 mA: Ucav=0.752 MV/m 2019 10 23 CMA01_0001: Ucav=0.002 MV/m 2022 10 17 CMB07-CAV2_0001: Ucav=3.118 MV/m 2021 09 14 CMB04-CAV2_0001: Ucav=3.643 MV/m 2019 12 06 CMB05-CAV2_0002: Ucav=0.002 MV/m 2022 10 04 CMB07-CAV2_0005: Ucav=0.279 MV/m 2019 11 13 CMA09_0002: Ucav=0.018 MV/m 2020 10 19 CMA09_0001: Ucav=1.303 MV/m 2019 10 14 CMA12_0001: Ucav=3.244 MV/m 2021 09 03 CMB01-CAV2_0003: Ucav=0.003 MV/m 2021 12 10 CMB05-CAV1_0004: Ucav=0.236 MV/m 2021 09 03 CMB04-CAV2_0003: Ucav=0.002 MV/m 2020 12 08 CMB01-CAV2_0002: Ucav=3.281 MV/m 2022 09 25 CMB02-CAV1_0042: Ucav=0.178 MV/m 2019 09 18 CMA11_0001: Ucav=3.525 MV/m 2022 08 23 CMB05-CAV1_0001: Ucav=0.002 MV/m 2019 10 09 CMA07_0006: Ucav=4.691 MV/m Feed-forward off n=100 2024 10 11 CMB04-CAV2_0001: Ucav=0.002 MV/m 2023 11 06 CMA07_0002: Ucav=0.003 MV/m 2024 10 24 CMB06-CAV2_0004: Ucav=0.001 MV/m 2021 12 10 CMB05-CAV2_0001: Ucav=0.002 MV/m 2022 10 07 CMA09_0001: Ucav=0.001 MV/m 2021 10 22 CMB02-CAV2_0001: Ucav=0.002 MV/m 2023 09 05 CMB01-CAV1_0003: Ucav=0.002 MV/m 2022 09 20 CMA06_0001: Ucav=0.001 MV/m 2024 10 24 CMA02_0002: Ucav=0.673 MV/m 2023 08 17 CMA06_0001: Ucav=0.001 MV/m 2023 10 19 CMA09_0003: Ucav=0.001 MV/m 2024 11 08 CMB03-CAV1_0003: Ucav=0.002 MV/m 2022 09 06 CMA03_0002: Ucav=0.508 MV/m 2024 10 24 CMB03-CAV2_0002: Ucav=0.002 MV/m 2022 09 20 CMA07_0001: Ucav=0.003 MV/m 2022 10 21 CMB06-CAV1_0001: Ucav=0.001 MV/m 2023 08 24 CMB06-CAV1_0001: Ucav=0.001 MV/m 2025 09 04 CMB03-CAV1_0001: Ucav=6.260 MV/m 2025 09 04 CMB06-CAV2_0001: Ucav=5.968 MV/m 2022 09 30 CMB02-CAV1_0001: Ucav=0.002 MV/m 2023 08 24 CMB03-CAV1_0003: Ucav=0.002 MV/m 2021 11 19 CMB04-CAV1_0001: Ucav=0.002 MV/m 2022 09 20 CMA03_0005: Ucav=0.702 MV/m 2021 11 16 CMA12_0005: Ucav=0.004 MV/m 2023 10 19 CMB07-CAV1_0004: Ucav=0.001 MV/m 2025 09 05 CMB06-CAV2_0002: Ucav=0.001 MV/m 2025 09 19 CMB01-CAV2_0003: Ucav=0.003 MV/m 2025 09 05 CMA05_0001: Ucav=0.004 MV/m 2021 11 19 CMB03-CAV2_0001: Ucav=0.002 MV/m 2021 10 22 CMB05-CAV2_0001: Ucav=0.002 MV/m 2024 09 16 CMA11_0001: Ucav=0.004 MV/m 2022 10 21 CMA01_0006: Ucav=0.002 MV/m 2023 08 10 CMA02_0001: Ucav=0.001 MV/m 2023 08 11 CMA03_0002: Ucav=0.003 MV/m 2021 12 03 CMB05-CAV1_0002: Ucav=0.002 MV/m 2021 10 22 CMA09_0001: Ucav=0.002 MV/m 2022 09 20 CMA08_0002: Ucav=0.002 MV/m 2021 11 16 CMB04-CAV1_0004: Ucav=0.002 MV/m 2023 08 17 CMA05_0003: Ucav=2.448 MV/m 2023 09 05 CMB02-CAV1_0021: Ucav=0.002 MV/m 2022 10 07 CMB06-CAV2_0001: Ucav=0.001 MV/m 2025 10 03 CMA10_0004: Ucav=0.003 MV/m 2024 11 08 CMB06-CAV2_0001: Ucav=0.001 MV/m 2025 09 04 CMA02_0002: Ucav=0.413 MV/m 2021 12 03 CMA03_0002: Ucav=0.003 MV/m 2025 10 02 CMA08_0004: Ucav=0.002 MV/m 2021 11 19 CMA06_0001: Ucav=0.001 MV/m 2025 09 04 CMA01_0001: Ucav=6.102 MV/m 2023 08 11 CMA05_0002: Ucav=0.003 MV/m 2023 10 19 CMA05_0003: Ucav=0.003 MV/m 2021 10 22 CMA10_0001: Ucav=0.003 MV/m 2023 09 01 CMB01-CAV1_0001: Ucav=0.001 MV/m 2023 11 16 CMA06_0006: Ucav=0.001 MV/m 2023 08 10 CMB03-CAV1_0001: Ucav=0.003 MV/m 2021 11 12 CMB02-CAV2_0002: Ucav=0.002 MV/m 2021 12 10 CMA03_0001: Ucav=0.002 MV/m 2021 12 10 CMB06-CAV1_0001: Ucav=0.002 MV/m 2022 09 29 CMB07-CAV1_0026: Ucav=2.017 MV/m 2021 10 26 CMA09_0001: Ucav=0.002 MV/m 2025 09 19 CMB04-CAV1_0004: Ucav=0.003 MV/m 2023 10 19 CMA10_0002: Ucav=0.003 MV/m 2025 09 19 CMA07_0004: Ucav=0.004 MV/m 2022 09 06 CMB04-CAV1_0001: Ucav=0.002 MV/m 2024 11 25 CMA07_0001: Ucav=0.004 MV/m 2021 11 19 CMA12_0005: Ucav=0.003 MV/m 2022 09 20 CMA01_0003: Ucav=0.001 MV/m 2024 09 23 CMB01-CAV1_0001: Ucav=0.001 MV/m 2025 09 19 CMA03_0004: Ucav=0.003 MV/m 2024 11 08 CMB07-CAV1_0005: Ucav=0.001 MV/m 2021 11 19 CMA10_0006: Ucav=0.006 MV/m 2023 08 10 CMB01-CAV2_0001: Ucav=0.004 MV/m 2022 09 14 CMA02_0001: Ucav=0.341 MV/m 2024 10 24 CMA11_0001: Ucav=0.003 MV/m 2022 09 14 CMB01-CAV2_0001: Ucav=0.003 MV/m 2024 10 24 CMB04-CAV1_0004: Ucav=0.002 MV/m 2021 11 15 CMB07-CAV1_0002: Ucav=0.001 MV/m 2022 10 21 CMA01_0002: Ucav=0.002 MV/m 2025 09 19 CMB03-CAV2_0002: Ucav=0.003 MV/m 2021 11 26 CMB04-CAV2_0002: Ucav=0.002 MV/m 2025 09 05 CMA07_0002: Ucav=0.004 MV/m 2021 11 12 CMA09_0001: Ucav=0.002 MV/m 2022 10 12 CMB04-CAV1_0001: Ucav=0.002 MV/m 2025 09 19 CMA07_0001: Ucav=0.004 MV/m 2023 08 11 CMA09_0002: Ucav=0.001 MV/m 2025 09 26 CMA09_0001: Ucav=0.001 MV/m 2021 12 03 CMA07_0001: Ucav=0.003 MV/m 2023 08 22 CMA12_0001_D Absence autorisation RF: Ucav=0.003 MV/m 2023 08 11 CMB06-CAV1_0001: Ucav=0.001 MV/m 2022 09 17 CMA09_0001: Ucav=0.001 MV/m 2021 10 26 CMB01-CAV1_0002: Ucav=0.002 MV/m 2025 09 04 CMA04_0002: Ucav=0.001 MV/m 2022 10 12 CMA03_0001: Ucav=0.003 MV/m 2021 11 19 CMA04_0001: Ucav=0.001 MV/m 2022 10 12 CMB03-CAV2_0003: Ucav=0.002 MV/m 2024 11 04 CMA03_0004: Ucav=0.708 MV/m 2024 10 24 CMB02-CAV1_0007_D Absence autorisation RF: Ucav=0.002 MV/m 2021 12 02 CMA12_0002: Ucav=0.014 MV/m 2025 09 05 CMB05-CAV1_0002: Ucav=0.002 MV/m 2021 12 10 CMA04_0001: Ucav=0.001 MV/m 2022 09 06 CMA02_0001: Ucav=0.341 MV/m Loop OFF n=100 2023 11 16 CMB04-CAV2_0001: Ucav=7.057 MV/m 2022 11 03 CMB05-CAV2_0001: Ucav=6.759 MV/m 2022 11 24 CMB04-CAV1_0001: Ucav=0.275 MV/m 2022 11 24 CMB02-CAV1_0006: Ucav=3.675 MV/m 2022 11 24 CMA11_0016: Ucav=1.005 MV/m 2022 11 29 CMB01-CAV2_0002: Ucav=3.623 MV/m 2022 11 21 CMB01-CAV1_0001: Ucav=2.707 MV/m 2022 10 31 CMA12_0002: Ucav=3.803 MV/m 2022 11 24 CMA05_0009: Ucav=0.933 MV/m 2022 11 29 CMB06-CAV2_0001: Ucav=3.044 MV/m 2022 11 03 CMB04-CAV2_0003 50-0.1 oui: Ucav=6.637 MV/m 2021 12 03 CMB07-CAV1_0005: Ucav=3.144 MV/m 2022 11 24 CMA12_0002: Ucav=0.350 MV/m 2022 11 03 CMB03-CAV2_0003: Ucav=6.788 MV/m 2022 11 22 CMA12_0028: Ucav=1.288 MV/m 2022 11 29 CMA06_0005: Ucav=0.985 MV/m 2022 11 24 CMA11_0019: Ucav=1.132 MV/m 2022 11 24 CMA11_0010: Ucav=0.725 MV/m 2022 11 22 CMB01-CAV1_0030: Ucav=0.687 MV/m 2022 11 24 CMA11_0020: Ucav=1.191 MV/m 2022 11 03 CMB03-CAV1_0002: Ucav=6.574 MV/m 2022 11 09 CMA05_0002: Ucav=1.699 MV/m 2022 11 24 CMB01-CAV1_0005: Ucav=0.722 MV/m 2021 12 03 CMA11_0007: Ucav=2.414 MV/m 2021 12 03 CMB05-CAV2_0024: Ucav=3.101 MV/m 2021 09 29 CMB01-CAV2_0001: Ucav=0.003 MV/m 2022 11 09 CMB07-CAV1_0004: Ucav=6.332 MV/m 2022 11 24 CMA11_0055: Ucav=2.819 MV/m 2022 11 09 CMA04_0001: Ucav=1.479 MV/m 2021 09 29 CMB04-CAV2_0001: Ucav=0.002 MV/m 2022 11 09 CMB07-CAV2_0001: Ucav=3.118 MV/m 2022 11 29 CMB03-CAV1_0001: Ucav=3.298 MV/m 2022 11 03 CMB04-CAV1_0002: Ucav=6.291 MV/m 2022 11 09 CMA01_0001: Ucav=1.277 MV/m 2022 11 09 CMA02_0002: Ucav=1.367 MV/m 2022 09 25 CMB02-CAV1_0006: Ucav=1.520 MV/m 2021 12 03 CMB05-CAV2_0021: Ucav=3.046 MV/m 2022 12 08 CMB01-CAV1_0012: Ucav=2.018 MV/m 2021 09 28 CMB02-CAV1_0005: Ucav=6.633 MV/m 2023 11 16 CMA01_0007: Ucav=0.643 MV/m 2022 11 29 CMB02-CAV2_0002: Ucav=3.619 MV/m 2022 09 30 CMB04-CAV2_0010: Ucav=0.323 MV/m 2021 11 12 CMB06-CAV1_0005 kpki durs 6.46 MVpm: Ucav=7.422 MV/m 2022 11 03 CMB03-CAV2_0004: Ucav=3.460 MV/m 2021 07 30 CMB07-CAV2_0005: Ucav=5.448 MV/m 2022 11 09 CMB04-CAV1_0002: Ucav=6.292 MV/m 2022 11 03 CMB04-CAV1_0006: Ucav=6.279 MV/m 2022 12 08 CMB01-CAV2_0011: Ucav=1.756 MV/m 2022 11 24 CMA05_0007: Ucav=0.710 MV/m 2022 11 24 CMB03-CAV1_0012: Ucav=1.564 MV/m 2021 09 29 CMA07_0003: Ucav=1.373 MV/m 2022 11 29 CMB03-CAV2_0001: Ucav=3.143 MV/m 2021 09 29 CMB02-CAV1_0002: Ucav=0.002 MV/m 2022 11 24 CMA11_0043: Ucav=2.241 MV/m 2022 11 03 CMA03_0006: Ucav=0.004 MV/m 2022 09 25 CMB02-CAV1_0031: Ucav=1.125 MV/m 2022 11 21 CMB03-CAV1_0001: Ucav=2.637 MV/m 2022 11 24 CMA11_0035: Ucav=1.957 MV/m 2022 11 03 CMA05_0003: Ucav=1.698 MV/m 2022 11 29 CMA07_0006: Ucav=1.249 MV/m 2022 11 03 CMA09_0003: Ucav=1.521 MV/m 2021 07 30 CMB06-CAV1_0004: Ucav=7.421 MV/m 2022 11 24 CMA11_0014: Ucav=0.915 MV/m 2021 11 15 CMB06-CAV2_0013: Ucav=1.664 MV/m 2023 07 28 CMA01_0010: Ucav=1.240 MV/m 2022 11 04 CMA05_0008: Ucav=1.697 MV/m 2021 12 03 CMB05-CAV1_0007: Ucav=0.365 MV/m 2022 11 04 CMA09_0003: Ucav=4.634 MV/m 2022 11 04 CMA04_0002: Ucav=1.479 MV/m 2022 11 03 CMB03-CAV2_0008: Ucav=0.001 MV/m 2022 11 24 CMB01-CAV1_0020: Ucav=2.442 MV/m 2021 09 29 CMA06_0003: Ucav=1.073 MV/m 2022 11 03 CMB01-CAV1_0002: Ucav=6.476 MV/m 2022 11 24 CMA12_0014: Ucav=1.696 MV/m 2022 12 06 CMB01-CAV2_0002: Ucav=3.266 MV/m 2022 11 22 CMA12_0033: Ucav=0.929 MV/m 2021 12 03 CMB04-CAV1_0038: Ucav=3.385 MV/m 2022 11 09 CMA01_0002: Ucav=1.277 MV/m 2022 11 29 CMB01-CAV2_0010: Ucav=3.272 MV/m 2022 11 09 CMA08_0002: Ucav=3.155 MV/m 2022 11 03 CMA02_0007: Ucav=0.001 MV/m 2022 11 04 CMA07_0009: Ucav=2.487 MV/m 2022 09 25 CMB02-CAV1_0023: Ucav=3.756 MV/m 2022 11 03 CMA05_0004: Ucav=1.698 MV/m 2021 12 03 CMB06-CAV1_0007: Ucav=0.102 MV/m 2022 09 25 CMB02-CAV1_0037: Ucav=0.231 MV/m 2021 12 03 CMB04-CAV1_0029: Ucav=3.611 MV/m 2022 11 29 CMB02-CAV2_0003: Ucav=3.228 MV/m 2022 11 22 CMB01-CAV1_0026: Ucav=1.147 MV/m 2022 11 24 CMB01-CAV1_0031: Ucav=3.282 MV/m 2021 12 03 CMB06-CAV2_0009: Ucav=3.532 MV/m 2022 11 24 CMB03-CAV1_0024: Ucav=3.021 MV/m 2022 11 03 CMB05-CAV2_0005: Ucav=0.002 MV/m 2022 11 04 CMA06_0002: Ucav=1.964 MV/m 2022 11 04 CMA12_0006: Ucav=6.488 MV/m 2022 11 04 CMA03_0010: Ucav=1.396 MV/m 2022 11 04 CMA10_0003: Ucav=6.542 MV/m 2022 11 03 CMB01-CAV2_0005: Ucav=0.003 MV/m 2022 11 04 CMA11_0004: Ucav=5.228 MV/m 2022 11 03 CMA12_0007: Ucav=6.476 MV/m AMPT>10% n=100 2021 12 02 CMB06-CAV2_0008: Ucav=3.011 MV/m 2021 09 03 CMA10_0008: Ucav=0.003 MV/m 2021 07 21 CMA01_0017 5 7E-4 FFOUI tuned12° 1 mA: Ucav=1.285 MV/m 2022 09 20 CMB07-CAV2_0009: Ucav=3.191 MV/m 2022 09 20 CMA05_0005: Ucav=0.855 MV/m 2022 09 20 CMB03-CAV1_0005: Ucav=3.310 MV/m 2022 09 22 CMA12_0003: Ucav=3.260 MV/m 2022 09 09 CMA12_0005: Ucav=0.262 MV/m 2022 09 23 CMB04-CAV1_0001: Ucav=6.292 MV/m 2021 09 03 CMA10_0004: Ucav=1.444 MV/m 2022 11 29 CMA05_0005: Ucav=0.853 MV/m 2022 09 23 CMB02-CAV2_0001: Ucav=6.426 MV/m 2021 09 28 CMB05-CAV1_0002: Ucav=6.449 MV/m 2024 10 11 CMA08_0003: Ucav=1.580 MV/m 2022 10 18 CMB01-CAV2test PMT_0003: Ucav=5.559 MV/m 2021 09 16 CMA05_0001: Ucav=0.003 MV/m 2022 10 07 CMB04-CAV2_0045: Ucav=3.070 MV/m 2021 09 29 CMB03-CAV1_0002: Ucav=3.814 MV/m 2021 09 21 CMA11_0005: Ucav=2.122 MV/m 2024 11 08 CMA08_0003: Ucav=1.580 MV/m 2022 09 23 CMB07-CAV1_0001: Ucav=6.202 MV/m 2021 09 21 CMA11_0002: Ucav=2.294 MV/m 2022 09 25 CMB07-CAV1_0004: Ucav=3.183 MV/m 2024 09 19 CMA10_0001: Ucav=3.251 MV/m 2022 10 07 CMB04-CAV2_0036: Ucav=3.074 MV/m 2024 10 11 CMA03_0001: Ucav=0.707 MV/m 2023 11 27 CMB07-CAV2_0017 cw 5.3 MVpm 3.3 kWi, 3.15 kWr 12deg: Ucav=5.133 MV/m 2021 11 12 CMA05_0004: Ucav=0.910 MV/m 2022 09 23 CMB01-CAV2_0001: Ucav=6.397 MV/m 2021 09 29 CMA11_0009: Ucav=2.408 MV/m 2021 12 01 CMB04-CAV1_0005: Ucav=3.383 MV/m 2022 09 23 CMB05-CAV1_0001: Ucav=6.522 MV/m 2021 11 15 CMB06-CAV2_0046: Ucav=2.037 MV/m 2024 10 24 CMA04_0005: Ucav=0.753 MV/m 2021 10 06 CMB07-CAV2_0001: Ucav=5.914 MV/m 2024 11 04 CMA06_0001: Ucav=0.999 MV/m 2023 08 07 CMB01-CAV2_0001: Ucav=0.003 MV/m 2022 10 07 CMB04-CAV2_0026: Ucav=3.073 MV/m 2022 09 16 CMA12_0009: Ucav=0.522 MV/m 2022 09 29 CMB03-CAV2_0020: Ucav=0.467 MV/m 2022 09 13 CMB06-CAV2_0002: Ucav=0.001 MV/m 2024 10 11 CMA10_0001: Ucav=3.273 MV/m 2021 09 21 CMB02-CAV2_0002: Ucav=3.177 MV/m 2025 09 03 CMA01_0001: Ucav=1.016 MV/m 2023 08 07 CMA01_0005: Ucav=1.240 MV/m 2024 09 27 CMA08_0003 kf FFO coup sur defaut regul: Ucav=3.151 MV/m 2022 09 17 CMB04-CAV1_0008: Ucav=0.494 MV/m 2022 09 25 CMB06-CAV2_0002: Ucav=2.845 MV/m 2024 10 11 CMA10_0004: Ucav=3.274 MV/m 2021 09 21 CMB05-CAV1_0001: Ucav=0.002 MV/m 2022 08 23 CMA01_0001: Ucav=1.879 MV/m 2022 09 22 CMA09_0001: Ucav=4.635 MV/m 2021 09 16 CMB07-CAV1_0001: Ucav=0.001 MV/m 2024 11 25 CMA04_0001: Ucav=2.005 MV/m 2021 11 15 CMB06-CAV2_0044: Ucav=0.739 MV/m 2024 10 24 CMB02-CAV1_0003_D Signal RF hors tolérance: Ucav=3.385 MV/m 2022 09 30 CMB06-CAV2_0005: Ucav=0.596 MV/m 2022 09 22 CMB06-CAV2_0004: Ucav=0.514 MV/m 2023 11 16 CMB07-CAV1_0001: Ucav=6.518 MV/m 2022 09 20 CMB04-CAV2_0004: Ucav=3.335 MV/m 2024 10 02 CMB03-CAV1_0001: Ucav=3.319 MV/m 2022 09 22 CMB06-CAV2_0003: Ucav=3.190 MV/m 2024 10 24 CMA08_0002: Ucav=1.580 MV/m 2021 12 01 CMB07-CAV1_0003: Ucav=0.631 MV/m 2021 12 01 CMA11_0003: Ucav=0.729 MV/m 2021 10 26 CMA12_0001: Ucav=3.950 MV/m 2022 09 29 CMB03-CAV2_0005: Ucav=0.507 MV/m 2021 11 12 CMB07-CAV2_0010: Ucav=0.047 MV/m 2021 09 29 CMB01-CAV2_0002: Ucav=3.522 MV/m 2021 11 15 CMB06-CAV2_0039: Ucav=0.738 MV/m 2025 10 18 CMB01-CAV2_0002: Ucav=5.155 MV/m 2025 10 20 CMB01-CAV2_0005: Ucav=5.155 MV/m 2021 12 01 CMB05-CAV1_0006: Ucav=2.979 MV/m 2022 09 25 CMB05-CAV1_0001: Ucav=1.382 MV/m 2021 09 16 CMB01-CAV1_0001: Ucav=0.002 MV/m 2021 09 28 CMB06-CAV2_0001: Ucav=7.002 MV/m 2024 10 11 CMA02_0001: Ucav=0.673 MV/m 2021 09 21 CMA05_0008: Ucav=0.635 MV/m 2024 10 24 CMB02-CAV2_0007: Ucav=3.235 MV/m 2024 10 11 CMB07-CAV1_0002: Ucav=3.387 MV/m 2022 09 17 CMA11_0002: Ucav=0.411 MV/m 2021 09 29 CMB04-CAV1_0002: Ucav=3.488 MV/m 2021 09 21 CMA09_0008: Ucav=2.541 MV/m 2022 09 29 CMB07-CAV1_0008: Ucav=0.486 MV/m 2025 10 23 CMB01-CAV2_0001: Ucav=5.155 MV/m 2023 11 13 CMA08_0022: Ucav=1.587 MV/m 2022 09 20 CMB04-CAV1_0005: Ucav=0.241 MV/m 2021 11 26 CMB05-CAV2_0002: Ucav=0.987 MV/m 2021 10 08 CMB02-CAV1_0001: Ucav=0.002 MV/m 2022 09 20 CMB04-CAV1_0007: Ucav=0.829 MV/m 2024 11 08 CMA11_0004: Ucav=2.006 MV/m 2022 09 25 CMB05-CAV1_0002: Ucav=0.518 MV/m 2022 09 17 CMA11_0003: Ucav=0.411 MV/m 2024 11 18 CMA01_0001: Ucav=0.935 MV/m 2022 10 07 CMB04-CAV2_0027: Ucav=3.074 MV/m 2021 10 08 CMB03-CAV2_0001: Ucav=0.002 MV/m 2022 10 14 CMA12_0005: Ucav=1.742 MV/m 2022 09 20 CMB04-CAV1_0006: Ucav=0.320 MV/m 2021 09 21 CMA09_0012: Ucav=2.541 MV/m 2022 11 03 CMB06-CAV2_0007: Ucav=0.001 MV/m KPI<10 n=100 0.001 0.01 0.1 1 10 cavity voltage amplitude, |Ucav| (MV/m, log scale)
Each dot is one file's whole-trace mean |Ucav|; the short horizontal tick is each group's median. Loop OFF is unambiguous: 95% collapse near zero, fully coherent with an open control loop. Feed-forward off splits: median 0.39 MV/m (vs. 3.16 baseline), but ~35% of the sample sits inside the baseline's own operating range, loop still closed — feed-forward is a control-loop compensation feature, unrelated to beam presence, so a live-looking file with it disabled needs no special explanation. The dead-looking majority lines up with the recoverable-data check above: most of that group fails a real check (low KPI, open loop) once you look past the feed-forward flag. AMPT and KPI are acquisition-quality metrics, not state flags, so their large overlap with the baseline range was always expected. n=100 per rejected group, n=150 baseline, single random sample (seed 20260908), one pass — a first look, not a hardened estimate.
Rejected groupLive-looking in sampleOld countRead
Loop OFF5 / 1001,534→2,878clean — header is coherent
Feed-forward off35 / 1008,205→3,229expected once corrected — unrelated to RF/beam state; scope fix now applied
KPI < 1057 / 100859→3,168expected — a reliability metric, not a state flag
AMPT > 10%63 / 1001,113→1,187expected — a reliability metric, not a state flag

One more thing tested along the way: is there an independent beam-presence signal in this data at all, now that the header field turned out not to be one? The classifier's own code carries a field literally called Presence faisceau, but it's built by renaming a per-sample état bit labeled Temp RF int on the way out — a mismatch between the variable name and its documented source. Tested against 250 of the same sampled files: even in the passing baseline, this bit reads "on" for essentially none of the trace (median 0.09% of samples). That's not what a real, sustained beam-presence signal should look like, so this field looks mislabeled or misassigned rather than trustworthy — worth a bug report to whoever owns Classify_PostMortemFile, separately from the feed-forward correction above. courant pickup (pickup-probe current) was the other candidate; it also failed, pinning at a near-constant ~33 µA for the large majority of files in every group. Net: there is currently no independently-verified beam-presence signal in this dataset at all.

Status: V7 extracted and validated. The classifier fix is applied, re-run, and the recovery confirmed (+756 events, entirely 2019–2020, everything else untouched). prepare_data_cluster_v7.py (forked from V6, with the beam_presentfeed_forward_enabled feature rename applied) has run against the corrected ground truth: 2,865 events (2,866 ground-truth-passing minus the same single feature-extraction failure V6 also hit), 1,478 Normal / 1,387 fault, 810 features (up from 777 — expected: the same 0.95 correlation-dedup threshold keeps a different subset once the dataset's composition changes, not a bug), 246 PCA components. Validated directly: NaN rate in the newly-recovered 2019–2020 events (0.20% / 0.31%) is lower than the full corpus's own average (0.45%), and their fault-category mix (majority Normal, RF regulation out of tolerance the largest fault category) matches the rest of the corpus — no sign the recovered events are degenerate. Steps 01–08 below still describe V6 — re-running them against V7 (Phase 2) hasn't started yet.

01

Preprocessing

preprocess_signals() Explored 2026-09-09

Three operations, in order, applied to every one of the 27 signals independently: a 4th-order Butterworth high-pass filter (cutoff 0.01, normalized to each file's own Nyquist frequency — i.e. relative to that file's own sample rate, since decimation varies ~250× across the corpus) removes DC offset and slow drift while keeping fast transients; each event is aligned to its own true trigger sample, read directly off the acquisition's real time axis (zero_idx = argmin(|time|)) rather than a fixed offset; then the filtered signal is Z-score normalized over its own event window, with the filtered-but-unnormalized version kept alongside it (the 2026-09-07 fix from step 02, so real-amplitude statistics have real amplitude to work from).

The old bug, with a real number attached: for a representative NDEC=200 event (2022 10 12 CMA01_0001, an Oscillation Ucav subtype of RF regulation out of tolerance), the true trigger sits at sample 50,047 of 100,096. The pipeline's old hardcoded trigger_idx=3000 would have pointed 534 ms early — 47,047 samples off, 47% of the entire file — treating what was actually mid-acquisition steady-state as if it were the pre-trigger precursor window. Every "pre-trigger" and "post-trigger" feature in the old pipeline was computed from the wrong slice of the trace for a file like this one.

1.44 -0.15 1. Raw Ucav, MV/m 0.05 -0.03 2. High-pass filtered (4th-order Butterworth, cutoff 0.01) a.u. 3.91 -2.25 3. Z-score normalized σ -250 -200 -150 -100 -50 0 50 100 150 time relative to trigger (ms) trigger (t=0)
Real trace, same event as above, zoomed to the analysis window (−250 to +150 ms around the trigger). Panel 1: raw Ucav in physical units (MV/m) — a slow drift is visible, the reason for panel 2. Panel 2: after the high-pass filter, DC offset and drift are gone, transient structure preserved; note the y-axis is now dimensionless (arbitrary units) since the filter has no calibrated gain. Panel 3: Z-scored — same shape as panel 2, rescaled to standard deviations, which is what every classifier in this pipeline actually sees. One real, verified aside: this same file's Z-scored trace peaks at |z|=93.6 — not visible here because it happens at the very first sample (t=−568 ms), the high-pass filter's own causal startup transient, not a real physical event. It's why the report's methodology explicitly restricts analysis to a window well after file-start (Sec. 3) — confirmed here directly, not just asserted.

Two more things worth being precise about, since they're easy to gloss over. First, the precursor window used for early-fault-onset detection isn't "the first 3,000 samples" or "34 ms" in some fixed sense — it's scale_samples(3000, dt_us), which converts a sample count tuned at the dominant NDEC=200 spacing (dt ≈ 11.4 µs) into whatever sample count gives the same physical duration for this file's own dt_us. A file with NDEC=100 (like several of the recovered 2019 events above) needs about twice as many samples for the same 34 ms. Second, one fault category — RF regulation out of tolerance — gets a further onset refinement on top of the informatic trigger: Alexandre's AMPT-based physical onset detection (find_true_t0_with_ampt), applied only to that category since it's the one his validation actually covers, per the earlier user decision documented in the methodology.

02

Feature engineering

engineer_features() Explored 2026-09-09

Three families, computed for every event: 17 statistics × 27 signals over the full window (459 candidates); seven physics-informed families targeting specific LLRF dynamics (39 candidates: effective decay, detuning, microphonics, RF mismatch, modulator command, phase stability, RF power flow); and temporal/derivative features — per-segment slopes, finite differences, CUSUM change points, early/late-window ratios — the largest group by far. Before correlation filtering that's 1,200+ raw candidates; after the >0.95 dedup pass, 810 features survive in V7 (up from 777 in V6). Verified directly on V7 with the same family classifier the paper's SHAP analysis uses (100% coverage, zero unclassified features, both versions):

0 100 200 300 400 500 Temporal 501 Statistical 260 Metadata/Status 10 RF Mismatch 9 Effective Decay 6 Modulator Command 6 RF Power Flow 5 Detuning 5 Phase Stability 4 Microphonics 4
Teal bars are the seven physics-informed families (39 features total); ochre bars are the generic statistical/temporal/metadata families (771). That's a 19.8:1 imbalance — confirms the report's "roughly 20:1" claim still holds exactly on V7, which matters because it's the reason the paper reports per-feature-mean SHAP importance by family rather than a group sum (Sec. 5): summing would structurally favor the two large generic groups regardless of how informative any single physics feature actually is. Comparing to V6: the physics-informed families and Metadata/Status are byte-identical in count (39 and 10, both versions) — only Statistical (262→260) and Temporal (466→501) shifted, exactly what you'd expect from the same 0.95 correlation threshold landing differently on a differently-composed dataset, not a change in what's being computed.

One family worth a close look because it's the most physically interpretive: effective system decay. Post-trigger, the pipeline fits cavity voltage amplitude (|Ucav|, in MV/m) to V(t) = V0·e−t/τeff over a fixed 500-sample-equivalent window (≈5.7 ms), by linear regression on ln|Ucav|. The report is explicit that τeff is not the cavity's intrinsic QL — with the LLRF loop still active and protection logic responding, what's measured is the whole system's response. First pass at this (below, corrected) picked one clean-fitting and one poor-fitting quench event and left it at "an active loop makes the decay non-exponential" — too glib, and the log-scale plot hid the actual units and made a genuinely important detail invisible. Redone properly: measured how long each of the 31 real quench events takes to drop below 20% of its pre-trigger amplitude, across the whole category, not two cherry-picked examples.

0.01 0.1 1 2021 11 19 CMB07-CAV2_0001: 0.011 ms 2023 08 11 CMA11_0012: 0.011 ms 2025 10 23 CMB01-CAV1_0001: 0.011 ms 2020 09 24 CMA10_0001: 0.023 ms 2022 10 14 CMB07-CAV2_0006: 0.023 ms 2022 10 20 CMA11_0003: 0.034 ms 2021 11 19 CMB07-CAV2_0007: 0.057 ms 2021 11 19 CMB07-CAV2_0002: 0.057 ms 2022 10 07 CMB07-CAV2_0003: 0.057 ms 2022 09 16 CMA09_0001: 0.068 ms 2021 11 19 CMB07-CAV2_0004: 0.068 ms 2024 11 04 CMA10_0003: 0.068 ms 2022 10 07 CMB07-CAV2_0002: 0.079 ms 2020 09 23 CMA02_0013: 0.091 ms 2022 10 07 CMB01-CAV2_0060: 0.102 ms 2022 10 07 CMB01-CAV2_0059: 0.114 ms 2023 07 28 CMA02_0003: 0.125 ms 2022 10 14 CMB07-CAV2_0007: 0.125 ms 2021 11 19 CMB07-CAV2_0006: 0.136 ms 2021 11 19 CMB07-CAV2_0005: 0.148 ms 2022 09 06 CMA11_0001: 0.148 ms 2022 10 14 CMB07-CAV2_0005: 0.170 ms 2020 09 24 CMA09_0001: 0.170 ms 2023 07 28 CMA05_0006: 3.952 ms 2021 10 22 CMA05_0002: 4.066 ms 2022 10 07 CMB01-CAV2_0045: 4.656 ms 2022 10 07 CMB01-CAV2_0026: 4.713 ms 2022 09 25 CMB07-CAV2_0007: 5.099 ms 2022 09 30 CMB07-CAV2_0002: 5.167 ms 2022 10 04 CMB07-CAV2_0001: 5.167 ms 2022 10 07 CMB07-CAV2_0005: 5.236 ms no events in this range time from trigger to |Ucav| < 20% of pre-trigger amplitude (ms, log scale)
Every real Claquage ou quench cavité event in the corpus (n=31), red = collapses in under 1 ms, teal = takes several ms. 23 of 31 (74%) collapse within 0.17 ms — 1 to 15 samples, functionally instantaneous; the other 8 (26%) take 4.0–5.2 ms, and nothing falls in between. That's a real gap in real data, not a modeling artifact. Your read was right: for the fast group, the 5.7 ms fit window isn't wrong because it's too wide in some absolute sense — it's that the entire physical event is over in 1–2 samples, so no window, however sized, gives a log-linear regression anything real to fit; the other ~490 samples are just noise near the floor. R² correctly reports that as a bad fit; it isn't measuring "how non-exponential the decay is," it's silently flagging "there was no decay to measure."
Fast collapse: 2022 09 16 CMA09_0001 complete within ~1 sample (0.068 ms) 20% of initial 0.00 0.25 0.49 0.74 0.99 7.2 0 ms after trigger |Ucav| (MV/m) Slow decay: 2022 10 07 CMB01-CAV2_0026 genuine multi-ms relaxation (4.71 ms to 20%) 20% of initial 0.00 1.50 2.99 4.49 5.99 6.9 0 ms after trigger |Ucav| (MV/m)
Same two events as the original attempt, now in real units (MV/m) on a linear axis instead of log|Ucav|. Left: the collapse is a near-step function — 6.65 MV/m at the trigger, 0.002 MV/m one sample (11.4 µs) later. Right: a genuine multi-millisecond relaxation, still above 1 MV/m five milliseconds out. These are two different physical regimes, most plausibly a hard breakdown/arc (fast group) versus a softer interlock-triggered ramp-down (slow group) — consistent with your "different sub-families" read.

Checked whether the pipeline's own subtype-clustering step (09, k=2 search per category) already found this: it gives 19/9 for this category on V6's 28 events, and that smaller cluster (n=9) is disproportionately the group with no valid decay window (56% vs 26% in the larger cluster) — correlated with the fast/slow split, but not identical to it. Checked why: the real top-differentiating features between those two clusters (same Cohen's-d method the report's own subtype figure uses) turn out to be modulator-command and reference-frequency statistics, not the decay features directly — the existing clustering runs over the full 810-feature space and lands on whatever axis separates best overall, which isn't necessarily collapse-timescale. The collapse-time gap shown above is a cleaner, more directly physical signal than what the current full-feature clustering surfaces — worth flagging as a concrete, real methodology improvement: either add collapse-timescale as an explicit feature, or run the subtype search on the physics-informed decay features specifically rather than the full feature space, before trusting the current quench subtype split as physically meaningful.

Last check: the whole-signal-statistic normalization-order bug (Sec. 00/01, fixed 2026-09-07) reduced near-constant features from 65 to 15 on V6. Re-ran the same check on V7: 16 near-constant features (std<1e-6 of 810) — same story, one more. The two previously-disclosed non-functional features (reflected_saturation_fraction, control_saturation_fraction, still-miscalibrated legacy thresholds) are still in the list, unchanged. The one addition, llrf_loop_closed, is easily explained: V7's recovered 2019–2020 events skew the corpus slightly more toward closed-loop operation, pushing that flag's variance just under the threshold — a composition effect, not a new bug.

03

Precursor detection

prepare_05_phase0_precursor.py Explored 2026-09-08

Early fault-onset detection, restricted to the pre-trigger-only 386-feature subset so the task can't cheat off the post-trigger transient. Five unsupervised baselines (Isolation Forest, LOF, Mahalanobis distance on a PCA-reduced Ledoit–Wolf covariance, PCA reconstruction error, DBSCAN) establish how much separability exists without labels, then a class-weighted Random Forest is trained supervised on the same subset. An ensemble score combines all of the unsupervised methods with the RF's own probability output.

Everything on this step is V6, not V7 The trained precursor model and every number/chart below come from step_05_v6/precursor_detection.pkl — V6, the last dataset with a full downstream re-run, not V7 (see the "Data foundation" step above and the sidebar footer for the V6/V7 dataset status). Step 05 is one of the steps Phase 2 (re-running everything against V7) would need to redo, and Phase 2 hasn't happened yet. Concretely: none of the ~756 events recovered by the feed-forward fix (mostly 2019–2020) were in this model's training/test data, and the mislabeled beam_present field (only correctly meaningful post-2021 on V6) may itself have been a feature the model leaned on. The one finding below that's unaffected by this: the buffer-length numbers (568.4ms/1136.8ms), which come from reading raw postmortem files directly, independent of dataset version.
MethodROC AUCLabelsNotes
Random Forest0.9991supervised386-feature true-precursor subset
Ensemble0.9881supervised5 unsupervised scores + RF probability, combined
Mahalanobis distance0.7881unsupervisedPCA-reduced Ledoit–Wolf covariance
Isolation Forest0.6376unsupervisedno labels used at all
LOF0.5797unsupervisedno labels used at all

The large supervised/unsupervised gap (0.999 vs 0.58–0.79) is a real, learnable decision boundary, not a window-length leak: a follow-up check restricting to only the already-fixed-window columns (382 of 766, same conclusion as the 386-feature production subset above) still gets RF AUC 0.9998 while Isolation Forest/LOF on the identical columns stay at 0.65/0.59 — unsupervised methods can't see what the label-trained model sees, which window length alone can't explain.

Open question, not yet resolved What is the model actually detecting? A direct lead-time probe on 40 sampled true-positive fault events slid the same fixed 34 ms window progressively earlier and checked how far out predicted probability stays above 0.5. 39 of 40 (97.5%) never dropped below 0.5 within the tested buffer (up to ~477 ms out, roughly 14× the window's own duration) — right-censored, not a bounded lead time. A genuinely local, near-trigger precursor signal shouldn't stay this confidently detected this far outside the window it was trained on.
0.00 0.25 0.50 0.75 1.00 0 100 200 300 400 477
Follow-up probe, 20 independently-sampled true-positive fault events: re-ran the trained RF at 12 offsets per event, from the trigger itself out to 477 ms before it, x-axis reading far→near left to right. 19 of 20 curves are essentially flat — predicted probability sits ≥0.85 for most events from the very first (furthest) offset tested, with no visible ramp-up as the true trigger approaches. One event (red) sits on a lower but equally flat plateau (0.60–0.72); one (dashed, orange) hit its own file's buffer edge after only 4 offsets, consistent with the censoring above. None of the 20 dropped below the 0.5 threshold at any tested offset. Computed 2026-09-08, SLURM job 58250756, from step_05_v6/precursor_curves_exploration.json.

A model really keying on an approaching fault should look uncertain far from the trigger and grow confident as it nears — instead, confidence is already saturated at the furthest offset tested and never moves. Taken alone, that pattern would suggest the model is picking up a stable per-capture characteristic unrelated to the fault itself, rather than genuine fault-onset proximity — the open caveat the report already carries (Sec. 6/7/8).

Disambiguating test run, result complicates the simple reading Ran the report's own proposed test: score the same 386-feature true-precursor set on a window from the middle of a Normal event's recording, far from any acquisition boundary and unrelated to any real trigger (20 confidently-true-negative Normal events, SLURM job 58257135). If the model were keying on a generic, fault-unrelated acquisition characteristic, these should score elevated too — they don't: 0 of 20 scored above the 0.5 fault threshold (predicted fault probability 0.00–0.05 for 18 of 20; the other two, 0.34 and 0.44, still confidently below threshold). The model cleanly separates “this is a fault-event recording” from “this is a normal-event recording” even hundreds of ms before either file's own trigger point — that's not consistent with a generic, label-blind acquisition artifact.

Net reading: there is a real, fault-specific signal present far earlier than the interlock trip — genuine early separability, not a spurious correlate. What it is not, per the flat curves above, is a signal that ramps up as the fault approaches; it appears (at least within the tested window) present at roughly constant strength well in advance, on fault-destined recordings specifically. Whether that constant early signature reflects a genuine slow-developing physical precursor or an early fault-associated operating-condition change that isn't itself the cause ramping toward the trigger is still open — this test rules out the “meaningless artifact” reading, it doesn't yet distinguish between those two remaining explanations.
04

Binary classification

prepare_06_phase1_binary.py Not yet explored

Fault-vs-Normal on the full event window (post-trigger included), using all 777 features, compared across Logistic Regression, Random Forest, XGBoost, and an RBF-kernel SVM. This task is expected to sit near ceiling performance — the full window includes the interlock-trip transient itself, which is close to trivially separable on amplitude alone — a materially easier task than precursor detection above by design, not evidence of a leak on its own.

📊 No plot requested yet — ask to see the model comparison, confusion matrices, or the scaler/PCA leakage fix this step needed.
05

Multi-label classification

phaseA/B/C/D_*.py Not yet explored

Four competing approaches to the same seven-category task, each class-weighted appropriately for its own structure: Binary Relevance, Classifier Chains, and Label Powerset (all with RF or XGBoost base estimators), plus four deep multi-head architectures (CNN, Transformer, CNN-LSTM, MLP) sharing a per-label weighted BCE loss. Every fault event in this dataset carries exactly one active label by construction of the ground-truth classifier, so the genuinely multi-label case (several simultaneous faults) hasn't been exercised on real data yet. Label Powerset is the best-performing approach on the current class-weighted, leakage-safe rerun; all four deep architectures underperformed the classical baselines on the comparison run of record.

📊 No plot requested yet — ask to see the Phase A/B/C/D comparison, per-category F1, or the deep-architecture results.
06

Root cause identification

prepare_08_phase3a_rootcause.py Not yet explored

A class-weighted Random Forest predicts the primary fault category among the seven, on the full 777-feature set. The training target is argmax over the multi-label vector — a deterministic first-flagged-category rule, not an independently labeled physical root cause — and because the current dataset has zero genuinely multi-fault events, that argmax currently has one unambiguous answer per event rather than exercising any real tie-breaking. A real limitation of the task's current formulation, disclosed as such rather than presented as a solved comparison.

📊 No plot requested yet — ask to see per-category accuracy, or where the rarest categories break down.
07

Fault subtype clustering

prepare_09c_enhanced_subclass_discovery.py Not yet explored

Within each fault category, K-Means, Agglomerative, and Gaussian Mixture clustering are compared by silhouette score to look for subtypes. Two corrections were needed before this was trustworthy: a near-zero-denominator division bug that let a handful of events take extreme outlier values, and a subtler bias where unconstrained silhouette maximization reliably chose whichever split isolated the single tightest minority subgroup — as small as one event — over a genuine population split. Fixed by winsorizing features at the 5th/95th percentile per category and requiring every cluster hold at least 15% of that category's events. Every one of the five analyzable categories converges to a balanced k=2 split under that constraint.

📊 No plot requested yet — ask to see the per-category silhouette scores or the top differentiating features between subtypes.
08

Explainability & reporting

generate_macros.py Not yet explored

SHAP explains the classification models per physics-informed feature family, reported as per-feature-mean importance rather than a naive per-group sum — the statistical and temporal families outnumber the seven physics families combined roughly 20:1, so a group sum would structurally favor them regardless of how informative any single physics feature is. Every number in the paper, including every figure and table above, traces to a versioned, git-tracked results manifest rather than being hand-typed: each pipeline script writes its own manifest, a generator converts it into LaTeX macros, and a checker flags any bare numeric literal in the report text that isn't backed by one.

📊 No plot requested yet — ask to see the physics-group SHAP breakdown or a specific model's SHAP summary.

Session log

A running narrative of what we've looked at and found, in the order we looked at it — kept here rather than scattered across chat turns.

2026-09-08

Set up this explorer. Pipeline overview diagram and all nine step sections drawn directly from the current report (report/sections/03_system_description.tex, 04_methodology.tex, 2026-09-07 revision) and the V6/777-feature dataset — no plots yet, no numbers invented. Next: pick a step to open up with real plots.

2026-09-08

00 Data foundation, done. Pulled the exact quality-filter breakdown from Classify_PostMortemFile's ground-truth CSV (11,999 of 14,109 files rejected: 68% Beam NON, 13% Loop OFF, 9% AMPT>10%, 7% KPI<10, plus small Ucav/mask checks) — the filter runs as an early-exit cascade, so these aren't independent counts. Then ran a real signal-coherence check requested by the user: read actual cavity-voltage/drive amplitude via PyPostMortem for a 550-file random sample across the passing baseline and every rejected reason, independent of the header flags that got each file rejected. Loop OFF is cleanly coherent (95% dead). Beam NON is genuinely heterogeneous — roughly a third of the sample shows a fully live cavity (loop still closed, no fault bit tripped for many) — not a broken header bit, but real RF-only conditioning/standby operation without a particle beam, a legitimate state the header is reporting correctly. AMPT/KPI are acquisition-quality metrics, not state flags, so their high live-fraction is expected, not a red flag. Side finding: courant pickup pins near a constant ~33 µA for most files regardless of state — not a reliable solo diagnostic. Next: pick step 01 or 02, or dig further into the Beam-NON heterogeneity (e.g. is it worth splitting into a separate no-beam/RF-conditioning cohort for a future study?).

2026-09-09

Correction from the project lead: BEAM (OUI/NON) does not mean particle-beam presence — it means feed-forward enabled/disabled in the LLRF control loop, and the field has only been operationally meaningful since 2021. Checked directly against the ground-truth CSV: 2019 is 100% BEAM=NON, 2020 is 96.4% — a constant default, not a real signal — then a genuine, declining rate from 2021 (50.3%) to 2025 (9.3%) as feed-forward adoption grew. Re-derived the whole coherence story on the corrected premise (the "RF-only, no beam" reading from yesterday is retracted — feed-forward being off never implied anything about RF/beam state, so the live-looking minority needed no special story). More importantly, this surfaces a real, actionable bug: the classifier applies this check the same way in every year, so it's likely discarding ~700 legitimate 2019–2020 events (tested 200 pre-2021 BEAM=NON-only rejects against every other real check: 29/200, 14.5%, pass everything else — mostly Normal, some genuine faults). Also checked whether any independent beam-presence signal exists in the data at all (the classifier's own Presence faisceau field) — it doesn't hold up either (built from a mismatched état bit, reads "off" almost everywhere even in beam-present baseline files). Next: user to decide whether to (a) recommend Classify_PostMortemFile scope the feed-forward check to 2021+ and re-run to recover the ~700 events, (b) fix the "beam-present" wording in report/sections/03_system_description.tex now, or (c) file both as future work and move on to step 01.

2026-09-09

Fix applied, re-run, confirmed — Phase 1 (V7 extraction) started. Classify_PostMortemFile's _check_filters() now scopes the feed-forward check to acquisitions from 2021 onward (parses the year from the header's own DATE field), config key renamed check_feed_forward + feed_forward_min_year: 2021, rejection label renamed Feed-forward NON. Re-ran the classifier across the full 2019–2025 corpus (backed up the old CSV first): ground-truth-passing rows went from 2,110 to 2,866 (+756, +35.8%), a real diff not an estimate — entirely from 2019 (+73) and 2020 (+683), every year 2021–2025 byte-for-byte unchanged. Rewrote this section's charts/numbers to match (the old "8,205 Beam NON" framing this page used to show is now clearly marked as the pre-fix count; current corrected count is 3,229, no longer the single dominant reason). Also fixed the same stale beam_present feature name in prepare_data_cluster_v6.py (forked as prepare_data_cluster_v7.py, renamed to feed_forward_enabled) and in the two downstream scripts that hardcode it for SHAP-taxonomy grouping. Report: Sec. 3 rewritten with the real numbers, verified compiling clean locally (0 fatal errors); Abstract and Sections 4–9 + Appendices A–C gray-banner-marked "pending V7 re-run" until the corrected dataset propagates through. V7 extraction is running now (SLURM job 58226540, launched today, forked from V6 with the same corrected ground truth) — V6 (2,109 events) is still what every step below this one describes until that finishes. Next: once V7 lands, validate it, then Phase 2 (re-run steps 01–08 against it).

2026-09-09

V7 extraction complete and validated. SLURM job 58226540 finished (54 min, 2019–2025 full corpus): 2,865 events, 1,478 Normal / 1,387 fault, 810 features (up from 777 — expected correlation-dedup threshold sensitivity to the new dataset composition, checked directly: 57 features newly survive, 24 previously-survivors no longer do, beam_present correctly among the latter since it's the same field renamed). Reconciles exactly (2,866 ground-truth-passing minus the same single extraction failure V6 also hit). Validated the recovered 2019–2020 events aren't degenerate: NaN rate 0.20%/0.31% vs. 0.45% corpus-wide (lower, not higher), fault-category mix matches the rest of the corpus. Also caught and fixed a real gap: the coherence-check strip plot's x-axis still literally rendered Beam NON as a chart label (the caption explained it, but the chart itself didn't) — relabeled to Feed-forward off directly, per direct user feedback. Next: Phase 2 (re-run steps 01–08 against V7) — checking in with the user before launching, per the plan (multi-hour, many SLURM jobs).

2026-09-09

Data foundation re-verified, then 01 Preprocessing explored. Extra pass on V7 before moving on: every fault category grew and none shrank (+756 splits as Normal +412, RF regulation +199, Absence autorisation RF +20, Pickup threshold +82, …), class balance held (50.5%→51.6% Normal), and pulled three real raw 2019 events directly (not just aggregate stats) — genuine LLRF traces, sensible Ucav ranges, LOOP=ON/closed-loop operation, exactly the "feed-forward off but otherwise normal" story the correction predicts. Then read the real preprocess_signals() code and pulled one real event (2022 10 12 CMA01_0001, NDEC=200, an Oscillation-Ucav fault) all the way through: high-pass filter → Z-score, with the true trigger at sample 50,047 — concretely showing the old hardcoded trigger_idx=3000 would have been 534ms (47% of the file) early. Also verified directly that this file's single most extreme Z-score value (93.6σ) sits at literal sample 0, the filter's own startup transient — confirms the report's stated reason for excluding early-file samples from analysis, not just an assertion. Next: continue exchanging on preprocessing, or move to 02 Feature engineering.

2026-09-09

02 Feature engineering explored. Ran the real family classifier the paper's own SHAP analysis uses (100% coverage on both V6 and V7, zero unclassified) against V7's 810 features: physics-informed families are byte-identical in count to V6 (39 features, all seven families unchanged) — only Statistical (262→260) and Temporal (466→501) shifted, which is exactly what the >0.95 correlation-dedup threshold does when the dataset's composition changes, not a sign anything computational changed. Confirms the report's "~20:1" physics-vs-generic imbalance claim still holds (19.8:1 on V7). Then pulled two real quench events all the way through the effective-decay τeff fit: one fits cleanly (R²=0.596), the other barely fits at all (R²=0.011) despite both being genuine Claquage events — checked across more quench events and most look like the poor-fit case, which is a real, honest confirmation of the report's own claim that an actively-regulated collapse isn't a clean passive exponential (that's why R²/non-exponentiality are tracked as features, not an afterthought). Re-ran the near-constant-feature check on V7: 16 (was 15 on V6, one new addition traced to the 2019–2020 recovery shifting llrf_loop_closed's variance, not a new bug); the two previously-disclosed non-functional threshold features are unchanged. Next: continue exchanging, or move to 03 Precursor detection.

2026-09-09

Correction to the decay-fit figure, from user feedback. Three real problems with the first pass: no units on the y-axis, the "poor fit" panel's window was mismatched to what actually happens physically (the collapse is over in 1–2 samples, so a 5.7 ms log-linear fit is regressing mostly noise), and jumping to "active loop makes it non-exponential" from two examples was underdetermined. Redid it properly: measured collapse time (to 20% of pre-trigger amplitude) for all 31 real quench events, not two. Real result, not two cherry-picked examples: a clean bimodal split, 23/31 (74%) collapse within 0.17 ms, the other 8 (26%) take 4.0–5.2 ms, zero events in between. Cross-checked against the pipeline's own step-09 subtype clustering for this category (19/9 split on V6): correlated with the fast/slow split (the smaller cluster is disproportionately the no-valid-decay-window group) but not identical — the real top-differentiating features between those two existing clusters (same Cohen's-d method the report's own subtype figure uses) are modulator-command/reference-frequency stats, not the decay features. Net: the user's hypothesis holds up as a real, sharp physical distinction, and it's a cleaner signal than what the current full-feature-space clustering finds — flagged as a concrete methodology improvement (cluster on decay-timescale features directly for this category) rather than something to just note and move past. Rebuilt the figure in linear MV/m units instead of unlabeled log scale.

2026-09-09

03 Precursor detection, explored. Ran the step 05 unsupervised-vs-supervised comparison (RF 0.9991 AUC vs. 0.58–0.79 for five unsupervised baselines) and the window-leak follow-up (RF still 0.9998 on a properly fixed-window 382-column subset, unsupervised methods unchanged at 0.65/0.59 on the same columns — rules out a window-length leak as the explanation). Then went further: computed real probability-vs-time curves for 20 sampled true-positive fault events (12 offsets each, out to 477 ms before the trigger, SLURM job 58250756 after fixing a path bug from an earlier attempt — see below). 19 of 20 curves are essentially flat, already saturated at ≥0.85 confidence at the furthest offset tested, no ramp-up toward the trigger. Combined with the existing lead-time finding (39/40 sampled events right-censored, never dropping below 0.5 within ~477 ms), this is direct evidence against a genuine near-trigger precursor signal and for the report's already-flagged alternative: a stable per-capture characteristic of eventually-faulting files, not fault-onset proximity. The report's own proposed disambiguating test (score the same features on a window from the middle of a Normal event, away from any boundary) is still open, not run here.

Infrastructure note. The probability-curve job initially failed (SLURM job 58240255, 1s, exit 2): the driver script had been written to a Claude session's own /scratch/... path, invisible to SLURM worker nodes once that session ended. Rewrote it to the shared filesystem (pipeline/00_scripts/investigate_precursor_curves.py) and resubmitted via a proper sbatch wrapper — completed cleanly in 3 minutes.

2026-09-09

Disambiguating test run — result complicates the earlier "stable per-capture characteristic" reading. Ran the report's own proposed follow-up: score the same 386-feature set on a window from the middle of a Normal event's own recording, far from any boundary (SLURM job 58257135, 20 confidently-true-negative Normal events). 0 of 20 scored above the 0.5 fault threshold (0.00–0.05 for 18 of 20; two at 0.34/0.44, still below). If the model were keying on a generic, label-blind acquisition characteristic, these should have scored elevated too — they didn't. Revised step 03's prose accordingly: this rules out "meaningless artifact," but doesn't resolve whether the flat, early, fault-specific signal reflects a genuine slow-developing physical precursor or an early fault-associated condition change that isn't itself ramping toward the trigger. Left as open, now with one wrong branch (generic artifact) eliminated rather than three explanations still on the table.