# `Sidereon.OrbitDetermination`
[🔗](https://github.com/neilberkman/sidereon-ex/blob/main/lib/sidereon/orbit_determination.ex#L1)

Precise orbit fitting and residual ledgers.

Positions supplied through SP3 or precise ephemeris samples are ECEF metres.
Fitted initial states are GCRS kilometres and kilometres per second.

# `error_reason`

```elixir
@type error_reason() ::
  :empty_selection
  | :invalid_option
  | :too_few_samples
  | :non_monotonic_epochs
  | :mixed_timescales
  | :invalid_epoch
  | :invalid_observation
  | :frame
  | :propagation
  | :least_squares
  | :singular_geometry
  | :did_not_converge
  | :rtn_frame
  | term()
```

# `satellite_id`

```elixir
@type satellite_id() ::
  String.t() | {String.t(), pos_integer()} | {atom(), pos_integer()}
```

# `fit_all_sp3_ecef_precise_orbits`

```elixir
@spec fit_all_sp3_ecef_precise_orbits(
  Sidereon.GNSS.SP3.t(),
  keyword()
) ::
  {:ok, Sidereon.OrbitDetermination.OrbitFitReport.t()}
  | {:error, error_reason()}
```

Fit every satellite declared in a parsed ECEF SP3 product.

# `fit_precise_ephemeris_sample_orbit`

```elixir
@spec fit_precise_ephemeris_sample_orbit(
  [Sidereon.GNSS.PreciseEphemerisSample.t()],
  satellite_id(),
  keyword()
) ::
  {:ok, Sidereon.OrbitDetermination.OrbitFitReport.t()}
  | {:error, error_reason()}
```

Fit one satellite from a precise-ephemeris sample slice.

# `fit_sp3_ecef_precise_orbit`

```elixir
@spec fit_sp3_ecef_precise_orbit(Sidereon.GNSS.SP3.t(), satellite_id(), keyword()) ::
  {:ok, Sidereon.OrbitDetermination.OrbitFitReport.t()}
  | {:error, error_reason()}
```

Fit one satellite from a parsed ECEF SP3 product.

The Earth-orientation provider is supplied by the core side of the binding.

# `fit_sp3_ecef_precise_orbits`

```elixir
@spec fit_sp3_ecef_precise_orbits(Sidereon.GNSS.SP3.t(), [satellite_id()], keyword()) ::
  {:ok, Sidereon.OrbitDetermination.OrbitFitReport.t()}
  | {:error, error_reason()}
```

Fit selected satellites from a parsed ECEF SP3 product.

# `fit_sp3_precise_orbit`

```elixir
@spec fit_sp3_precise_orbit(Sidereon.GNSS.SP3.t(), satellite_id(), keyword()) ::
  {:ok, Sidereon.OrbitDetermination.OrbitFitReport.t()}
  | {:error, error_reason()}
```

Fit one satellite from a parsed SP3 product.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
