Professional Documents
Culture Documents
TPM
TPM
Specification
Version 2.2
Jeffrey W Percival
Space Astronomy Laboratory
University of Wisconsin
December 28, 2005
1
Pointing Machine Specification 2
Contents
1 Introduction 5
1.1 Vectors vs. Spherical Trigonometry . . . . . . . . . . . . . . . 6
1.2 What is a State Vector? . . . . . . . . . . . . . . . . . . . . . 7
1.3 What is a State Machine? . . . . . . . . . . . . . . . . . . . . 8
1.4 State Diagram and State Table . . . . . . . . . . . . . . . . . 9
1.5 Programming Advantages of the Telescope Pointing Machine . 10
2 State Data 12
2.1 Independent State Data . . . . . . . . . . . . . . . . . . . . . 12
2.2 Dependent (derived) State Data . . . . . . . . . . . . . . . . . 13
2.3 Relationships between State Data . . . . . . . . . . . . . . . . 14
4 Notes on Precession 17
9 Subroutine Prototypes 32
9.1 Telescope Pointing Machine . . . . . . . . . . . . . . . . . . . 32
9.2 Proper Motion . . . . . . . . . . . . . . . . . . . . . . . . . . 32
9.3 Cartesian/Spherical Conversions . . . . . . . . . . . . . . . . . 34
9.4 Accessing State Vector Data . . . . . . . . . . . . . . . . . . . 36
9.5 Converting To and From Catalog Data . . . . . . . . . . . . . 37
10 Examples 38
10.1 Galactic to Equatorial . . . . . . . . . . . . . . . . . . . . . . 39
10.2 Precession . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
10.3 Mean to Observed . . . . . . . . . . . . . . . . . . . . . . . . 41
10.4 Tuning the Load . . . . . . . . . . . . . . . . . . . . . . . . . 42
11 Summary 44
12 Acknowledgements 45
List of Figures
1 Telescope Pointing Machine State Diagram . . . . . . . . . . . 46
2 Telescope Pointing Machine State Data . . . . . . . . . . . . . 47
3 Telescope Pointing Machine Time Transitions . . . . . . . . . 48
Pointing Machine Specification 4
List of Tables
1 State Table (part 1) for the Telescope Pointing Machine. . . . 53
2 State Table (part 2) for the Telescope Pointing Machine. . . . 54
3 Execution Times for State Transitions . . . . . . . . . . . . . 55
4 TPM/SLALIB Timing Comparisons . . . . . . . . . . . . . . . 56
Pointing Machine Specification 5
1 Introduction
This document specifies the Telescope Pointing Machine (TPM) software.
This is a table-driven software state machine that produces and reduces co-
ordinates for the purposes of pointing a telescope, but which is generally
applicable to any astronomical coordinate application. We emphasize the
pointing of a telescope to underscore the fact that the Telescope Pointing Ma-
chine is a fast, compact, rigorous, and portable implementation that allows
the user to control and tune the computational load in real time environments
such as telescope control systems. It contains no vendor or platform depen-
dencies, however, and is therefore suitable for any astronomical coordinate
application.
The TPM can transform any set of coordinates (positions and velocities)
between any pair of 21 different states, which include galactic, ecliptic, equa-
torial and topocentric systems, in either direction, with a single subroutine
call.
The TPM uses rigorous vector/matrix methods for its transformations,
avoiding spherical trigonometry and its associated singularity problems. The
transformation between any two states is reversible to within 4 milliarcsec-
onds, and all transformations agree with Starlink’s SLALIB, considered to be
definitive, to within 5 milliarcseconds, with the differences being attributable
to floating point precision limits. SLALIB comparison programs are included
in the TPM distribution. The TPM computes apparent places of stars in
agreement with the United States Naval Observatory’s NOVAS code, used
to produce the Astronomical Almanac, to within 10 milliarcseconds. This
error is comparable to the precision of the data provided by the USNO, and
so the two codes are indistinguishable at this level of error.
The paragraphs below establish a context for subsequent sections. They
define some terms, lay out the big picture, and describe some of the special
features of this software.
In this paper, we often refer to the Explanatory Supplement to the As-
tronomical Almanac (1992), Yallop et al. (1989, AJ, 97, 274), Kaplan et al.
(1989, AJ, 97, 1197), and Aoki et al. (1983, Astronomy and Astrophysics,
128, 263). We will refer to these sources as ES, Yallop, Kaplan, and Aoki.
Pointing Machine Specification 6
Ẋ Ẏ
cos δ∆α = − sin α + cos α
c c
1
+ 2 (Ẋ sin α − Ẏ cos α)(Ẋ cos α + Ẏ sin α) sec δ + ... (1)
c
Ẋ Ẏ Ż
∆δ = − cos α sin δ − sin α sin δ + cos δ
c c c
1
− 2 (Ẋ sin α − Ẏ cos α)2 tan δ
2c
1
+ 2 (Ẋ cos δ cos α + Ẏ cos δ sin α + Ż sin δ)
c
×(Ẋ sin δ cos α + Ẏ sin δ sin α − Ż cos δ) + ... (2)
and
where π is the parallax in arcseconds and (X, Y, Z) are the Earth’s barycen-
tric coordinates.
In vector form, we have (ES Equation 3.325-1)
#
p#2 = p#1 − E (6)
where p#1 is the barycentric target vector, p#2 is the geocentric target vector,
and E # is the barycentric position vector of the Earth. Again, simplicity,
speed, and clarity prevail.
The TPM system uses vector and matrix formulations throughout. No
conversions are done back and forth between Cartesian and spherical nota-
tion. In addition, this software system uses state vectors, not merely position
vectors.
2 State Data
The transformation of coordinates between any two states in Fig. 1 is driven
by 30 numerical quantities. Twelve of these are independent variables, chosen
by the user. The remaining 18 are dependent variables, derived in due course
from the independent variables.
• DUT (seconds of time): the current value of the difference UT1 - UTC,
varying between -0.3 and +0.7 seconds.
• Polar motion X,Y (radians): two angles describing the current wan-
dering of the instantaneous rotation axis of the Earth. Polar motion
affects pointing at about the 0.3” level.
• TDT (Julian date): Terrestrial Dynamical Time, the time used as the
independent variable in geocentric ephemerides.
• TDB (Julian date): Barycentric Dynamical Time, the time used as the
independent variable in solar system barycentric ephemerides.
• UT1 (Julian date): The rotational time scale of the Earth, corrected
for polar motion.
• Nutation matrix: a 3x3 matrix used to account for the small lunar and
solar torques on the Earth.
• Observer’s mean earth-fixed state vector (AU and AU/day): the geo-
centric state vector of the observer, expressed in a reference frame ro-
tating with the earth, referred to the mean geodetic pole.
• Observer’s true earth-fixed state vector (AU and AU/day): the geocen-
tric state vector of the observer, expressed in a reference frame rotating
with the earth, referred to the true geodetic pole. Polar motion is in-
cluded here.
simple subroutine called tpm_data() for initializing the state data and for
computing the fast, medium, slow, and refraction data separately or together.
Figure 3 shows the relationship between the various civil, dynamical,
and rotational times. The TPM subroutine library provides subroutines and
preprocessor macros to execute all the transitions shown in Figure 3.
Figure 4 shows the C structure declaration for the state data.
Pointing Machine Specification 16
where p#0 is the position at time ep, and #v is the velocity of the target. In this
equation, time t is the desired time of observation (i.e. “now” when pointing
a telescope). Time ep is the epoch. Now consider a second coordinate system,
rotated with respect to the first by some time-varying angle θ. In other words,
where θ0 is the angle at time eq and θ̇ is the angular rate of rotation. Time eq
is the equinox. If R(θ) represents the coordinate rotation, and #q the position
in the rotated frame, then
Note that we have three times here: the current time t, the target motion’s
reference time ep, and the coordinate frame’s reference time, eq. All of these
can differ from each other. For example, when using catalog entries to point
a telescope, eq will often be the same as ep (say, J2000), but t will be now.
At the turn of the century, all three would be equal for an instant. When
viewing a comet, on the other hand, an ephemeris will often be generated
for a recent epoch (say, last night or a week ago), but in the reference frame
of J2000. In this case, t will nearly equal ep, but not quite, and both will
differ markedly from eq. All three will differ if one extracts positions from
a reference image exposed in, say, 1990, but using J2000 reference positions,
for an object to be observed in 2008.
Pointing Machine Specification 17
4 Notes on Precession
There are different equinoxes involved in precession in various parts of Fig. 1.
A user-supplied equinox (eq in the C code) is used in T01 and T02. eq is the
starting time in the forward directions (+T01 and +T02), and the ending
time in the reverse direction (-T01 and -T02).
In transition T10, the starting time for the precession is J2000, and the
ending time is “now”, specified by the value of UTC in the state data struc-
ture. These are of course reversed in -T10.
Note that some coordinate transformations require two invocations of
TPM. Consider precession from one equinox to a different equinox (S02 to
S02). There is only one equinox argument to the tpm routine, and in addition,
asking for start and end states to be both S02 will cause TPM to return
without having done anything.
In this example, the user would do S02 to S06 (with the starting equinox)
in the first invocation, leaving the state vector temporarily referred to J2000,
and then do S06 to S02 (with the ending equinox) in the second invocation.
Pointing Machine Specification 18
where ' is the mean obliquity of the ecliptic of date (ES p. 114, Equa-
tion 3.222-1).
The existence of this state, combined with the ability to specify the veloc-
ity vector with values much larger than typical stellar proper motions, allows
a very powerful method for tracking solar system objects such as asteroids,
comets, and planets. These motions may be much more linear in the Ecliptic
frame than in the equatorial frame, thereby ensuring accurate positions for
a longer elapsed time than if the motions were given as rates of change in
Right Ascension and Declination.
s#2 = Qz (−α, 0)Qy (−(90◦ − δ), 0)Qz (−(90◦ − λ), 0)s#1 . (20)
Pointing Machine Specification 22
The E-terms of aberration are added after the rotation to equatorial co-
ordinates, and are subtracted before the inverse rotation to galactic coordi-
nates.
• In removing the E-terms, we must save and restore the true lengths of
#p and #v .
With these modifications, the transition consists of steps (c) and (d) from
the ES p. 185. Note that with our 6-space treatment, steps (a), (b), and (e)
are not required.
Pointing Machine Specification 23
The TPM software includes test programs that reproduce the Yallop and
ES matrices, as well as the modified versions required here. See Appendix A
for details.
s#2 = Q−1
x (' + ∆', 0)Qz (−φ, 0)Qx (', 0)s
#1 (25)
Pointing Machine Specification 25
where ' is the mean obliquity of the ecliptic, ∆' is the nutation in obliquity
of the ecliptic, and φ is the nutation in longitude.
The nutations φ and ∆' are computed using the 108-term trigonometric
series of Kaplan (USNO circular 163, 1981) with the corrections from the ES
p. 116, including the planetary terms of Vondrak, ES, p. 118-119. The mean
obliquity ' is from ES p. 114, Equation 3.222-1.
tell how the direction of a star is affected by polar motion when it is not on
the meridian.
The rigorous Equation 3.27-1 (our Equation 27) is, of course, the form
implemented in the TPM.
Calculation flow
Galactic to FK4 Equatorial S04-S05
FK4 to FK5 Equatorial S05-S06
Ecliptic to FK5 Equatorial S03-S02
Mean to Apparent S06-S11
Apparent to Mean S11-S06
Apparent to Observed S11-S19
Figure 6 shows error histograms for each of the tests. For the Apparent-
to-Observed test, results were discarded if the resulting observed elevation
was lower than 15◦ , so fewer errors are represented in the histogram for that
test.
We see that the TPM matches the SLALIB results in all cases to within
5 milliarcseconds. As with the reversibility test, we attribute the residuals
to LSB variations in the floating point calculations.
See Appendix D for more details.
This figure shows that the TPM system closely matches SLALIB, with
the two systems giving nearly indistinguishable error histograms. The broad
peak of errors in the range of 2-10 milliarcseconds is due to the precision of
the data provided by the U. S. Naval Observatory. The USNO listed the
apparent place Right Ascensions to the nearest 1 millisecond of time, and
Declinations to the nearest 10 milliarcseconds, so we cannot expect agreement
on scales smaller than this.
the part that must be done in every loop, and which cannot easily be broken
down into any finer pieces.
For this timing test, we chose to time the transformation from mean to
observed coordinates, and broke it up into four pieces: the setup for the
mean-to-apparent flow (mappa in SLALIB parlance), the actual mean-to-
apparent flow (mapqk), the setup for the apparent-to-observed flow (aoppa),
and the actual apparent-to-observed flow (aoppat+aopqk). This last flow is
the most important, because it must be done in every loop.
For comparison with the TPM, we chose a “best match” to the SLALIB
flows: for the MAPPA part, we ran tpm_data() with the fast, medium and
slow flags. For the MAPQK part, we ran tpm() from states S06 to S16. For
the AOPPA part, we ran tpm_data() with the fast and refraction flags.
Finally, for the AOPQK part we ran tpm() from states S16 to S19. Table 4
shows the results. For all practical purposes, there is no timing difference be-
tween TPM and SLALIB. SLALIB is a little faster on the infrequent MAPPA
and MAPQK flows, a little slower on the infrequent AOPPA flow and the
hard-real-time AOPQK flow. Both systems execute the time-critical flows
(AOPQK) in well under a millisecond (on the SGI Indy R4400).
Pointing Machine Specification 32
9 Subroutine Prototypes
9.1 Telescope Pointing Machine
The state data management routine is declared as follows:
void tpm_data(struct s_tstate *tstate, int flags)
where tstate points to the state data structure and flags is a bitfield spec-
ifying the desired calculations, whose bits are defined as follows:
Note that the state machine applies all its transformations to the velocity
vector as well as the position vector, so the velocity vector is always correct
for the given machine state. So, for example, equatorial velocities will be
properly converted to galactic longitude and latitude rates of change.
Pointing Machine Specification 34
z = r sin δ (36)
The routine
struct s_v6 v6c2s(struct s_v6 v6)
converts from Cartesian coordinates to spherical by inverting Equations 34-
36:
)
r= x2 + y 2 + z 2 (40)
xẏ − y ẋ
α̇ = (44)
(r cos δ)2
ż − ṙ sin δ
δ̇ = (45)
r cos δ
Note that in Equations 40-45 there can be singularities. We handle these
explicitly, as follows.
3. Finally, if cos δ = 0, then ṙ = ż/ sin δ and either δ̇ = −ẏ/(r sin δ sin α)
or δ̇ = −ẋ/(r sin δ cos α) depending on whether cos α = 0.
Pointing Machine Specification 36
but if you aren’t sure of what type you have it’s never wrong to enforce it:
v6 = v6s2c(v6)
converts from catalog values to state vectors. For C, use either 36525 for
Julian centuries or 36524.21987817305 for tropical centuries.
struct s_v6 v62cat(
double *r, /* Right Ascension in radians */
double *d, /* Declination in radians */
double *rd, /* PM in RA (’’/cy) */
double *dd, /* PM in Dec (’’/cy) */
double *px, /* parallax in arcseconds */
double *rv, /* radial velocity in km/s */
struct s_v6 v6; /* Cartesian state vector tobe converted */
double C) /* number of days per century, tropical or Julian */
10 Examples
In the following examples, we show a few subroutines that act as “wrappers”
around the TPM interface. Note that each varies only slightly from the
others; regardless of the transformation being done, the TPM is invoked in
the same way. The only real difference is in using different start and end
states.
These subroutines are provided with the TPM distribution along with
a main program that calls them, in the file x_tpm_examples.c. The main
program is given here:
#include "astro.h"
lon = 0.0;
lat = d2r(90);
tpm_gal(lon, lat, &r2, &d2);
(void)fprintf(stdout, "tpm_gal (%s,%s)->(%s,%s)\n",
fmt_alpha(lon),
fmt_delta(lat),
fmt_alpha(r2),
fmt_delta(d2));
r1 = 0.0;
d1 = d2r(90);
tpm_pre(r1, d1, &r2, &d2);
(void)fprintf(stdout, "tpm_pre (%s,%s)->(%s,%s)\n",
fmt_alpha(r1),
fmt_delta(d1),
fmt_alpha(r2),
fmt_delta(d2));
r1 = 0.0;
d1 = d2r(90);
tpm_mop(r1, d1, &az, &el);
(void)fprintf(stdout, "tpm_mop (%s,%s)->(%s,%s)\n",
fmt_alpha(r1),
fmt_delta(d1),
fmt_alpha(az),
fmt_delta(el));
return(0);
}
/******************************/
/* set up the target position */
/******************************/
v6 = v6init(SPHERICAL);
v6SetR(v6, 1e9);
v6SetAlpha(v6, lon);
v6SetDelta(v6, lat);
/*************************/
/* don’t need state data */
/*************************/
/******************/
/* invoke the TPM */
/******************/
s1 = TPM_S04;
s2 = TPM_S05;
pvec[s1] = v6;
(void)tpm(pvec, s1, s2, B1950, B1950, &tstate);
v6 = pvec[s2];
v6 = v6c2s(v6); /* convert to spherical */
*r = v6GetAlpha(v6);
*d = v6GetDelta(v6);
return;
}
Pointing Machine Specification 40
10.2 Precession
This example precesses an FK5 J2000 position to date.
/**********************************/
/* precess from FK5 J2000 to date */
/**********************************/
static void
tpm_pre(
double r1, /* RA */
double d1, /* Dec */
double *r2, /* RA */
double *d2) /* Dec */
{
int s1; /* start state */
int s2; /* end state */
struct s_tstate tstate;
struct s_v6 pvec[N_TPM_STATES];
struct s_v6 v6; /* state vector */
/******************************/
/* set up the target position */
/******************************/
v6 = v6init(SPHERICAL);
v6SetR(v6, 1e9);
v6SetAlpha(v6, r1);
v6SetDelta(v6, d1);
/*************************/
/* set up the state data */
/*************************/
tpm_data(&tstate, TPM_INIT);
tstate.utc = utc_now();
tpm_data(&tstate, TPM_ALL);
/******************/
/* invoke the TPM */
/******************/
s1 = TPM_S14;
s2 = TPM_S15;
pvec[s1] = v6;
(void)tpm(pvec, s1, s2, J2000, J2000, &tstate);
v6 = pvec[s2];
v6 = v6c2s(v6); /* convert to spherical */
*r2 = v6GetAlpha(v6);
*d2 = v6GetDelta(v6);
return;
}
Pointing Machine Specification 41
/******************************/
/* set up the target position */
/******************************/
v6 = v6init(SPHERICAL);
v6SetR(v6, 1e9);
v6SetAlpha(v6, r1);
v6SetDelta(v6, d1);
/*************************/
/* set up the state data */
/*************************/
tpm_data(&tstate, TPM_INIT);
tstate.utc = utc_now();
/* choose a location in Wisconsin */
tstate.lon = d2r(-90);
tstate.lat = d2r(43);
tpm_data(&tstate, TPM_ALL);
/******************/
/* invoke the TPM */
/******************/
s1 = TPM_S06;
s2 = TPM_S19;
pvec[s1] = v6;
(void)tpm(pvec, s1, s2, J2000, J2000, &tstate);
v6 = pvec[s2];
v6 = v6c2s(v6); /* convert to spherical */
*az = v6GetAlpha(v6);
*el = v6GetDelta(v6);
return;
}
Pointing Machine Specification 42
ptcs->tstate.utc = utc_now();
if (ptcs->tick % 3600 == 0) {
tpm_data(&ptcs->tstate, TPM_SLOW|TPM_REFRACTION);
}
if (ptcs->tick % 60 == 0) {
tpm_data(&ptcs->tstate, TPM_MEDIUM);
}
tpm_data(&ptcs->tstate, TPM_FAST);
S06 once, and then repeatedly transform the S06 state vector to S19. This
saves about half the time per loop.
By the way, this is another subtle reason why using full 6-D state vec-
tors, and transforming velocities along with positions, is very useful. If only
positions were transformed, and if a target’s space motion was so large that
it needed to be applied continually (e.g. an asteroid), then S06 could not be
used as an intermediate flow point because the space motion would still be
expressed in the frame of S01. Because we transform the velocity to S06 as
well, the space motion updates can be done in S06.
Pointing Machine Specification 44
11 Summary
The Telescope Pointing Machine (TPM) is a fast, accurate, rigorous, com-
pact, modern, and extendible implementation of high-precision astronomical
pointing algorithms.
• Compact: The TPM system runs in the WIYN 3.5m Telescope Control
System, and compiles to an object file size of less than 60 kilobytes.
• Extendible: by adding states and updating the state table, users can
fully integrate new reference frames into the TPM and effectively con-
nect them to all other states.
Pointing Machine Specification 45
12 Acknowledgements
We wish to thank Michael Nastvogel-Wörz of the European Southern Obser-
vatory for performing a timing and accuracy comparison with SLALIB that
pointed out areas for improving the Telescope Pointing Machine, We wish to
thank Dr. Thomas E. Corbin and Mr. Ellis Holdenried of the United States
Naval Observatory’s Astrometry Department for providing the definitive list
of FK5 apparent places. Finally, we wish to thank Dr. Patrick Wallace of
the Rutherford Appleton Laboratory for the generous use of his time and ex-
pertise in discussing many points, both grand and obscure, that are relevant
to high precision astrometric calculations.
Pointing Machine Specification 46
Heliocentric Heliocentric
T03 Heliocentric
Mean FK4 Mean FK5
IAU 1980 Ecliptic
any equinox any equinox
S01 S02 S03
T01 Precess to B1950 T02 Precess to J2000
Heliocentric Heliocentric
Mean FK4 T05 Mean FK5
B1950 FK4-FK5 J2000
S05 S06
S08 S13
T09 Aberration T09 Aberration
S09 S14
S10 S15
T11 Nutation T11 Nutation
Geocentric Topocentric
Apparent FK5 Apparent FK5
current equinox current equinox
S11 S16
T12 Earth’s rotation
Topocentric Topocentric
Observed (HA, Dec) Apparent (HA, Dec)
S20 S17
T13 T13
Topocentric Topocentric Topocentric
Observed WHAM T15 Observed (Az, El) T14 Apparent (Az, El)
(lon, lat) Tilt to Refraction
S21 North S19 S18
FAST
Refraction
TAI UT1 obs_m A, B
Low
compute
Pointing Machine Specification
M cost
E Intermediate
precession nutation in nutation in obliquity D
TDB matrix obliquity longitude compute
I cost
U
M High
compute
cost
nutation
Earth matrix GAST
SLOW
f(UT1)
+ delta-T + delta-ET + delta-TT + 32.184 seconds
GMST ET TDT
Greenwich Mean Ephemeris Time Terrestrial
Sidereal Time Dynamical Time
GAST TDB
Greenwich Apparent Barycentric
Sidereal Time Dynamical Time
+ East Longitude
LAST
Local Apparent
Sidereal Time
struct s_tstate {
/*************************/
/* independent variables */
/*************************/
double utc; /* coordinated universal time, in JD */
int delta_at; /* utc + delta_at = tai */
double delta_ut; /* utc + delta_ut = ut1 */
double lon; /* east longitude in radians */
double lat; /* latitude in radians */
double alt; /* altitude above geoid in meters */
double xpole; /* polar motion in radians */
double ypole; /* polar motion in radians */
double T; /* ambient temperature in Kelvins */
double P; /* ambient pressure in millibars */
double H; /* ambient humidity (0-1) */
double wavelength; /* observing wavelength in microns */
/*****************************/
/* dependent dynamical times */
/*****************************/
double tai; /* international atomic time */
double tdt; /* terrestrial dynamical time */
double tdb; /* barycentric dynamical time */
/************************************/
/* dependent geometrical quantities */
/************************************/
double obliquity; /* the obliquity of the ecliptic */
double nut_lon; /* the nutation in longitude */
double nut_obl; /* the nutation in the obliquity */
struct s_m3 nm; /* the nutation matrix for now */
struct s_m3 pm; /* the precession matrix from J2000 to now */
/******************************/
/* dependent rotational times */
/******************************/
double ut1; /* universal time */
double gmst; /* greenwich mean sidereal time */
double gast; /* greenwich apparent sidereal time */
double last; /* local apparent sidereal time */
/************************/
/* observer ephemerides */
/************************/
struct s_v6 eb; /* barycentric earth state vector */
struct s_v6 eh; /* heliocentric earth state vector */
struct s_v6 obs_m; /* geocentric earth-fixed mean state */
struct s_v6 obs_t; /* geocentric earth-fixed true state */
struct s_v6 obs_s; /* geocentric space-fixed mean state */
/*********************************/
/* dependent physical quantities */
/*********************************/
double refa; /* refraction coefficient */
double refb; /* refraction coefficient */
};
destination state
state S01 S02 S03 S04 S05 S06 S07 S08 S09 S10
S01 +T00 +T01 +T01 +T01 +T01 +T01 +T01 +T01 +T01 +T01
S01 S05 S05 S05 S05 S05 S05 S05 S05 S05
S02 +T02 +T00 -T03 +T02 +T02 +T02 +T02 +T02 +T02 +T02
S06 S02 S03 S06 S06 S06 S06 S06 S06 S06
S03 +T03 +T03 +T00 +T03 +T03 +T03 +T03 +T03 +T03 +T03
S02 S02 S03 S02 S02 S02 S02 S02 S02 S02
S04 +T04 +T04 +T04 +T00 +T04 +T04 +T04 +T04 +T04 +T04
S05 S05 S05 S04 S05 S05 S05 S05 S05 S05
S05 -T01 +T05 +T05 -T04 +T00 +T05 +T05 +T05 +T05 +T05
S01 S06 S06 S04 S05 S06 S06 S06 S06 S06
S06 -T05 -T02 -T02 -T05 -T05 +T00 +T06 +T06 +T06 +T06
S05 S02 S02 S05 S05 S06 S07 S07 S07 S07
S07 -T06 -T06 -T06 -T06 -T06 -T06 +T00 +T08 +T08 +T08
S06 S06 S06 S06 S06 S06 S07 S08 S08 S08
S08 -T08 -T08 -T08 -T08 -T08 -T08 -T08 +T00 +T09 +T09
S07 S07 S07 S07 S07 S07 S07 S08 S09 S09
S09 -T09 -T09 -T09 -T09 -T09 -T09 -T09 -T09 +T00 +T10
S08 S08 S08 S08 S08 S08 S08 S08 S09 S10
S10 -T10 -T10 -T10 -T10 -T10 -T10 -T10 -T10 -T10 +T00
S09 S09 S09 S09 S09 S09 S09 S09 S09 S10
S11 -T11 -T11 -T11 -T11 -T11 -T11 -T11 -T11 -T11 -T11
S10 S10 S10 S10 S10 S10 S10 S10 S10 S10
S12 -T07 -T07 -T07 -T07 -T07 -T07 -T07 -T07 -T07 -T07
S07 S07 S07 S07 S07 S07 S07 S07 S07 S07
S13 -T08 -T08 -T08 -T08 -T08 -T08 -T08 -T08 -T08 -T08
S12 S12 S12 S12 S12 S12 S12 S12 S12 S12
S14 -T09 -T09 -T09 -T09 -T09 -T09 -T09 -T09 -T09 -T09
S13 S13 S13 S13 S13 S13 S13 S13 S13 S13
S15 -T10 -T10 -T10 -T10 -T10 -T10 -T10 -T10 -T10 -T10
S14 S14 S14 S14 S14 S14 S14 S14 S14 S14
S16 -T11 -T11 -T11 -T11 -T11 -T11 -T11 -T11 -T11 -T11
S15 S15 S15 S15 S15 S15 S15 S15 S15 S15
S17 -T12 -T12 -T12 -T12 -T12 -T12 -T12 -T12 -T12 -T12
S16 S16 S16 S16 S16 S16 S16 S16 S16 S16
S18 -T13 -T13 -T13 -T13 -T13 -T13 -T13 -T13 -T13 -T13
S17 S17 S17 S17 S17 S17 S17 S17 S17 S17
S19 -T14 -T14 -T14 -T14 -T14 -T14 -T14 -T14 -T14 -T14
S18 S18 S18 S18 S18 S18 S18 S18 S18 S18
S20 +T13 +T13 +T13 +T13 +T13 +T13 +T13 +T13 +T13 +T13
S19 S19 S19 S19 S19 S19 S19 S19 S19 S19
S21 -T15 -T15 -T15 -T15 -T15 -T15 -T15 -T15 -T15 -T15
S19 S19 S19 S19 S19 S19 S19 S19 S19 S19
destination state
state S11 S12 S13 S14 S15 S16 S17 S18 S19 S20 S21
S01 +T01 +T01 +T01 +T01 +T01 +T01 +T01 +T01 +T01 +T01 +T01
S05 S05 S05 S05 S05 S05 S05 S05 S05 S05 S05
S02 +T02 +T02 +T02 +T02 +T02 +T02 +T02 +T02 +T02 +T02 +T02
S06 S06 S06 S06 S06 S06 S06 S06 S06 S06 S06
S03 +T03 +T03 +T03 +T03 +T03 +T03 +T03 +T03 +T03 +T03 +T03
S02 S02 S02 S02 S02 S02 S02 S02 S02 S02 S02
S04 +T04 +T04 +T04 +T04 +T04 +T04 +T04 +T04 +T04 +T04 +T04
S05 S05 S05 S05 S05 S05 S05 S05 S05 S05 S05
S05 +T05 +T05 +T05 +T05 +T05 +T05 +T05 +T05 +T05 +T05 +T05
S06 S06 S06 S06 S06 S06 S06 S06 S06 S06 S06
S06 +T06 +T06 +T06 +T06 +T06 +T06 +T06 +T06 +T06 +T06 +T06
S07 S07 S07 S07 S07 S07 S07 S07 S07 S07 S07
S07 +T08 +T07 +T07 +T07 +T07 +T07 +T07 +T07 +T07 +T07 +T07
S08 S12 S12 S12 S12 S12 S12 S12 S12 S12 S12
S08 +T09 -T08 -T08 -T08 -T08 -T08 -T08 -T08 -T08 -T08 -T08
S09 S07 S07 S07 S07 S07 S07 S07 S07 S07 S07
S09 +T10 -T09 -T09 -T09 -T09 -T09 -T09 -T09 -T09 -T09 -T09
S10 S08 S08 S08 S08 S08 S08 S08 S08 S08 S08
S10 +T11 -T10 -T10 -T10 -T10 -T10 -T10 -T10 -T10 -T10 -T10
S11 S09 S09 S09 S09 S09 S09 S09 S09 S09 S09
S11 +T00 -T11 -T11 -T11 -T11 -T11 -T11 -T11 -T11 -T11 -T11
S11 S10 S10 S10 S10 S10 S10 S10 S10 S10 S10
S12 -T07 +T00 +T08 +T08 +T08 +T08 +T08 +T08 +T08 +T08 +T08
S07 S12 S13 S13 S13 S13 S13 S13 S13 S13 S13
S13 -T08 -T08 +T00 +T09 +T09 +T09 +T09 +T09 +T09 +T09 +T90
S12 S12 S13 S14 S14 S14 S14 S14 S14 S14 S14
S14 -T09 -T09 -T09 +T00 +T10 +T10 +T10 +T10 +T10 +T10 +T10
S13 S13 S13 S14 S15 S15 S15 S15 S15 S15 S15
S15 -T10 -T10 -T10 -T10 +T00 +T11 +T11 +T11 +T11 +T11 +T11
S14 S14 S14 S14 S15 S16 S16 S16 S16 S16 S16
S16 -T11 -T11 -T11 -T11 -T11 +T00 +T12 +T12 +T12 +T12 +T12
S15 S15 S15 S15 S15 S16 S17 S17 S17 S17 S17
S17 -T12 -T12 -T12 -T12 -T12 -T12 +T00 +T13 +T13 +T13 +T13
S16 S16 S16 S16 S16 S16 S17 S18 S18 S18 S18
S18 -T13 -T13 -T13 -T13 -T13 -T13 -T13 +T00 +T14 +T14 +T14
S17 S17 S17 S17 S17 S17 S17 S18 S19 S19 S19
S19 -T14 -T14 -T14 -T14 -T14 -T14 -T14 -T14 +T00 -T13 +T15
S18 S18 S18 S18 S18 S18 S18 S18 S19 S20 S21
S20 +T13 +T13 +T13 +T13 +T13 +T13 +T13 +T13 +T13 +T00 +T13
S19 S19 S19 S19 S19 S19 S19 S19 S19 S20 S19
S21 -T15 -T15 -T15 -T15 -T15 -T15 -T15 -T15 -T15 -T15 +T00
S19 S19 S19 S19 S19 S19 S19 S19 S19 S19 S21
pgm="x_tpm_timer.$MACHINE"
log="$pgm.out"
N="10000"
cp /dev/null $log
for trans in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
do
/bin/time $pgm -v -n $N -trans $trans 2>> $log
done
s1=1
for s2 in 5 6 7 12 13 14 15 16 17 18 19
do
/bin/time $pgm -v -n $N -flow $s1 $s2 2>> $log
done
Pointing Machine Specification 59
pgm="x_tpm.$MACHINE"
$pgm | grep err | awk ’{print NR, $NF}’ | $HIST > $pgm.hist
$WINDOW < $pgm.hist > $pgm.hist.lg
Pointing Machine Specification 60
where eq is the catalog equinox, ep is the epoch of proper motions, and utc is
the time for which a position is to be calculated. For each axis of the grid, a
value is chosen at random, with uniform probability, from the ranges shown
in Section 8.2. The user can select the number of catalog entries generated;
we chose 105 .
A separate program makes each of the comparison calculations: