LAL  7.5.0.1-89842e6
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 
68 int 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