aa - astronomical almanac - calculate planet and star positions
The aa program computes the orbital positions of planetary bodies and
performs rigorous coordinate reductions to apparent geocentric and
topocentric place (local altitude and azimuth). It also reduces star
catalogue positions given in either the FK4 or FK5 system. Data for
the 57 navigational stars is included. Most of the algorithms employed
are from The Astronomical Almanac (AA) published by the U.S. Government
The aa program follows the rigorous algorithms for reduction of
celestial coordinates exactly as laid out in current editions of the
Astronomical Almanac. The reduction to apparent geocentric place has
been checked by a special version of the program (aa200) that takes
planetary positions directly from the Jet Propulsion Laboratory DE200
numerical integration of the solar system. The results agree exactly
with the Astronomical Almanac tables from 1987 onward (earlier Almanacs
used slightly different reduction methods).
The following items will be read in automatically from the first of
these files to be found: ./aa.ini, ~/.aa.ini, /etc/aa.ini. The file
contains one ASCII string number per line so is easily edited. A
sample initialization file is supplied. The entries are:
lon Terrestrial longitude of observer, degrees East of Greenwich
lat Geodetic latitude of observer (program calculates geocentric
height Height above sea level, meters
temp Atmospheric temperature, degrees Centigrade
Atmospheric pressure, millibars
tflag Input time type: 1 = TDT, 2 = UT, 0 = TDT set equal to UT
deltaT Value to use for deltaT, seconds; if 0 then the program will
Several methods of calculating the positions of the planets have
been provided for in the program source code. These range in accuracy
from a built-in computation using perturbation formulae to a solution
from precise orbital elements that you supply from an almanac.
The program uses as a default a set of trigonometric expansions for
the position of the Earth and planets. These have been adjusted to
match the Jet Propulsion Laboratory’s DE404 Long Ephemeris (1995) with
a precision ranging from about 0.1" for the Earth to 1" for Pluto. The
adjustment was carried out on the interval from 3000 B.C. to 3000 A.D.
for the outer planets. The adjustment for the inner planets is
strictly valid only from 1350 B.C. to 3000 A.D., but may be used to
3000 B.C. with some loss of precision. See
/usr/share/doc/aa/readme.404 for additional information. The true
accuracy of positions calculated for prehistoric or future dates is of
The Moon’s position is calculated by a modified version of the lunar
theory of Chapront-Touze’ and Chapront. This has a precision of 0.5
arc second relative to DE404 for all dates between 1369 B.C. and 3000
A.D. The real position of the Moon in ancient times is not actually
known this accurately, due to uncertainty in the tidal acceleration of
the Moon’s orbit.
In the absence of an interpolated polynomial ephemeris such as the
DE200, the highest accuracy for current planetary positions is achieved
by using the heliocentric orbital elements that are published in the
Astronomical Almanac. If precise orbital elements are provided for the
desired epoch then the apparent place should be found to agree very
closely with Almanac tabulations.
Entering 99 for the planet number generates a prompt for the name of
a file containing human-readable ASCII strings specifying the elements
of orbits. The items in the specification are (see also the example
First line of entry:
epoch of orbital elements (Julian date)
longitude of the ascending node
argument of the perihelion
mean distance (semimajor axis) in au
Second line of entry:
epoch of equinox and ecliptic, Julian date
visual magnitude B(1,0) at 1au from earth and sun
equatorial semidiameter at 1au, arc seconds
name of the object, up to 15 characters
Angles in the above are in degrees except as noted. Several sample
orbits are supplied in the file orbit.cat. If you read in an orbit
named "Earth" the program will install the Earth orbit, then loop back
and ask for an orbit number again.
The entry for daily motion is optional. It will be calculated by the
program if it is set equal to 0.0 in your catalogue. Almanac values of
daily motion recognize the nonzero mass of the orbiting planet; the
program’s calculation will assume the mass is zero.
Mean distance, for an elliptical orbit, is the length of the semi-
major axis of the ellipse. If the eccentricity is given to be 1.0, the
orbit is parabolic and the "mean distance" item is taken to be the
perihelion distance. Similarly a hyperbolic orbit has eccentricity >
1.0 and "mean distance" is again interpreted to mean perihelion
distance. In both these cases, the "epoch" is the perihelion date, and
the mean anomaly is set to 0.0 in your catalogue.
Elliptical cometary orbits are usually catalogued in terms of
perihelion distance also, but you must convert this to mean distance to
be understood by the program. Use the formula
mean distance = perihelion distance / (1 - eccentricity)
to calculate the value to be entered in your catalogue for an
The epoch of the orbital elements refers particularly to the date to
which the given mean anomaly applies. Published data for comets often
give the time of perihelion passage as a calendar date and fraction of
a day in Ephemeris Time. To translate this into a Julian date for your
catalogue entry, run aa, type in the published date and decimal
fraction of a day, and note the displayed Julian date. This is the
correct Julian Ephemeris Date of the epoch for your catalogue entry.
Example (Sky & Telescope, March 1991, page 297): Comet Levy 1990c had a
perihelion date given as 1990 Oct 24.68664 ET. As you are prompted
separately for the year, month, and day, enter 1990, 10, 24.68664 into
the program. This date and fraction translates to JED 2448189.18664.
For comparison purposes, note that published ephemerides for comets
usually give astrometric positions, not apparent positions.
Ephemeris Time and Other Time Scales
Exercise care about time scales when comparing results against an
almanac. The orbit program assumes input date is Ephemeris Time (ET or
TDT). Topocentric altitude and azimuth are calculated from Universal
Time (UT). The program converts between the two as required, but you
must indicate whether your input entry is TDT or UT. This is done by
the entry for input time type in aa.ini. If you are comparing
positions against almanac values, you probably want TDT. If you are
looking up at the sky, you probably want UT. Ephemeris transit times
can be obtained by declaring TDT = UT. The adjustment for deltaT = ET
minus UT is accurate for the years 1620 through 2011, as the complete
tabulation from the Astronomical Almanac is included in the program.
Outside this range of years, approximate formulas are used to estimate
deltaT. These formulas are based on analyses of eclipse records going
back to ancient times (Stephenson and Houlden, 1986; Borkowski, 1988)
but they do not predict future values very accurately. For precise
calculations, you should update the table in deltat.c from the current
year’s Almanac. Note the civil time of day is UTC, which is adjusted by
integral leap seconds to be within 0.9 second of UT.
Updated deltaT values and predictions can be obtained from this
network archive: http://maia.usno.navy.mil . See the file deltat.c for
additional information. In addition, the IAU has adopted several other
definitions of time, but this program does not distinguish among them.
The International Earth Rotation Service is in charge of UT. Precise
data on Earth rotation and orientation are published in the IERS
bulletins, available at the IERS computer site www.iers.org as well as
at the usno site.
Rise and Set Times
Each calculation of the time of local rising, meridian transit, and
setting includes a first order correction for the motion in right
ascension and declination of the object between the entered input time
and the time of the event. Even so, the calculation has to be
iterated, or repeated with successively closer estimates of the event
time. In view of the first order correction the iteration has a
second-order convergence characteristic and arrives at a precise result
in just two or three steps. On the other hand, the technique used is
unstable for nearly-circumpolar objects, such as the Moon observed at
high latitudes. Thus a failure to report rise and set times does not
necessarily mean that there was no rise or set event.
The program reports the transit that is nearest to the input time.
Rise and set times ordinarily precede and follow the transit. Check
the date displayed next to the rise, set, or transit time to be sure
the results are for the desired date and not for the previous or next
calendar day. For the Sun and Moon, rise and set times are for the
upper limb of the disc; but the indicated topocentric altitude always
refers to the center of the disc. The computed event times include the
effects of diurnal aberration and parallax.
Age of the Moon, in days from the nearest Quarter, also has a
correction for orbital motion, but does not get the benefit of
iterative improvement and may be off by 0.1 day (the stated Quarter is
always correct, however). The estimated time can be made much more
precise by entering the input date and time of day to be near the time
of the event. In other words, the rigorous calculation requires
iterating on the time; in this case the program does not do so
automatically, hence if you want maximum accuracy you must do the
iteration by hand.
Positions and proper motions of the 57 navigational stars were taken
from the Fifth Fundamental Catalogue (FK5). They are in the file
/usr/share/aa/star.cat. For all of these, the program’s output of
astrometric position agreed with the 1986 AA to the precision of the AA
tabulation (an arc second). The same is true for 1950 FK4 positions
taken from the SAO catalogue. The program agrees to 0.01" with worked
examples presented in the AA. Spot checks against Apparent Places of
Fundamental Stars confirm the mean place agreement to <0.1". The APFS
uses an older nutation series, so direct comparison of apparent place
is difficult. The program incorporates the complete IAU Theory of
Nutation (1980). Items for the Messier catalogue,
/usr/share/aa/messier.cat, are from either the AA or Sky Catalogue
To compute a star’s apparent position, its motion since the
catalogue epoch is taken into account as well as the changes due to
precession of the equatorial coordinate system. Star catalogue files
have the following data structure. Each star entry occupies one line
of ASCII characters. Numbers can be in any usual decimal computer
format and are separated from each other by one or more spaces. From
the beginning of the line, the parameters are
Epoch of catalogue coordinates and equinox
Right ascension, hours
Right ascension, minutes
Right ascension, seconds
Proper motion in R.A., s/century
Proper motion in Dec., "/century
Radial velocity, km/s
For example, the line
2000 02 31 48.704 89 15 50.72 19.877 -1.52 -17.0 0.0070 2.02
has the following interpretation:
J2000.0 ;Epoch of coordinates, equator, and equinox
2h 31m 48.704s ;Right Ascension
89deg 15’ 50.72" ;Declination
19.877 ;proper motion in R.A., s/century
-1.52 ;proper motion in Dec., "/century
-17.0 ;radial velocity, km/s
0.007 ;parallax, "
alUMi(Polaris) ;abbreviated name for alpha Ursae Minoris (Polaris)
Standard abbreviations for 88 constellation names are expanded into
spelled-out form (see constel.c). The program accepts two types of
catalogue coordinates. If the epoch is given as 1950, the entire entry
is interpreted as an FK4 item. The program then automatically converts
the data to the FK5 system. All other epochs are interpreted as being
in the FK5 system.
Note that catalogue (and AA) star coordinates are referred to the
center of the solar system, whereas the program displays the correct
geocentric direction of the object. The maximum difference is 0.8" in
the case of alpha Centauri.
aa does not accept any options.
./aa.ini, ~/.aa.ini, /etc/aa.ini Initialization data.
Documentation of plan404 ephemerides.
Catalogue data on the 57 navigational stars.
Items for the Messier catalogue
aa was written by Stephen L. Moshier <firstname.lastname@example.org>.
This manual page was written by James R. Van Zandt <email@example.com>,
for the Debian project (but may be used by others).
September 4, 2006