Loading [MathJax]/extensions/TeX/AMSsymbols.js
LAL 7.7.0.1-5e288d3
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
ReadFTSeriesTest.c
Go to the documentation of this file.
1/*
2* Copyright (C) 2007 Cristina Valeria Torres, Jolien Creighton, John Whelan
3*
4* This program is free software; you can redistribute it and/or modify
5* it under the terms of the GNU General Public License as published by
6* the Free Software Foundation; either version 2 of the License, or
7* (at your option) any later version.
8*
9* This program is distributed in the hope that it will be useful,
10* but WITHOUT ANY WARRANTY; without even the implied warranty of
11* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12* GNU General Public License for more details.
13*
14* You should have received a copy of the GNU General Public License
15* along with with program; see the file COPYING. If not, write to the
16* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
17* MA 02110-1301 USA
18*/
19
20/**
21 * \file
22 * \ingroup ReadFTSeries_h
23 * \author Torres, C. W.
24 *
25 * \brief Tests the routines in \ref ReadTimeSeries_c and \ref ReadFrequencySeries_c.
26 *
27 * ### Usage ###
28 *
29 * \code
30 * ReadFTSeriesTest
31 * \endcode
32 *
33 * ### Description ###
34 *
35 * For each of the real and complex datatypes (single and double
36 * precision), this program fills a Time- and FrequencySeries, prints
37 * them to disk with the appropriate
38 * \c LALPrint<datatype><tt>FrequencySeries()</tt>
39 * and \c LALPrint<datatype><tt>TimeSeries()</tt>
40 * routines, then reads them back in with the appropriate
41 * \c LALRead<datatype><tt>FrequencySeries()</tt>
42 * and \c LALRead<datatype><tt>TimeSeries()</tt>
43 * routines and checks to make sure the resulting series agree, printing the results to standard error.
44 */
45
46/**\name Error Codes */ /** @{ */
47#define READFTSERIESTESTC_ENOM 0 /**< Nominal exit */
48#define READFTSERIESTESTC_ECHK 1 /**< Error checking failed to catch bad data */
49#define READFTSERIESTESTC_EFUN 2 /**< Subroutine returned error for valid data */
50#define READFTSERIESTESTC_EFLS 3 /**< Subroutine returned unexpected results */
51/** @} */
52
53/** \cond DONT_DOXYGEN */
54#define READFTSERIESTESTC_MSGENOM "Nominal exit"
55#define READFTSERIESTESTC_MSGECHK "Error checking failed to catch bad data"
56#define READFTSERIESTESTC_MSGEFUN "Subroutine returned error for valid data"
57#define READFTSERIESTESTC_MSGEFLS "Subroutine returned unexpected results"
58
59
60#include <lal/Units.h>
61#include <lal/ReadFTSeries.h>
62#include <lal/PrintFTSeries.h>
63#include <math.h>
64#include <lal/LALStdlib.h>
65#include <lal/AVFactories.h>
66#define READFTSERIESTEST_TOL 1e6
67#define READFTSERIESTEST_LEN 20
68
69
70
71int main( void )
72{
73 static LALStatus status;
74
75 REAL4Sequence *sSequenceIn;
76 REAL4Sequence *sSequenceOut;
77 REAL8Sequence *dSequenceIn;
78 REAL8Sequence *dSequenceOut;
79
80 COMPLEX8Sequence *cSequenceIn;
81 COMPLEX8Sequence *cSequenceOut;
82 COMPLEX16Sequence *zSequenceIn;
83 COMPLEX16Sequence *zSequenceOut;
84
85
86 REAL4FrequencySeries sFrequencySeries;
87 REAL8FrequencySeries dFrequencySeries;
88 COMPLEX8FrequencySeries cFrequencySeries;
89 COMPLEX16FrequencySeries zFrequencySeries;
90
91 REAL4FrequencySeries sFrequencySeries2;
92 REAL8FrequencySeries dFrequencySeries2;
93 COMPLEX8FrequencySeries cFrequencySeries2;
94 COMPLEX16FrequencySeries zFrequencySeries2;
95
96 REAL4TimeSeries sTimeSeries;
97 REAL8TimeSeries dTimeSeries;
98 COMPLEX8TimeSeries cTimeSeries;
99 COMPLEX16TimeSeries zTimeSeries;
100
101 REAL4TimeSeries sTimeSeries2;
102 REAL8TimeSeries dTimeSeries2;
103 COMPLEX8TimeSeries cTimeSeries2;
104 COMPLEX16TimeSeries zTimeSeries2;
105
106 REAL4 *sData;
107 REAL8 *dData;
108 COMPLEX8 *cData;
109 COMPLEX16 *zData;
110
111 /* Boolean Vars */
112 BOOLEAN unitComp;
113
114 /* variables for units */
115 RAT4 raise;
116 LALUnit strainToMinus2;
117 LALUnit adcToMinus2;
118 LALUnit adcStrain;
119
120
121 /* This routine should generate a file with data */
122 /* to be read by ReadFTSeries.c*/
123 LIGOTimeGPS t;
124 UINT4 i;
125
126
127 /* Data Test Variable */
128 UINT4 j;
129
130
131 fprintf(stderr,"Testing value of LALUnitTextSize ... ");
132 if ( (int)LALSupportUnitTextSize != (int)LALUnitTextSize )
133 {
134 fprintf(stderr,"UnitTextSize mismatch: [ReadFTSeriesTest:%s]\n",
135 READFTSERIESTESTC_MSGEFLS);
137 }
138 fprintf(stderr,"PASS\n");
139
140 t.gpsSeconds = 0;
141 t.gpsNanoSeconds = 0;
142
143 fprintf(stderr,"Testing Print/Read COMPLEX8FrequencySeries ... ");
144
145 cSequenceIn = NULL;
146 LALCCreateVector(&status, &cSequenceIn, READFTSERIESTEST_LEN);
147 if (status.statusCode != 0)
148 {
149 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
150 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
152 }
153 for ( i=1, cData=cSequenceIn->data; i<=READFTSERIESTEST_LEN ; i++, cData++ )
154 {
155 *(cData) = crectf( i, i+1 );
156 }
157
158 strncpy(cFrequencySeries.name,"Complex frequency series",LALNameLength);
159 cFrequencySeries.sampleUnits = lalHertzUnit;
160 cFrequencySeries.deltaF = 1;
161 cFrequencySeries.epoch = t;
162 cFrequencySeries.f0 = 5;
163
164 cFrequencySeries.data = cSequenceIn;
165
166 LALCPrintFrequencySeries(&cFrequencySeries, "cFSInput.dat");
167 if (status.statusCode != 0)
168 {
169 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
170 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
172 }
173
174 cSequenceOut = NULL;
175 LALCCreateVector( &status, &cSequenceOut, READFTSERIESTEST_LEN);
176 if (status.statusCode != 0)
177 {
178 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
179 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
181 }
182
183 cFrequencySeries2.data = cSequenceOut;
184
185 LALCReadFrequencySeries(&status, &cFrequencySeries2, "./cFSInput.dat");
186 if (status.statusCode != 0)
187 {
188 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
189 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
191 }
192
193 if (fabs(cFrequencySeries.deltaF - cFrequencySeries.deltaF)/
194 cFrequencySeries.deltaF > READFTSERIESTEST_TOL)
195 {
196 fprintf(stderr,"DeltaF MisMatch [ReadFTSeriesTest:%s]\n",
197 READFTSERIESTESTC_MSGEFLS);
199 }
200 if (strcmp(cFrequencySeries.name,cFrequencySeries2.name) != 0)
201 {
202 fprintf(stderr,"Name Mismatch [ReadFTSeriesTest:%s]\n",
203 READFTSERIESTESTC_MSGEFLS);
205 }
206 if ((cFrequencySeries.epoch.gpsSeconds) !=
207 (cFrequencySeries2.epoch.gpsSeconds))
208 {
209 fprintf(stderr,"Epoch Second Mismatch [ReadFTSeriesTest:%s]\n",
210 READFTSERIESTESTC_MSGEFLS);
212 }
213 if ((cFrequencySeries.epoch.gpsNanoSeconds) !=
214 (cFrequencySeries2.epoch.gpsNanoSeconds))
215 {
216 fprintf(stderr,"Epoch NanosecondMismatch [ReadFTSeriesTest:%s]\n",
217 READFTSERIESTESTC_MSGEFLS);
219 }
220 if ((cFrequencySeries.f0) ?
221 (fabs(cFrequencySeries.f0 - cFrequencySeries2.f0)/cFrequencySeries.f0) :
222 (fabs(cFrequencySeries.f0 - cFrequencySeries2.f0) >
223 READFTSERIESTEST_TOL))
224 {
225 fprintf(stderr,"f0 Mismatch [ReadFTSeriesTest:%s]\n",
226 READFTSERIESTESTC_MSGEFLS);
228 }
229 unitComp = XLALUnitCompare(&cFrequencySeries.sampleUnits,&cFrequencySeries2.sampleUnits);
230
231 if (unitComp != 0)
232 {
233 fprintf(stderr,"Units Mismatch [ReadFTSeriesTest:%s]\n",
234 READFTSERIESTESTC_MSGEFLS);
236 }
237
238 for (j = 0; j < cSequenceIn->length;j++)
239 {
240 if ((crealf(cSequenceIn->data[j]) ?
241 fabs((crealf(cSequenceIn->data[j]) - crealf(cSequenceOut->data[j]))
242 /crealf(cSequenceIn->data[j]))
243 :fabs(crealf(cSequenceIn->data[j]) - crealf(cSequenceOut->data[j]))) >
244 READFTSERIESTEST_TOL)
245 {
246 fprintf(stderr,"Data Tolerance Exceeded [ReadFTSeriesTest:%s]\n",
247 READFTSERIESTESTC_MSGEFLS);
249 }
250 if ((cimagf(cSequenceIn->data[j]) ?
251 fabs((cimagf(cSequenceIn->data[j]) - cimagf(cSequenceOut->data[j]))
252 /cimagf(cSequenceIn->data[j]))
253 :fabs(cimagf(cSequenceIn->data[j]) - cimagf(cSequenceOut->data[j]))) >
254 READFTSERIESTEST_TOL)
255 {
256 fprintf(stderr,"Data Tolerance Exceeded [ReadFTSeriesTest:%s]\n",
257 READFTSERIESTESTC_MSGEFLS);
259 }
260 }
261
262 fprintf(stderr,"PASS\n");
263
264 fprintf(stderr,"Testing Print/Read COMPLEX16FrequencySeries ... ");
265
266 /* Test case 2 */
267
268 t.gpsSeconds = 45678;
269 t.gpsNanoSeconds = 89065834;
270
271 zSequenceIn = NULL;
272 LALZCreateVector( &status, &zSequenceIn, READFTSERIESTEST_LEN);
273 if (status.statusCode != 0)
274 {
275 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
276 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
278 }
279
280
281 for ( i=1, zData=zSequenceIn->data; i<=READFTSERIESTEST_LEN ; i++, zData++ )
282 {
283 *(zData) = crect( i/4.0, (i+1)/5.0 );
284 }
285 zFrequencySeries.sampleUnits = lalDimensionlessUnit;
286 strncpy(zFrequencySeries.name,"Complex frequency series",LALNameLength);
287 zFrequencySeries.deltaF = 1.3;
288 zFrequencySeries.epoch = t;
289 zFrequencySeries.f0 = 0;
290 zFrequencySeries.data = zSequenceIn;
291
292 LALZPrintFrequencySeries(&zFrequencySeries, "zFSInput.dat");
293 if (status.statusCode != 0)
294 {
295 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
296 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
298 }
299
300 zSequenceOut = NULL;
301 LALZCreateVector( &status, &zSequenceOut, READFTSERIESTEST_LEN);
302 if (status.statusCode != 0)
303 {
304 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
305 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
307 }
308
309 zFrequencySeries2.data = zSequenceOut;
310
311 LALZReadFrequencySeries(&status, &zFrequencySeries2, "./zFSInput.dat");
312 if (status.statusCode != 0)
313 {
314 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
315 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
317 }
318
319 if ((zFrequencySeries.deltaF) != (zFrequencySeries2.deltaF))
320 {
321 fprintf(stderr,"DeltaF Mismatch [ReadFTSeriesTest:%s]\n",
322 READFTSERIESTESTC_MSGEFLS);
324 }
325 if (strcmp(zFrequencySeries.name,zFrequencySeries2.name) != 0)
326 {
327 fprintf(stderr,"Name Mismatch [ReadFTSeriesTest:%s]\n",
328 READFTSERIESTESTC_MSGEFLS);
330 }
331 if ((zFrequencySeries.epoch.gpsSeconds) !=
332 (zFrequencySeries2.epoch.gpsSeconds))
333 {
334 fprintf(stderr,"Epoch Seconds Mismatch [ReadFTSeriesTest:%s]\n",
335 READFTSERIESTESTC_MSGEFLS);
337 }
338 if ((zFrequencySeries.epoch.gpsNanoSeconds) !=
339 (zFrequencySeries2.epoch.gpsNanoSeconds))
340 {
341 fprintf(stderr,"Epoch NanoSeconds Mismatch [ReadFTSeriesTest:%s]\n",
342 READFTSERIESTESTC_MSGEFLS);
344 }
345 if (zFrequencySeries.f0 ?
346 (fabs(zFrequencySeries.f0 - zFrequencySeries2.f0)/zFrequencySeries.f0)
347 : (fabs(zFrequencySeries.f0 - zFrequencySeries2.f0)) >
348 READFTSERIESTEST_TOL)
349 {
350 fprintf(stderr,"f0 Mismatch [ReadFTSeriesTest:%s]\n",
351 READFTSERIESTESTC_MSGEFLS);
353 }
354 unitComp = XLALUnitCompare(&zFrequencySeries.sampleUnits,&zFrequencySeries2.sampleUnits);
355
356 if (unitComp != 0)
357 {
358 fprintf(stderr,"Units Mismatch [ReadFTSeriesTest:%s]\n",
359 READFTSERIESTESTC_MSGEFLS);
361 }
362
363 for (j = 0; j < zSequenceIn->length;j++)
364 {
365 if ((creal(zSequenceIn->data[j]) ?
366 fabs((creal(zSequenceIn->data[j]) - creal(zSequenceOut->data[j]))
367 /creal(zSequenceIn->data[j])) :
368 fabs(creal(zSequenceIn->data[j]) - creal(zSequenceOut->data[j]))) >
369 READFTSERIESTEST_TOL)
370 {
371 fprintf(stderr,"Data Tolerance Exceeded [ReadFTSeriesTest:%s]\n",
372 READFTSERIESTESTC_MSGEFLS);
374 }
375 if ((cimag(zSequenceIn->data[j]) ?
376 fabs((cimag(zSequenceIn->data[j]) - cimag(zSequenceOut->data[j]))
377 /cimag(zSequenceIn->data[j])) :
378 fabs(cimag(zSequenceIn->data[j]) - cimag(zSequenceOut->data[j]))) >
379 READFTSERIESTEST_TOL)
380 {
381 fprintf(stderr,"Data Tolerance Exceeded [ReadFTSeriesTest:%s]\n",
382 READFTSERIESTESTC_MSGEFLS);
384 }
385 }
386
387 fprintf(stderr,"PASS\n");
388
389 fprintf(stderr,"Testing Print/Read REAL8FrequencySeries ... ");
390
391 /* Test case 3 */
392 t.gpsSeconds = 45678;
393 t.gpsNanoSeconds = 89065834;
394
395 dSequenceIn = NULL;
396 LALDCreateVector( &status, &dSequenceIn, READFTSERIESTEST_LEN);
397 if (status.statusCode != 0)
398 {
399 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
400 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
402 }
403
404 for ( i=1, dData=dSequenceIn->data; i<=READFTSERIESTEST_LEN ; i++, dData++ )
405 {
406 *(dData) = 0.005;
407 }
408
409 strncpy(dFrequencySeries.name,"Complex frequency series",LALNameLength);
410 /* set units */
411 raise.numerator = -2;
412 raise.denominatorMinusOne = 0;
413 if (XLALUnitRaiseRAT4(&strainToMinus2, &lalStrainUnit, &raise) == NULL)
414 {
415 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
416 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
418 }
419
420 if (XLALUnitRaiseRAT4(&adcToMinus2, &lalADCCountUnit, &raise) == NULL)
421 {
422 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
423 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
425 }
426
427 if (XLALUnitMultiply(&(adcStrain), &strainToMinus2, &adcToMinus2) == NULL)
428 {
429 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
430 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
432 }
433
434 if (XLALUnitMultiply(&dFrequencySeries.sampleUnits, &adcStrain, &lalHertzUnit) == NULL)
435 {
436 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
437 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
439 }
440
441
442 dFrequencySeries.deltaF = 1.3;
443 dFrequencySeries.epoch = t;
444 dFrequencySeries.f0 = 0;
445 dFrequencySeries.data = dSequenceIn;
446 LALDPrintFrequencySeries(&dFrequencySeries, "dFSInput.dat");
447 if (status.statusCode != 0)
448 {
449 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
450 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
452 }
453
454
455 dSequenceOut = NULL;
456 LALDCreateVector( &status, &dSequenceOut, READFTSERIESTEST_LEN);
457 if (status.statusCode != 0)
458 {
459 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
460 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
462 }
463
464
465 dFrequencySeries2.data = dSequenceOut;
466
467 LALDReadFrequencySeries(&status, &dFrequencySeries2, "./dFSInput.dat");
468 if (status.statusCode != 0)
469 {
470 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
471 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
473 }
474
475 if ((dFrequencySeries.deltaF) != (dFrequencySeries.deltaF))
476 {
477 fprintf(stderr,"DeltaF Mismatch [ReadFTSeriesTest:%s]\n",
478 READFTSERIESTESTC_MSGEFLS);
480 }
481 if (strcmp(dFrequencySeries.name,dFrequencySeries2.name) != 0)
482 {
483 fprintf(stderr,"Name Mismatch [ReadFTSeriesTest:%s]\n",
484 READFTSERIESTESTC_MSGEFLS);
486 }
487 if ((dFrequencySeries.epoch.gpsSeconds)
488 != (dFrequencySeries2.epoch.gpsSeconds))
489 {
490 fprintf(stderr,"Epoch Seconds Mismatch [ReadFTSeriesTest:%s]\n",
491 READFTSERIESTESTC_MSGEFLS);
493 }
494 if ((dFrequencySeries.epoch.gpsSeconds)
495 != (dFrequencySeries2.epoch.gpsSeconds))
496 {
497 fprintf(stderr,"Epoch NanoSeconds Mismatch [ReadFTSeriesTest:%s]\n",
498 READFTSERIESTESTC_MSGEFLS);
500 }
501 if (dFrequencySeries.f0 ?
502 (fabs(dFrequencySeries.f0 - dFrequencySeries2.f0)/dFrequencySeries.f0)
503 : (fabs(dFrequencySeries.f0 - dFrequencySeries2.f0)) >
504 READFTSERIESTEST_TOL)
505 {
506 fprintf(stderr,"f0 Mismatch [ReadFTSeriesTest:%s]\n",
507 READFTSERIESTESTC_MSGEFLS);
509 }
510
511 unitComp = XLALUnitCompare(&dFrequencySeries.sampleUnits,&dFrequencySeries2.sampleUnits);
512
513 if (unitComp != 0)
514 {
515 fprintf(stderr,"Unit Mismatch [ReadFTSeriesTest:%s]\n",
516 READFTSERIESTESTC_MSGEFLS);
518 }
519
520
521 for (j = 0; j < dSequenceIn->length;j++)
522 {
523 if ((dSequenceIn->data[j] ?
524 fabs((dSequenceIn->data[j] - dSequenceOut->data[j])
525 /dSequenceIn->data[j])
526 :fabs(dSequenceIn->data[j] - dSequenceOut->data[j])) >
527 READFTSERIESTEST_TOL)
528 {
529 fprintf(stderr,"Data Tolerance Exceeded [ReadFTSeriesTest:%s]\n",
530 READFTSERIESTESTC_MSGEFLS);
532 }
533
534 }
535
536
537 fprintf(stderr,"PASS\n");
538
539 fprintf(stderr,"Testing Print/Read REAL4FrequencySeries ... ");
540
541
542 /* Test case 4 */
543 t.gpsSeconds = 45678;
544 t.gpsNanoSeconds = 89065834;
545
546 sSequenceIn = NULL;
547 LALSCreateVector( &status, &sSequenceIn, READFTSERIESTEST_LEN);
548 if (status.statusCode != 0)
549 {
550 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
551 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
553 }
554
555 for ( i=1, sData=sSequenceIn->data; i<=READFTSERIESTEST_LEN ; i++, sData++ )
556 {
557 *(sData) = 0.005;
558 }
559
560 strncpy(sFrequencySeries.name,"Complex frequency series",LALNameLength);
561 /* set units */
562 raise.numerator = -2;
563 raise.denominatorMinusOne = 0;
564 if (XLALUnitRaiseRAT4(&strainToMinus2, &lalStrainUnit, &raise) == NULL)
565 {
566 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
567 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
569 }
570
571 if (XLALUnitRaiseRAT4(&adcToMinus2, &lalADCCountUnit, &raise) == NULL)
572 {
573 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
574 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
576 }
577
578 if (XLALUnitMultiply(&(adcStrain), &strainToMinus2, &adcToMinus2) == NULL)
579 {
580 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
581 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
583 }
584
585 if (XLALUnitMultiply(&sFrequencySeries.sampleUnits, &adcStrain, &lalHertzUnit) == NULL)
586 {
587 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
588 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
590 }
591
592
593 sFrequencySeries.deltaF = 1.3;
594 sFrequencySeries.epoch = t;
595 sFrequencySeries.f0 = 5;
596 sFrequencySeries.data = sSequenceIn;
597
598 sSequenceOut = NULL;
599 LALSCreateVector( &status, &sSequenceOut, READFTSERIESTEST_LEN);
600 if (status.statusCode != 0)
601 {
602 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
603 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
605 }
606
607 sFrequencySeries2.data = sSequenceOut;
608 LALSPrintFrequencySeries(&sFrequencySeries, "sFSInput.dat");
609 if (status.statusCode != 0)
610 {
611 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
612 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
614 }
615
616 LALSReadFrequencySeries(&status, &sFrequencySeries2, "./sFSInput.dat");
617 if (status.statusCode != 0)
618 {
619 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
620 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
622 }
623
624 if (fabs(sFrequencySeries.deltaF - sFrequencySeries2.deltaF)
625 /sFrequencySeries.deltaF > READFTSERIESTEST_TOL)
626 {
627 fprintf(stderr,"Deltaf Mismatch [ReadFTSeriesTest:%s]\n",
628 READFTSERIESTESTC_MSGEFLS);
630 }
631
632 if (strcmp(sFrequencySeries.name,sFrequencySeries2.name)!=0)
633 {
634 fprintf(stderr,"Name Mismatch [ReadFTSeriesTest:%s]\n",
635 READFTSERIESTESTC_MSGEFLS);
637 }
638
639 if ((sFrequencySeries.epoch.gpsSeconds) !=
640 (sFrequencySeries2.epoch.gpsSeconds))
641 {
642 fprintf(stderr,"Epoch Seconds Mismatch [ReadFTSeriesTest:%s]\n",
643 READFTSERIESTESTC_MSGEFLS);
645 }
646 if ((sFrequencySeries.epoch.gpsNanoSeconds) !=
647 (sFrequencySeries2.epoch.gpsNanoSeconds))
648 {
649 fprintf(stderr,"Epoch NanoSeconds Mismatch [ReadFTSeriesTest:%s]\n",
650 READFTSERIESTESTC_MSGEFLS);
652 }
653 if (sFrequencySeries.f0 ?
654 (fabs(sFrequencySeries.f0 - sFrequencySeries2.f0)/sFrequencySeries.f0)
655 : (fabs(sFrequencySeries.f0 - sFrequencySeries2.f0)) >
656 READFTSERIESTEST_TOL)
657 {
658 fprintf(stderr,"f0 Mismatch [ReadFTSeriesTest:%s]\n",
659 READFTSERIESTESTC_MSGEFLS);
661 }
662
663 unitComp = XLALUnitCompare(&sFrequencySeries.sampleUnits,&sFrequencySeries2.sampleUnits);
664
665 if (unitComp != 0)
666 {
667 fprintf(stderr,"Unit Mismatch [ReadFTSeriesTest:%s]\n",
668 READFTSERIESTESTC_MSGEFLS);
670 }
671
672 for (j = 0; j < sSequenceIn->length;j++)
673 {
674 if ((sSequenceIn->data[j] ?
675 fabs((sSequenceIn->data[j] - sSequenceOut->data[j])
676 /sSequenceIn->data[j])
677 :fabs(sSequenceIn->data[j] - sSequenceOut->data[j])) >
678 READFTSERIESTEST_TOL)
679 {
680 fprintf(stderr,"Data Tolerance Exceeded [ReadFTSeriesTest:%s]\n",
681 READFTSERIESTESTC_MSGEFLS);
683 }
684 }
685
686
687 LALCDestroyVector(&status, &cSequenceIn);
688 if (status.statusCode != 0)
689 {
690 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
691 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
693 }
694
695 LALCDestroyVector(&status, &cSequenceOut);
696 if (status.statusCode != 0)
697 {
698 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
699 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
701 }
702
703 LALZDestroyVector(&status, &zSequenceIn);
704 if (status.statusCode != 0)
705 {
706 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
707 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
709 }
710 LALZDestroyVector(&status, &zSequenceOut);
711 if (status.statusCode != 0)
712 {
713 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
714 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
716 }
717
718 LALDDestroyVector(&status, &dSequenceIn);
719 if (status.statusCode != 0)
720 {
721 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
722 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
724 }
725
726 LALDDestroyVector(&status, &dSequenceOut);
727 if (status.statusCode != 0)
728 {
729 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
730 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
732 }
733
734 LALSDestroyVector(&status, &sSequenceIn);
735 if (status.statusCode != 0)
736 {
737 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
738 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
740 }
741
742 LALSDestroyVector(&status, &sSequenceOut);
743 if (status.statusCode != 0)
744 {
745 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
746 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
748 }
749
750 fprintf(stderr,"PASS\n");
751
752
753 fprintf(stderr,"Testing Print/Read REAL4TimeSeries ... ");
754
755 /* Here is where testing for ReadTimeSeries is done */
756 /* S Case ReadTimeSeries */
757
758 raise.numerator = -2;
759 raise.denominatorMinusOne = 0;
760 if (XLALUnitRaiseRAT4(&strainToMinus2, &lalStrainUnit, &raise) == NULL)
761 {
762 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
763 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
765 }
766
767 if (XLALUnitRaiseRAT4(&adcToMinus2, &lalADCCountUnit, &raise) == NULL)
768 {
769 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
770 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
772 }
773
774 if (XLALUnitMultiply(&(adcStrain), &strainToMinus2, &adcToMinus2) == NULL)
775 {
776 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
777 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
779 }
780
781 if (XLALUnitMultiply(&sTimeSeries.sampleUnits, &adcStrain, &lalHertzUnit) == NULL)
782 {
783 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
784 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
786 }
787
788
789 t.gpsSeconds = 45678;
790 t.gpsNanoSeconds = 89065834;
791
792 sSequenceIn = NULL;
793 LALSCreateVector( &status, &sSequenceIn, READFTSERIESTEST_LEN);
794 if (status.statusCode != 0)
795 {
796 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
797 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
799 }
800
801
802 for ( i=1, sData=sSequenceIn->data; i<=READFTSERIESTEST_LEN ; i++, sData++ )
803 {
804 *(sData) = 0.005;
805 }
806 strncpy(sTimeSeries.name,"Real4 Time series",LALNameLength);
807 sTimeSeries.deltaT = 1.3;
808 sTimeSeries.epoch = t;
809 sTimeSeries.data = sSequenceIn;
810 sTimeSeries.f0 = 5;
811 LALSPrintTimeSeries(&sTimeSeries, "sTSInput.dat");
812 if (status.statusCode != 0)
813 {
814 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
815 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
817 }
818
819 sSequenceOut = NULL;
820 LALSCreateVector( &status, &sSequenceOut, READFTSERIESTEST_LEN);
821 if (status.statusCode != 0)
822 {
823 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
824 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
826 }
827
828 sTimeSeries2.data = sSequenceOut;
829
830 LALSReadTimeSeries(&status, &sTimeSeries2, "./sTSInput.dat");
831 if (status.statusCode != 0)
832 {
833 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
834 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
836 }
837
838 if (fabs(sTimeSeries.deltaT-sTimeSeries2.deltaT) /
839 sTimeSeries.deltaT > READFTSERIESTEST_TOL)
840 {
841 fprintf(stderr,"DeltaT Mismatch [ReadFTSeriesTest:%s]\n",
842 READFTSERIESTESTC_MSGEFLS);
844 }
845
846 if (strcmp(sFrequencySeries.name,sFrequencySeries2.name) != 0)
847 {
848 fprintf(stderr,"Name Mismatch [ReadFTSeriesTest:%s]\n",
849 READFTSERIESTESTC_MSGEFLS);
851 }
852
853 if ((sTimeSeries.epoch.gpsSeconds) != (sTimeSeries2.epoch.gpsSeconds))
854 {
855 fprintf(stderr,"Epoch Seconds Mismatch [ReadFTSeriesTest:%s]\n",
856 READFTSERIESTESTC_MSGEFLS);
858 }
859 if ((sTimeSeries.epoch.gpsNanoSeconds) != (sTimeSeries2.epoch.gpsNanoSeconds))
860 {
861 fprintf(stderr,"Epoch NanoSeconds Mismatch [ReadFTSeriesTest:%s]\n",
862 READFTSERIESTESTC_MSGEFLS);
864 }
865 /* printf("%f ... %f f0 value\n",sTimeSeries.f0,sTimeSeries2.f0);*/
866 if (sTimeSeries.f0 ?
867 (fabs(sTimeSeries.f0 - sTimeSeries2.f0)/sTimeSeries.f0)
868 : (fabs(sTimeSeries.f0 - sTimeSeries2.f0)) >
869 READFTSERIESTEST_TOL)
870 {
871 fprintf(stderr,"f0 Mismatch [ReadFTSeriesTest:%s]\n",
872 READFTSERIESTESTC_MSGEFLS);
874 }
875
876 unitComp = XLALUnitCompare(&sTimeSeries.sampleUnits,&sTimeSeries2.sampleUnits);
877
878 if (unitComp != 0)
879 {
880 fprintf(stderr,"Units Mismatch [ReadFTSeriesTest:%s]\n",
881 READFTSERIESTESTC_MSGEFLS);
883 }
884 for (j = 0; j < sSequenceIn->length;j++)
885 {
886 if ((sSequenceIn->data[j] ?
887 fabs((sSequenceIn->data[j] - sSequenceOut->data[j])
888 /sSequenceIn->data[j])
889 :fabs(sSequenceIn->data[j] - sSequenceOut->data[j])) >
890 READFTSERIESTEST_TOL)
891 {
892 fprintf(stderr,"Data Tolerance Exceeded [ReadFTSeriesTest:%s]\n",
893 READFTSERIESTESTC_MSGEFLS);
895 }
896 }
897
898 fprintf(stderr,"PASS\n");
899
900 fprintf(stderr,"Testing Print/Read COMPLEX16TimeSeries ... ");
901
902 /* Z case ReadTimeSeries*/
903
904 raise.numerator = -2;
905 raise.denominatorMinusOne = 0;
906 if (XLALUnitRaiseRAT4(&strainToMinus2, &lalStrainUnit, &raise) == NULL)
907 {
908 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
909 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
911 }
912
913 if (XLALUnitRaiseRAT4(&adcToMinus2, &lalADCCountUnit, &raise) == NULL)
914 {
915 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
916 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
918 }
919
920 if (XLALUnitMultiply(&(adcStrain), &strainToMinus2, &adcToMinus2) == NULL)
921 {
922 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
923 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
925 }
926
927 if (XLALUnitMultiply(&zTimeSeries.sampleUnits, &adcStrain, &lalHertzUnit) == NULL)
928 {
929 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
930 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
932 }
933
934 t.gpsSeconds = 45678;
935 t.gpsNanoSeconds = 89065834;
936
937 zSequenceIn = NULL;
938 LALZCreateVector( &status, &zSequenceIn, READFTSERIESTEST_LEN);
939 if (status.statusCode != 0)
940 {
941 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
942 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
944 }
945
946
947 for ( i=1, zData=zSequenceIn->data; i<=READFTSERIESTEST_LEN ; i++, zData++ )
948 {
949 *(zData) = crect( 0.005, 1 );
950 }
951 strncpy(zTimeSeries.name,"Complex16 Time series",LALNameLength);
952 zTimeSeries.deltaT = 1.3;
953 zTimeSeries.epoch = t;
954 zTimeSeries.data = zSequenceIn;
955 zTimeSeries.f0 = 0;
956 LALZPrintTimeSeries(&zTimeSeries, "zTSInput.dat");
957 if (status.statusCode != 0)
958 {
959 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
960 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
962 }
963
964 zSequenceOut = NULL;
965 LALZCreateVector( &status, &zSequenceOut, READFTSERIESTEST_LEN);
966 if (status.statusCode != 0)
967 {
968 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
969 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
971 }
972
973 zTimeSeries2.data = zSequenceOut;
974
975 LALZReadTimeSeries(&status, &zTimeSeries2, "./zTSInput.dat");
976 if (status.statusCode != 0)
977 {
978 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
979 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
981 }
982
983 if (fabs(zTimeSeries.deltaT) - (zTimeSeries2.deltaT)/zTimeSeries.deltaT >
984 READFTSERIESTEST_TOL)
985 {
986 fprintf(stderr,"Mismatch DeltaT [ReadFTSeriesTest:%s]\n",
987 READFTSERIESTESTC_MSGEFLS);
989 }
990
991
992 if (strcmp(zTimeSeries.name,zTimeSeries2.name) != 0)
993 {
994 fprintf(stderr,"Name Mismatch [ReadFTSeriesTest:%s]\n",
995 READFTSERIESTESTC_MSGEFLS);
997 }
998
999 if ((zTimeSeries.epoch.gpsSeconds) != (zTimeSeries2.epoch.gpsSeconds))
1000 {
1001 fprintf(stderr,"Epoch Second Mismatch [ReadFTSeriesTest:%s]\n",
1002 READFTSERIESTESTC_MSGEFLS);
1004 }
1005 if ( (zTimeSeries.epoch.gpsNanoSeconds)
1006 != (zTimeSeries2.epoch.gpsNanoSeconds) )
1007 {
1008 fprintf(stderr,"Epoch Nanosecond Mismatch [ReadFTSeriesTest:%s]\n",
1009 READFTSERIESTESTC_MSGEFLS);
1011 }
1012
1013 if (zTimeSeries.f0 ?
1014 (fabs(zTimeSeries.f0 - zTimeSeries2.f0)/zTimeSeries.f0)
1015 : (fabs(zTimeSeries.f0 - zTimeSeries2.f0)) >
1016 READFTSERIESTEST_TOL)
1017 {
1018 fprintf(stderr,"f0 Mismatch [ReadFTSeriesTest:%s]\n",
1019 READFTSERIESTESTC_MSGEFLS);
1021 }
1022
1023 unitComp = XLALUnitCompare(&zTimeSeries.sampleUnits,&zTimeSeries2.sampleUnits);
1024
1025 if (unitComp != 0)
1026 {
1027 fprintf(stderr,"Unit Mismatch [ReadFTSeriesTest:%s]\n",
1028 READFTSERIESTESTC_MSGEFLS);
1030 }
1031
1032 for (j = 0; j < zSequenceIn->length;j++)
1033 {
1034 if ((creal(zSequenceIn->data[j]) ?
1035 fabs((creal(zSequenceIn->data[j]) - creal(zSequenceOut->data[j]))
1036 /creal(zSequenceIn->data[j]))
1037 :fabs(creal(zSequenceIn->data[j]) - creal(zSequenceOut->data[j]))) >
1038 READFTSERIESTEST_TOL)
1039 {
1040 fprintf(stderr,"Data Tolerance Exceeded [ReadFTSeriesTest:%s]\n",
1041 READFTSERIESTESTC_MSGEFLS);
1043 }
1044 if ((cimag(zSequenceIn->data[j]) ?
1045 fabs((cimag(zSequenceIn->data[j]) - cimag(zSequenceOut->data[j]))
1046 /cimag(zSequenceIn->data[j]))
1047 :fabs(cimag(zSequenceIn->data[j]) - cimag(zSequenceOut->data[j]))) >
1048 READFTSERIESTEST_TOL)
1049 {
1050 fprintf(stderr,"Data Tolerance Exceeded [ReadFTSeriesTest:%s]\n",
1051 READFTSERIESTESTC_MSGEFLS);
1053 }
1054 }
1055
1056 fprintf(stderr,"PASS\n");
1057
1058 fprintf(stderr,"Testing Print/Read REAL8TimeSeries ... ");
1059
1060 /* D case ReadTimeSeries*/
1061
1062 raise.numerator = -2;
1063 raise.denominatorMinusOne = 0;
1064 if (XLALUnitRaiseRAT4(&strainToMinus2, &lalStrainUnit, &raise) == NULL)
1065 {
1066 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1067 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1069 }
1070 if (XLALUnitRaiseRAT4(&adcToMinus2, &lalADCCountUnit, &raise) == NULL)
1071 {
1072 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1073 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1075 }
1076
1077 if (XLALUnitMultiply(&(adcStrain), &strainToMinus2, &adcToMinus2) == NULL)
1078 {
1079 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1080 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1082 }
1083
1084 if (XLALUnitMultiply(&sTimeSeries.sampleUnits, &adcStrain, &lalHertzUnit) == NULL)
1085 {
1086 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1087 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1089 }
1090
1091 strncpy(dTimeSeries.name,"REAL8 Time series",LALNameLength);
1092 dTimeSeries.sampleUnits = lalHertzUnit;
1093 t.gpsSeconds = 4578;
1094 t.gpsNanoSeconds = 890634;
1095
1096 dSequenceIn = NULL;
1097 LALDCreateVector( &status, &dSequenceIn, READFTSERIESTEST_LEN);
1098 if (status.statusCode != 0)
1099 {
1100 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1101 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1103 }
1104
1105
1106 for ( i=1, dData=dSequenceIn->data; i<=READFTSERIESTEST_LEN ; i++, dData++ )
1107 {
1108 *(dData) = 0.005;
1109 }
1110
1111 dTimeSeries.deltaT = 1.3;
1112 dTimeSeries.epoch = t;
1113 dTimeSeries.data = dSequenceIn;
1114 dTimeSeries.f0 = 0;
1115 LALDPrintTimeSeries(&dTimeSeries, "dTSInput.dat");
1116 if (status.statusCode != 0)
1117 {
1118 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1119 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1121 }
1122
1123 dSequenceOut = NULL;
1124 LALDCreateVector( &status, &dSequenceOut, READFTSERIESTEST_LEN);
1125 if (status.statusCode != 0)
1126 {
1127 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1128 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1130 }
1131
1132 dTimeSeries2.data = dSequenceOut;
1133 LALDReadTimeSeries(&status, &dTimeSeries2, "./dTSInput.dat");
1134 if (status.statusCode != 0)
1135 {
1136 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1137 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1139 }
1140
1141 if (fabs(dTimeSeries.deltaT) - (dTimeSeries2.deltaT)/dTimeSeries.deltaT
1142 > READFTSERIESTEST_TOL)
1143 {
1144 fprintf(stderr,"DeltaT Mismatch [ReadFTSeriesTest:%d,%s]\n",status.statusCode,
1145 status.statusDescription );
1147 }
1148 if (strcmp(dTimeSeries.name,dTimeSeries2.name) != 0)
1149 {
1150 fprintf(stderr,"Name Mismatch [ReadFTSeriesTest:%d,%s]\n",status.statusCode,
1151 status.statusDescription );
1153 }
1154
1155 if ((dTimeSeries.epoch.gpsSeconds) != (dTimeSeries2.epoch.gpsSeconds))
1156 {
1157 fprintf(stderr,"Epoch Seconds Mismatch [ReadFTSeriesTest:%s]\n",
1158 READFTSERIESTESTC_MSGEFLS);
1160 }
1161
1162 if ((dTimeSeries.epoch.gpsNanoSeconds)
1163 != (dTimeSeries2.epoch.gpsNanoSeconds))
1164 {
1165 fprintf(stderr,"Epoch Nanoseconds Mismatch [ReadFTSeriesTest:%s]\n",
1166 READFTSERIESTESTC_MSGEFLS);
1168 }
1169
1170 if (dTimeSeries.f0 ?
1171 (fabs(dTimeSeries.f0 - dTimeSeries2.f0)/dTimeSeries.f0)
1172 : (fabs(dTimeSeries.f0 - dTimeSeries2.f0)) >
1173 READFTSERIESTEST_TOL)
1174 {
1175 fprintf(stderr,"f0 Mismatch [ReadFTSeriesTest:%s]\n",
1176 READFTSERIESTESTC_MSGEFLS);
1178 }
1179
1180 unitComp = XLALUnitCompare(&dTimeSeries.sampleUnits,&dTimeSeries2.sampleUnits);
1181
1182 if (unitComp != 0)
1183 {
1184 fprintf(stderr,"Unit Mismatch [ReadFTSeriesTest:%s]\n",
1185 READFTSERIESTESTC_MSGEFLS);
1187 }
1188
1189 for (j = 0; j < dSequenceIn->length;j++)
1190 {
1191 if ((dSequenceIn->data[j] ?
1192 fabs((dSequenceIn->data[j] - dSequenceOut->data[j])
1193 /dSequenceIn->data[j])
1194 :fabs(dSequenceIn->data[j] - dSequenceOut->data[j])) >
1195 READFTSERIESTEST_TOL)
1196 {
1197 fprintf(stderr,"Data Tolerance Exceeded [ReadFTSeriesTest:%s]\n",
1198 READFTSERIESTESTC_MSGEFLS);
1200 }
1201 }
1202
1203 fprintf(stderr,"PASS\n");
1204
1205 fprintf(stderr,"Testing Print/Read COMPLEX8TimeSeries ... ");
1206
1207 /* C case ReadTimeSeries*/
1208
1209 raise.numerator = -2;
1210 raise.denominatorMinusOne = 0;
1211 if (XLALUnitRaiseRAT4(&strainToMinus2, &lalStrainUnit, &raise) == NULL)
1212 {
1213 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1214 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1216 }
1217
1218 if (XLALUnitRaiseRAT4(&adcToMinus2, &lalADCCountUnit, &raise) == NULL)
1219 {
1220 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1221 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1223 }
1224
1225 if (XLALUnitMultiply(&(adcStrain), &strainToMinus2, &adcToMinus2) == NULL)
1226 {
1227 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1228 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1230 }
1231
1232 if (XLALUnitMultiply(&cTimeSeries.sampleUnits, &adcStrain, &lalHertzUnit) == NULL)
1233 {
1234 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1235 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1237 }
1238
1239 t.gpsSeconds = 45678;
1240 t.gpsNanoSeconds = 89065834;
1241
1242 cSequenceIn = NULL;
1243 LALCCreateVector( &status, &cSequenceIn, READFTSERIESTEST_LEN);
1244 if (status.statusCode != 0)
1245 {
1246 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1247 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1249 }
1250
1251 for ( i=1, cData=cSequenceIn->data; i<=READFTSERIESTEST_LEN ; i++, cData++ )
1252 {
1253 *(cData) = crectf( 0.005, 1 );
1254 }
1255 strncpy(cTimeSeries.name,"Complex8 Time series",LALNameLength);
1256 cTimeSeries.deltaT = 1.3;
1257 cTimeSeries.epoch = t;
1258 cTimeSeries.data = cSequenceIn;
1259 cTimeSeries.f0 = 0;
1260 cSequenceOut = NULL;
1261 LALCPrintTimeSeries(&cTimeSeries, "cTSInput.dat");
1262 if (status.statusCode != 0)
1263 {
1264 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1265 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1267 }
1268 LALCCreateVector( &status, &cSequenceOut, READFTSERIESTEST_LEN);
1269 if (status.statusCode != 0)
1270 {
1271 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1272 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1274 }
1275
1276 cTimeSeries2.data = cSequenceOut;
1277
1278 LALCReadTimeSeries(&status, &cTimeSeries2, "./cTSInput.dat");
1279 if (status.statusCode != 0)
1280 {
1281 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1282 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1284 }
1285
1286 if (fabs(cTimeSeries.deltaT - cTimeSeries2.deltaT)/cTimeSeries.deltaT
1287 > READFTSERIESTEST_TOL)
1288 {
1289 fprintf(stderr,"DeltaT Mismatch [ReadFTSeriesTest:%s]\n",
1290 READFTSERIESTESTC_MSGEFLS);
1292 }
1293
1294 if (strcmp(cTimeSeries.name,cTimeSeries2.name) != 0)
1295 {
1296 fprintf(stderr,"Name Mismatch [ReadFTSeriesTest:%s]\n",
1297 READFTSERIESTESTC_MSGEFLS);
1299 }
1300 if ((cTimeSeries.epoch.gpsSeconds) != (cTimeSeries2.epoch.gpsSeconds))
1301 {
1302 fprintf(stderr,"Epoch Seconds Mismatch [ReadFTSeriesTest:%s]\n",
1303 READFTSERIESTESTC_MSGEFLS);
1305 }
1306 if ((cTimeSeries.epoch.gpsNanoSeconds)!=(cTimeSeries2.epoch.gpsNanoSeconds))
1307 {
1308 fprintf(stderr,"Epoch Nanoseconds Mismatch [ReadFTSeriesTest:%s]\n",
1309 READFTSERIESTESTC_MSGEFLS);
1311 }
1312 if (cTimeSeries.f0 ?
1313 (fabs(cTimeSeries.f0 - cTimeSeries2.f0)/cTimeSeries.f0)
1314 : (fabs(cTimeSeries.f0 - cTimeSeries2.f0)) >
1315 READFTSERIESTEST_TOL)
1316 {
1317 fprintf(stderr,"f0 Mismatch [ReadFTSeriesTest:%s]\n",
1318 READFTSERIESTESTC_MSGEFLS);
1320 }
1321
1322 unitComp = XLALUnitCompare(&cTimeSeries.sampleUnits,&cTimeSeries2.sampleUnits);
1323
1324 if (unitComp != 0)
1325 {
1326 fprintf(stderr,"Units Mismatch [ReadFTSeriesTest:%s]\n",
1327 READFTSERIESTESTC_MSGEFLS);
1329 }
1330
1331 for (j = 0; j < cSequenceIn->length;j++)
1332 {
1333 if ((crealf(cSequenceIn->data[j]) ?
1334 fabs((crealf(cSequenceIn->data[j]) - crealf(cSequenceOut->data[j]))
1335 /crealf(cSequenceIn->data[j]))
1336 :fabs(crealf(cSequenceIn->data[j]) - crealf(cSequenceOut->data[j]))) >
1337 READFTSERIESTEST_TOL)
1338 {
1339 fprintf(stderr,"Data Tolerance Exceeded [ReadFTSeriesTest:%s]\n",
1340 READFTSERIESTESTC_MSGEFLS);
1342 }
1343 if ((cimagf(cSequenceIn->data[j]) ?
1344 fabs((cimagf(cSequenceIn->data[j]) - cimagf(cSequenceOut->data[j]))
1345 /cimagf(cSequenceIn->data[j]))
1346 :fabs(cimagf(cSequenceIn->data[j]) - cimagf(cSequenceOut->data[j]))) >
1347 READFTSERIESTEST_TOL)
1348 {
1349 fprintf(stderr,"Data Tolerance Exceeded [ReadFTSeriesTest:%s]\n",
1350 READFTSERIESTESTC_MSGEFLS);
1352 }
1353 }
1354
1355 fprintf(stderr,"PASS\n");
1356
1357 /* *******************Deallocate all memory****************** */
1358 LALCDestroyVector(&status, &cSequenceIn);
1359 if (status.statusCode != 0)
1360 {
1361 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1362 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1364 }
1365
1366 LALCDestroyVector(&status, &cSequenceOut);
1367 if (status.statusCode != 0)
1368 {
1369 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1370 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1372 }
1373
1374 LALZDestroyVector(&status, &zSequenceIn);
1375 if (status.statusCode != 0)
1376 {
1377 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1378 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1380 }
1381
1382 LALZDestroyVector(&status, &zSequenceOut);
1383 if (status.statusCode != 0)
1384 {
1385 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1386 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1388 }
1389
1390 LALDDestroyVector(&status, &dSequenceIn);
1391 if (status.statusCode != 0)
1392 {
1393 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1394 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1396 }
1397
1398 LALDDestroyVector(&status, &dSequenceOut);
1399 if (status.statusCode != 0)
1400 {
1401 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1402 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1404 }
1405
1406 LALSDestroyVector(&status, &sSequenceIn);
1407 if (status.statusCode != 0)
1408 {
1409 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1410 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1412 }
1413
1414 LALSDestroyVector(&status, &sSequenceOut);
1415 if (status.statusCode != 0)
1416 {
1417 fprintf(stderr,"[%i]: %s [ReadFTSeriesTest:%s]\n",status.statusCode,
1418 status.statusDescription, READFTSERIESTESTC_MSGEFUN);
1420 }
1421
1423
1424 fprintf(stderr,"ReadFTSeries passed all tests.\n");
1425
1427
1428}
1429/** \endcond */
void LALCheckMemoryLeaks(void)
Definition: LALMalloc.c:784
#define READFTSERIESTESTC_ENOM
Nominal exit.
#define READFTSERIESTESTC_EFLS
Subroutine returned unexpected results.
#define READFTSERIESTESTC_EFUN
Subroutine returned error for valid data.
#define fprintf
int main(int argc, char *argv[])
Definition: cache.c:25
#define crect(re, im)
Construct a COMPLEX16 from real and imaginary parts.
unsigned char BOOLEAN
Boolean logical type, see Headers LAL(Atomic)Datatypes.h for more details.
double complex COMPLEX16
Double-precision floating-point complex number (16 bytes total)
double REAL8
Double precision real floating-point number (8 bytes).
#define crectf(re, im)
Construct a COMPLEX8 from real and imaginary parts.
uint32_t UINT4
Four-byte unsigned integer.
float complex COMPLEX8
Single-precision floating-point complex number (8 bytes total)
float REAL4
Single precision real floating-point number (4 bytes).
@ LALNameLength
Definition: LALDatatypes.h:508
void LALCPrintFrequencySeries(COMPLEX8FrequencySeries *series, const CHAR *filename)
void LALSPrintFrequencySeries(REAL4FrequencySeries *series, const CHAR *filename)
void LALZPrintFrequencySeries(COMPLEX16FrequencySeries *series, const CHAR *filename)
void LALDPrintFrequencySeries(REAL8FrequencySeries *series, const CHAR *filename)
void LALZPrintTimeSeries(COMPLEX16TimeSeries *series, const CHAR *filename)
void LALDPrintTimeSeries(REAL8TimeSeries *series, const CHAR *filename)
void LALCPrintTimeSeries(COMPLEX8TimeSeries *series, const CHAR *filename)
void LALSPrintTimeSeries(REAL4TimeSeries *series, const CHAR *filename)
void LALDReadFrequencySeries(LALStatus *status, REAL8FrequencySeries *series, const CHAR *filename)
void LALSReadFrequencySeries(LALStatus *status, REAL4FrequencySeries *series, const CHAR *filename)
void LALCReadFrequencySeries(LALStatus *status, COMPLEX8FrequencySeries *series, const CHAR *filename)
void LALZReadFrequencySeries(LALStatus *status, COMPLEX16FrequencySeries *series, const CHAR *filename)
void LALSReadTimeSeries(LALStatus *status, REAL4TimeSeries *series, const CHAR *filename)
void LALZReadTimeSeries(LALStatus *status, COMPLEX16TimeSeries *series, const CHAR *filename)
void LALDReadTimeSeries(LALStatus *status, REAL8TimeSeries *series, const CHAR *filename)
void LALCReadTimeSeries(LALStatus *status, COMPLEX8TimeSeries *series, const CHAR *filename)
int XLALUnitCompare(const LALUnit *unit1, const LALUnit *unit2)
Returns 0 if the the normal form of the two unit structures are the same or > 0 if they are different...
Definition: UnitCompare.c:90
@ LALUnitTextSize
Definition: Units.h:174
const LALUnit lalStrainUnit
Strain [1].
Definition: UnitDefs.c:165
const LALUnit lalADCCountUnit
ADC count [count].
Definition: UnitDefs.c:166
const LALUnit lalHertzUnit
Hertz [Hz].
Definition: UnitDefs.c:171
const LALUnit lalDimensionlessUnit
dimensionless units
Definition: UnitDefs.c:156
LALUnit * XLALUnitMultiply(LALUnit *output, const LALUnit *unit1, const LALUnit *unit2)
This function multiplies together the LALUnit structures *(input->unitOne) and *(input->unitTwo),...
Definition: UnitMultiply.c:64
LALUnit * XLALUnitRaiseRAT4(LALUnit *output, const LALUnit *input, const RAT4 *power)
Raises a LALUnit structure to a rational power given by the RAT4 structure power.
Definition: UnitRaise.c:56
void LALCCreateVector(LALStatus *, COMPLEX8Vector **, UINT4)
void LALZDestroyVector(LALStatus *, COMPLEX16Vector **)
void LALDCreateVector(LALStatus *, REAL8Vector **, UINT4)
void LALCDestroyVector(LALStatus *, COMPLEX8Vector **)
void LALDDestroyVector(LALStatus *, REAL8Vector **)
void LALSDestroyVector(LALStatus *, REAL4Vector **)
void LALZCreateVector(LALStatus *, COMPLEX16Vector **, UINT4)
void LALSCreateVector(LALStatus *, REAL4Vector **, UINT4)
See DATATYPE-FrequencySeries types for documentation.
Definition: LALDatatypes.h:909
CHAR name[LALNameLength]
Definition: LALDatatypes.h:910
COMPLEX16Sequence * data
Definition: LALDatatypes.h:915
Time series of COMPLEX16 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:600
REAL8 f0
The heterodyning frequency, in Hertz (zero if not heterodyned).
Definition: LALDatatypes.h:604
COMPLEX16Sequence * data
The sequence of sampled data.
Definition: LALDatatypes.h:606
LALUnit sampleUnits
The physical units of the quantity being sampled.
Definition: LALDatatypes.h:605
CHAR name[LALNameLength]
The name of the time series.
Definition: LALDatatypes.h:601
LIGOTimeGPS epoch
The start time of the time series.
Definition: LALDatatypes.h:602
REAL8 deltaT
The time step between samples of the time series in seconds.
Definition: LALDatatypes.h:603
Vector of type COMPLEX16, see DATATYPE-Vector types for more details.
Definition: LALDatatypes.h:172
UINT4 length
Number of elements in array.
Definition: LALDatatypes.h:176
COMPLEX16 * data
Pointer to the data array.
Definition: LALDatatypes.h:177
See DATATYPE-FrequencySeries types for documentation.
Definition: LALDatatypes.h:899
CHAR name[LALNameLength]
Definition: LALDatatypes.h:900
COMPLEX8Sequence * data
Definition: LALDatatypes.h:905
Time series of COMPLEX8 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:590
CHAR name[LALNameLength]
The name of the time series.
Definition: LALDatatypes.h:591
LALUnit sampleUnits
The physical units of the quantity being sampled.
Definition: LALDatatypes.h:595
REAL8 f0
The heterodyning frequency, in Hertz (zero if not heterodyned).
Definition: LALDatatypes.h:594
REAL8 deltaT
The time step between samples of the time series in seconds.
Definition: LALDatatypes.h:593
LIGOTimeGPS epoch
The start time of the time series.
Definition: LALDatatypes.h:592
COMPLEX8Sequence * data
The sequence of sampled data.
Definition: LALDatatypes.h:596
Vector of type COMPLEX8, see DATATYPE-Vector types for more details.
Definition: LALDatatypes.h:163
UINT4 length
Number of elements in array.
Definition: LALDatatypes.h:167
COMPLEX8 * data
Pointer to the data array.
Definition: LALDatatypes.h:168
LAL status structure, see The LALStatus structure for more details.
Definition: LALDatatypes.h:947
This structure stores units in the mksA system (plus Kelvin, Strain, and ADC Count).
Definition: LALDatatypes.h:498
Epoch relative to GPS epoch, see LIGOTimeGPS type for more details.
Definition: LALDatatypes.h:458
INT4 gpsSeconds
Seconds since 0h UTC 6 Jan 1980.
Definition: LALDatatypes.h:459
INT4 gpsNanoSeconds
Residual nanoseconds.
Definition: LALDatatypes.h:460
A four-byte rational number, used as a parameter structure for XLALUnitRaiseRAT4().
Definition: Units.h:144
INT2 numerator
The numerator.
Definition: Units.h:145
UINT2 denominatorMinusOne
One less than the denominator.
Definition: Units.h:146
See DATATYPE-FrequencySeries types for documentation.
Definition: LALDatatypes.h:879
REAL4Sequence * data
Definition: LALDatatypes.h:885
CHAR name[LALNameLength]
Definition: LALDatatypes.h:880
Time series of REAL4 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:570
CHAR name[LALNameLength]
The name of the time series.
Definition: LALDatatypes.h:571
REAL4Sequence * data
The sequence of sampled data.
Definition: LALDatatypes.h:576
LALUnit sampleUnits
The physical units of the quantity being sampled.
Definition: LALDatatypes.h:575
REAL8 deltaT
The time step between samples of the time series in seconds.
Definition: LALDatatypes.h:573
LIGOTimeGPS epoch
The start time of the time series.
Definition: LALDatatypes.h:572
REAL8 f0
The heterodyning frequency, in Hertz (zero if not heterodyned).
Definition: LALDatatypes.h:574
Vector of type REAL4, see DATATYPE-Vector types for more details.
Definition: LALDatatypes.h:145
REAL4 * data
Pointer to the data array.
Definition: LALDatatypes.h:150
UINT4 length
Number of elements in array.
Definition: LALDatatypes.h:149
See DATATYPE-FrequencySeries types for documentation.
Definition: LALDatatypes.h:889
REAL8Sequence * data
Definition: LALDatatypes.h:895
CHAR name[LALNameLength]
Definition: LALDatatypes.h:890
Time series of REAL8 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:580
REAL8Sequence * data
The sequence of sampled data.
Definition: LALDatatypes.h:586
LALUnit sampleUnits
The physical units of the quantity being sampled.
Definition: LALDatatypes.h:585
REAL8 f0
The heterodyning frequency, in Hertz (zero if not heterodyned).
Definition: LALDatatypes.h:584
REAL8 deltaT
The time step between samples of the time series in seconds.
Definition: LALDatatypes.h:583
LIGOTimeGPS epoch
The start time of the time series.
Definition: LALDatatypes.h:582
CHAR name[LALNameLength]
The name of the time series.
Definition: LALDatatypes.h:581
Vector of type REAL8, see DATATYPE-Vector types for more details.
Definition: LALDatatypes.h:154
REAL8 * data
Pointer to the data array.
Definition: LALDatatypes.h:159
UINT4 length
Number of elements in array.
Definition: LALDatatypes.h:158