Solution Mapping and Analysis#
Last revised by G. Fereoli on 2026 OCT 11
fit returns a SolutionOD. It holds the histories selected in
OutputSettings at the measurement epochs:
deviation_est,deviation_cumulativeandstate_est(computed when first read).covariance_estandcovariance_consider.deviation_smoothandcovariance_smooth, when the run was smoothed.prefits,postfitsandpostfits_smoother.Statistics and debug quantities: gains, innovation covariances, NIS.
solution.filter points back to the filter, and through it to the reference
trajectory and its STMs.
Mapping to other epochs#
A solution is mapped to any epoch through the STMs of the fitted reference. For an update selected at epoch \(r\):
The mapping is linear about the reference. It adds no process noise and no new data. The data cutoff decides which update \(r\) is used:
# filtered: each epoch uses the data up to that epoch
filtered = solution.propagate_state_covariance(epochs, use_smoothed=False, lookback_s=0.0)
# 14-day prediction: each epoch uses the data up to 14 days earlier
predicted = solution.propagate_state_covariance(epochs, use_smoothed=False,
lookback_s=14 * 86400.0)
# reconstruction: every epoch uses the final update
reconstructed = solution.propagate_state_covariance(epochs, use_smoothed=False,
use_all_data=True)
propagate_state and propagate_covariance take the same keywords.
propagate_covariance is the one to use for covariance analyses, which store no
deviations.
With
lookback_s=None(the default), the original convention applies: the final update is used inside and after the arc, and the first update before it. This is not a causal product.An explicit cutoff cannot use the smoothed history, so set
use_smoothed=False.A cutoff before the first update falls back to the a-priori state and covariance.
include_consider=True(default) maps the consider-augmented covariance.On a mission sequence, each leg is mapped with its own STMs. A positive lookback and
use_all_dataacross sequence events raiseNotImplementedError.
Reading and saving#
Method |
Returns |
|---|---|
|
The estimate at measurement epochs (matched to within 1 µs). Use
|
|
Corrections mapped to their nominal initial epochs, per leg on a sequence. |
|
Keplerian elements \((a, e, i, \Omega, \omega, M)\) and their covariance. |
|
Residual and covariance summary. |
|
One JSON or pickle file with every iteration ( |
Analysis tools#
CovarianceMatrix: covariance with units, frame and epoch. Built from sigmas (from_list=True) with optionalcorr_factors; read back withget_standard_deviationsandto_array.SigmaPointsandMonteCarloSamples(inscarabaeus.uncertaintyQuantification): sample-based representations, for nonlinear propagation that the linear mapping above cannot capture.OrbitalElements:covariance_to_elements(grav_param, r, v, P)converts a Cartesian covariance to element space with the analytical Jacobian.Bplane:compute_parametersgives \(B\cdot T\), \(B\cdot R\) and the linearised time of flight.target_covarianceandpropagate_covariance_to_close_approachmap a state covariance into the B-plane.linear_targeting,nonlinear_targetingandpiecewise_targetingcompute corrections.SolutionCloseness(scarabaeus.utils.SolutionCloseness): asks whether two solutions are consistent, not just how far apart they are. It returns the number of sigma \(d\) at which the two error ellipsoids first touch (Bhaskaran & Rush, 2004).from scarabaeus.utils.SolutionCloseness import SolutionCloseness d = SolutionCloseness.between(sol_lkf, sol_srif, states=slice(0, 3))["d"] D = SolutionCloseness.matrix([sol_a, sol_b, sol_c])
Both solutions must be in the same frame and units.
Plotting:plot_postfits_scatter,plot_postfits_histogram,plot_covariance_est,plot_state_errors,plot_parameters_estimate,plot_orbit_3dand others. Each takes a solution and plots its smoothed or filtered history.
See also#
Estimation Framework: how the solution is produced.
The B-Plane tutorial and the OD tutorials in Examples.