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, elseprovID, elsetrkSub) 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 inDetermineResults.unmatched_orbit_idsrather than dropped.radar (
ADESRadarObservations|None) – ADES radar (delay / Doppler) observations, as returned alongside the optical table byread_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 withobject_id), and.failures. Index by object identifier for the full single-objectDetermineResult; callDetermineResults.single()for the one-object case.
Notes
An object whose fit fails does not abort the batch and does not disappear: it gets a
.summaryrow withstatus="failed", NaN measurements, and the reason inerror.