Propagation and Ephemeris¶
Propagator Requirement¶
High-fidelity operational propagation requires a concrete Propagator
implementation. In practice, use a production backend such as
adam_assist.ASSISTPropagator.
Simple Case (Production Propagator)¶
import numpy as np
from adam_assist import ASSISTPropagator
from adam_core.orbits import Orbits
from adam_core.orbits.ephemeris import Ephemeris
from adam_core.observers import Observers
from adam_core.orbits.query import query_sbdb
from adam_core.time import Timestamp
orbits: Orbits = query_sbdb(["Apophis", "Bennu"])
t0: Timestamp = Timestamp.from_mjd([60200.0], scale="tdb")
times: Timestamp = Timestamp.from_mjd(t0.mjd().to_numpy() + np.arange(0, 10), scale="tdb")
propagator = ASSISTPropagator()
propagated: Orbits = propagator.propagate_orbits(orbits, times, max_processes=1)
observers: Observers = Observers.from_code("I11", times)
ephem: Ephemeris = propagator.generate_ephemeris(propagated, observers, max_processes=1)
Advanced N-Body Pattern: Parallel Throughput Controls¶
# Scale out orbit propagation work.
propagated_parallel: Orbits = propagator.propagate_orbits(
orbits,
times,
max_processes=8,
chunk_size=256,
)
# Generate ephemerides in parallel with brightness/phase prediction enabled.
ephem_parallel: Ephemeris = propagator.generate_ephemeris(
propagated_parallel,
observers,
max_processes=8,
chunk_size=256,
predict_magnitudes=True,
predict_phase_angle=True,
)
Advanced N-Body Pattern: Covariance-Aware Products¶
# Covariance propagation on state vectors (returns Orbits with propagated covariance).
propagated_cov: Orbits = propagator.propagate_orbits(
orbits,
times,
covariance=True,
covariance_method="auto",
num_samples=2000,
seed=42,
max_processes=8,
chunk_size=256,
)
# Covariance-aware ephemeris generation (sample, propagate, collapse).
ephem_cov: Ephemeris = propagator.generate_ephemeris(
orbits,
observers,
covariance=True,
covariance_method="auto",
num_samples=2000,
seed=42,
max_processes=8,
chunk_size=256,
predict_magnitudes=True,
predict_phase_angle=True,
)
Advanced N-Body Pattern: Variant Ensembles¶
from adam_core.orbits.variants import VariantEphemeris, VariantOrbits
from adam_core.orbits.query import query_scout
scout_variants: VariantOrbits = query_scout(["P10vY9r"])
variant_ephem: VariantEphemeris = propagator.generate_ephemeris(
scout_variants,
observers,
covariance=False, # Variants are already explicit samples.
max_processes=8,
chunk_size=512,
)
Basic Two-Body Baseline (Fast Screening)¶
from adam_core.dynamics.ephemeris import generate_ephemeris_2body
from adam_core.dynamics.propagation import propagate_2body
propagated_2body = propagate_2body(
orbits,
times,
max_processes=8,
chunk_size=250,
max_iter=1000,
tol=1e-14,
)
ephem_2body = generate_ephemeris_2body(
propagated_2body,
observers,
max_processes=8,
chunk_size=250,
stellar_aberration=False,
predict_magnitudes=True,
predict_phase_angle=True,
)
When to Use¶
Default operational path: n-body propagator interface (for example
ASSISTPropagator).Advanced production tuning:
max_processes+chunk_sizeon n-body methods.Uncertainty-aware outputs:
covariance=Trueon n-body methods.Variant workflows: pass
VariantOrbitsdirectly to n-body ephemeris generation.Fast pre-screening only: two-body baseline before high-fidelity reruns.
For spacecraft observers from custom SPICE kernels (for example JWST), see Observations and Observers.