Note to Ruslan Alaskarov
Ruslan,
Your proof-of-concept’s separation of detectability from damping-time scoring, empirical null calibration, and one-time held-out evaluation suggested a simple extension that may be useful for the broader multi-signal anomaly program you described on IGWN.
The proposal is to leave your published short-damping pipeline unchanged and make Stage 2 two-sided. In addition to the existing lower-tail LSQ rule, calibrate an independent upper tail using only the standard 5–40 ms calibration manifold. For example:
tau_upper = q_0.99(tau_hat_LSQ | standard calibration)
Freeze tau_upper before held-out evaluation, then report short-damping and long-coherence flags separately rather than combining them into a generic anomaly class.
I ran a small held-out surrogate-noise pilot purely as a feasibility check. It produced AUC 0.958 for short-vs-standard ranking and AUC 0.974 for long-vs-standard ranking; 98.0% of the exploratory 60/100 ms long-coherence cases crossed the frozen upper threshold, while 2.25% of standard held-out cases did. These are NOT real-LIGO false-alarm numbers: the extension still needs to be run inside your real-L1 empirical-null/data-split framework.
The scientifically useful next step would be to add the upper-tail calibration without changing your Stage-1 threshold (55.6439) or primary short-damping threshold (3.472 ms), then stress-test PSD/whitening, window alignment, frequency, SNR, detector epoch, glitches, and eventually H1/L1 coincidence.
The motivation for sharing this is methodological rather than interpretive: a two-sided Stage 2 could screen both unexpectedly rapid damping and unexpectedly persistent structure while retaining your detectability-aware, empirically calibrated framework. Any dark-sector or modified-gravity interpretation should remain downstream of the statistical validation.
Best, Scott L. Edmonds E.V.olution Echo Technologies
Real-GWOSC Validation Protocol
Objective
Test whether the published detectability-aware damping pipeline can support a second, upper-tail Stage-2 screen for unusually persistent post-merger damping/coherence.
Rules
Clone/reproduce Ruslan Alaskarov’s original repository unchanged.
Keep the original four-block data split and never access test_block during development.
Preserve the published Stage-1 threshold norm_lambda1 = 55.6439 at alpha=0.01.
Preserve the published primary short-damping threshold tau_hat_lsq < 3.472 ms.
On calibration data only, compute LSQ tau_hat for the standard 5–40 ms manifold.
Freeze a new upper threshold at the 99th percentile of that standard calibration distribution.
Predeclare long-coherence injections (initially 60 and 100 ms; expand only before test exposure).
Evaluate the upper-tail rule once on a fresh held-out real-L1 block.
Report conditional and end-to-end performance separately.
Report finite-sample false-flag rates as such; do not call them production FAR.
Robustness matrix before astrophysical interpretation
PSD estimator, segment length, overlap
whitening parameters and edge trimming
candidate-window length and alignment
peak frequency and bandwidth
SNR / injection amplitude
separate L1 noise epochs
H1 replication and H1/L1 coincidence
glitch/gating sensitivity
alternative tau estimator agreement
multiple-testing correction for scans
bootstrap/Wilson confidence intervals
Interpretation rule
Only after statistical and detector-systematics validation should any physical hypothesis (dark sector, modified gravity, echoes, Harvey-Beta, etc.) be compared against the observed feature morphology. The hypothesis must make a predeclared quantitative prediction.
{
“status”: “COMPLETED_SURROGATE_NOISE_PILOT”,
“random_seed”: 20260827,
“standard_tau_ms”: [
5,
10,
20,
40
],
“short_anomaly_tau_ms”: [
1,
3
],
“long_coherence_tau_ms”: [
60,
100
],
“calibration_rule”: “1st and 99th percentiles of standard-only calibration tau_hat”,
“frozen_lower_threshold_ms”: 1.957,
“frozen_upper_threshold_ms”: 45.582,
“auc_short_vs_standard”: 0.958,
“auc_long_vs_standard”: 0.974,
“class_results”: {
“standard”: {
“n”: 400,
“median_tau_hat_ms”: 12.671752,
“short_flag_rate”: 0.0125,
“long_flag_rate”: 0.0225
},
“short_anomaly”: {
“n”: 200,
“median_tau_hat_ms”: 3.025049,
“short_flag_rate”: 0.215,
“long_flag_rate”: 0.015
},
“long_coherence”: {
“n”: 200,
“median_tau_hat_ms”: 71.069633,
“short_flag_rate”: 0.02,
“long_flag_rate”: 0.98
}
},
“critical_limitation”: “Noise in this pilot was simulated/whitened surrogate noise, not real GWOSC strain.”
}
{
“status”: “FROZEN_EXTENSION_DRAFT_V1”,
“published_reference_values”: {
“source”: “Ruslan Alaskarov, gw-postmerger-detectability”,
“stage1_score”: “norm_lambda1”,
“stage1_threshold”: 55.6439,
“stage1_alpha”: 0.01,
“lsq_short_threshold_ms”: 3.472,
“instruction”: “Preserve these values unchanged when reproducing the published pipeline.”
},
“new_upper_tail”: {
“alpha”: 0.01,
“calibration_population_tau_ms”: [
5,
10,
20,
40
],
“decision_rule”: “flag long-coherence if tau_hat_lsq_ms > q99(standard calibration tau_hat)”,
“freeze_before_test”: true
},
“interpretation_guardrail”: “A statistical flag is not evidence for dark-sector, Harvey-Beta, echoes, or beyond-GR physics.”
}
“”"
Two-Sided Post-Merger Anomaly Screen v1.0
Research extension of the Alaskarov post-merger damping screen.
This file does NOT reproduce the graph-spectral Stage 1 by itself. It is intended to be
used after reproducing the original repository unchanged. It adds a separately calibrated
upper-tail Stage-2 decision rule while preserving the published lower-tail rule.
“”"
import numpy as np
from scipy.optimize import curve_fit
PUBLISHED_STAGE1_THRESHOLD = 55.6439
PUBLISHED_STAGE1_ALPHA = 0.01
PUBLISHED_LSQ_SHORT_THRESHOLD_MS = 3.472
def damped_sinusoid(t, A, tau_s, f_hz, phi):
return Anp.exp(-t/tau_s)np.sin(2np.pif_hz*t + phi)
def estimate_tau_lsq_ms(t, x, f_guess_hz):
p0 = [max(float(np.std(x)), 1e-12), 0.010, f_guess_hz, 0.0]
bounds = (
[0.0, 0.0004, max(50.0, f_guess_hz-700.0), -2np.pi],
[np.inf, 0.2000, f_guess_hz+700.0, 2np.pi]
)
p, _ = curve_fit(damped_sinusoid, t, x, p0=p0, bounds=bounds, maxfev=10000)
return 1000.0*float(p[1])
def freeze_upper_threshold_ms(standard_tau_hat_ms, alpha=0.01):
“”“Call only on calibration data from the standard damping manifold.”“”
x = np.asarray(standard_tau_hat_ms, dtype=float)
x = x[np.isfinite(x)]
if len(x) < 20:
raise ValueError(“Insufficient standard calibration estimates.”)
return float(np.quantile(x, 1.0-alpha))
def classify_stage2(tau_hat_ms, upper_threshold_ms):
return {
“short_damping_flag”: bool(tau_hat_ms < PUBLISHED_LSQ_SHORT_THRESHOLD_MS),
“long_coherence_flag”: bool(tau_hat_ms > upper_threshold_ms)
}
def fetch_open_strain(detector, start_gps, end_gps, sample_rate=16384):
“”“Internet-enabled environment required: pip install gwpy gwosc”“”
from gwpy.timeseries import TimeSeries
return TimeSeries.fetch_open_data(
detector, start_gps, end_gps,
sample_rate=sample_rate, cache=True, verbose=True
)
def whiten(strain, fftlength=4, overlap=2):
“”"
Minimal GWPy entry point. For a scientific run, PSD segment selection,
whitening, filtering, gating, edge handling and candidate alignment must
be specified prospectively and frozen.
“”"
return strain.whiten(fftlength=fftlength, overlap=overlap)
if name == “main”:
print(“Two-Sided Post-Merger Screen v1.0 loaded.”)