Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).


## [Unreleased]

### Added

- Added orbit determination, including Initial Orbit Determination (IOD), State
Transition Matrices, and support for non-gravitational parameter fitting.

## [v2.1.6]

### Added
Expand Down
7 changes: 5 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ license.workspace = true
repository.workspace = true

[workspace]
members = ["src/kete_core", "src/kete_stats"]
default-members = ["src/kete_core", "src/kete_stats"]
members = ["src/kete_core", "src/kete_stats", "src/kete_fitting"]
default-members = ["src/kete_core", "src/kete_stats", "src/kete_fitting"]

[workspace.package]
version = "2.1.6"
Expand All @@ -26,9 +26,12 @@ repository = "https://github.com/dahlend/kete"
[dependencies]
kete_core = { version = "*", path = "src/kete_core", features=["pyo3", "polars"]}
kete_stats = {version = "*", path = "src/kete_stats"}
kete_fitting = {version = "*", path = "src/kete_fitting"}
pyo3 = { version = "^0.25.0", features = ["extension-module", "abi3-py39"] }
serde = { version = "^1.0.203", features = ["derive"] }
nalgebra = {version = "^0.33.0", features = ["rayon"]}
rand = "^0.10.0"
rand_distr = "^0.6.0"
itertools = "^0.14.0"
rayon = "^1.10.0"
sgp4 = "2.2.0"
Expand Down
11 changes: 6 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@ See the [arXiv paper](http://arxiv.org/abs/2509.04666).
[![arXiv](https://img.shields.io/badge/arXiv-2509.04666-00ff00.svg)](http://arxiv.org/abs/2509.04666)

The kete tools are intended to enable the simulation of all-sky surveys of minor
planets. This includes multi-body physics orbital dynamics, thermal and optical modeling
of the objects, as well as field of view and light delay corrections. These tools in
conjunction with the Minor Planet Centers (MPC) database of known asteroids can be used
to not only plan surveys but can also be used to predict what objects are visible for
existing or past surveys.
planets. This includes multi-body physics orbital dynamics, orbit determination and
fitting (IOD, differential correction, and MCMC posterior sampling), thermal and optical
modeling of the objects, as well as field of view and light delay corrections. These
tools in conjunction with the Minor Planet Centers (MPC) database of known asteroids can
be used to not only plan surveys but can also be used to predict what objects are visible
for existing or past surveys.

The primary goal for kete is to enable a set of tools that can operate on the entire
MPC catalog at once, without having to do queries on specific objects. It has been
Expand Down
1 change: 1 addition & 0 deletions docs/api/api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ API

cache
conversion
fitting
flux
fov
interface
Expand Down
6 changes: 6 additions & 0 deletions docs/api/fitting.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Fitting
=======

.. automodule:: kete.fitting
:members:
:inherited-members:
6 changes: 6 additions & 0 deletions docs/api/observatory.rst
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,9 @@ PTF
.. automodule:: kete.ptf
:members:
:inherited-members:

SPHEREx
-------
.. automodule:: kete.spherex
:members:
:inherited-members:
2 changes: 1 addition & 1 deletion docs/api/vector.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ Units used throughout kete are distance in au, and time in Days TDB scaled.
Coordinate frames match the coordinate frames used by cSPICE.

.. automodule:: kete.vector
:members: Vector
:members:
:inherited-members:
33 changes: 25 additions & 8 deletions docs/code_structure.rst
Original file line number Diff line number Diff line change
Expand Up @@ -68,16 +68,33 @@ benefit from orbit computation can be written without having to have Python inst
It is important to note that if performance is a concern, then removing the Python is an
important step to get the maximum possible performance.

Kete Fitting
~~~~~~~~~~~~
The `kete_fitting` crate contains orbit determination and fitting algorithms, all
written in Rust without reference to Python. This includes:

- **Initial Orbit Determination (IOD)** -- Statistical ranging over observation
pairs followed by two-body scoring to produce candidate orbits from short arcs.
- **Orbit Fitting** -- Batch least-squares with Levenberg--Marquardt
damping, progressive arc expansion, and optional chi-squared outlier rejection.
- **MCMC Orbit Sampling** -- No-U-Turn Sampler for posterior orbit characterization
on short arcs where the Gaussian approximation breaks down.
- **Lambert Solver** -- Universal-variable Stumpff-function solver for single-
revolution Keplerian transfers.
- **Observation Types** -- Optical (RA/Dec), radar range, and radar range-rate.

Like `kete_core`, this crate can be used from pure Rust without Python.

Core Python Wrapper
~~~~~~~~~~~~~~~~~~~
The Rust library described above then has Python wrappers written over it, allowing
users to call these compiled tools inside of Python. In order to do this, some
boiler-plate code is required to glue these independent parts together. This is where
the `rust` folder inside of kete comes from. Inside of this folder there are rust
files which are mostly a one-to-one mapping to their respective counterparts inside of
the `kete_core`. Ideally there should be no 'business' logic contained within these
wrappers, and they should largely exist to provide convenient mappings from the Python
concepts to the Rust internal organization.
The Rust libraries described above then have Python wrappers written over them,
allowing users to call these compiled tools inside of Python. In order to do this,
some boiler-plate code is required to glue these independent parts together. This is
where the `rust` folder inside of kete comes from. Inside of this folder there are
rust files which are mostly a one-to-one mapping to their respective counterparts
inside of `kete_core` and `kete_fitting`. Ideally there should be no 'business' logic
contained within these wrappers, and they should largely exist to provide convenient
mappings from the Python concepts to the Rust internal organization.

Kete Python
~~~~~~~~~~~
Expand Down
Binary file added docs/data/mcmc_miss_distance.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/data/mcmc_posterior.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/data/mcmc_sky_track.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ surveys of minor planets. Included here are:

- Orbit propagation code capable of accurately calculating the orbits for many
thousands of minor planets over decades on a laptop.
- Orbit determination and fitting, including initial orbit determination (IOD),
batch least-squares differential correction, and MCMC posterior sampling.
- Thermal modeling, including NEATM (Near Earth Asteroid Thermal Model) and the FRM
(Fast Rotator Model) for asteroids. Including support for non-spherical asteroids.
- Optical modeling.
Expand Down
1 change: 1 addition & 0 deletions docs/tutorials/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@ These are more in-depth worked examples.
neatm
palomar
kona
mcmc_near_miss
spherex
wise
Loading