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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
/*****************************************************************************
* Johns Hopkins University
* Center For Astrophysical Sciences
* FUSE
*****************************************************************************
*
*
* From Modified Julian Day and RA,DEC of target,
* computes Heliocentic Modified Julian Day
*
* Uses slalib to compute the light time delay along the target direction.
*
*
* History: 10/06/04 bjg
*
****************************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <math.h>
#ifdef CFORTRAN
#include "cfortran.h"
PROTOCCALLSFSUB6(SLA_DJCL, sla_djcl, DOUBLE, PINT, PINT, PINT, PDOUBLE, \
PINT)
#define slaDjcl(DJM, IY, IM, ID, FD, J) \
CCALLSFSUB6(SLA_DJCL, sla_djcl, DOUBLE, PINT, PINT, PINT, PDOUBLE, \
PINT, DJM, IY, IM, ID, FD, J)
PROTOCCALLSFSUB6(SLA_CALYD, sla_calyd, INT, INT, INT, PINT, PINT, \
PINT)
#define slaCalyd(IY, IM, ID, NY, ND, J) \
CCALLSFSUB6(SLA_CALYD, sla_calyd, INT, INT, INT, PINT, PINT, \
PINT, IY, IM, ID, NY, ND, J)
PROTOCCALLSFSUB7(SLA_ECOR, sla_ecor, FLOAT, FLOAT, INT, INT, FLOAT, PFLOAT, \
PFLOAT)
#define slaEcor(RM, DM, IY, ID, FD, RV, TL) \
CCALLSFSUB7(SLA_ECOR, sla_ecor, FLOAT, FLOAT, INT, INT, FLOAT, PFLOAT, \
PFLOAT, RM, DM, IY, ID, FD, RV, TL)
#else
#include "slalib.h"
#include "slamac.h"
#endif
#include "calfuse.h"
#define DEG2RAD (M_PI/180.0f)
double gethmjd(double mjd, int ra_h, int ra_m, float ra_s, int dec_d, int dec_m, float dec_s){
int status;
int year, month, day;
int jyear, jday;
double frac;
float ra, dec;
float lt, v;
ra = ( ra_h + ra_m/60.0 + ra_s/3600.0 ) * 15.0 * DEG2RAD;
dec = ( dec_d + dec_m/60.0 + dec_s/3600.0 ) * DEG2RAD;
#ifdef CFORTRAN
slaDjcl(mjd, year, month, day, frac, status);
#else
slaDjcl(mjd, &year, &month, &day, &frac, &status);
#endif
#ifdef CFORTRAN
slaCalyd(year, month, day, jyear, jday, status);
#else
slaCalyd(year, month, day, &jyear, &jday, &status);
#endif
#ifdef CFORTRAN
slaEcor(ra, dec, jyear, jday, (float) frac, v, lt);
#else
slaEcor(ra, dec, jyear, jday, (float) frac, &v, <);
#endif
return (double) (mjd+lt/(3600.0*24.0));
}
|