LAL  7.5.0.1-b72065a
WindowTest.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2007 Bruce Allen, Duncan Brown, Jolien Creighton, Kipp
3  * Cannon, Teviet Creighton
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License as published by the
7  * Free Software Foundation; either version 2 of the License, or (at your
8  * option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with with program; see the file COPYING. If not, write to the Free
17  * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18  * 02110-1301 USA
19  */
20 
21 
22 #include <stdlib.h>
23 #include <stdio.h>
24 #include <string.h>
25 #include <math.h>
26 #include <lal/LALDatatypes.h>
27 #include <lal/Window.h>
28 #include <lal/XLALError.h>
29 #include <lal/LALMalloc.h>
30 
31 #define NWINDOWS 12
32 
33 
34 const char *names[] = {
35  "rectangular",
36  "Hann",
37  "Welch",
38  "Bartlett",
39  "Parzen",
40  "Papoulis",
41  "Hamming",
42  "Kaiser",
43  "Creighton",
44  "Tukey",
45  "Gauss",
46  "Lanczos"
47 };
48 
49 static int create_single_windows(REAL4Window **windows, int length, double kaiser_beta, double creighton_beta, double tukey_beta, double gauss_beta)
50 {
51 
52  for ( UINT4 i = 0; i < NWINDOWS; i ++ )
53  {
54  REAL8 beta;
55 
56  if ( !strcmp ( names[i], "Kaiser" ) ) {
57  beta = kaiser_beta;
58  } else if ( !strcmp ( names[i], "Creighton" ) ) {
59  beta = creighton_beta;
60  } else if ( !strcmp ( names[i], "Tukey" ) ) {
61  beta = tukey_beta;
62  } else if ( !strcmp ( names[i], "Gauss" ) ) {
63  beta = gauss_beta;
64  } else {
65  beta = 0;
66  }
67 
68  XLAL_CHECK ( (windows[i] = XLALCreateNamedREAL4Window ( names[i], beta, length )) != NULL, XLAL_EFUNC );
69 
70  } // for i < NWINDOWS
71 
72  return XLAL_SUCCESS;
73 
74 } // create_single_windows()
75 
76 
77 static void free_single_windows(REAL4Window **windows)
78 {
79  int i;
80  for(i = 0; i < NWINDOWS; i++)
81  XLALDestroyREAL4Window(windows[i]);
82 }
83 
84 
85 static int create_double_windows(REAL8Window **windows, int length, double kaiser_beta, double creighton_beta, double tukey_beta, double gauss_beta)
86 {
87 
88  for ( UINT4 i = 0; i < NWINDOWS; i ++ )
89  {
90  REAL8 beta;
91 
92  if ( !strcmp ( names[i], "Kaiser" ) ) {
93  beta = kaiser_beta;
94  } else if ( !strcmp ( names[i], "Creighton" ) ) {
95  beta = creighton_beta;
96  } else if ( !strcmp ( names[i], "Tukey" ) ) {
97  beta = tukey_beta;
98  } else if ( !strcmp ( names[i], "Gauss" ) ) {
99  beta = gauss_beta;
100  } else {
101  beta = 0;
102  }
103 
104  XLAL_CHECK ( (windows[i] = XLALCreateNamedREAL8Window ( names[i], beta, length )) != NULL, XLAL_EFUNC );
105 
106  } // for i < NWINDOWS
107 
108  return XLAL_SUCCESS;
109 
110 } // create_double_windows()
111 
112 
113 static void free_double_windows(REAL8Window **windows)
114 {
115  int i;
116  for(i = 0; i < NWINDOWS; i++)
117  XLALDestroyREAL8Window(windows[i]);
118 }
119 
120 
121 static double fractional_difference(double a, double b)
122 {
123  if(a != 0)
124  /* plan A */
125  return fabs((a - b) / a);
126  if(b != 0)
127  /* plan B */
128  return fabs((a - b) / b);
129  /* both are 0 */
130  return 0;
131 }
132 
133 
134 /*
135  * Sum-of-squares test.
136  */
137 
138 
139 static int _test_sum_of_squares(const double *correct, int length, double kaiser_beta, double creighton_beta, double tukey_beta, double gauss_beta)
140 {
141  const double max_error = 1e-12;
142  REAL4Window *windows1[NWINDOWS];
143  REAL8Window *windows2[NWINDOWS];
144  int i;
145 
146  XLAL_CHECK ( create_single_windows(windows1, length, kaiser_beta, creighton_beta, tukey_beta, gauss_beta) == XLAL_SUCCESS, XLAL_EFUNC );
147 
148  XLAL_CHECK ( create_double_windows(windows2, length, kaiser_beta, creighton_beta, tukey_beta, gauss_beta) == XLAL_SUCCESS, XLAL_EFUNC );
149 
150  for(i = 0; i < NWINDOWS; i++) {
151  if(fractional_difference(windows1[i]->sumofsquares, correct[i]) > max_error) {
152  XLAL_ERROR (XLAL_EFAILED, "error: single-precision %d-sample %s window fails sum-of-squares test: expected %.17g, got %.17g\n",
153  length, names[i], correct[i], windows1[i]->sumofsquares);
154  }
155  if(fractional_difference(windows2[i]->sumofsquares, correct[i]) > max_error) {
156  XLAL_ERROR (XLAL_EFAILED, "error: double-precision %d-sample %s window fails sum-of-squares test: expected %.17g, got %.17g\n", length, names[i], correct[i], windows1[i]->sumofsquares);
157  }
158  }
159 
160  free_single_windows(windows1);
161  free_double_windows(windows2);
162 
163  return XLAL_SUCCESS;
164 
165 } // _test_sum_of_squares()
166 
167 
168 static int test_sum_of_squares(void)
169 {
170  double correct_1024[] = {
171  1024.0, /* rectangle */
172  383.625, /* Hann */
173  545.6, /* Welch */
174  340.9996741609645, /* Bartlett */
175  275.84464285585898, /* Parzen */
176  300.06446358192244, /* Papoulis */
177  406.5466, /* Hamming */
178  375.17819205246843, /* Kaiser */
179  392.64506106773848, /* Creighton */
180  703.625, /* Tukey */
181  451.20289927038817, /* Gauss */
182  461.79413512656265 /* Lanczos */
183  };
184  double correct_1025[] = {
185  1025.0, /* rectangle */
186  384, /* Hann */
187  546.0 + 2.0 / 15.0, /* Welch */
188  341.333984375, /* Bartlett */
189  276.1142857152779, /* Parzen */
190  300.35778172967611, /* Papoulis */
191  406.944, /* Hamming */
192  375.544934942032, /* Kaiser */
193  393.028878331734330, /* Creighton */
194  704, /* Tukey */
195  451.64394001239367, /* Gauss */
196  462.24554679335205 /* Lanczos */
197  };
198 
199  XLAL_CHECK ( _test_sum_of_squares(correct_1024, 1024, 6, 2, 0.5, 2) == XLAL_SUCCESS, XLAL_EFUNC );
200 
201  XLAL_CHECK ( _test_sum_of_squares(correct_1025, 1025, 6, 2, 0.5, 2) == XLAL_SUCCESS, XLAL_EFUNC );
202 
203  return XLAL_SUCCESS;
204 
205 } // test_sum_of_squares()
206 
207 
208 /*
209  * Test end- and mid-points.
210  */
211 
212 
213 static int _test_end_and_midpoints(int length, double kaiser_beta, double creighton_beta, double tukey_beta, double gauss_beta)
214 {
215  const double max_error = 1e-16;
216  double correct_end[] = {
217  1, /* rectangle */
218  0, /* Hann */
219  0, /* Welch */
220  0, /* Bartlett */
221  0, /* Parzen */
222  0, /* Papoulis */
223  0.08, /* Hamming */
224  0.014873337104763204, /* Kaiser (to be adjusted below) */
225  0, /* Creighton (to be adjusted below) */
226  0, /* Tukey (to be adjusted below) */
227  0, /* Gauss (to be adjusted below) */
228  0 /* Lanczos */
229  };
230  double correct_mid[] = {
231  1, /* rectangle */
232  1, /* Hann */
233  1, /* Welch */
234  1, /* Bartlett */
235  1, /* Parzen */
236  1, /* Papoulis */
237  1, /* Hamming */
238  1, /* Kaiser */
239  1, /* Creighton */
240  1, /* Tukey */
241  1, /* Gauss */
242  1 /* Lanczos */
243  };
244  REAL4Window *windows1[NWINDOWS];
245  REAL8Window *windows2[NWINDOWS];
246  int i;
247 
248  /* set end value of Kaiser window */
249  correct_end[7] = kaiser_beta == 0 ? 1 : kaiser_beta == HUGE_VAL ? 0 : correct_end[7];
250 
251  /* set end value of Creighton window */
252  correct_end[8] = creighton_beta == 0 ? 1 : correct_end[8];
253 
254  /* set end value of Tukey window */
255  correct_end[9] = tukey_beta == 0 ? 1 : correct_end[9];
256 
257  /* set end value of Gauss window */
258  correct_end[10] = exp(-0.5 * gauss_beta * gauss_beta);
259 
260  XLAL_CHECK ( create_single_windows(windows1, length, kaiser_beta, creighton_beta, tukey_beta, gauss_beta) == XLAL_SUCCESS, XLAL_EFUNC );
261  XLAL_CHECK ( create_double_windows(windows2, length, kaiser_beta, creighton_beta, tukey_beta, gauss_beta) == XLAL_SUCCESS, XLAL_EFUNC );
262 
263  for(i = 0; i < NWINDOWS; i++) {
264  /* if length < 2, then there are no end samples */
265  if(length >= 2) {
266  if(fabs(windows1[i]->data->data[0] - (float) correct_end[i]) > max_error) {
267  XLAL_ERROR ( XLAL_EFAILED, "error: single-precision %d-sample %s window fails end-point test: expected %.17g, got %.17g\n", length, names[i], correct_end[i], windows1[i]->data->data[0]);
268  }
269  if(fabs(windows2[i]->data->data[0] - correct_end[i]) > max_error) {
270  XLAL_ERROR ( XLAL_EFAILED, "error: double-precision %d-sample %s window fails end-point test: expected %.17g, got %.17g\n", length, names[i], correct_end[i], windows2[i]->data->data[0]);
271  }
272  if(fabs(windows1[i]->data->data[length - 1] - (float) correct_end[i]) > max_error) {
273  XLAL_ERROR ( XLAL_EFAILED, "error: single-precision %d-sample %s window fails end-point test: expected %.17g, got %.17g\n", length, names[i], correct_end[i], windows1[i]->data->data[length - 1]);
274  }
275  if(fabs(windows2[i]->data->data[length - 1] - correct_end[i]) > max_error) {
276  XLAL_ERROR ( XLAL_EFAILED, "error: double-precision %d-sample %s window fails end-point test: expected %.17g, got %.17g\n", length, names[i], correct_end[i], windows2[i]->data->data[length - 1]);
277  }
278  }
279  /* even-lengthed windows have no middle sample */
280  if(length & 1) {
281  if(windows1[i]->data->data[length / 2] != (float) correct_mid[i]) {
282  XLAL_ERROR ( XLAL_EFAILED, "error: single-precision %d-sample %s window fails mid-point test: expected %.17g, got %.17g\n", length, names[i], correct_mid[i], windows1[i]->data->data[length / 2]);
283  }
284  if(windows2[i]->data->data[length / 2] != correct_mid[i]) {
285  XLAL_ERROR ( XLAL_EFAILED, "error: double-precision %d-sample %s window fails mid-point test: expected %.17g, got %.17g\n", length, names[i], correct_mid[i], windows1[i]->data->data[length / 2]);
286  }
287  }
288  }
289 
290  free_single_windows(windows1);
291  free_double_windows(windows2);
292 
293  return XLAL_SUCCESS;
294 }
295 
296 
297 static int test_end_and_midpoints(void)
298 {
299  int fail = 0;
300 
301  if(_test_end_and_midpoints(1025, HUGE_VAL, HUGE_VAL, 1, HUGE_VAL))
302  fail = 1;
303  if(_test_end_and_midpoints(1025, 6, 2, 0.5, 2))
304  fail = 1;
305  if(_test_end_and_midpoints(1025, 0, 0, 0, 0))
306  fail = 1;
307  if(_test_end_and_midpoints(1024, HUGE_VAL, HUGE_VAL, 1, HUGE_VAL))
308  fail = 1;
309  if(_test_end_and_midpoints(1024, 6, 2, 0.5, 2))
310  fail = 1;
311  if(_test_end_and_midpoints(1024, 0, 0, 0, 0))
312  fail = 1;
313  if(_test_end_and_midpoints(3, HUGE_VAL, HUGE_VAL, 1, HUGE_VAL))
314  fail = 1;
315  if(_test_end_and_midpoints(3, 6, 2, 0.5, 2))
316  fail = 1;
317  if(_test_end_and_midpoints(3, 0, 0, 0, 0))
318  fail = 1;
319  if(_test_end_and_midpoints(1, HUGE_VAL, HUGE_VAL, 1, HUGE_VAL))
320  fail = 1;
321  if(_test_end_and_midpoints(1, 6, 2, 0.5, 2))
322  fail = 1;
323  if(_test_end_and_midpoints(1, 0, 0, 0, 0))
324  fail = 1;
325 
326  return fail;
327 }
328 
329 
330 /*
331  * Input parameter safety
332  */
333 
334 
335 static int test_parameter_safety(void)
336 {
337  REAL4Window *window1;
338  REAL8Window *window2;
339  int fail = 0;
340 
341  window1 = XLALCreateKaiserREAL4Window(10, -1);
342  if(window1) {
343  fprintf(stderr, "error: single-precision Kaiser window accepted out-of-range parameter\n");
344  XLALDestroyREAL4Window(window1);
345  fail = 1;
346  }
347 
348  window2 = XLALCreateKaiserREAL8Window(10, -1);
349  if(window1) {
350  fprintf(stderr, "error: double-precision Kaiser window accepted out-of-range parameter\n");
351  XLALDestroyREAL8Window(window2);
352  fail = 1;
353  }
354 
355  window1 = XLALCreateCreightonREAL4Window(10, -1);
356  if(window1) {
357  fprintf(stderr, "error: single-precision Creighton window accepted out-of-range parameter\n");
358  XLALDestroyREAL4Window(window1);
359  fail = 1;
360  }
361 
362  window2 = XLALCreateCreightonREAL8Window(10, -1);
363  if(window1) {
364  fprintf(stderr, "error: double-precision Creighton window accepted out-of-range parameter\n");
365  XLALDestroyREAL8Window(window2);
366  fail = 1;
367  }
368 
369  window1 = XLALCreateTukeyREAL4Window(10, -1);
370  if(window1) {
371  fprintf(stderr, "error: single-precision Tukey window accepted out-of-range parameter\n");
372  XLALDestroyREAL4Window(window1);
373  fail = 1;
374  }
375 
376  window1 = XLALCreateTukeyREAL4Window(10, 2);
377  if(window1) {
378  fprintf(stderr, "error: single-precision Tukey window accepted out-of-range parameter\n");
379  XLALDestroyREAL4Window(window1);
380  fail = 1;
381  }
382 
383  window2 = XLALCreateTukeyREAL8Window(10, -1);
384  if(window1) {
385  fprintf(stderr, "error: double-precision Tukey window accepted out-of-range parameter\n");
386  XLALDestroyREAL8Window(window2);
387  fail = 1;
388  }
389 
390  window2 = XLALCreateTukeyREAL8Window(10, 2);
391  if(window1) {
392  fprintf(stderr, "error: double-precision Tukey window accepted out-of-range parameter\n");
393  XLALDestroyREAL8Window(window2);
394  fail = 1;
395  }
396 
397  window1 = XLALCreateGaussREAL4Window(10, -1);
398  if(window1) {
399  fprintf(stderr, "error: single-precision Gauss window accepted out-of-range parameter\n");
400  XLALDestroyREAL4Window(window1);
401  fail = 1;
402  }
403 
404  window2 = XLALCreateGaussREAL8Window(10, -1);
405  if(window1) {
406  fprintf(stderr, "error: double-precision Gauss window accepted out-of-range parameter\n");
407  XLALDestroyREAL8Window(window2);
408  fail = 1;
409  }
410 
411  return fail;
412 }
413 
414 
415 /*
416  * Display sample windows.
417  */
418 
419 
420 static void _display(int n, double kaiser_beta, double creighton_beta, double tukey_beta, double gauss_beta)
421 {
429  REAL8Window *kaiser = XLALCreateKaiserREAL8Window(n, kaiser_beta);
430  REAL8Window *creighton = XLALCreateCreightonREAL8Window(n, creighton_beta);
431  REAL8Window *tukey = XLALCreateTukeyREAL8Window(n, tukey_beta);
432  REAL8Window *gauss = XLALCreateGaussREAL8Window(n, gauss_beta);
434  int i;
435 
436  printf("n = %d\n", n);
437  printf("kaiser beta = %g\n", kaiser_beta);
438  printf("creighton beta = %g\n", creighton_beta);
439  printf("tukey beta = %g\n", tukey_beta);
440  printf("gaussian beta = %g\n", gauss_beta);
441 
442  printf(" rect hann welch bartlett parzen papoulis hamming kaiser creight tukey gauss lanczos\n");
443  for(i = 0; i < n; i++) {
444  printf("%8.6f", rectangle->data->data[i]);
445  printf(" %8.6f", hann->data->data[i]);
446  printf(" %8.6f", welch->data->data[i]);
447  printf(" %8.6f", bartlett->data->data[i]);
448  printf(" %8.6f", parzen->data->data[i]);
449  printf(" %8.6f", papoulis->data->data[i]);
450  printf(" %8.6f", hamming->data->data[i]);
451  printf(" %8.6f", kaiser->data->data[i]);
452  printf(" %8.6f", creighton->data->data[i]);
453  printf(" %8.6f", tukey->data->data[i]);
454  printf(" %8.6f", gauss->data->data[i]);
455  printf(" %8.6f", lanczos->data->data[i]);
456  printf("\n");
457  }
458  printf("\n");
459 
460  XLALDestroyREAL8Window(rectangle);
462  XLALDestroyREAL8Window(welch);
463  XLALDestroyREAL8Window(bartlett);
464  XLALDestroyREAL8Window(parzen);
465  XLALDestroyREAL8Window(papoulis);
466  XLALDestroyREAL8Window(hamming);
467  XLALDestroyREAL8Window(kaiser);
468  XLALDestroyREAL8Window(creighton);
469  XLALDestroyREAL8Window(tukey);
470  XLALDestroyREAL8Window(gauss);
472 }
473 
474 
475 static void display(void)
476 {
477  _display(14, 0, 0, 0, 0);
478  _display(15, 0, 0, 0, 0);
479  _display(14, 6, 2, 0.5, 2);
480  _display(15, 6, 2, 0.5, 2);
481  _display(14, HUGE_VAL, HUGE_VAL, 1, HUGE_VAL);
482  _display(15, HUGE_VAL, HUGE_VAL, 1, HUGE_VAL);
483  _display(5, 6, 2, 0.5, 2);
484  _display(4, 6, 2, 0.5, 2);
485  _display(3, 6, 2, 0.5, 2);
486  _display(2, 6, 2, 0.5, 2);
487  _display(1, 0, 0, 0, 0);
488  _display(1, 6, 2, 0.5, 2);
489  _display(1, HUGE_VAL, HUGE_VAL, 1.0, HUGE_VAL);
490 }
491 
492 
493 /*
494  * Entry point.
495  */
496 
497 
498 int main(void)
499 {
500  int fail = 0;
501  char *hosttype = getenv("hosttype");
502 
503  /* DEC Alpha's FPU is not capable of computing some of these window
504  * functions correctly. This is safe because in the cases where it
505  * fails it raises SIGFPE and the program crashes. I can't be
506  * bothered to code up the work-arounds needed to get the windows
507  * working on that platform. */
508 
509  if(!strcmp(hosttype ? hosttype : "", "alpha")) {
510  fprintf(stderr, "Window functions not computable on DEC Alpha, tests skipped! Set environment variable \"hosttype\" to something other than \"alpha\" to force tests\n");
511  exit(77);
512  }
513 
514  /* Numerical tests: assume that if the end-points, mid-points, and
515  * sum-of-squares are all as expected, then the window functions
516  * are correct */
517 
519  fail = 1;
520  if(test_sum_of_squares())
521  fail = 1;
522 
523  /* Test parameter safety */
524 
526  fail = 1;
527 
528  /* Verbosity */
529 
530  display();
531 
533 
534  return fail;
535 }
void LALCheckMemoryLeaks(void)
Definition: LALMalloc.c:784
#define fprintf
static double lanczos(double t, double a)
static int test_end_and_midpoints(void)
Definition: WindowTest.c:297
const char * names[]
Definition: WindowTest.c:34
#define NWINDOWS
Definition: WindowTest.c:31
static int _test_end_and_midpoints(int length, double kaiser_beta, double creighton_beta, double tukey_beta, double gauss_beta)
Definition: WindowTest.c:213
static double fractional_difference(double a, double b)
Definition: WindowTest.c:121
static int _test_sum_of_squares(const double *correct, int length, double kaiser_beta, double creighton_beta, double tukey_beta, double gauss_beta)
Definition: WindowTest.c:139
static int create_single_windows(REAL4Window **windows, int length, double kaiser_beta, double creighton_beta, double tukey_beta, double gauss_beta)
Definition: WindowTest.c:49
int main(void)
Definition: WindowTest.c:498
static void free_double_windows(REAL8Window **windows)
Definition: WindowTest.c:113
static void display(void)
Definition: WindowTest.c:475
static void free_single_windows(REAL4Window **windows)
Definition: WindowTest.c:77
static void _display(int n, double kaiser_beta, double creighton_beta, double tukey_beta, double gauss_beta)
Definition: WindowTest.c:420
static int test_sum_of_squares(void)
Definition: WindowTest.c:168
static int create_double_windows(REAL8Window **windows, int length, double kaiser_beta, double creighton_beta, double tukey_beta, double gauss_beta)
Definition: WindowTest.c:85
static int test_parameter_safety(void)
Definition: WindowTest.c:335
double REAL8
Double precision real floating-point number (8 bytes).
uint32_t UINT4
Four-byte unsigned integer.
static const INT4 a
Definition: Random.c:79
REAL8Window * XLALCreateWelchREAL8Window(UINT4 length)
Definition: Window.c:384
REAL4Window * XLALCreateTukeyREAL4Window(UINT4 length, REAL4 beta)
Definition: Window.c:739
REAL4Window * XLALCreateGaussREAL4Window(UINT4 length, REAL4 beta)
Definition: Window.c:745
REAL4Window * XLALCreateKaiserREAL4Window(UINT4 length, REAL4 beta)
Definition: Window.c:727
REAL4Window * XLALCreateNamedREAL4Window(const char *windowName, REAL8 beta, UINT4 length)
Definition: Window.c:936
REAL8Window * XLALCreateNamedREAL8Window(const char *windowName, REAL8 beta, UINT4 length)
Generic window-function wrapper, allowing to select a window by its name.
Definition: Window.c:877
REAL8Window * XLALCreateRectangularREAL8Window(UINT4 length)
Definition: Window.c:350
REAL4Window * XLALCreateCreightonREAL4Window(UINT4 length, REAL4 beta)
Definition: Window.c:733
REAL8Window * XLALCreateLanczosREAL8Window(UINT4 length)
Definition: Window.c:650
void XLALDestroyREAL8Window(REAL8Window *window)
Definition: Window.c:668
REAL8Window * XLALCreatePapoulisREAL8Window(UINT4 length)
Definition: Window.c:442
REAL8Window * XLALCreateHannREAL8Window(UINT4 length)
Definition: Window.c:367
REAL8Window * XLALCreateCreightonREAL8Window(UINT4 length, REAL8 beta)
Definition: Window.c:563
REAL8Window * XLALCreateGaussREAL8Window(UINT4 length, REAL8 beta)
Definition: Window.c:623
void XLALDestroyREAL4Window(REAL4Window *window)
Definition: Window.c:757
REAL8Window * XLALCreateKaiserREAL8Window(UINT4 length, REAL8 beta)
Definition: Window.c:478
REAL8Window * XLALCreateBartlettREAL8Window(UINT4 length)
Definition: Window.c:402
REAL8Window * XLALCreateHammingREAL8Window(UINT4 length)
Definition: Window.c:461
REAL8Window * XLALCreateTukeyREAL8Window(UINT4 length, REAL8 beta)
Definition: Window.c:597
REAL8Window * XLALCreateParzenREAL8Window(UINT4 length)
Definition: Window.c:421
#define XLAL_ERROR(...)
Macro to invoke a failure from a XLAL routine returning an integer.
Definition: XLALError.h:700
#define XLAL_CHECK(assertion,...)
Macro to test an assertion and invoke a failure if it is not true in a function that returns an integ...
Definition: XLALError.h:810
@ XLAL_SUCCESS
Success return value (not an error number)
Definition: XLALError.h:401
@ XLAL_EFUNC
Internal function call failed bit: "or" this with existing error number.
Definition: XLALError.h:462
@ XLAL_EFAILED
Generic failure.
Definition: XLALError.h:418
Structure for storing REAL4 window function data, providing storage for a sequence of samples as well...
Definition: Window.h:243
REAL4Sequence * data
The window function samples.
Definition: Window.h:244
REAL8 * data
Pointer to the data array.
Definition: LALDatatypes.h:159
Structure for storing REAL8 window function data, providing storage for a sequence of samples as well...
Definition: Window.h:254
REAL8Sequence * data
The window function samples.
Definition: Window.h:255