SSM-JTK – Data & Calibration — Evaluation formula (runtime) (2.10)

Purpose
At runtime, the transit angle for a given date comes from a single deterministic evaluator driven by a compact per-body manifest. No downloads are required from this blog; the formula below is sufficient to implement an evaluator.

Evaluator (one-line, both families)
Given a calendar date D and a fixed daily timestamp (e.g., 05:30 IST or 00:00 UTC):

  • t = days_since(D, t0)
  • y = a0_deg + n_deg_per_day * t
  • For each active omega_k with coefficients (c_k, d_k):
    y = y + c_k * sin(omega_k * t) + d_k * cos(omega_k * t)
  • Final wrapped angle: L_hat_deg = wrap360(y)

Family rule

  • fixed-n: n_deg_per_day = 360.0 / P_sid
  • free-n : n_deg_per_day is the stored slope from the manifest

Utilities & conventions

  • wrap360(x) = x - 360*floor(x/360) (use exactly one wrap at the end for display)
  • Degrees throughout; t is in days relative to t0
  • Keep the same daily timestamp and time convention used during calibration
  • Rāśi index (optional): rasi(L_hat_deg) = floor( wrap360(L_hat_deg) / 30 ) with range 0..11

Minimal pseudocode (ASCII)

t = days_since(D, t0)
y = a0_deg + n_deg_per_day * t
for each k in active_omegas:
    y += c[k] * sin(omega[k]*t) + d[k] * cos(omega[k]*t)
L_hat_deg = wrap360(y)

Notes

  • Do not unwrap at runtime; unwrapping is only for fitting and event metrics.
  • One-wrap display discipline avoids accidental multi-turn drift in reporting.
  • Deterministic by construction: same inputs → same angle.

Navigation
Back: SSM-JTK – Data & Calibration — Outputs and manifest (2.9)
Next: SSM-JTK – Data & Calibration — Integrity & invariants (2.11)