• ADAM Core

Foundation library for astrodynamics computations and asteroid research.

Astrodynamics Utilities Library

adam_core is a Python package providing astrodynamics utilities for orbit propagation, coordinate transformations, and ephemeris generation. The package handles multiple orbits and times efficiently and is used across Asteroid Institute’s tools and services to ensure consistency in astrodynamics computations.

ADAM Core backs our Trajectory Optimizer and Impact Probability services, providing the fundamental astrodynamics computations that power interactive mission planning and risk analysis.

Core Capabilities

Orbit Management

  • Comprehensive Orbits class supporting Keplerian, Cartesian, and Cometary coordinate systems, and easy coordinate transformations
  • Multiple orbit and time handling with vectorized operations

External Data Integration

  • Direct interfaces to JPL Horizons and SBDB for orbital element retrieval
  • Support for MPC and ADES observation formats
  • State vector extraction from NAIF/SPICE Development Ephemeris files

Propagation and Ephemeris Generation

  • Compatible with ASSIST and PYOORB integrators for n-body orbit propagation, as well as fast 2-body
  • Observer-specific ephemeris generation for arbitrary ground stations
  • Sky-plane mapping with automatic covariance propagation to observational space, and light-time correction
  • Impact infrastructure with propagation stopping conditions for collision detection

…And Much More

Data Architecture

All data structures in ADAM Core are built on Quivr tables, providing type-safe, high-performance containers backed by Apache Arrow. This architecture ensures consistent data handling, efficient memory usage, and seamless interoperability across the entire ADAM platform.

Basic Usage

from adam_core.orbits.query import query_horizons, query_sbdb
from adam_core.time import Timestamp

# Query orbits from external catalogs
times = Timestamp.from_mjd([60000.0], scale="tdb")
orbits = query_horizons(["Duende", "Eros", "Ceres"], times)

# Convert coordinate systems on-demand
keplerian_elements = orbits.coordinates.to_keplerian()
cometary_elements = orbits.coordinates.to_cometary()
spherical_elements = orbits.coordinates.to_spherical()

# Access coordinate values and covariances
values = orbits.coordinates.values
covariance_matrices = orbits.coordinates.covariance.to_matrix()

Propagation and Ephemeris Generation

from adam_core.propagator.adam_assist import ASSISTPropagator
from adam_core.observers import Observers
import numpy as np

# Initialize ASSIST propagator
propagator = ASSISTPropagator()

# Define propagation and observation times (100 days)
times = initial_time.from_mjd(initial_time.mjd() + np.arange(0, 100))

# Propagate orbits with n-body dynamics
propagated_orbits = propagator.propagate_orbits(
    orbits,
    times,
    chunk_size=100,
    max_processes=1,
)

# Define observers for ephemeris generation
observers = Observers.from_code("I11", times)  # Palomar Observatory

# Generate sky-plane ephemerides with covariance mapping
ephemeris = propagator.generate_ephemeris(
    orbits,
    observers,
    chunk_size=100,
    max_processes=1
)

Documentation available at adam-core.readthedocs.io.