empyrean.determine

determine(observations, initial_orbits=None, *, radar=None, config=None, _builtsystem=None)[source]

Run the full orbit determination pipeline (IOD + DC) over every object in observations.

The observations are grouped by ADES object identifier (permID, else provID, else trkSub) and each group is fitted independently, so one call determines a whole batch. Fitting a single object is the one-entry case of the same call, not a separate one.

Parameters:
  • observations (ADESObservations) – ADES optical observations. May cover any number of objects.

  • initial_orbits (dict[str, CartesianOrbits] | None) – Map of object ID to initial seed orbit. When provided, IOD is skipped for that object and the seed becomes the DC starting point. Seeds matching no observation group are reported in DetermineResults.unmatched_orbit_ids rather than dropped.

  • radar (ADESRadarObservations | None) – ADES radar (delay / Doppler) observations, as returned alongside the optical table by read_ades(). Grouped by the same identifier and folded into each object’s fit. When omitted or empty, the fits are optical-only.

  • config (ODConfig | None) – Pipeline configuration. Default: ODConfig().

  • _builtsystem (Any)

Return type:

DetermineResults

Returns:

DetermineResults.orbits (one row per delivered object), .summary (one row per input object, delivered or failed), .residuals (every delivered fit’s rows, tagged with object_id), and .failures. Index by object identifier for the full single-object DetermineResult; call DetermineResults.single() for the one-object case.

Notes

An object whose fit fails does not abort the batch and does not disappear: it gets a .summary row with status="failed", NaN measurements, and the reason in error.