| 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 | } | 
|---|