Extend od_observation_t with observer_idx so each observation can reference a different ground station. Config now holds an array of observers instead of a single pointer. The existing single-observer tle_from_topocentric() is unchanged (sets observer_idx=0 for all obs). New overload: tle_from_topocentric(topo[], ts[], observer[], int4[], ...) accepts parallel observer_ids array indexing into the observers array. PG function overloading resolves by argument types. Tests 9-11: two-station fit converges, single-station via multi-observer API matches, out-of-range observer_id raises error.
22 lines
1.0 KiB
SQL
22 lines
1.0 KiB
SQL
-- pg_orrery 0.4.0 -> 0.5.0 migration
|
|
--
|
|
-- Adds multi-observer support, IOD bootstrap (seed-free fitting),
|
|
-- and covariance output for uncertainty estimation.
|
|
|
|
-- ============================================================
|
|
-- Multi-observer topocentric fitting
|
|
-- ============================================================
|
|
|
|
CREATE FUNCTION tle_from_topocentric(
|
|
observations topocentric[], times timestamptz[],
|
|
observers observer[], observer_ids int4[],
|
|
seed tle DEFAULT NULL, fit_bstar boolean DEFAULT false,
|
|
max_iter int4 DEFAULT 15,
|
|
OUT fitted_tle tle, OUT iterations int4,
|
|
OUT rms_final float8, OUT rms_initial float8, OUT status text
|
|
) RETURNS RECORD
|
|
AS 'MODULE_PATHNAME', 'tle_from_topocentric_multi'
|
|
LANGUAGE C STABLE PARALLEL SAFE;
|
|
COMMENT ON FUNCTION tle_from_topocentric(topocentric[], timestamptz[], observer[], int4[], tle, boolean, int4) IS
|
|
'Fit a TLE from topocentric observations collected by multiple ground stations. observer_ids[i] indexes into observers[]. Requires seed TLE and >= 6 observations.';
|