What ships and how to read it (single source of truth)
Back-test summary (per model)
Report a compact row capturing metrics, selection, and provenance:
MAE_deg,P90_deg,MAX_deg,misclass_raterasi_cross_MAE_days,cusp_dist_MAE_deg,station_date_MAE_daysselected_model,BIC_selected,train_losstrain_sample_mode,train_range,test_range
Notes. Degrees for angle metrics; days for timing metrics. UseNaNif a metric is undefined (e.g., no matched crossings).
Back-test time-series (TEST slice)
Daily records for audit and visualization:date, L_actual_deg, L_model_deg, deg_error, rasi_actual, rasi_modeldeg_error = | wrap180( L_model_deg - L_actual_deg ) | and rasi(x) = floor( wrap360(x) / 30 ).
Manifest (portable kernel; runtime only needs this)
A minimal, planet-specific JSON-style object that the evaluator consumes:
{
"planet": "...",
"family": "fixed-n|free-n",
"t0": "YYYY-MM-DD",
"P_sid": <days or null>,
"n_deg_per_day": <float>,
"omegas": { "w1": <float>, "w2": <float>, "wS": <float>, "nE": <float> },
"beta": {
"a0_deg": <float>,
"b1_deg_per_day": <float>, // present for free-n; equals n_deg_per_day
"c": [ ... ], // sin coefficients aligned to active omegas
"d": [ ... ] // cos coefficients aligned to active omegas
},
"notes": "midpoint anchor; BIC-loss gate; one-wrap display"
}
- Family mapping.
fixed-n: storeP_sid; setn_deg_per_day = 360.0 / P_sidat runtime.free-n: store learnedn_deg_per_day(slope) directly.
- Coefficients. Arrays
canddalign positionally with keys listed inomegas. - Conventions. Angles in degrees; final display uses exactly one wrap:
wrap360(y). Daily timestamp andt0follow §2.2–§2.5.
Reproducibility
- Every printed angle from evaluation is determined by manifest + one-line formula (no runtime ephemeris).
- Always record
train_range,test_range,t0, and the chosen design set so others can repeat your results.
Navigation
Back: SSM-JTK – Data & Calibration — Event detectors (reference) (2.8)
Next: SSM-JTK – Data & Calibration — Evaluation formula (runtime) (2.10)