OpenOrb - B612-Asteroid-Institute/orb_it GitHub Wiki

OpenOrb (oorb or pyoorb) is an open-source orbit-computation package.

OpenOrb is built on a well-established Bayesian inversion theory, which means that it is to a large part complementary to orbit-computation packages currently available. In particular, OpenOrb is the first package that contains tools for rigorously estimating the uncertainties resulting from the inverse problem of computing orbital elements using scarce astrometry. In addition to the well-known least-squares method, OpenOrb also contains both Monte-Carlo (MC) and Markov-Chain MC (MCMC; Oszkiewicz et al. [2009]) versions of the statistical ranging method.

-Excerpt from the abstract of Granvik et al. 2009

Installation

Open Orb's wiki provides helpful instructions on how to install OpenOrb. The install must include its python wrapper pyoorb for orb_it to work properly.

PYOORB() Backend

Open Orb integrator backend for orb_it testing.

Keyword Arguments

  • dynamical_model : str, optional, The dynamical model the integrator uses. Defaults to "N".
  • ephemeris_file : str, optional, Name of the ephemeris file the integrator uses. Defaults to "de430.dat".
  • config_path : str, optional, Defines the path to the "data" folder where OORB configuration files are.
  • multi_ranging : int, optional, Indicates which multi_ranging method to use for an initial Orbit Determination fit. Defaults to 1.
    • 0 for no multi_ranging, all observations are given for initial fit. (Can be unstable for long arcs, more stable for short arcs)
    • 1 for basic multi_ranging, observations are split up into groups of 3-4, then fit separately. (Somewhat stable for longer arcs)
    • 2 for OrbFit style ranging, the first, middle, and last observations are only given to the fitter. (Somewhat stable for longer arcs)

Attributes

  • name : str Name of the integrator.

PYOORB()._propagateOrbits()

Propagate orbits using PYOORB.

Parameters

  • orbits : ~orb_it.raiden.Orbits, Orbits to propagate. See orbit_type for expected input format.
  • t1 : ~astropy.time.core.Time, Epoch in MJD to which to propagate the orbits.

Returns

  • propagated : ~pandas.DataFrame, Orbits at new epochs.

PYOORB()._generateEphemeris()

Generate ephemeris using PYOORB.

Parameters

  • orbits : ~orb_it.raiden.Orbits, Orbits to propagate. See for expected input format.
  • observers : dict, A dictionary with observatory codes as keys and observation_times (~astropy.time.core.Time) as values.

Returns

  • ephemeris : ~pandas.DataFrame, Ephemerides for each orbit and observer (location and time).

PYOORB()._orbitDetermination()

Determine orbits from observations using OpenOrb's --task=ranging and --task=lsl functions from the terminal.

Parameters

  • observations : ~pandas.DataFrame, Data frame of observations including RA's Dec's, epochs, and observatory codes.
  • out_dir : str, optional, Save input and output files to this directory.

Returns

  • od_orbits : ~pandas.DataFrame, Cartesian orbital state vectors fit from observations given.

Ranging Issues

From Open Orb's wiki,

Ranging is optimized for cases where the amount of astrometry is scarce or spans a relatively short time span. Ranging-based methods have successfully been applied to a variety of different topics such as rigorous ephemeris prediction, orbital-element-distribution studies for trans-neptunian objects, the computation of invariant collision probabilities between NEOs and the Earth, detecting linkages between astrometric asteroid observations within an apparition as well as between apparitions, and in the rigorous analysis of the impact of orbital arc-length and/or astrometric uncertainty on the uncertainty of the resulting orbits.

The Orbit Determination portion of OpenOrb specifically Initial Orbit Determination (fitting an orbit from observations) is meant for short arcs with minimal observations. If given a long arc with many observations, it will either fail or take much longer to converge than usual. Orb_it has a few fixes to these ranging issues. As stated above in the documentation multi_ranging is one of the fixes. You have the option to split up the observations into groups of 3-4 and then fit them simultaneously to get a list of initial orbits which you can then pass to the least-squares fitter to get one final orbit. The other option is to have it just fit the first, middle, and last observation and then pass all the observations and the initial guess to the least-squares fitter. If you choose not to use multi_ranging, there is a "try and fail" safeguard with 5 attempts to make an initial fit. These attempts will be relayed as warnings and will be logged in an errors logger. If it fails to converge multiple times, try multi_ranging.

Bibiliography

Granvik, M., Virtanen, J., Oszkiewicz, D., Muinonen, K. (2009). 
OpenOrb: Open-source asteroid orbit computation software including statistical ranging. 
Meteoritics & Planetary Science 44(12), 1853-1861.