Using JPL's Horizons API I can look at the orbital elements for the EM Barycenter wrt the Solar System Barycenter at J2000. The output looks like this:

Watch for the PR (Sidereal orbit period) underlined in red. It is supposed to be 362.392667 days, but the sidereal year is supposed to be only about 20 minutes longer than the ~365 day tropical year.

What's going on?

enter image description here

EDIT: Mercury's page (below) is even more confusing. Even though the system is supposed to be simpler (no satellites), the same page shows 87.969257 days for the sidereal period on the Geophysical Data section, and 90.0761 days for it on the Ephemeris section.

 Revised: Jul 31, 2013              Mercury                             199 / 1

 GEOPHYSICAL DATA (updated 2008-Feb-07):
  Mean radius (km)      =  2440(+-1)     Density (g cm^-3)     =  5.427
  Mass (10^23 kg )      =     3.302      Flattening, f         =  
  Volume (x10^10 km^3)  =     6.085      Semi-major axis       = 
  Sidereal rot. period  =    58.6462 d   Rot. Rate (x10^5 s)   =  0.124001
  Mean solar day        =   175.9421 d   Polar gravity ms^-2   =
  Mom. of Inertia       =     0.33       Equ. gravity  ms^-2   =  3.701     
  Core radius (km)      = ~1600          Potential Love # k2   =

  GM (km^3 s^-2)        = 22032.09       Equatorial Radius, Re =    2440 km
  GM 1-sigma (km^3 s^-2)=   +-0.91       Mass ratio (sun/plnt) = 6023600

  Atmos. pressure (bar) =                Max. angular diam.    = 11.0"   
  Mean Temperature (K)  =                Visual mag. V(1,0)    = -0.42 
  Geometric albedo      =   0.106        Obliquity to orbit[1] = 2.11' +/- 0.1'  
  Sidereal orb. per.    =   0.2408467 y  Mean Orbit vel.  km/s = 47.362 
  Sidereal orb. per.    =  87.969257  d  Escape vel. km/s      =  4.435
  Hill's sphere rad. Rp =  94.4          Planetary Solar Const = 9936.9 (Wm^2)

[1] Margot et al., Science 316, 2007

Ephemeris / WWW_USER Sat Feb 10 22:01:09 2018 Pasadena, USA      / Horizons    
Target body name: Mercury (199)                   {source: DE431mx}
Center body name: Solar System Barycenter (0)     {source: DE431mx}
Center-site name: BODY CENTER
Start time      : A.D. 2000-Jan-01 12:00:00.0000 TDB
Stop  time      : A.D. 2000-Jan-01 12:01:00.0000 TDB
Step-size       : 1440 minutes
Center geodetic : 0.00000000,0.00000000,0.0000000 {E-lon(deg),Lat(deg),Alt(km)}
Center cylindric: 0.00000000,0.00000000,0.0000000 {E-lon(deg),Dxy(km),Dz(km)}
Center radii    : (undefined)                                                  
Keplerian GM    : 2.9630912754977030E-04 au^3/d^2
Output units    : AU-D, deg, Julian Day Number (Tp)                            
Output type     : GEOMETRIC osculating elements
Output format   : 10
Reference frame : ICRF/J2000.0                                                 
Coordinate systm: Ecliptic and Mean Equinox of Reference Epoch                 
   EC    QR   IN
   OM    W    Tp
   N     MA   TA
   A     AD   PR
2451545.000000000 = A.D. 2000-Jan-01 12:00:00.0000 TDB 
 EC= 1.976193311288088E-01 QR= 3.156813414395768E-01 IN= 7.013873298083792E+00
 OM= 4.812376548400915E+01 W = 2.581669078701001E+01 Tp=  2451500.229889842682
 N = 3.996616368629979E+00 MA= 1.789289550796729E+02 TA= 1.792679756326384E+02
 A = 3.934308909556422E-01 AD= 4.711804404717076E-01 PR= 9.007619616075542E+01
