22 #include <lal/LALStdlib.h>
23 #include <lal/AVFactories.h>
35 REAL8 gmsthours, lmsthours;
38 LALPlaceAndDate place_and_date;
44 INT4 dayofmonth, monthofyear;
46 LALLeapSecAccuracy accuracy = LALLEAPSEC_STRICT;
47 LALMSTUnitsAndAcc units_and_acc;
55 printf(
"Usage: TestLMST testid debug_level\n");
56 printf(
" testid = [1,2]\n");
57 printf(
" debug_level = [0,1,2]\n");
61 testid = atoi(argv[1]);
69 date.unixDate.tm_sec = 0;
70 date.unixDate.tm_min = 0;
71 date.unixDate.tm_hour = 0;
72 date.unixDate.tm_mday = 0;
73 date.unixDate.tm_mon = 0;
74 date.unixDate.tm_year = 0;
75 date.unixDate.tm_wday = 0;
76 date.unixDate.tm_yday = 0;
77 date.unixDate.tm_isdst = 0;
79 date.unixDate.tm_sec = 0;
80 date.unixDate.tm_min = 0;
81 date.unixDate.tm_hour = 0;
82 date.unixDate.tm_mday = 0;
83 date.unixDate.tm_mon = 0;
84 date.unixDate.tm_year = 0;
85 date.unixDate.tm_wday = 0;
86 date.unixDate.tm_yday = 0;
87 date.unixDate.tm_isdst = 0;
89 printf(
"TEST of LALGMST1 routine\n");
90 printf(
"========================\n");
98 date.unixDate.tm_sec = 0;
99 date.unixDate.tm_min = 0;
100 date.unixDate.tm_hour = 0;
101 date.unixDate.tm_mday = 16;
102 date.unixDate.tm_mon = 10;
103 date.unixDate.tm_year = 94;
106 date.unixDate.tm_wday = 0;
107 date.unixDate.tm_yday = 0;
108 date.unixDate.tm_isdst = 0;
115 place_and_date.p_detector = &detector;
116 place_and_date.p_date = &
date;
117 LALGMST1(&
status, &gmsthours, &
date, MST_HRS);
118 LALLMST1(&
status, &lmsthours, &place_and_date, MST_HRS);
121 LALSecsToLALDate(&
status, &mstdate, gmstsecs);
122 strftime(timestr, 64,
"%Hh %Mm %S", &(mstdate.unixDate));
123 sprintf(tmpstr,
"%fs", mstdate.residualNanoSeconds * 1.e-9);
124 strcat(timestr, tmpstr+1);
127 printf(
" Time = %s\n", datestamp->
data);
128 printf(
"gmsthours = %f = %s\n", gmsthours, timestr);
129 printf(
" expect: 3.655728 = 03h 39m 20.6222s \n");
130 printf(
"lmsthours = %f\n", lmsthours);
133 printf(
"Using the GPStoGMST1() and GPStoLMST1() routines instead:\n");
134 units_and_acc.units = MST_SEC;
135 units_and_acc.accuracy = LALLEAPSEC_STRICT;
136 LALGPStoGMST1(&
status, &gmstsecs, &gpstime, &units_and_acc);
137 units_and_acc.units = MST_HRS;
138 LALGPStoGMST1(&
status, &gmsthours, &gpstime, &units_and_acc);
139 LALSecsToLALDate(&
status, &mstdate, gmstsecs);
140 strftime(timestr, 64,
"%Hh %Mm %S", &(mstdate.unixDate));
141 sprintf(tmpstr,
"%fs", mstdate.residualNanoSeconds * 1.e-9);
142 strcat(timestr, tmpstr+1);
146 place_and_gps.
p_gps = &gpstime;
147 units_and_acc.units = MST_HRS;
148 LALGPStoLMST1(&
status, &lmsthours, &place_and_gps, &units_and_acc);
149 printf(
" Time = %s\n", datestamp->
data);
150 printf(
"gmsthours = %f = %s\n", gmsthours, timestr);
151 printf(
" expect: 3.655728 = 03h 39m 20.6222s \n");
152 printf(
"lmsthours = %f\n", lmsthours);
157 printf(
"\nConverting GPS to LMST the long way instead:\n");
158 LALGPStoUTC(&
status, &
date, &gpstime, &accuracy);
159 LALGMST1(&
status, &gmsthours, &
date, MST_HRS);
160 LALLMST1(&
status, &lmsthours, &place_and_date, MST_HRS);
163 LALSecsToLALDate(&
status, &mstdate, gmstsecs);
164 strftime(timestr, 64,
"%Hh %Mm %S", &(mstdate.unixDate));
165 sprintf(tmpstr,
"%fs", mstdate.residualNanoSeconds * 1.e-9);
166 strcat(timestr, tmpstr+1);
169 printf(
" Time = %s\n", datestamp->
data);
170 printf(
"gmsthours = %f = %s\n", gmsthours, timestr);
171 printf(
" expect: 3.655728 = 03h 39m 20.6222s \n");
172 printf(
"lmsthours = %f\n", lmsthours);
179 printf(
"\n* * * * * * * * * * * * * * * * * *\n\n");
180 date.residualNanoSeconds = 73600000;
181 date.unixDate.tm_sec = 3;
182 date.unixDate.tm_min = 19;
183 date.unixDate.tm_hour = 2;
184 date.unixDate.tm_mday = 17;
185 date.unixDate.tm_mon = 7;
186 date.unixDate.tm_year = 94;
192 place_and_date.p_detector = &detector;
193 place_and_date.p_date = &
date;
194 LALGMST1(&
status, &gmsthours, &
date, MST_HRS);
195 LALLMST1(&
status, &lmsthours, &place_and_date, MST_HRS);
198 LALSecsToLALDate(&
status, &mstdate, gmstsecs);
199 strftime(timestr, 64,
"%Hh %Mm %S", &(mstdate.unixDate));
200 sprintf(tmpstr,
"%fs", mstdate.residualNanoSeconds * 1.e-9);
201 strcat(timestr, tmpstr+1);
204 printf(
" Time = %s\n", datestamp->
data);
205 printf(
"gmsthours = %f = %s\n", gmsthours, timestr);
206 printf(
" expect: 0h = 00h 00m 00s \n");
208 printf(
"\nUsing the GPStoGMST1() and GPStoLMST1() routines instead:\n");
209 units_and_acc.units = MST_SEC;
210 LALGPStoGMST1(&
status, &gmstsecs, &gpstime, &units_and_acc);
211 LALSecsToLALDate(&
status, &mstdate, gmstsecs);
212 strftime(timestr, 64,
"%Hh %Mm %S", &(mstdate.unixDate));
213 sprintf(tmpstr,
"%fs", mstdate.residualNanoSeconds * 1.e-9);
214 strcat(timestr, tmpstr+1);
218 place_and_gps.
p_gps = &gpstime;
219 units_and_acc.units = MST_HRS;
220 LALGPStoLMST1(&
status, &lmsthours, &place_and_gps, &units_and_acc);
221 printf(
" Time = %s\n", datestamp->
data);
222 printf(
"gmsthours = %f = %s\n", gmsthours, timestr);
223 printf(
" expect: 0h = 00h 00m 00s \n");
224 printf(
"lmsthours = %f\n", lmsthours);
228 printf(
"\nConverting GPS to LMST the long way instead:\n");
229 LALGPStoUTC(&
status, &
date, &gpstime, &accuracy);
230 LALGMST1(&
status, &gmsthours, &
date, MST_HRS);
231 LALLMST1(&
status, &lmsthours, &place_and_date, MST_HRS);
234 LALSecsToLALDate(&
status, &mstdate, gmstsecs);
235 strftime(timestr, 64,
"%Hh %Mm %S", &(mstdate.unixDate));
236 sprintf(tmpstr,
"%fs", mstdate.residualNanoSeconds * 1.e-9);
237 strcat(timestr, tmpstr+1);
240 printf(
" Time = %s\n", datestamp->
data);
241 printf(
"gmsthours = %f = %s\n", gmsthours, timestr);
242 printf(
" expect: 0h = 00h 00m 00s \n");
243 printf(
"lmsthours = %f\n", lmsthours);
250 printf(
"\n* * * * * * * * * * * * * * * * * *\n\n");
251 date.residualNanoSeconds = 0;
252 date.unixDate.tm_sec = 0;
253 date.unixDate.tm_min = 0;
254 date.unixDate.tm_hour = 0;
255 date.unixDate.tm_mday = 17;
256 date.unixDate.tm_mon = 4;
257 date.unixDate.tm_year = 94;
263 place_and_date.p_detector = &detector;
264 place_and_date.p_date = &
date;
266 LALGMST1(&
status, &gmsthours, &
date, MST_HRS);
267 LALLMST1(&
status, &lmsthours, &place_and_date, MST_HRS);
270 LALSecsToLALDate(&
status, &mstdate, gmstsecs);
271 strftime(timestr, 64,
"%Hh %Mm %S", &(mstdate.unixDate));
272 sprintf(tmpstr,
"%fs", mstdate.residualNanoSeconds * 1.e-9);
273 strcat(timestr, tmpstr+1);
276 printf(
" Time = %s\n", datestamp->
data);
277 printf(
"gmsthours = %f = %s\n", gmsthours, timestr);
278 printf(
" expect: 15.63105328 = 15h 37m 51.7918s\n");
281 printf(
"Using the GPStoGMST1() and GPStoLMST1() routines instead:\n");
282 units_and_acc.units = MST_SEC;
283 LALGPStoGMST1(&
status, &gmstsecs, &gpstime, &units_and_acc);
284 LALSecsToLALDate(&
status, &mstdate, gmstsecs);
285 strftime(timestr, 64,
"%Hh %Mm %S", &(mstdate.unixDate));
286 sprintf(tmpstr,
"%fs", mstdate.residualNanoSeconds * 1.e-9);
287 strcat(timestr, tmpstr+1);
291 place_and_gps.
p_gps = &gpstime;
292 units_and_acc.units = MST_HRS;
293 LALGPStoLMST1(&
status, &lmsthours, &place_and_gps, &units_and_acc);
294 printf(
" Time = %s\n", datestamp->
data);
295 printf(
"gmsthours = %f = %s\n", gmsthours, timestr);
296 printf(
" expect: 15.63105328 = 15h 37m 51.7918s\n");
297 printf(
"lmsthours = %f\n", lmsthours);
302 printf(
"\n* * * * * * * * * * * * * * * * * *\n\n");
303 date.residualNanoSeconds = 0;
304 date.unixDate.tm_sec = 0;
305 date.unixDate.tm_min = 0;
306 date.unixDate.tm_hour = 1;
307 date.unixDate.tm_mday = 17;
308 date.unixDate.tm_mon = 4;
309 date.unixDate.tm_year = 94;
314 place_and_date.p_detector = &detector;
315 place_and_date.p_date = &
date;
317 LALGMST1(&
status, &gmsthours, &
date, MST_HRS);
318 LALLMST1(&
status, &lmsthours, &place_and_date, MST_HRS);
321 LALSecsToLALDate(&
status, &mstdate, gmstsecs);
322 strftime(timestr, 64,
"%Hh %Mm %S", &(mstdate.unixDate));
323 sprintf(tmpstr,
"%fs", mstdate.residualNanoSeconds * 1.e-9);
324 strcat(timestr, tmpstr+1);
327 printf(
" Time = %s\n", datestamp->
data);
328 printf(
"gmsthours = %f = %s\n", gmsthours, timestr);
329 printf(
" expect: 16.63105328 = 16h 37m 51.7918s\n");
331 printf(
"\nUsing the GPStoGMST1() and GPStoLMST1() routines instead:\n");
332 units_and_acc.units = MST_SEC;
333 LALGPStoGMST1(&
status, &gmstsecs, &gpstime, &units_and_acc);
334 LALSecsToLALDate(&
status, &mstdate, gmstsecs);
335 strftime(timestr, 64,
"%Hh %Mm %S", &(mstdate.unixDate));
336 sprintf(tmpstr,
"%fs", mstdate.residualNanoSeconds * 1.e-9);
337 strcat(timestr, tmpstr+1);
341 place_and_gps.
p_gps = &gpstime;
342 units_and_acc.units = MST_HRS;
343 LALGPStoLMST1(&
status, &lmsthours, &place_and_gps, &units_and_acc);
344 printf(
" Time = %s\n", datestamp->
data);
345 printf(
"gmsthours = %f = %s\n", gmsthours, timestr);
346 printf(
" expect: 16.63105328 = 16h 37m 51.7918s\n");
347 printf(
"lmsthours = %f\n", lmsthours);
356 printf(
"\n* * * * * * * * * * * * * * * * * *\n\n");
357 date.residualNanoSeconds = 744800000;
358 date.unixDate.tm_sec = 46;
359 date.unixDate.tm_min = 20;
360 date.unixDate.tm_hour = 8;
361 date.unixDate.tm_mday = 17;
362 date.unixDate.tm_mon = 4;
363 date.unixDate.tm_year = 94;
369 place_and_date.p_detector = &detector;
370 place_and_date.p_date = &
date;
372 LALGMST1(&
status, &gmsthours, &
date, MST_HRS);
373 LALLMST1(&
status, &lmsthours, &place_and_date, MST_HRS);
376 LALSecsToLALDate(&
status, &mstdate, gmstsecs);
377 strftime(timestr, 64,
"%Hh %Mm %S", &(mstdate.unixDate));
378 sprintf(tmpstr,
"%fs", mstdate.residualNanoSeconds * 1.e-9);
379 strcat(timestr, tmpstr+1);
382 printf(
" Time = %s\n", datestamp->
data);
383 printf(
"gmsthours = %f = %s\n", gmsthours, timestr);
384 printf(
" expect: 0h = 00h 00m 00s \n");
390 date.unixDate.tm_sec = 0;
391 date.unixDate.tm_min = 0;
392 date.unixDate.tm_hour = 0;
393 date.unixDate.tm_year = 94;
396 date.unixDate.tm_wday = 0;
397 date.unixDate.tm_yday = 0;
398 date.unixDate.tm_isdst = 0;
400 printf(
"\nGMST1 of 0h UT1 for 1994 (check against Almanac):\n");
401 for (monthofyear = 0; monthofyear < 12; ++monthofyear)
403 date.unixDate.tm_mon = monthofyear;
405 for (dayofmonth = 1; dayofmonth < 32; ++dayofmonth)
407 date.unixDate.tm_mday = dayofmonth;
410 LALSecsToLALDate(&
status, &mstdate, gmstsecs);
411 strftime(timestr, 64,
"%Hh %Mm %S", &(mstdate.unixDate));
412 sprintf(tmpstr,
"%fs", mstdate.residualNanoSeconds * 1.e-9);
413 strcat(timestr, tmpstr+1);
415 printf(
"%s: %s\n", datestamp->
data, timestr);
418 if (monthofyear == 1)
419 if (dayofmonth == 28)
422 if (monthofyear == 3 || monthofyear == 5 ||
423 monthofyear == 8 || monthofyear == 10)
424 if (dayofmonth == 30)
double REAL8
Double precision real floating-point number (8 bytes).
char CHAR
One-byte signed integer, see Headers LAL(Atomic)Datatypes.h for more details.
uint32_t UINT4
Four-byte unsigned integer.
int32_t INT4
Four-byte signed integer.
void LALCHARCreateVector(LALStatus *, CHARVector **, UINT4)
void LALCHARDestroyVector(LALStatus *, CHARVector **)
Vector of type CHAR, see DATATYPE-Vector types for more details.
CHAR * data
Pointer to the data array.
LALFrDetector frDetector
The original LALFrDetector structure from which this was created.
REAL8 vertexLongitudeRadians
The geodetic longitude of the vertex in radians.
This structure stores pointers to a LALDetector and a LIGOTimeGPS.
LIGOTimeGPS * p_gps
Pointer to a GPS time structure.
const LALDetector * p_detector
pointer to a detector
LAL status structure, see The LALStatus structure for more details.
Epoch relative to GPS epoch, see LIGOTimeGPS type for more details.
INT4 gpsSeconds
Seconds since 0h UTC 6 Jan 1980.
INT4 gpsNanoSeconds
Residual nanoseconds.