Loading [MathJax]/extensions/TeX/AMSsymbols.js
LAL 7.7.0.1-00ddc7f
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
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
34const 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
49static 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
77static void free_single_windows(REAL4Window **windows)
78{
79 int i;
80 for(i = 0; i < NWINDOWS; i++)
81 XLALDestroyREAL4Window(windows[i]);
82}
83
84
85static 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
113static void free_double_windows(REAL8Window **windows)
114{
115 int i;
116 for(i = 0; i < NWINDOWS; i++)
117 XLALDestroyREAL8Window(windows[i]);
118}
119
120
121static 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
139static 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
168static 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
213static 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
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
335static 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
420static 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);
463 XLALDestroyREAL8Window(bartlett);
465 XLALDestroyREAL8Window(papoulis);
466 XLALDestroyREAL8Window(hamming);
468 XLALDestroyREAL8Window(creighton);
472}
473
474
475static 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
498int 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;
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 * XLALCreateBartlettREAL8Window(UINT4 length)
Definition: Window.c:402
REAL8Window * XLALCreatePapoulisREAL8Window(UINT4 length)
Definition: Window.c:442
REAL8Window * XLALCreateGaussREAL8Window(UINT4 length, REAL8 beta)
Definition: Window.c:623
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 * XLALCreateLanczosREAL8Window(UINT4 length)
Definition: Window.c:650
REAL8Window * XLALCreateCreightonREAL8Window(UINT4 length, REAL8 beta)
Definition: Window.c:563
REAL8Window * XLALCreateHammingREAL8Window(UINT4 length)
Definition: Window.c:461
REAL8Window * XLALCreateWelchREAL8Window(UINT4 length)
Definition: Window.c:384
REAL4Window * XLALCreateTukeyREAL4Window(UINT4 length, REAL4 beta)
Definition: Window.c:739
REAL8Window * XLALCreateTukeyREAL8Window(UINT4 length, REAL8 beta)
Definition: Window.c:597
void XLALDestroyREAL8Window(REAL8Window *window)
Definition: Window.c:668
REAL4Window * XLALCreateKaiserREAL4Window(UINT4 length, REAL4 beta)
Definition: Window.c:727
REAL8Window * XLALCreateHannREAL8Window(UINT4 length)
Definition: Window.c:367
REAL4Window * XLALCreateNamedREAL4Window(const char *windowName, REAL8 beta, UINT4 length)
Definition: Window.c:936
void XLALDestroyREAL4Window(REAL4Window *window)
Definition: Window.c:757
REAL8Window * XLALCreateParzenREAL8Window(UINT4 length)
Definition: Window.c:421
REAL8Window * XLALCreateRectangularREAL8Window(UINT4 length)
Definition: Window.c:350
REAL4Window * XLALCreateCreightonREAL4Window(UINT4 length, REAL4 beta)
Definition: Window.c:733
REAL4Window * XLALCreateGaussREAL4Window(UINT4 length, REAL4 beta)
Definition: Window.c:745
REAL8Window * XLALCreateKaiserREAL8Window(UINT4 length, REAL8 beta)
Definition: Window.c:478
#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