Coordinate system description:

  Ecliptic and Mean Equinox of Reference Epoch

    Reference epoch: J2000.0
    XY-plane: plane of the Earth's orbit at the reference epoch
              Note: obliquity of 84381.448 arcseconds wrt ICRF equator (IAU76)
    X-axis  : out along ascending node of instantaneous plane of the Earth's
              orbit and the Earth's mean equator at the reference epoch
    Z-axis  : perpendicular to the xy-plane in the directional (+ or -) sense
              of Earth's north pole at the reference epoch.

  Symbol meaning [1 au= 149597870.700 km, 1 day= 86400.0 s]:

    JDTDB    Julian Day Number, Barycentric Dynamical Time
      EC     Eccentricity, e                                                   
      QR     Periapsis distance, q (au)                                        
      IN     Inclination w.r.t XY-plane, i (degrees)                           
      OM     Longitude of Ascending Node, OMEGA, (degrees)                     
      W      Argument of Perifocus, w (degrees)                                
      Tp     Time of periapsis (Julian Day Number)                             
      N      Mean motion, n (degrees/day)                                      
      MA     Mean anomaly, M (degrees)                                         
      TA     True anomaly, nu (degrees)                                        
      A      Semi-major axis, a (au)                                           
      AD     Apoapsis distance (au)                                            
      PR     Sidereal orbit period (day)                                       

Geometric states/elements have no aberrations applied.

 Computations by ...
     Solar System Dynamics Group, Horizons On-Line Ephemeris System
     4800 Oak Grove Drive, Jet Propulsion Laboratory
     Pasadena, CA  91109   USA
     Information: http://ssd.jpl.nasa.gov/
     Connect    : telnet://ssd.jpl.nasa.gov:6775  (via browser)
                  telnet ssd.jpl.nasa.gov 6775    (via command-line)
     Author     : [email protected]

2 Answers 2


What's going on?

You are learning:

  • what osculating orbital elements are and are not,
  • that real orbits are not Keplerian!

@DavidHammen's answer is of course spot-on correct, but I understand why you would have thought that this might be the right period. It is true that the Earth-Moon barycenter might move along a more representative Keplerian orbit than either the Moon or Earth alone, and if they were similar mass, this would be fairly obvious if you plotted their orbits; each would "wiggle" around the barycenter's smoother orbit.

Actually, if you had chosen the Sun instead of the Solar System Barycenter, that would have been slightly better conceptually, since the Earth and Sun tend to be pushed around by Jupiter (and others) roughly together, but that's not an exact statement.

But the problem is that you have taken a "snapshot" of the *osculating orbital elements" and those are not the mean or average elements. They are the elements of a totally fictitious, instantaneous fit of a hypothetical elliptical orbit around whatever point you choose. You could choose Jupiter as the center, and you'd get a hypothetical, but totally unphysical orbit around Jupiter that happened to be tangent to the real orbit at that instantaneous moment in time. Of course since it's wrong, you'd get totally different parameters the next day.

So if you look at the first plot of osculating elements for Earth, Earth-Moon Barycenter, and Moon for 366 days, you'll see they oscillate (not the same word as osculate by the way) around the mean values. Every day is different, but they tend to wiggle around the mean values.

The big take-home message is that real orbits are just not Keplerian orbits to begin with, because all bodies are affected gravitationally by all other bodies. It's convenient to approximate orbits as Keplerian, but always remember that while these are close, they are wrong!

See the plot here or see the answers to Why does the eccentricity of Venus's (and other) orbits as reported by Horizons vary based on the frame origin and basis?

I've downloaded all three for one year, then plotted using the Python script below. In the first plot, the Earth and Earth-Moon Barycenter appear nearly on top of each other, but not quite. It's just that the separation is 81 times smaller than it is for the Moon:

enter image description here

enter image description here

enter image description here

class Body(object):
    def __init__(self, name):
        self.name = name

import numpy as np
import matplotlib.pyplot as plt

fnames = ('Earth Geocenter horizons_results.txt',
          'Earth Moon Barycenter horizons_results.txt',
          'Moon (Luna) horizons_results.txt')

names  = ('Earth', 'Barycenter', 'Moon')
bodies = []
linez  = []

