Skip to content

[follow-up] Issue #214 multi-plate empirical validation: plate-001 doesn't exhibit scale-hopping; revisit smooth_ridge acceptance when multi-plate data lands #220

@eberrigan

Description

@eberrigan

[follow-up] Issue #214 multi-plate empirical validation: plate-001 doesn't exhibit scale-hopping; revisit smooth_ridge acceptance when multi-plate data lands

Parent epic: #197
Originating PR: #216 / add-circumnutation-tier1-derr-faithful (closes #214)
Type: documentation / multi-plate-sweep (no code-correctness blocker)
Priority: medium — defer until multi-plate data lands

Summary

PR #6 closed #214 by adding temporal_cwt.smooth_ridge — a scipy.ndimage.median_filter post-filter on the per-frame argmax ridge per Mallat 1999 §4.4.2's ridge-continuity guidance. The implementation is correct; the acceptance criterion was empirically softened.

#214's stated acceptance was: "≥5 of 6 Nipponbare proofread tracks show T_nutation_iqr_post_filter < T_nutation_iqr_raw". GREEN-phase empirical reality:

Track raw_iqr smooth_iqr improved?
0 1883.5 1883.5 no (identical)
1 1168.8 1168.8 no
2 790.7 790.7 no
3 1514.1 1514.1 no
4 1092.1 1092.1 no
5 1092.1 907.7 YES

Only 1 of 6 tracks improves. The median filter is a no-op on most plate-001 tracks because the ridge is already stable (low harmonic content, dominant fundamental on the scale grid). The acceptance was softened to "no track worsens + ≥1 improves" (documented in design.md GREEN-phase Reconciliation Appendix) to preserve the regression-detector contract.

This issue tracks the multi-plate empirical validation needed to either confirm the softening as the right long-term threshold OR re-anchor to the originally-targeted "≥5 of 6 improve" when scale-hopping actually appears.

Why

smooth_ridge is an insurance primitive: it's correct (no-op on clean signals; smooths spurious spikes on noisy ones), but its benefit only manifests on data where:

  • Two harmonics have similar amplitude at adjacent scales (the Mallat 1999 §4.4.2 failure mode)
  • The per-frame argmax oscillates between them, producing spurious per-frame period jumps
  • The aggregated IQR is dominated by these jumps, not by biological period drift

Plate-001 doesn't show this pattern — the Nipponbare fundamental is well-isolated. Multi-plate data may show:

  • Higher-order monocots / mutants: different harmonic structure → potential scale-hopping
  • Stressed plants (TZT-treated, GA-treated): irregular amplitude → noisier ridge → smoothing benefit
  • Different camera cadences: 8-minute / 10-minute cadence at higher sampling-noise scale

In scope (when this issue is acted on)

  1. Acquire multi-plate / multi-genotype dataset (overlapping with the TEMPORAL_NYQUIST_RATIO_MAX validation issue; both can share the same data acquisition).
  2. For each plate / genotype / treatment combination, run nutation.compute with default constants AND collect both raw and smoothed ridges separately.
  3. Per-plate report:
    • Per-track T_nutation_iqr_raw vs T_nutation_iqr_smoothed
    • Improvement-count distribution: how many tracks per plate exhibit smoothed < raw?
    • Identify plates where the improvement-count is high (e.g., ≥4 of 6) — confirm these are the noisy / scale-hopping cases.
  4. Re-anchor the acceptance threshold based on the multi-plate distribution. Options:
    • Keep "no track worsens + ≥1 improves" if the multi-plate data also shows ≤2 improvements on average.
    • Tighten to "≥3 of 6 improve" or "≥4 of 6 improve" if multi-plate data shows higher improvement rates.
    • Move to "median IQR change is negative" — a population-level criterion robust to per-plate variance.
  5. Update §2.H.4 test threshold in tests/test_circumnutation_nutation.py with the new empirical anchor + provenance comment.

Out of scope

  • Replacing smooth_ridge's median-filter algorithm with a more sophisticated approach (Mallat 1999 §4.4.2 full ridge-following, parabolic refinement, etc.). The current median-filter is sufficient when scale-hopping exists; it doesn't need to be sophisticated to be useful.
  • Tuning RIDGE_CONTINUITY_FILTER_WINDOW from the default 5 (sweep this in the same data acquisition; report results in the markdown summary).

Acceptance

  • A markdown report at docs/circumnutation/214_multiplate_validation_2026-MM-DD.md documenting the multi-plate IQR distribution and the recommended acceptance threshold.
  • Updated §2.H.4 test threshold + provenance comment.
  • If the threshold tightens back to ≥5 of 6, the GREEN-phase Reconciliation Appendix entry for §2.H.4 is updated to note "resolved by follow-up #N".

Cross-references

Labels

circumnutation, documentation, follow-up, medium-priority

Metadata

Metadata

Assignees

No one assigned

    Labels

    circumnutationPlant circumnutation pipelinedocumentationImprovements or additions to documentation

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions