aboutsummaryrefslogtreecommitdiff
path: root/noao/astutil/asttools/precessgj.x
blob: 4b836c350fd5944b01135c02bace2846ce9aaa80 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
include	<math.h>

# PRECESSGJ -- Precess astronomical coordinates from epoch1 to epoch2.
# Original IRAF/FORTRAN by G. Jacoby (NOAO).
# Modified by by F. Valdes for IRAF/SPP (NOAO), March 1986

procedure precessgj (ra1, dec1, epoch1, ra2, dec2, epoch2)

double	ra1, dec1, epoch1	# Input coordinates
double	ra2, dec2, epoch2	# Output coordinates

double	t, tau, theta, zeta, z, ra, dec, a, ap, test
bool	fp_equald()

begin
	if (fp_equald (epoch1, epoch2)) {
	    ra2 = ra1
	    dec2 = dec1
	    return
	}

	t = (epoch2 - epoch1) / 100.
	tau = (epoch1 - 1850.) / 100.

	theta = t * ((2005.11d0 - 0.85 * tau) - t * (0.43 + t * 0.041)) / 3600.
	zeta  = t * ((2303.55d0 + 1.40 * tau) + t * (0.30 + t * 0.017)) / 3600.
	z = zeta + t * t * 0.79 / 3600.

	ra = DEGTORAD (ra1 * 15.0)
	dec = DEGTORAD (dec1)
	theta = DEGTORAD (theta)
	zeta = DEGTORAD (zeta)
	z = DEGTORAD (z)

	a = ra + zeta
	dec2 = asin (cos(dec) * cos(a) * sin(theta) + sin(dec) * cos(theta))
	ap = asin (cos(dec) * sin(a) / cos(dec2))
	test = (cos(dec)*cos(a)*cos(theta) - sin(dec)*sin(theta)) / cos(dec2)

	if (test < 0.)
	    ap = PI - ap
	ra2 = ap + z
	if (ra2 < 0.)
	    ra2 = ra2 + TWOPI

	ra2 = RADTODEG (ra2) / 15.0
	dec2 = RADTODEG (dec2)
end