1 | #include "slalib.h"
|
---|
2 | #include "slamac.h"
|
---|
3 | void slaFk45z ( double r1950, double d1950, double bepoch,
|
---|
4 | double *r2000, double *d2000 )
|
---|
5 | /*
|
---|
6 | ** - - - - - - - - -
|
---|
7 | ** s l a F k 4 5 z
|
---|
8 | ** - - - - - - - - -
|
---|
9 | **
|
---|
10 | ** Convert B1950.0 FK4 star data to J2000.0 FK5 assuming zero
|
---|
11 | ** proper motion in the FK5 frame (double precision)
|
---|
12 | **
|
---|
13 | ** This routine converts stars from the old, Bessel-Newcomb, FK4
|
---|
14 | ** system to the new, IAU 1976, FK5, Fricke system, in such a
|
---|
15 | ** way that the FK5 proper motion is zero. Because such a star
|
---|
16 | ** has, in general, a non-zero proper motion in the FK4 system,
|
---|
17 | ** the routine requires the epoch at which the position in the
|
---|
18 | ** FK4 system was determined.
|
---|
19 | **
|
---|
20 | ** The method is from Appendix 2 of Ref 1, but using the constants
|
---|
21 | ** of Ref 4.
|
---|
22 | **
|
---|
23 | ** Given:
|
---|
24 | ** r1950,d1950 double B1950.0 FK4 RA,Dec at epoch (rad)
|
---|
25 | ** bepoch double Besselian epoch (e.g. 1979.3)
|
---|
26 | **
|
---|
27 | ** Returned:
|
---|
28 | ** *r2000,*d2000 double J2000.0 FK5 RA,Dec (rad)
|
---|
29 | **
|
---|
30 | ** Notes:
|
---|
31 | **
|
---|
32 | ** 1) The epoch BEPOCH is strictly speaking Besselian, but
|
---|
33 | ** if a Julian epoch is supplied the result will be
|
---|
34 | ** affected only to a negligible extent.
|
---|
35 | **
|
---|
36 | ** 2) Conversion from Besselian epoch 1950.0 to Julian epoch
|
---|
37 | ** 2000.0 only is provided for. Conversions involving other
|
---|
38 | ** epochs will require use of the appropriate precession,
|
---|
39 | ** proper motion, and E-terms routines before and/or
|
---|
40 | ** after FK45Z is called.
|
---|
41 | **
|
---|
42 | ** 3) In the FK4 catalogue the proper motions of stars within
|
---|
43 | ** 10 degrees of the poles do not embody the differential
|
---|
44 | ** E-term effect and should, strictly speaking, be handled
|
---|
45 | ** in a different manner from stars outside these regions.
|
---|
46 | ** However, given the general lack of homogeneity of the star
|
---|
47 | ** data available for routine astrometry, the difficulties of
|
---|
48 | ** handling positions that may have been determined from
|
---|
49 | ** astrometric fields spanning the polar and non-polar regions,
|
---|
50 | ** the likelihood that the differential E-terms effect was not
|
---|
51 | ** taken into account when allowing for proper motion in past
|
---|
52 | ** astrometry, and the undesirability of a discontinuity in
|
---|
53 | ** the algorithm, the decision has been made in this routine to
|
---|
54 | ** include the effect of differential E-terms on the proper
|
---|
55 | ** motions for all stars, whether polar or not. At epoch 2000,
|
---|
56 | ** and measuring on the sky rather than in terms of dRA, the
|
---|
57 | ** errors resulting from this simplification are less than
|
---|
58 | ** 1 milliarcsecond in position and 1 milliarcsecond per
|
---|
59 | ** century in proper motion.
|
---|
60 | **
|
---|
61 | ** References:
|
---|
62 | **
|
---|
63 | ** 1 Aoki,S., et al, 1983. Astron. Astrophys., 128, 263.
|
---|
64 | **
|
---|
65 | ** 2 Smith, C.A. et al, 1989. "The transformation of astrometric
|
---|
66 | ** catalog systems to the equinox J2000.0". Astron.J. 97, 265.
|
---|
67 | **
|
---|
68 | ** 3 Yallop, B.D. et al, 1989. "Transformation of mean star places
|
---|
69 | ** from FK4 B1950.0 to FK5 J2000.0 using matrices in 6-space".
|
---|
70 | ** Astron.J. 97, 274.
|
---|
71 | **
|
---|
72 | ** 4 Seidelmann, P.K. (ed), 1992. "Explanatory Supplement to
|
---|
73 | ** the Astronomical Almanac", ISBN 0-935702-68-7.
|
---|
74 | **
|
---|
75 | ** Called: slaDcs2c, slaEpj, slaEpb2d, slaDcc2s, slaDranrm
|
---|
76 | **
|
---|
77 | ** Defined in slamac.h: D2PI
|
---|
78 | **
|
---|
79 | ** Last revision: 21 September 1998
|
---|
80 | **
|
---|
81 | ** Copyright P.T.Wallace. All rights reserved.
|
---|
82 | */
|
---|
83 | {
|
---|
84 | double w;
|
---|
85 | int i, j;
|
---|
86 |
|
---|
87 | /* Position and position+velocity vectors */
|
---|
88 | double r0[3], a1[3], v1[3], v2[6];
|
---|
89 |
|
---|
90 | /* Radians per year to arcsec per century */
|
---|
91 | static double pmf = 100.0 * 60.0 * 60.0 * 360.0 / D2PI;
|
---|
92 |
|
---|
93 | /*
|
---|
94 | ** Canonical constants (see references)
|
---|
95 | */
|
---|
96 |
|
---|
97 | /* vectors a and adot, and matrix m (only half of which is needed here) */
|
---|
98 | static double a[3] = { -1.62557e-6, -0.31919e-6, -0.13843e-6 };
|
---|
99 | static double ad[3] = { 1.245e-3, -1.580e-3, -0.659e-3 };
|
---|
100 | static double em[6][3] =
|
---|
101 | {
|
---|
102 | { 0.9999256782, -0.0111820611, -0.0048579477 },
|
---|
103 | { 0.0111820610, 0.9999374784, -0.0000271765 },
|
---|
104 | { 0.0048579479, -0.0000271474, 0.9999881997 },
|
---|
105 | { -0.000551, -0.238565, 0.435739 },
|
---|
106 | { 0.238514, -0.002667, -0.008541 },
|
---|
107 | { -0.435623, 0.012254, 0.002117 }
|
---|
108 | };
|
---|
109 |
|
---|
110 | /* Spherical to Cartesian */
|
---|
111 | slaDcs2c ( r1950, d1950, r0 );
|
---|
112 |
|
---|
113 | /* Adjust vector a to give zero proper motion in FK5 */
|
---|
114 | w = ( bepoch - 1950.0 ) / pmf;
|
---|
115 | for ( i = 0; i < 3; i++ ) {
|
---|
116 | a1[i] = a[i] + w * ad[i];
|
---|
117 | }
|
---|
118 |
|
---|
119 | /* Remove e-terms */
|
---|
120 | w = r0[0] * a1[0] + r0[1] * a1[1] + r0[2] * a1[2];
|
---|
121 | for ( i = 0; i < 3; i++ ) {
|
---|
122 | v1[i] = r0[i] - a1[i] + w * r0[i];
|
---|
123 | }
|
---|
124 |
|
---|
125 | /* Convert position vector to Fricke system */
|
---|
126 | for ( i = 0; i < 6; i++ ) {
|
---|
127 | w = 0.0;
|
---|
128 | for ( j = 0; j < 3; j++ ) {
|
---|
129 | w += em[i][j] * v1[j];
|
---|
130 | }
|
---|
131 | v2[i] = w;
|
---|
132 | }
|
---|
133 |
|
---|
134 | /* Allow for fictitious proper motion in FK4 */
|
---|
135 | w = ( slaEpj ( slaEpb2d ( bepoch ) ) - 2000.0 ) / pmf;
|
---|
136 | for ( i = 0; i < 3; i++ ) {
|
---|
137 | v2[i] += w * v2[i+3];
|
---|
138 | }
|
---|
139 |
|
---|
140 | /* Revert to spherical coordinates */
|
---|
141 | slaDcc2s ( v2, &w, d2000 );
|
---|
142 | *r2000 = slaDranrm ( w );
|
---|
143 | }
|
---|