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_kwith 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_dayis 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;
tis in days relative tot0 - 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 range0..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)