for name, fname in zip(names, fnames):
    with open(fname, 'r') as infile:

        lines = infile.read().splitlines()

    iSOE = [i for i, line in enumerate(lines) if "$$SOE" in line][0]
    iEOE = [i for i, line in enumerate(lines) if "$$EOE" in line][0]

    print iSOE, iEOE, lines[iSOE], lines[iEOE]

    lines = [line.split(',') for line in lines[iSOE+1:iEOE]]

    # JDTDB, CalendarDate(TDB), EC, QR, IN, OM, W, Tp, N, MA, TA, A,  AD, PR
    # 0,     1,                 2,  3,  4,  5,  6, 7,  8, 9,  10, 11, 12, 13

    body = Body(name)

    body.JD           = np.array([float(line[ 0]) for line in lines])
    body.datestring   =          [      line[ 1]  for line in lines]
    body.eccentricity = np.array([float(line[ 2]) for line in lines])
    body.periapsis    = np.array([float(line[ 3]) for line in lines])
    body.inclination  = np.array([float(line[ 4]) for line in lines])
    body.semimajor    = np.array([float(line[11]) for line in lines])
    body.period_days  = np.array([float(line[13]) for line in lines])

attributes = ('eccentricity', 'periapsis', 'inclination',
              'semimajor', 'period_days' ) 

Earth, Barycenter, Moon = bodies

if True:
    for i, attr in enumerate(attributes):
        plt.subplot(len(attributes), 1, i+1)
        for body in bodies:
            thing = getattr(body, attr)
            days  = body.JD - body.JD[0]
            plt.plot(days, thing)
        plt.title(attr, fontsize=16)

if True:
    for i, attr in enumerate(attributes):
        plt.subplot(len(attributes), 1, i+1)
        plt.plot(getattr(Earth, attr) - getattr(Barycenter, attr))
        plt.plot(getattr(Moon,  attr) - getattr(Barycenter, attr))
        plt.title(attr + "diff from Barycenter", fontsize=16)
  • 1
    $\begingroup$ I think I get it, you saved me again. Along with @DavidHammen I can conclude that in order for the osculating elements of the planet-system orbits to describe a good approximation I need to use the actual Sun as a center, since while those orbits will be roughly Keplernian wrt to it (meaning the osculating approximation will be decent), the sun itself will be pushed around by the other bodies in complex ways, dancing around the solar system barycenter. This means the planet-system orbits around the solar system barycenter will be basically meaningless $\endgroup$
    – Daniel
    Feb 11, 2018 at 11:01
  • 1
    $\begingroup$ @Daniel Well, what you should do is ask the question to which you really need the answer. If your question is "How can I get the best set of orbital elements to approximate the motion of solar system bodies, the answer would absolutely NOT be to use Horizons. Sets of those elements exist, and are linked in other answers in this site. You should search this site further and/or ask a new question. $\endgroup$
    – uhoh
    Feb 11, 2018 at 12:06
  • 1
    $\begingroup$ I've found that the simplest way was to just try and make sense of Horizons' output, since I can very easily control the reference frame and get arbitrary additional data. Alternatives like mean orbital parameters have arbitrary reference frames and epochs, requiring error-prone conversions and I would need additional resources for planets and dwarf planets, all in all leading to a lot more work. Additionally, this way is a lot easier to replicate the motion of the planets around their own system's barycenters (Earth and Pluto especially) $\endgroup$
    – Daniel
    Feb 11, 2018 at 13:24
  • 1
    $\begingroup$ @Daniel OK then that's great! Everyone approaches orbital mechanics from "a different angle" so to speak ;-) It sounds like you've found yours. Enjoy! $\endgroup$
    – uhoh
    Feb 11, 2018 at 13:52

Why is the sidereal period of the Earth 362.392667 days?

It's not.

You are doing three things wrong:

  1. You are using the solar system barycenter and assuming that is an object (it isn't).
  2. You are using the Earth-Moon barycenter and assuming that is an object (it isn't, either).
  3. You are asking Horizons to compute the osculating Keplerian elements of these two non-objects about one another.

A fairly simple set of calculations enable the transformation of relative position and velocity to osculating Keplerian elements. The resulting orbital elements may or may not have any bearing on reality. In this case, you have two non-objects whose relative positions and velocities do have a bearing on reality. The transformation of that relative position and velocity to osculating Keplerian elements? Not so much. Neither one is a physical object.

TL;DR: Garbage in, garbage out.

  • $\begingroup$ Doesn't "osculating" mean "kissing"? At first I thought you were misspelling "oscillating," but then I saw that the word came from the official output data in the original post. Now I'm just confused... $\endgroup$ Feb 11, 2018 at 14:59
  • 2
    $\begingroup$ @MasonWheeler - See en.wikipedia.org/wiki/Osculating_curve. $\endgroup$ Feb 11, 2018 at 15:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.