EphCore.Ephemeris.Kernels.SPK.Server (eph_core v0.1.0)

Copy Markdown View Source

SPK kernel server with ETS preloading for fast queries.

Supports SPK data types 2 (Chebyshev) and 21 (Extended Modified Difference Arrays). Multiple kernel files are loaded at startup and merged into a single ETS table.

Configuration

config :eph_core, :spk_kernels, ["de440s.bsp", "asteroids/2000001.bsp"]

Paths are resolved relative to ephemeris/spk/ under EphCore.Ephemeris.Kernels.base_dir/0. Falls back to ["de440s.bsp"] when unset.

ETS storage layout

  • {:meta, target, center} → list of segment metadata maps
  • {:record, target, center, index} → Type 2 Chebyshev record tuple
  • {:t21_record, target, center, seg_start, index} → Type 21 MDA record map

Summary

Functions

Returns a specification to start this module under a supervisor.

Telemetry-free position query for hot paths (almanac event finding).

Functions

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

loaded?()

@spec loaded?() :: boolean()

position_at(target, center, seconds_past_j2000)

@spec position_at(integer(), integer(), float()) ::
  {:ok, {float(), float(), float()}} | {:error, term()}

position_at_fast(target, center, seconds_past_j2000)

@spec position_at_fast(integer(), integer(), float()) ::
  {:ok, {float(), float(), float()}} | {:error, term()}

Telemetry-free position query for hot paths (almanac event finding).

Identical lookup to position_at/3 but skips the per-query :telemetry emission and timing. Use only where the high query volume makes the telemetry overhead material and per-query metrics are not needed; the normal engine paths keep position_at/3.

segments()

@spec segments() :: [EphCore.Ephemeris.Kernels.SPK.Segment.t()]

start_link(opts \\ [])