diff --git a/src/assets/data/bodies.json b/src/assets/data/bodies.json index bfc18e2..55b0051 100644 --- a/src/assets/data/bodies.json +++ b/src/assets/data/bodies.json @@ -707,7 +707,7 @@ "raDeg": 317.671, "decDeg": 52.893 }, - "orbitSource": "JPL SSD satellite mean elements, epoch 1950 Jan 1, within 1.3 degrees of Horizons from 1950 to 2100", + "orbitSource": "JPL SSD satellite mean elements, epoch 1950 Jan 1, with the orbital terms of its IAU W (NAIF pck00011), within 1.3 degrees of Horizons from 1950 to 2100", "parentBodyId": "mars", "rotationPeriodHours": 7.653844882637157, "rotationalElements": { @@ -1184,7 +1184,7 @@ "raDeg": 40.589, "decDeg": 83.536 }, - "orbitSource": "JPL SSD satellite mean elements, epoch 2000 Jan 1, within 7.5 degrees of Horizons from 1950 to 2100", + "orbitSource": "JPL SSD satellite mean elements, epoch 2000 Jan 1, with the orbital terms of its IAU W (NAIF pck00011), within 7.5 degrees of Horizons from 1950 to 2100", "parentBodyId": "saturn", "rotationPeriodHours": 22.618127008672275, "rotationalElements": { @@ -1300,7 +1300,7 @@ "raDeg": 40.578, "decDeg": 83.537 }, - "orbitSource": "JPL SSD satellite mean elements, epoch 2000 Jan 1, within 0.3 degrees of Horizons from 1950 to 2100", + "orbitSource": "JPL SSD satellite mean elements, epoch 2000 Jan 1, with the orbital terms of its IAU W (NAIF pck00011), within 0.3 degrees of Horizons from 1950 to 2100", "parentBodyId": "saturn", "rotationPeriodHours": 45.30726088829954, "rotationalElements": { diff --git a/tools/etl/build.ts b/tools/etl/build.ts index ac6bc65..bd1d8c0 100644 --- a/tools/etl/build.ts +++ b/tools/etl/build.ts @@ -181,9 +181,13 @@ const MOON_OFFSET_CEILINGS_DEG: Record = { hyperion: 21, iapetus * `orbitFromW` in `fetchSolarSystem.ts`), but not the rest of what Horizons integrates. * - Ceres, 7.12 (1953): the SBDB's elements are osculating, exact at 2026 Jun 9 and drifting * either side; 1.9 by 2050, 5.3 by 2100, and 39 at 1600 on Horizons' own figures. + * + * And one is held tighter than the rest: Tethys, 0.28, which takes the other half of that + * libration, 2.23 degrees, from its W. Without it Tethys strays 2.09 degrees, under the general + * ceiling, and its card would quietly restate itself as "within 2.1". */ const MAX_TRACK_OFFSET_DEG = 3; -const TRACK_OFFSET_CEILINGS_DEG: Record = { hyperion: 23, nereid: 12, iapetus: 11, mimas: 8, ceres: 8 }; +const TRACK_OFFSET_CEILINGS_DEG: Record = { hyperion: 23, nereid: 12, iapetus: 11, mimas: 8, ceres: 8, tethys: 0.5 }; /** * The bodies the IAU WGCCRE 2015 report gives no rotational elements for: Hyperion tumbles, and @@ -222,8 +226,13 @@ const MAX_OBLIQUITY_OFFSET_DEG = 0.1; * sampled every 135 days from 1950 to 2100, where both the tables and the IAU's elements hold. * * Measured on this catalogue: at most 6.70 degrees (the Moon, whose longitude swings 6.3 either - * way with its eccentricity; Horizons has the same). Three need their own: Mimas 10.15, whose - * physical libration W carries and Horizons shows as 5 to 9 degrees at its true place; Iapetus + * way with its eccentricity; Horizons has the same). Three need their own. Mimas 10.15: its drawn + * face runs from 2.5 to 10.15 degrees, about 6.3 off on average because the IAU's W and JPL's mean + * longitude disagree, drifting 3.3 over the span because W turns 6.0e-5 degrees a day faster than + * the row's n, and swung 2.3 either way (2e) by its eccentricity. None of that is Mimas: its + * measured physical libration is 0.84 degrees (Tajeddine et al. 2014, Science 346, 322), and W + * carries none; Horizons, on the same W against its integrated orbit, runs from -2.7 to 12.7 + * degrees over 1950-2100 with the 71-year S5 term the orbit here cancels. Iapetus * 18.33, whose row sits 9.4 degrees behind Horizons; and Proteus 8.18, whose W turns 6.3e-7 of * its rate slower than its orbit, a drift of 74 degrees by AD 3000. What this catches is an orbit * and a W that go round at different rates: the tidal acceleration W carried and the orbit did not @@ -283,6 +292,12 @@ function validateBodies(bodies: BodyRecord[], horizonsOrbits: Map offsetFromTrackDeg(body, point))); const trackCeiling = TRACK_OFFSET_CEILINGS_DEG[body.id] ?? MAX_TRACK_OFFSET_DEG; diff --git a/tools/etl/fetchSolarSystem.ts b/tools/etl/fetchSolarSystem.ts index 9e872cf..259dc2d 100644 --- a/tools/etl/fetchSolarSystem.ts +++ b/tools/etl/fetchSolarSystem.ts @@ -221,8 +221,9 @@ export async function fetchSolarSystem(): Promise<{ bodies: BodyRecord[]; horizo // Standish's fit states its own span, 3000 BC to AD 3000. The moons' table and the SBDB state // none, and hold for far less: each card says how far its orbit stays from Horizons over the - // span it was measured, where the clock reaches AD 1 to AD 3000. - let orbitSource = mean.orbitSource; + // span it was measured, where the clock reaches AD 1 to AD 3000. An orbit that took terms from + // its IAU W says so first: they move Mimas by up to 44.85 degrees, and are none of JPL's table. + let orbitSource = fromW ? `${mean.orbitSource}, with the orbital terms of its IAU W (NAIF pck00011)` : mean.orbitSource; if (parentName || smallBody) { const stepDays = spec.trackStepDays ?? 2; const track = await fetchHorizonsTrack(spec.horizonsCommand, spec.center, stepDays, `horizons-track-${spec.id}-${stepDays}d.txt`);