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
PrintFTSeriesTest.c
Go to the documentation of this file.
1/*
2* Copyright (C) 2007 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 PrintFTSeries_h
23 * \author J. T. Whelan <jtwhelan@loyno.edu>
24 *
25 * \brief Tests the routines in \ref PrintTimeSeries_c and \ref PrintFrequencySeries_c.
26 *
27 * ### Usage ###
28 *
29 * \code
30 * PrintFTSeriesTest
31 * \endcode
32 *
33 * ### Description ###
34 *
35 * This program generates and prints a sequence of frequency and time
36 * series; the program only detects errors coming from other LAL
37 * functions, so more in-depth testing requires examinaton of
38 * the output files. (The program \c ReadFTSeriesTest also tests
39 * the routines in \ref PrintFrequencySeries_c and
40 * \ref ReadFrequencySeries_c.)
41 *
42 * ### Notes ###
43 *
44 * The program as written generates and prints single and double
45 * precision real and complex time and frequency series. The routines
46 * for integers are not tested.
47 */
48
49/**\name Error Codes */ /** @{ */
50#define PRINTFTSERIESTESTC_ENOM 0 /**< Nominal exit */
51#define PRINTFTSERIESTESTC_EFUN 1 /**< Error from LAL function */
52/** @} */
53
54/** \cond DONT_DOXYGEN */
55
56#define PRINTFTSERIESTESTC_MSGENOM "Nominal exit"
57#define PRINTFTSERIESTESTC_MSGEFUN "Error from LAL function"
58
59
60#include <complex.h>
61#include <lal/Units.h>
62#include <lal/PrintFTSeries.h>
63#include <math.h>
64#include <lal/LALStdlib.h>
65#include <lal/AVFactories.h>
66
67
68int main( void )
69{
70 static LALStatus status;
71
72 COMPLEX16Sequence *zSequence;
73 COMPLEX8Sequence *cSequence;
74 REAL8Sequence *dSequence;
75 REAL4Sequence *sSequence;
76
77 COMPLEX16TimeSeries zTimeSeries;
78 COMPLEX8TimeSeries cTimeSeries;
79 REAL8TimeSeries dTimeSeries;
80 REAL4TimeSeries sTimeSeries;
81
82 COMPLEX16FrequencySeries zFrequencySeries;
83 COMPLEX8FrequencySeries cFrequencySeries;
84 REAL8FrequencySeries dFrequencySeries;
85 REAL4FrequencySeries sFrequencySeries;
86
87 COMPLEX16 *z;
88 COMPLEX8 *c;
89 REAL8 *d;
90 REAL4 *s;
91
92 INT2 n;
93 LIGOTimeGPS t80;
94 LIGOTimeGPS t00;
95 LIGOTimeGPS t10;
96 UINT4 i;
97
98 t80.gpsSeconds = 0;
99 t80.gpsNanoSeconds = 0;
100
101 t00.gpsSeconds = 3600 * 24 * (15 * 365 + 5 * 366);
102 t00.gpsNanoSeconds = 0;
103
104 t10.gpsSeconds = 3600 * 24 * (22 * 365 + 8 * 366);
105 t10.gpsNanoSeconds = 0;
106
107 fprintf(stderr,"Printing COMPLEX16TimeSeries to zTS.dat\n");
108
109 zSequence = NULL;
110
111 LALZCreateVector( &status, &zSequence, 8 );
112 if (status.statusCode != 0)
113 {
114 fprintf(stderr,"[%i]: %s [PrintFTSeriesTest:%s]\n",status.statusCode,
115 status.statusDescription, PRINTFTSERIESTESTC_MSGEFUN);
117 }
118 for ( n=zSequence->length, z=zSequence->data; n > 0 ; --n, ++z ) {
119 *z = sinh(90.0*(4-n));
120 *z += - I / (1e-300 + creal(*z));
121 }
122 strncpy(zTimeSeries.name,"Complex time series",LALNameLength);
123 zTimeSeries.sampleUnits = lalDimensionlessUnit;
124 zTimeSeries.deltaT = 1e-3;
125 zTimeSeries.f0 = 0;
126 zTimeSeries.epoch = t80;
127 zTimeSeries.data = zSequence;
128
129 LALZPrintTimeSeries(&zTimeSeries, "zTS.dat");
130 if (status.statusCode != 0)
131 {
132 fprintf(stderr,"[%i]: %s [PrintFTSeriesTest:%s]\n",status.statusCode,
133 status.statusDescription, PRINTFTSERIESTESTC_MSGEFUN);
135 }
136
137 fprintf(stderr,"Printing COMPLEX16FrequencySeries to zFS.dat\n");
138
139 strncpy(zFrequencySeries.name,"Complex frequency series",LALNameLength);
140 zFrequencySeries.sampleUnits = lalDimensionlessUnit;
141 zFrequencySeries.deltaF = 1;
142 zFrequencySeries.epoch = t80;
143 zFrequencySeries.f0 = 0;
144 zFrequencySeries.data = zSequence;
145
146 LALZPrintFrequencySeries(&zFrequencySeries, "zFS.dat");
147 if (status.statusCode != 0)
148 {
149 fprintf(stderr,"[%i]: %s [PrintFTSeriesTest:%s]\n",status.statusCode,
150 status.statusDescription, PRINTFTSERIESTESTC_MSGEFUN);
152 }
153
154 LALZDestroyVector( &status, &zSequence );
155 if (status.statusCode != 0)
156 {
157 fprintf(stderr,"[%i]: %s [PrintFTSeriesTest:%s]\n",status.statusCode,
158 status.statusDescription, PRINTFTSERIESTESTC_MSGEFUN);
160 }
161
162 cSequence = NULL;
163
164 fprintf(stderr,"Printing COMPLEX8TimeSeries to cTS.dat\n");
165
166 LALCCreateVector( &status, &cSequence, 8 );
167 if (status.statusCode != 0)
168 {
169 fprintf(stderr,"[%i]: %s [PrintFTSeriesTest:%s]\n",status.statusCode,
170 status.statusDescription, PRINTFTSERIESTESTC_MSGEFUN);
172 }
173 for ( n=cSequence->length, c=cSequence->data; n > 0 ; --n, ++c ) {
174 *c = sinh(9.0*(4-n));
175 *c += - I / (1e-30 + creal(*c));
176 }
177 strncpy(cTimeSeries.name,"Complex time series",LALNameLength);
178 cTimeSeries.sampleUnits = lalDimensionlessUnit;
179 cTimeSeries.deltaT = 1.0/1024.0;
180 cTimeSeries.f0 = 0;
181 cTimeSeries.epoch = t00;
182 cTimeSeries.data = cSequence;
183
184 LALCPrintTimeSeries(&cTimeSeries, "cTS.dat");
185 if (status.statusCode != 0)
186 {
187 fprintf(stderr,"[%i]: %s [PrintFTSeriesTest:%s]\n",status.statusCode,
188 status.statusDescription, PRINTFTSERIESTESTC_MSGEFUN);
190 }
191
192 fprintf(stderr,"Printing COMPLEX8FrequencySeries to cFS.dat\n");
193
194 strncpy(cFrequencySeries.name,"Complex frequency series",LALNameLength);
195 cFrequencySeries.sampleUnits = lalDimensionlessUnit;
196 cFrequencySeries.deltaF = 1;
197 cFrequencySeries.epoch = t80;
198 cFrequencySeries.f0 = 0;
199 cFrequencySeries.data = cSequence;
200
201 LALCPrintFrequencySeries(&cFrequencySeries, "cFS.dat");
202 if (status.statusCode != 0)
203 {
204 fprintf(stderr,"[%i]: %s [PrintFTSeriesTest:%s]\n",status.statusCode,
205 status.statusDescription, PRINTFTSERIESTESTC_MSGEFUN);
207 }
208
209 fprintf(stderr,"Printing REAL8TimeSeries to dTS.dat\n");
210
211 dSequence = NULL;
212
213 LALDCreateVector( &status, &dSequence, 8 );
214 if (status.statusCode != 0)
215 {
216 fprintf(stderr,"[%i]: %s [PrintFTSeriesTest:%s]\n",status.statusCode,
217 status.statusDescription, PRINTFTSERIESTESTC_MSGEFUN);
219 }
220 for ( n=dSequence->length, d=dSequence->data; n > 0 ; --n, ++d ) {
221 *d = sinh(90.0*(4-n));
222 }
223 strncpy(dTimeSeries.name,"Real time series",LALNameLength);
224 dTimeSeries.sampleUnits = lalDimensionlessUnit;
225 dTimeSeries.f0 = 0;
226 dTimeSeries.deltaT = 1.0/1024.0;
227 dTimeSeries.epoch = t00;
228 dTimeSeries.data = dSequence;
229
230 LALDPrintTimeSeries(&dTimeSeries, "dTS.dat");
231 if (status.statusCode != 0)
232 {
233 fprintf(stderr,"[%i]: %s [PrintFTSeriesTest:%s]\n",status.statusCode,
234 status.statusDescription, PRINTFTSERIESTESTC_MSGEFUN);
236 }
237
238 fprintf(stderr,"Printing REAL8FrequencySeries to dFS.dat\n");
239
240/* for ( n=dSequence->length, d=dSequence->data; n > 0 ; --n, ++d ) { */
241/* *d = 1 / (1e-300 + *d); */
242/* } */
243 for ( n=dSequence->length, d=dSequence->data; n > 0 ; --n, ++d ) {
244 *d = 1 / (1e-300 + *d);
245 }
246 strncpy(dFrequencySeries.name,"Real frequency series",LALNameLength);
247 dFrequencySeries.sampleUnits = lalDimensionlessUnit;
248 dFrequencySeries.f0 = 0 ;
249 dFrequencySeries.deltaF = 128;
250 dFrequencySeries.epoch = t00;
251 dFrequencySeries.data = dSequence;
252 LALDPrintFrequencySeries(&dFrequencySeries, "dFS.dat");
253 if (status.statusCode != 0)
254 {
255 fprintf(stderr,"[%i]: %s [PrintFTSeriesTest:%s]\n",status.statusCode,
256 status.statusDescription, PRINTFTSERIESTESTC_MSGEFUN);
258 }
259
260 LALDDestroyVector( &status, &dSequence );
261 if (status.statusCode != 0)
262 {
263 fprintf(stderr,"[%i]: %s [PrintFTSeriesTest:%s]\n",status.statusCode,
264 status.statusDescription, PRINTFTSERIESTESTC_MSGEFUN);
266 }
267
268 fprintf(stderr,"Printing REAL4TimeSeries to sFS.dat\n");
269
270 sSequence = NULL;
271
272 LALSCreateVector( &status, &sSequence, 8 );
273 if (status.statusCode != 0)
274 {
275 fprintf(stderr,"[%i]: %s [PrintFTSeriesTest:%s]\n",status.statusCode,
276 status.statusDescription, PRINTFTSERIESTESTC_MSGEFUN);
278 }
279 for ( n=sSequence->length, s=sSequence->data; n > 0 ; --n, ++s ) {
280 *s = sinh(9.0*(4-n));
281 }
282 strncpy(sFrequencySeries.name,"Real time series",LALNameLength);
283 sTimeSeries.sampleUnits = lalDimensionlessUnit;
284 sTimeSeries.deltaT = 1.0/1024.0;
285 sTimeSeries.f0 = 0;
286 sTimeSeries.epoch = t10;
287 sTimeSeries.data = sSequence;
288 LALSPrintTimeSeries(&sTimeSeries, "sTS.dat");
289 if (status.statusCode != 0)
290 {
291 fprintf(stderr,"[%i]: %s [PrintFTSeriesTest:%s]\n",status.statusCode,
292 status.statusDescription, PRINTFTSERIESTESTC_MSGEFUN);
294 }
295
296 fprintf(stderr,"Printing REAL4FrequencySeries to sFS.dat\n");
297
298 for ( n=sSequence->length, s=sSequence->data; n > 0 ; --n, ++s ) {
299 *s = 1 / (1e-30 + *s);
300 }
301 strncpy(sFrequencySeries.name,"Real frequency series",LALNameLength);
302 sFrequencySeries.sampleUnits = lalDimensionlessUnit;
303 sFrequencySeries.f0 = 0;
304 sFrequencySeries.deltaF = 128;
305 sFrequencySeries.epoch = t10;
306 sFrequencySeries.data = sSequence;
307 LALSPrintFrequencySeries(&sFrequencySeries, "sFS.dat");
308 if (status.statusCode != 0)
309 {
310 fprintf(stderr,"[%i]: %s [PrintFTSeriesTest:%s]\n",status.statusCode,
311 status.statusDescription, PRINTFTSERIESTESTC_MSGEFUN);
313 }
314
315 LALSDestroyVector( &status, &sSequence );
316 if (status.statusCode != 0)
317 {
318 fprintf(stderr,"[%i]: %s [PrintFTSeriesTest:%s]\n",status.statusCode,
319 status.statusDescription, PRINTFTSERIESTESTC_MSGEFUN);
321 }
322
323 fprintf(stderr,"Printing heterodyned REAL8FrequencySeries to hFSe.dat\n");
324
325 strncpy(cFrequencySeries.name,"Heterodyned frequency series",LALNameLength);
326 cFrequencySeries.sampleUnits = lalDimensionlessUnit;
327 cFrequencySeries.f0 = 500.0;
328 cFrequencySeries.deltaF = 50.0;
329 cFrequencySeries.epoch = t00;
330 cFrequencySeries.data = cSequence;
331
332 for (i=0; i<cSequence->length; ++i) {
333 cSequence->data[i] = 1.0*i;
334 cSequence->data[i] += I * (cFrequencySeries.f0 + cFrequencySeries.deltaF * i);
335 }
336
337 LALCPrintFrequencySeries(&cFrequencySeries, "hFSe.dat");
338 if (status.statusCode != 0)
339 {
340 fprintf(stderr,"[%i]: %s [PrintFTSeriesTest:%s]\n",status.statusCode,
341 status.statusDescription, PRINTFTSERIESTESTC_MSGEFUN);
343 }
344
345 LALCDestroyVector( &status, &cSequence );
346 if (status.statusCode != 0)
347 {
348 fprintf(stderr,"[%i]: %s [PrintFTSeriesTest:%s]\n",status.statusCode,
349 status.statusDescription, PRINTFTSERIESTESTC_MSGEFUN);
351 }
352
353 fprintf(stderr,"Printing heterodyned REAL8FrequencySeries to hFSo.dat\n");
354
355 LALCCreateVector( &status, &cSequence, 9 );
356 if (status.statusCode != 0)
357 {
358 fprintf(stderr,"[%i]: %s [PrintFTSeriesTest:%s]\n",status.statusCode,
359 status.statusDescription, PRINTFTSERIESTESTC_MSGEFUN);
361 }
362
363 cFrequencySeries.sampleUnits = lalDimensionlessUnit;
364 cFrequencySeries.f0 = 500.0;
365 cFrequencySeries.deltaF = 50.0;
366 cFrequencySeries.epoch = t00;
367 cFrequencySeries.data = cSequence;
368
369 for (i=0; i<cSequence->length; ++i) {
370 cSequence->data[i] = 1.0*i;
371 cSequence->data[i] += I * (cFrequencySeries.f0 + cFrequencySeries.deltaF*i);
372 }
373
374 LALCPrintFrequencySeries(&cFrequencySeries, "hFSo.dat");
375 if (status.statusCode != 0)
376 {
377 fprintf(stderr,"[%i]: %s [PrintFTSeriesTest:%s]\n",status.statusCode,
378 status.statusDescription, PRINTFTSERIESTESTC_MSGEFUN);
380 }
381 LALCDestroyVector( &status, &cSequence );
382 if (status.statusCode != 0)
383 {
384 fprintf(stderr,"[%i]: %s [PrintFTSeriesTest:%s]\n",status.statusCode,
385 status.statusDescription, PRINTFTSERIESTESTC_MSGEFUN);
387 }
388
390
391 return 0;
392}
393/** \endcond */
void LALCheckMemoryLeaks(void)
Definition: LALMalloc.c:784
#define PRINTFTSERIESTESTC_EFUN
Error from LAL function.
#define fprintf
int main(int argc, char *argv[])
Definition: cache.c:25
double complex COMPLEX16
Double-precision floating-point complex number (16 bytes total)
double REAL8
Double precision real floating-point number (8 bytes).
int16_t INT2
Two-byte signed integer.
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)
const LALUnit lalDimensionlessUnit
dimensionless units
Definition: UnitDefs.c:156
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
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
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
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