Skip to content

Add conditioning diagnostics for multimode fits - #155

Open
maiconburn wants to merge 1 commit into
maxisi:mainfrom
maiconburn:add-conditioning-diagnostics
Open

Add conditioning diagnostics for multimode fits#155
maiconburn wants to merge 1 commit into
maxisi:mainfrom
maiconburn:add-conditioning-diagnostics

Conversation

@maiconburn

Copy link
Copy Markdown

What this adds

A small module ringdown.conditioning with two utilities meant to be run before or alongside a fit:

  • mode_gaps(modes, chi): pairwise distances between the mode frequencies of a fit model in the complex plane (dimensionless, or in 1/s when a mass is given).
  • conditioning_report(modes, chi): for each mode pair, the gap and the error-amplification factors for three different estimation tasks, sorted by gap, with the smallest-gap pair flagged.

The amplification exponents encode how hard each task gets as two modes approach each other:

task scaling
amplitudes, frequencies fixed by (M, chi) 1 / gap
frequencies themselves 1 / gap^2
amplitudes with free frequencies 1 / gap^3

Example numbers

GW150914-like model (220 + 221), chi = 0.69:
  gap = 0.165   1/gap = 6.1    1/gap^2 = 37    1/gap^3 = 224

(2,2,5) + (2,2,6) near their avoided crossing, chi = 0.897:
  gap = 0.0667  1/gap = 15     1/gap^2 = 225   1/gap^3 = 3374

Same pair away from the crossing, chi = 0.70:
  gap = 0.178   1/gap = 5.6    1/gap^2 = 32    1/gap^3 = 179

The first line is one way to see, quantitatively, why overtone amplitudes with free frequencies are so fragile even for a loud event, and the second why nobody separates n = 5 from n = 6 near the crossing.

Where the exponents come from

The 1/gap scaling for fixed-frequency amplitudes was measured on SXS waveforms across the (2,2,5) and (2,2,6) avoided crossing, and the full task hierarchy (1, 2, 3) was measured in a controlled synthetic study; both live at https://github.com/maiconburn/recoverability-criticality (DOI 10.5281/zenodo.22156019). The 1/gap^2 frequency case matches the Fisher forecast scaling of arXiv:2605.16199, and the 1/gap^3 case matches the classical Prony-type super-resolution scaling. The exponents are stated up to mode-dependent prefactors, so the factors are most meaningful when compared between pairs or across spins.

Tests

Four tests included, anchored on the known (2,2,5)-(2,2,6) crossing (gap 0.0667 at chi about 0.897). On my machine tests/test_conditioning.py and tests/test_qnms.py pass together (21 tests); the data-dependent test files need the download scripts and were not touched.

Happy to adjust naming, API, or placement, or to wire the report into Fit if that would be useful.

Adds ringdown.conditioning with two utilities:

- mode_gaps(modes, chi): pairwise distances between mode frequencies in
  the complex plane, dimensionless or in 1/s.
- conditioning_report(modes, chi): per-pair error-amplification factors
  for three estimation tasks (amplitudes with fixed frequencies ~ 1/gap,
  free frequencies ~ 1/gap^2, amplitudes with free frequencies
  ~ 1/gap^3), sorted by gap, with the smallest-gap pair flagged.

Includes tests anchored on the known (2,2,5)-(2,2,6) avoided crossing
(gap 0.0667 at chi ~ 0.897). No existing file is changed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant