FACT++  1.0
palFk45z.c
Go to the documentation of this file.
1 /*
2 *+
3 * Name:
4 * palFk45z
5 
6 * Purpose:
7 * Convert B1950.0 FK4 star data to J2000.0 FK5 assuming zero
8 * proper motion in the FK5 frame
9 
10 * Language:
11 * Starlink ANSI C
12 
13 * Type of Module:
14 * Library routine
15 
16 * Invocation:
17 * palFk45z( double r1950, double d1950, double bepoch, double *r2000,
18 * double *d2000 )
19 
20 * Arguments:
21 * r1950 = double (Given)
22 * B1950.0 FK4 RA at epoch (radians).
23 * d1950 = double (Given)
24 * B1950.0 FK4 Dec at epoch (radians).
25 * bepoch = double (Given)
26 * Besselian epoch (e.g. 1979.3)
27 * r2000 = double (Returned)
28 * J2000.0 FK5 RA (Radians).
29 * d2000 = double (Returned)
30 * J2000.0 FK5 Dec(Radians).
31 
32 * Description:
33 * Convert B1950.0 FK4 star data to J2000.0 FK5 assuming zero
34 * proper motion in the FK5 frame (double precision)
35 *
36 * This function converts stars from the Bessel-Newcomb, FK4
37 * system to the IAU 1976, FK5, Fricke system, in such a
38 * way that the FK5 proper motion is zero. Because such a star
39 * has, in general, a non-zero proper motion in the FK4 system,
40 * the routine requires the epoch at which the position in the
41 * FK4 system was determined.
42 *
43 * The method is from Appendix 2 of Ref 1, but using the constants
44 * of Ref 4.
45 
46 * Notes:
47 * - The epoch BEPOCH is strictly speaking Besselian, but if a
48 * Julian epoch is supplied the result will be affected only to
49 * a negligible extent.
50 *
51 * - Conversion from Besselian epoch 1950.0 to Julian epoch 2000.0
52 * only is provided for. Conversions involving other epochs will
53 * require use of the appropriate precession, proper motion, and
54 * E-terms routines before and/or after palFk45z is called.
55 *
56 * - In the FK4 catalogue the proper motions of stars within 10
57 * degrees of the poles do not embody the differential E-term effect
58 * and should, strictly speaking, be handled in a different manner
59 * from stars outside these regions. However, given the general lack
60 * of homogeneity of the star data available for routine astrometry,
61 * the difficulties of handling positions that may have been
62 * determined from astrometric fields spanning the polar and non-polar
63 * regions, the likelihood that the differential E-terms effect was not
64 * taken into account when allowing for proper motion in past
65 * astrometry, and the undesirability of a discontinuity in the
66 * algorithm, the decision has been made in this routine to include the
67 * effect of differential E-terms on the proper motions for all stars,
68 * whether polar or not. At epoch 2000, and measuring on the sky rather
69 * than in terms of dRA, the errors resulting from this simplification
70 * are less than 1 milliarcsecond in position and 1 milliarcsecond per
71 * century in proper motion.
72 *
73 * References:
74 * - Aoki,S., et al, 1983. Astron.Astrophys., 128, 263.
75 * - Smith, C.A. et al, 1989. "The transformation of astrometric
76 * catalog systems to the equinox J2000.0". Astron.J. 97, 265.
77 * - Yallop, B.D. et al, 1989. "Transformation of mean star places
78 * from FK4 B1950.0 to FK5 J2000.0 using matrices in 6-space".
79 * Astron.J. 97, 274.
80 * - Seidelmann, P.K. (ed), 1992. "Explanatory Supplement to
81 * the Astronomical Almanac", ISBN 0-935702-68-7.
82 
83 * Authors:
84 * PTW: Pat Wallace (STFC)
85 * DSB: David Berry (JAC, Hawaii)
86 * {enter_new_authors_here}
87 
88 * History:
89 * 2012-02-10 (DSB):
90 * Initial version with documentation taken from Fortran SLA
91 * Adapted with permission from the Fortran SLALIB library.
92 * {enter_further_changes_here}
93 
94 * Copyright:
95 * Copyright (C) 1998 Rutherford Appleton Laboratory
96 * Copyright (C) 2012 Science and Technology Facilities Council.
97 * All Rights Reserved.
98 
99 * Licence:
100 * This program is free software: you can redistribute it and/or
101 * modify it under the terms of the GNU Lesser General Public
102 * License as published by the Free Software Foundation, either
103 * version 3 of the License, or (at your option) any later
104 * version.
105 *
106 * This program is distributed in the hope that it will be useful,
107 * but WITHOUT ANY WARRANTY; without even the implied warranty of
108 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
109 * GNU Lesser General Public License for more details.
110 *
111 * You should have received a copy of the GNU Lesser General
112 * License along with this program. If not, see
113 * <http://www.gnu.org/licenses/>.
114 
115 * Bugs:
116 * {note_any_bugs_here}
117 *-
118 */
119 
120 #include "pal.h"
121 #include "palmac.h"
122 #include "pal1sofa.h"
123 
124 void palFk45z( double r1950, double d1950, double bepoch, double *r2000,
125  double *d2000 ){
126 
127 /* Local Variables: */
128  double w;
129  int i;
130  int j;
131  double r0[3], a1[3], v1[3], v2[6]; /* Position and position+velocity vectors */
132 
133 
134 /* CANONICAL CONSTANTS (see references) */
135 
136 /* Vector A. */
137  double a[3] = { -1.62557E-6, -0.31919E-6, -0.13843E-6 };
138 
139 /* Vectors Adot. */
140  double ad[3] = { 1.245E-3, -1.580E-3, -0.659E-3 };
141 
142 /* Matrix M (only half of which is needed here). */
143  double em[6][3] = { {0.9999256782, -0.0111820611, -0.0048579477},
144  {0.0111820610, 0.9999374784, -0.0000271765},
145  {0.0048579479, -0.0000271474, 0.9999881997},
146  {-0.000551, -0.238565, 0.435739},
147  {0.238514, -0.002667, -0.008541},
148  {-0.435623, 0.012254, 0.002117} };
149 
150 
151 /* Spherical to Cartesian. */
152  eraS2c( r1950, d1950, r0 );
153 
154 /* Adjust vector A to give zero proper motion in FK5. */
155  w = ( bepoch - 1950.0 )/PAL__PMF;
156  for( i = 0; i < 3; i++ ) {
157  a1[ i ] = a[ i ] + w*ad[ i ];
158  }
159 
160 /* Remove e-terms. */
161  w = r0[ 0 ]*a1[ 0 ] + r0[ 1 ]*a1[ 1 ] + r0[ 2 ]*a1[ 2 ];
162  for( i = 0; i < 3; i++ ) {
163  v1[ i ] = r0[ i ] - a1[ i ] + w*r0[ i ];
164  }
165 
166 /* Convert position vector to Fricke system. */
167  for( i = 0; i < 6; i++ ) {
168  w = 0.0;
169  for( j = 0; j < 3; j++ ) {
170  w += em[ i ][ j ]*v1[ j ];
171  }
172  v2[ i ] = w;
173  }
174 
175 /* Allow for fictitious proper motion in FK4. */
176  w = ( palEpj( palEpb2d( bepoch ) ) - 2000.0 )/PAL__PMF;
177  for( i = 0; i < 3; i++ ) {
178  v2[ i ] += w*v2[ i + 3 ];
179  }
180 
181 /* Revert to spherical coordinates. */
182  eraC2s( v2, &w, d2000 );
183  *r2000 = eraAnp( w );
184 }
185 
186 
double palEpj(double date)
Definition: palOne2One.c:1169
int i
Definition: db_dim_client.c:21
void eraS2c(double theta, double phi, double c[3])
Definition: s2c.c:3
void eraC2s(double p[3], double *theta, double *phi)
Definition: c2s.c:3
#define PAL__PMF
Definition: palmac.h:110
double eraAnp(double a)
Definition: anp.c:3
void palFk45z(double r1950, double d1950, double bepoch, double *r2000, double *d2000)
Definition: palFk45z.c:124
double palEpb2d(double epb)
Definition: palOne2One.c:1129