00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217 #include <lal/LALStdlib.h>
00218 #include <lal/LALConstants.h>
00219 #include <lal/AVFactories.h>
00220 #include <math.h>
00221 #include <lal/IIRFilter.h>
00222 #include <lal/BandPassTimeSeries.h>
00223
00224 NRCSID(BUTTERWORTHTIMESERIESC,"$Id: ButterworthTimeSeries.c,v 1.14 2007/06/08 14:41:56 bema Exp $");
00225
00226 extern INT4 lalDebugLevel;
00227
00228 static int
00229 XLALParsePassBandParamStruc( PassBandParamStruc *params,
00230 INT4 *n,
00231 REAL8 *wc,
00232 REAL8 deltaT );
00233
00234
00235 int XLALButterworthREAL4TimeSeries( REAL4TimeSeries *series, PassBandParamStruc *params )
00236 {
00237 static const char *func = "XLALButterworthREAL4TimeSeries";
00238 INT4 n;
00239 INT4 type;
00240 INT4 i;
00241 INT4 j;
00242 REAL8 wc;
00243
00244
00245 if ( ! params || ! series || ! series->data || ! series->data->data )
00246 XLAL_ERROR( func, XLAL_EFAULT );
00247
00248
00249
00250
00251 type=XLALParsePassBandParamStruc(params,&n,&wc,series->deltaT);
00252 if(type<0)
00253 XLAL_ERROR( func, XLAL_EINVAL );
00254
00255
00256
00257
00258
00259
00260
00261 for(i=0,j=n-1;i<j;i++,j--){
00262 REAL8 theta=LAL_PI*(i+0.5)/n;
00263 REAL8 ar=wc*cos(theta);
00264 REAL8 ai=wc*sin(theta);
00265 REAL8IIRFilter *iirFilter=NULL;
00266 COMPLEX16ZPGFilter *zpgFilter=NULL;
00267
00268
00269 if(type==2){
00270 zpgFilter = XLALCreateCOMPLEX16ZPGFilter(2,2);
00271 if ( ! zpgFilter )
00272 XLAL_ERROR( func, XLAL_EFUNC );
00273 zpgFilter->zeros->data[0].re=0.0;
00274 zpgFilter->zeros->data[0].im=0.0;
00275 zpgFilter->zeros->data[1].re=0.0;
00276 zpgFilter->zeros->data[1].im=0.0;
00277 zpgFilter->gain.re=1.0;
00278 zpgFilter->gain.im=0.0;
00279 }else{
00280 zpgFilter = XLALCreateCOMPLEX16ZPGFilter(0,2);
00281 if ( ! zpgFilter )
00282 XLAL_ERROR( func, XLAL_EFUNC );
00283 zpgFilter->gain.re=-wc*wc;
00284 zpgFilter->gain.im=0.0;
00285 }
00286 zpgFilter->poles->data[0].re=ar;
00287 zpgFilter->poles->data[0].im=ai;
00288 zpgFilter->poles->data[1].re=-ar;
00289 zpgFilter->poles->data[1].im=ai;
00290
00291
00292 if (XLALWToZCOMPLEX16ZPGFilter(zpgFilter)<0)
00293 {
00294 XLALDestroyCOMPLEX16ZPGFilter(zpgFilter);
00295 XLAL_ERROR( func, XLAL_EFUNC );
00296 }
00297 iirFilter = XLALCreateREAL8IIRFilter(zpgFilter);
00298 if (!iirFilter)
00299 {
00300 XLALDestroyCOMPLEX16ZPGFilter(zpgFilter);
00301 XLAL_ERROR( func, XLAL_EFUNC );
00302 }
00303
00304
00305 if (XLALIIRFilterREAL4Vector(series->data,iirFilter)<0
00306 || XLALIIRFilterReverseREAL4Vector(series->data,iirFilter)<0)
00307 {
00308 XLALDestroyCOMPLEX16ZPGFilter(zpgFilter);
00309 XLALDestroyREAL8IIRFilter(iirFilter);
00310 XLAL_ERROR( func, XLAL_EFUNC );
00311 }
00312
00313
00314 XLALDestroyCOMPLEX16ZPGFilter(zpgFilter);
00315 XLALDestroyREAL8IIRFilter(iirFilter);
00316 }
00317
00318
00319
00320 if(i==j){
00321 REAL8IIRFilter *iirFilter=NULL;
00322 COMPLEX16ZPGFilter *zpgFilter=NULL;
00323
00324
00325 if(type==2){
00326 zpgFilter=XLALCreateCOMPLEX16ZPGFilter(1,1);
00327 if(!zpgFilter)
00328 XLAL_ERROR(func,XLAL_EFUNC);
00329 zpgFilter->zeros->data->re=0.0;
00330 zpgFilter->zeros->data->im=0.0;
00331 zpgFilter->gain.re=1.0;
00332 zpgFilter->gain.im=0.0;
00333 }else{
00334 zpgFilter=XLALCreateCOMPLEX16ZPGFilter(0,1);
00335 if(!zpgFilter)
00336 XLAL_ERROR(func,XLAL_EFUNC);
00337 zpgFilter->gain.re=0.0;
00338 zpgFilter->gain.im=-wc;
00339 }
00340 zpgFilter->poles->data->re=0.0;
00341 zpgFilter->poles->data->im=wc;
00342
00343
00344 if (XLALWToZCOMPLEX16ZPGFilter(zpgFilter)<0)
00345 {
00346 XLALDestroyCOMPLEX16ZPGFilter(zpgFilter);
00347 XLAL_ERROR(func,XLAL_EFUNC);
00348 }
00349 iirFilter=XLALCreateREAL8IIRFilter(zpgFilter);
00350 if (!iirFilter)
00351 {
00352 XLALDestroyCOMPLEX16ZPGFilter(zpgFilter);
00353 XLAL_ERROR(func,XLAL_EFUNC);
00354 }
00355
00356
00357 if (XLALIIRFilterREAL4Vector(series->data,iirFilter)<0
00358 || XLALIIRFilterReverseREAL4Vector(series->data,iirFilter)<0)
00359 {
00360 XLALDestroyCOMPLEX16ZPGFilter(zpgFilter);
00361 XLALDestroyREAL8IIRFilter(iirFilter);
00362 XLAL_ERROR( func, XLAL_EFUNC );
00363 }
00364
00365
00366 XLALDestroyCOMPLEX16ZPGFilter(zpgFilter);
00367 XLALDestroyREAL8IIRFilter(iirFilter);
00368 }
00369
00370 return 0;
00371 }
00372
00373
00374 int XLALButterworthREAL8TimeSeries( REAL8TimeSeries *series, PassBandParamStruc *params )
00375 {
00376 static const char *func = "XLALButterworthREAL8TimeSeries";
00377 INT4 n;
00378 INT4 type;
00379 INT4 i;
00380 INT4 j;
00381 REAL8 wc;
00382
00383
00384 if ( ! params || ! series || ! series->data || ! series->data->data )
00385 XLAL_ERROR( func, XLAL_EFAULT );
00386
00387
00388
00389
00390 type=XLALParsePassBandParamStruc(params,&n,&wc,series->deltaT);
00391 if(type<0)
00392 XLAL_ERROR( func, XLAL_EINVAL );
00393
00394
00395
00396
00397
00398
00399
00400 for(i=0,j=n-1;i<j;i++,j--){
00401 REAL8 theta=LAL_PI*(i+0.5)/n;
00402 REAL8 ar=wc*cos(theta);
00403 REAL8 ai=wc*sin(theta);
00404 REAL8IIRFilter *iirFilter=NULL;
00405 COMPLEX16ZPGFilter *zpgFilter=NULL;
00406
00407
00408 if(type==2){
00409 zpgFilter = XLALCreateCOMPLEX16ZPGFilter(2,2);
00410 if ( ! zpgFilter )
00411 XLAL_ERROR( func, XLAL_EFUNC );
00412 zpgFilter->zeros->data[0].re=0.0;
00413 zpgFilter->zeros->data[0].im=0.0;
00414 zpgFilter->zeros->data[1].re=0.0;
00415 zpgFilter->zeros->data[1].im=0.0;
00416 zpgFilter->gain.re=1.0;
00417 zpgFilter->gain.im=0.0;
00418 }else{
00419 zpgFilter = XLALCreateCOMPLEX16ZPGFilter(0,2);
00420 if ( ! zpgFilter )
00421 XLAL_ERROR( func, XLAL_EFUNC );
00422 zpgFilter->gain.re=-wc*wc;
00423 zpgFilter->gain.im=0.0;
00424 }
00425 zpgFilter->poles->data[0].re=ar;
00426 zpgFilter->poles->data[0].im=ai;
00427 zpgFilter->poles->data[1].re=-ar;
00428 zpgFilter->poles->data[1].im=ai;
00429
00430
00431 if (XLALWToZCOMPLEX16ZPGFilter(zpgFilter)<0)
00432 {
00433 XLALDestroyCOMPLEX16ZPGFilter(zpgFilter);
00434 XLAL_ERROR( func, XLAL_EFUNC );
00435 }
00436 iirFilter = XLALCreateREAL8IIRFilter(zpgFilter);
00437 if (!iirFilter)
00438 {
00439 XLALDestroyCOMPLEX16ZPGFilter(zpgFilter);
00440 XLAL_ERROR( func, XLAL_EFUNC );
00441 }
00442
00443
00444 if (XLALIIRFilterREAL8Vector(series->data,iirFilter)<0
00445 || XLALIIRFilterReverseREAL8Vector(series->data,iirFilter)<0)
00446 {
00447 XLALDestroyCOMPLEX16ZPGFilter(zpgFilter);
00448 XLALDestroyREAL8IIRFilter(iirFilter);
00449 XLAL_ERROR( func, XLAL_EFUNC );
00450 }
00451
00452
00453 XLALDestroyCOMPLEX16ZPGFilter(zpgFilter);
00454 XLALDestroyREAL8IIRFilter(iirFilter);
00455 }
00456
00457
00458
00459 if(i==j){
00460 REAL8IIRFilter *iirFilter=NULL;
00461 COMPLEX16ZPGFilter *zpgFilter=NULL;
00462
00463
00464 if(type==2){
00465 zpgFilter=XLALCreateCOMPLEX16ZPGFilter(1,1);
00466 if(!zpgFilter)
00467 XLAL_ERROR(func,XLAL_EFUNC);
00468 zpgFilter->zeros->data->re=0.0;
00469 zpgFilter->zeros->data->im=0.0;
00470 zpgFilter->gain.re=1.0;
00471 zpgFilter->gain.im=0.0;
00472 }else{
00473 zpgFilter=XLALCreateCOMPLEX16ZPGFilter(0,1);
00474 if(!zpgFilter)
00475 XLAL_ERROR(func,XLAL_EFUNC);
00476 zpgFilter->gain.re=0.0;
00477 zpgFilter->gain.im=-wc;
00478 }
00479 zpgFilter->poles->data->re=0.0;
00480 zpgFilter->poles->data->im=wc;
00481
00482
00483 if (XLALWToZCOMPLEX16ZPGFilter(zpgFilter)<0)
00484 {
00485 XLALDestroyCOMPLEX16ZPGFilter(zpgFilter);
00486 XLAL_ERROR(func,XLAL_EFUNC);
00487 }
00488 iirFilter=XLALCreateREAL8IIRFilter(zpgFilter);
00489 if (!iirFilter)
00490 {
00491 XLALDestroyCOMPLEX16ZPGFilter(zpgFilter);
00492 XLAL_ERROR(func,XLAL_EFUNC);
00493 }
00494
00495
00496 if (XLALIIRFilterREAL8Vector(series->data,iirFilter)<0
00497 || XLALIIRFilterReverseREAL8Vector(series->data,iirFilter)<0)
00498 {
00499 XLALDestroyCOMPLEX16ZPGFilter(zpgFilter);
00500 XLALDestroyREAL8IIRFilter(iirFilter);
00501 XLAL_ERROR( func, XLAL_EFUNC );
00502 }
00503
00504
00505 XLALDestroyCOMPLEX16ZPGFilter(zpgFilter);
00506 XLALDestroyREAL8IIRFilter(iirFilter);
00507 }
00508
00509 return 0;
00510 }
00511
00512
00513 int XLALLowPassREAL4TimeSeries( REAL4TimeSeries *series,
00514 REAL8 frequency, REAL8 amplitude, INT4 filtorder )
00515 {
00516 static const char *func = "XLALLowPassREAL4TimeSeries";
00517 PassBandParamStruc params;
00518 params.nMax = filtorder;
00519 params.f1 = frequency;
00520 params.a1 = amplitude;
00521 params.f2 = -1;
00522 params.a2 = -1;
00523 if ( XLALButterworthREAL4TimeSeries( series, ¶ms ) < 0 )
00524 XLAL_ERROR( func, XLAL_EFUNC );
00525 return 0;
00526 }
00527
00528 int XLALLowPassREAL8TimeSeries( REAL8TimeSeries *series,
00529 REAL8 frequency, REAL8 amplitude, INT4 filtorder )
00530 {
00531 static const char *func = "XLALLowPassREAL8TimeSeries";
00532 PassBandParamStruc params;
00533 params.nMax = filtorder;
00534 params.f1 = frequency;
00535 params.a1 = amplitude;
00536 params.f2 = -1;
00537 params.a2 = -1;
00538 if ( XLALButterworthREAL8TimeSeries( series, ¶ms ) < 0 )
00539 XLAL_ERROR( func, XLAL_EFUNC );
00540 return 0;
00541 }
00542
00543 int XLALHighPassREAL4TimeSeries( REAL4TimeSeries *series,
00544 REAL8 frequency, REAL8 amplitude, INT4 filtorder )
00545 {
00546 static const char *func = "XLALHighPassREAL4TimeSeries";
00547 PassBandParamStruc params;
00548 params.nMax = filtorder;
00549 params.f2 = frequency;
00550 params.a2 = amplitude;
00551 params.f1 = -1;
00552 params.a1 = -1;
00553 if ( XLALButterworthREAL4TimeSeries( series, ¶ms ) < 0 )
00554 XLAL_ERROR( func, XLAL_EFUNC );
00555 return 0;
00556 }
00557
00558 int XLALHighPassREAL8TimeSeries( REAL8TimeSeries *series,
00559 REAL8 frequency, REAL8 amplitude, INT4 filtorder )
00560 {
00561 static const char *func = "XLALHighPassREAL8TimeSeries";
00562 PassBandParamStruc params;
00563 params.nMax = filtorder;
00564 params.f2 = frequency;
00565 params.a2 = amplitude;
00566 params.f1 = -1;
00567 params.a1 = -1;
00568 if ( XLALButterworthREAL8TimeSeries( series, ¶ms ) < 0 )
00569 XLAL_ERROR( func, XLAL_EFUNC );
00570 return 0;
00571 }
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581
00582
00583 void
00584 LALButterworthREAL4TimeSeries( LALStatus *stat,
00585 REAL4TimeSeries *series,
00586 PassBandParamStruc *params )
00587 {
00588 INT4 n;
00589 INT4 type;
00590 INT4 i;
00591 INT4 j;
00592 REAL8 wc;
00593
00594 INITSTATUS(stat,"LALButterworthREAL4TimeSeries",BUTTERWORTHTIMESERIESC);
00595 ATTATCHSTATUSPTR(stat);
00596
00597
00598 ASSERT(params,stat,BANDPASSTIMESERIESH_ENUL,
00599 BANDPASSTIMESERIESH_MSGENUL);
00600 ASSERT(series,stat,BANDPASSTIMESERIESH_ENUL,
00601 BANDPASSTIMESERIESH_MSGENUL);
00602 ASSERT(series->data,stat,BANDPASSTIMESERIESH_ENUL,
00603 BANDPASSTIMESERIESH_MSGENUL);
00604 ASSERT(series->data->data,stat,BANDPASSTIMESERIESH_ENUL,
00605 BANDPASSTIMESERIESH_MSGENUL);
00606
00607
00608
00609
00610 type=XLALParsePassBandParamStruc(params,&n,&wc,series->deltaT);
00611 if(type<0) {
00612 XLALClearErrno();
00613 ABORT(stat,BANDPASSTIMESERIESH_EBAD,BANDPASSTIMESERIESH_MSGEBAD);
00614 }
00615
00616
00617
00618
00619
00620
00621
00622 for(i=0,j=n-1;i<j;i++,j--){
00623 REAL4 theta=LAL_PI*(i+0.5)/n;
00624 REAL4 ar=wc*cos(theta);
00625 REAL4 ai=wc*sin(theta);
00626 REAL4IIRFilter *iirFilter=NULL;
00627 COMPLEX8ZPGFilter *zpgFilter=NULL;
00628
00629
00630 if(type==2){
00631 TRY(LALCreateCOMPLEX8ZPGFilter(stat->statusPtr,&zpgFilter,2,2),
00632 stat);
00633 zpgFilter->zeros->data[0].re=0.0;
00634 zpgFilter->zeros->data[0].im=0.0;
00635 zpgFilter->zeros->data[1].re=0.0;
00636 zpgFilter->zeros->data[1].im=0.0;
00637 zpgFilter->gain.re=1.0;
00638 zpgFilter->gain.im=0.0;
00639 }else{
00640 TRY(LALCreateCOMPLEX8ZPGFilter(stat->statusPtr,&zpgFilter,0,2),
00641 stat);
00642 zpgFilter->gain.re=-wc*wc;
00643 zpgFilter->gain.im=0.0;
00644 }
00645 zpgFilter->poles->data[0].re=ar;
00646 zpgFilter->poles->data[0].im=ai;
00647 zpgFilter->poles->data[1].re=-ar;
00648 zpgFilter->poles->data[1].im=ai;
00649
00650
00651 LALWToZCOMPLEX8ZPGFilter(stat->statusPtr,zpgFilter);
00652 BEGINFAIL(stat)
00653 TRY(LALDestroyCOMPLEX8ZPGFilter(stat->statusPtr,&zpgFilter),
00654 stat);
00655 ENDFAIL(stat);
00656 LALCreateREAL4IIRFilter(stat->statusPtr,&iirFilter,zpgFilter);
00657 BEGINFAIL(stat)
00658 TRY(LALDestroyCOMPLEX8ZPGFilter(stat->statusPtr,&zpgFilter),
00659 stat);
00660 ENDFAIL(stat);
00661
00662
00663 LALIIRFilterREAL4Vector(stat->statusPtr,series->data,iirFilter);
00664 BEGINFAIL(stat) {
00665 TRY(LALDestroyCOMPLEX8ZPGFilter(stat->statusPtr,&zpgFilter),
00666 stat);
00667 TRY(LALDestroyREAL4IIRFilter(stat->statusPtr,&iirFilter),stat);
00668 } ENDFAIL(stat);
00669 LALIIRFilterREAL4VectorR(stat->statusPtr,series->data,iirFilter);
00670 BEGINFAIL(stat) {
00671 TRY(LALDestroyCOMPLEX8ZPGFilter(stat->statusPtr,&zpgFilter),
00672 stat);
00673 TRY(LALDestroyREAL4IIRFilter(stat->statusPtr,&iirFilter),stat);
00674 } ENDFAIL(stat);
00675
00676
00677 TRY(LALDestroyREAL4IIRFilter(stat->statusPtr,&iirFilter),stat);
00678 TRY(LALDestroyCOMPLEX8ZPGFilter(stat->statusPtr,&zpgFilter),stat);
00679 }
00680
00681
00682
00683 if(i==j){
00684 REAL4IIRFilter *iirFilter=NULL;
00685 COMPLEX8ZPGFilter *zpgFilter=NULL;
00686
00687
00688 if(type==2){
00689 TRY(LALCreateCOMPLEX8ZPGFilter(stat->statusPtr,&zpgFilter,1,1),
00690 stat);
00691 zpgFilter->zeros->data->re=0.0;
00692 zpgFilter->zeros->data->im=0.0;
00693 zpgFilter->gain.re=1.0;
00694 zpgFilter->gain.im=0.0;
00695 }else{
00696 TRY(LALCreateCOMPLEX8ZPGFilter(stat->statusPtr,&zpgFilter,0,1),
00697 stat);
00698 zpgFilter->gain.re=0.0;
00699 zpgFilter->gain.im=-wc;
00700 }
00701 zpgFilter->poles->data->re=0.0;
00702 zpgFilter->poles->data->im=wc;
00703
00704
00705 LALWToZCOMPLEX8ZPGFilter(stat->statusPtr,zpgFilter);
00706 BEGINFAIL(stat)
00707 TRY(LALDestroyCOMPLEX8ZPGFilter(stat->statusPtr,&zpgFilter),
00708 stat);
00709 ENDFAIL(stat);
00710 LALCreateREAL4IIRFilter(stat->statusPtr,&iirFilter,zpgFilter);
00711 BEGINFAIL(stat)
00712 TRY(LALDestroyCOMPLEX8ZPGFilter(stat->statusPtr,&zpgFilter),
00713 stat);
00714 ENDFAIL(stat);
00715
00716
00717 LALIIRFilterREAL4Vector(stat->statusPtr,series->data,iirFilter);
00718 BEGINFAIL(stat) {
00719 TRY(LALDestroyCOMPLEX8ZPGFilter(stat->statusPtr,&zpgFilter),
00720 stat);
00721 TRY(LALDestroyREAL4IIRFilter(stat->statusPtr,&iirFilter),stat);
00722 } ENDFAIL(stat);
00723 LALIIRFilterREAL4VectorR(stat->statusPtr,series->data,iirFilter);
00724 BEGINFAIL(stat) {
00725 TRY(LALDestroyCOMPLEX8ZPGFilter(stat->statusPtr,&zpgFilter),
00726 stat);
00727 TRY(LALDestroyREAL4IIRFilter(stat->statusPtr,&iirFilter),stat);
00728 } ENDFAIL(stat);
00729
00730
00731 TRY(LALDestroyREAL4IIRFilter(stat->statusPtr,&iirFilter),stat);
00732 TRY(LALDestroyCOMPLEX8ZPGFilter(stat->statusPtr,&zpgFilter),stat);
00733 }
00734
00735
00736 DETATCHSTATUSPTR(stat);
00737 RETURN(stat);
00738 }
00739
00740
00741
00742 void
00743 LALButterworthREAL8TimeSeries( LALStatus *stat,
00744 REAL8TimeSeries *series,
00745 PassBandParamStruc *params )
00746 {
00747 INITSTATUS(stat,"LALButterworthREAL8TimeSeries",BUTTERWORTHTIMESERIESC);
00748
00749 if (XLALButterworthREAL8TimeSeries(series,params)<0)
00750 {
00751 int code=xlalErrno;
00752 XLALClearErrno();
00753 switch(code){
00754 case XLAL_EFAULT:
00755 ABORT(stat,BANDPASSTIMESERIESH_ENUL,BANDPASSTIMESERIESH_MSGENUL);
00756 case XLAL_EINVAL:
00757 ABORT(stat,BANDPASSTIMESERIESH_EBAD,BANDPASSTIMESERIESH_MSGEBAD);
00758 default:
00759 ABORTXLAL(stat);
00760 }
00761 }
00762
00763 RETURN(stat);
00764 }
00765
00766
00767
00768 void
00769 LALDButterworthREAL4TimeSeries( LALStatus *stat,
00770 REAL4TimeSeries *series,
00771 PassBandParamStruc *params )
00772 {
00773 INITSTATUS(stat,"LALButterworthREAL8TimeSeries",BUTTERWORTHTIMESERIESC);
00774
00775 if (XLALButterworthREAL4TimeSeries(series,params)<0)
00776 {
00777 int code=xlalErrno;
00778 XLALClearErrno();
00779 switch(code){
00780 case XLAL_EFAULT:
00781 ABORT(stat,BANDPASSTIMESERIESH_ENUL,BANDPASSTIMESERIESH_MSGENUL);
00782 case XLAL_EINVAL:
00783 ABORT(stat,BANDPASSTIMESERIESH_EBAD,BANDPASSTIMESERIESH_MSGEBAD);
00784 default:
00785 ABORTXLAL(stat);
00786 }
00787 }
00788
00789 RETURN(stat);
00790 }
00791
00792
00793 static int
00794 XLALParsePassBandParamStruc( PassBandParamStruc *params,
00795 INT4 *n,
00796 REAL8 *wc,
00797 REAL8 deltaT )
00798
00799
00800
00801
00802
00803
00804 {
00805 static const char *func = "XLALParsePassBandParamStruc";
00806
00807
00808 REAL8 w1=deltaT*params->f1;
00809 REAL8 w2=deltaT*params->f2;
00810 REAL8 a1=params->a1;
00811 REAL8 a2=