-
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.