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 #include <config.h>
00179 #ifdef HAVE_SUNMATH_H
00180 #include <sunmath.h>
00181 #if defined HAVE_LIBSUNMATH && defined ONLINE
00182 #define USE_SINCOSP 1
00183 #endif
00184 #endif
00185
00186 #include <math.h>
00187 #include <lal/LALStdio.h>
00188 #include <lal/LALStdlib.h>
00189 #include <lal/LALError.h>
00190 #include <lal/DetectorSite.h>
00191 #include <lal/DetResponse.h>
00192 #include <lal/AVFactories.h>
00193 #include <lal/Date.h>
00194 #include <lal/Units.h>
00195 #include <lal/TimeDelay.h>
00196 #include <lal/LALBarycenter.h>
00197 #include <lal/VectorOps.h>
00198 #include <lal/SimulateCoherentGW.h>
00199 #include <lal/SkyCoordinates.h>
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209 #define TCENTRE( time ) \
00210 ( \
00211 realIndex = delayOff + (time)*delayDt, \
00212 intIndex = (INT4)floor( realIndex ), \
00213 indexFrac = realIndex - intIndex, \
00214 time + indexFrac*delayData[intIndex+1] \
00215 + (1.0-indexFrac)*delayData[intIndex] \
00216 )
00217
00218
00219 NRCSID( SIMULATECOHERENTGWC, "$Id: SimulateCoherentGW.c,v 1.36 2007/06/08 14:41:47 bema Exp $" );
00220
00221
00222 void
00223 LALSimulateCoherentGW( LALStatus *stat,
00224 REAL4TimeSeries *output,
00225 CoherentGW *signal,
00226 DetectorResponse *detector )
00227 {
00228 INT4 i, n;
00229 INT4 nMax;
00230 INT4 fInit, fFinal;
00231 INT4 shiftInit, shiftFinal;
00232 UINT4 dtDelayBy2 = 400;
00233 UINT4 dtPolBy2 = 300;
00234 REAL4 *outData;
00235 REAL8 delayMin, delayMax;
00236 SkyPosition source;
00237 BOOLEAN transfer;
00238 BOOLEAN fFlag = 0;
00239 BOOLEAN pFlag = 0;
00240
00241
00242
00243
00244
00245
00246
00247 LALDetAMResponseSeries polResponse;
00248 REAL8Vector *delay = NULL;
00249 REAL4 *aData, *fData, *shiftData, *plusData, *crossData;
00250 REAL8 *phiData, *delayData;
00251 REAL8 aOff, fOff, phiOff, shiftOff, polOff, delayOff;
00252 REAL8 aDt, fDt, phiDt, shiftDt, polDt, delayDt;
00253
00254
00255
00256
00257 REAL4Vector *aTransfer = NULL;
00258 REAL4Vector *phiTransfer = NULL;
00259 REAL4Vector *phiTemp = NULL;
00260 REAL4 *aTransData = NULL, *phiTransData = NULL;
00261 REAL8 f0 = 1.0;
00262 REAL8 phiFac = 1.0, fFac = 1.0;
00263
00264
00265
00266
00267 REAL8 heteroFac, phi0;
00268
00269
00270 REAL8 realIndex;
00271 INT4 intIndex;
00272 REAL8 indexFrac;
00273
00274 INITSTATUS( stat, "LALSimulateCoherentGW", SIMULATECOHERENTGWC );
00275 ATTATCHSTATUSPTR( stat );
00276
00277
00278 ASSERT( signal, stat, SIMULATECOHERENTGWH_ENUL,
00279 SIMULATECOHERENTGWH_MSGENUL );
00280 if ( !( signal->a ) ) {
00281 ABORT( stat, SIMULATECOHERENTGWH_ESIG,
00282 SIMULATECOHERENTGWH_MSGESIG );
00283 }
00284 ASSERT( signal->a->data, stat,
00285 SIMULATECOHERENTGWH_ENUL, SIMULATECOHERENTGWH_MSGENUL );
00286 ASSERT( signal->a->data->data, stat,
00287 SIMULATECOHERENTGWH_ENUL, SIMULATECOHERENTGWH_MSGENUL );
00288 if ( !( signal->phi ) ) {
00289 ABORT( stat, SIMULATECOHERENTGWH_ESIG,
00290 SIMULATECOHERENTGWH_MSGESIG );
00291 }
00292 ASSERT( signal->phi->data, stat,
00293 SIMULATECOHERENTGWH_ENUL, SIMULATECOHERENTGWH_MSGENUL );
00294 ASSERT( signal->phi->data->data, stat,
00295 SIMULATECOHERENTGWH_ENUL, SIMULATECOHERENTGWH_MSGENUL );
00296 if ( signal->f ) {
00297 ASSERT( signal->f->data, stat,
00298 SIMULATECOHERENTGWH_ENUL, SIMULATECOHERENTGWH_MSGENUL );
00299 ASSERT( signal->f->data->data, stat,
00300 SIMULATECOHERENTGWH_ENUL, SIMULATECOHERENTGWH_MSGENUL );
00301 }
00302 if ( signal->shift ) {
00303 ASSERT( signal->shift->data, stat,
00304 SIMULATECOHERENTGWH_ENUL, SIMULATECOHERENTGWH_MSGENUL );
00305 ASSERT( signal->shift->data->data, stat,
00306 SIMULATECOHERENTGWH_ENUL, SIMULATECOHERENTGWH_MSGENUL );
00307 }
00308 ASSERT( detector, stat,
00309 SIMULATECOHERENTGWH_ENUL, SIMULATECOHERENTGWH_MSGENUL );
00310 if ( ( transfer = ( detector->transfer != NULL ) ) ) {
00311 ASSERT( detector->transfer->data, stat,
00312 SIMULATECOHERENTGWH_ENUL, SIMULATECOHERENTGWH_MSGENUL );
00313 ASSERT( detector->transfer->data->data, stat,
00314 SIMULATECOHERENTGWH_ENUL, SIMULATECOHERENTGWH_MSGENUL );
00315 }
00316 ASSERT( output, stat,
00317 SIMULATECOHERENTGWH_ENUL, SIMULATECOHERENTGWH_MSGENUL );
00318 ASSERT( output->data, stat,
00319 SIMULATECOHERENTGWH_ENUL, SIMULATECOHERENTGWH_MSGENUL );
00320 ASSERT( output->data->data, stat,
00321 SIMULATECOHERENTGWH_ENUL, SIMULATECOHERENTGWH_MSGENUL );
00322
00323
00324 ASSERT( signal->a->data->vectorLength == 2, stat,
00325 SIMULATECOHERENTGWH_EDIM, SIMULATECOHERENTGWH_MSGEDIM );
00326
00327
00328 ASSERT( signal->a->deltaT != 0.0, stat,
00329 SIMULATECOHERENTGWH_EBAD, SIMULATECOHERENTGWH_MSGEBAD );
00330 ASSERT( signal->phi->deltaT != 0.0, stat,
00331 SIMULATECOHERENTGWH_EBAD, SIMULATECOHERENTGWH_MSGEBAD );
00332 aDt = output->deltaT / signal->a->deltaT;
00333 phiDt = output->deltaT / signal->phi->deltaT;
00334 ASSERT( aDt != 0.0, stat,
00335 SIMULATECOHERENTGWH_EBAD, SIMULATECOHERENTGWH_MSGEBAD );
00336 ASSERT( phiDt != 0.0, stat,
00337 SIMULATECOHERENTGWH_EBAD, SIMULATECOHERENTGWH_MSGEBAD );
00338 if ( signal->f ) {
00339 ASSERT( signal->f->deltaT != 0.0, stat,
00340 SIMULATECOHERENTGWH_EBAD, SIMULATECOHERENTGWH_MSGEBAD );
00341 fDt = output->deltaT / signal->f->deltaT;
00342 ASSERT( fDt != 0.0, stat,
00343 SIMULATECOHERENTGWH_EBAD, SIMULATECOHERENTGWH_MSGEBAD );
00344 } else
00345 fDt = 0.0;
00346 if ( signal->shift ) {
00347 ASSERT( signal->shift->deltaT != 0.0, stat,
00348 SIMULATECOHERENTGWH_EBAD, SIMULATECOHERENTGWH_MSGEBAD );
00349 shiftDt = output->deltaT / signal->shift->deltaT;
00350 ASSERT( shiftDt != 0.0, stat,
00351 SIMULATECOHERENTGWH_EBAD, SIMULATECOHERENTGWH_MSGEBAD );
00352 } else
00353 shiftDt = 0.0;
00354 if ( transfer ) {
00355 ASSERT( detector->transfer->deltaF != 0.0, stat,
00356 SIMULATECOHERENTGWH_EBAD, SIMULATECOHERENTGWH_MSGEBAD );
00357 fFac = 1.0 / detector->transfer->deltaF;
00358 phiFac = fFac / ( LAL_TWOPI*signal->phi->deltaT );
00359 f0 = detector->transfer->f0/detector->transfer->deltaF;
00360 }
00361 heteroFac = LAL_TWOPI*output->f0*output->deltaT;
00362 phi0 = (REAL8)( output->epoch.gpsSeconds -
00363 detector->heterodyneEpoch.gpsSeconds );
00364 phi0 += 0.000000001*(REAL8)( output->epoch.gpsNanoSeconds -
00365 detector->heterodyneEpoch.gpsNanoSeconds );
00366 phi0 *= LAL_TWOPI*output->f0;
00367 if ( phi0 > 1.0/LAL_REAL8_EPS ) {
00368 LALWarning( stat, "REAL8 arithmetic is not sufficient to maintain"
00369 " heterodyne phase to within a radian." );
00370 }
00371
00372
00373 {
00374 BOOLEAN unitsOK;
00375 LALUnitPair pair;
00376
00377 pair.unitOne = &(signal->f->sampleUnits);
00378 pair.unitTwo = &lalHertzUnit;
00379 TRY( LALUnitCompare( stat->statusPtr, &unitsOK, &pair ), stat );
00380 ASSERT( unitsOK, stat, SIMULATECOHERENTGWH_EUNIT,
00381 SIMULATECOHERENTGWH_MSGEUNIT );
00382 pair.unitOne = &(signal->phi->sampleUnits);
00383 pair.unitTwo = &lalDimensionlessUnit;
00384 TRY( LALUnitCompare( stat->statusPtr, &unitsOK, &pair ), stat );
00385 ASSERT( unitsOK, stat, SIMULATECOHERENTGWH_EUNIT,
00386 SIMULATECOHERENTGWH_MSGEUNIT );
00387 if( signal->shift ) {
00388 pair.unitOne = &(signal->shift->sampleUnits);
00389 TRY( LALUnitCompare( stat->statusPtr, &unitsOK, &pair ), stat );
00390 ASSERT( unitsOK, stat, SIMULATECOHERENTGWH_EUNIT,
00391 SIMULATECOHERENTGWH_MSGEUNIT );
00392 }
00393 if ( transfer ) {
00394 pair.unitOne = &(signal->a->sampleUnits);
00395 pair.unitTwo = &(detector->transfer->sampleUnits);
00396 TRY( LALUnitMultiply( stat->statusPtr, &(output->sampleUnits),
00397 &pair ), stat );
00398 } else
00399 output->sampleUnits = signal->a->sampleUnits;
00400 LALSnprintf( output->name, LALNameLength, "response to %s",
00401 signal->a->name );
00402 }
00403
00404
00405
00406 aData = signal->a->data->data;
00407 phiData = signal->phi->data->data;
00408 outData = output->data->data;
00409 if ( signal->f )
00410 fData = signal->f->data->data;
00411 else
00412 fData = NULL;
00413 if ( signal->shift )
00414 shiftData = signal->shift->data->data;
00415 else
00416 shiftData = NULL;
00417
00418
00419
00420 if ( detector->site ) {
00421 source = signal->position;
00422 if ( source.system != COORDINATESYSTEM_EQUATORIAL ) {
00423 ConvertSkyParams params;
00424 EarthPosition location;
00425 params.gpsTime = &( output->epoch );
00426 params.system = COORDINATESYSTEM_EQUATORIAL;
00427 if ( source.system == COORDINATESYSTEM_HORIZON ) {
00428 params.zenith = &( location.geodetic );
00429 location.x = detector->site->location[0];
00430 location.y = detector->site->location[1];
00431 location.z = detector->site->location[2];
00432 TRY( LALGeocentricToGeodetic( stat->statusPtr, &location ),
00433 stat );
00434 }
00435 TRY( LALConvertSkyCoordinates( stat->statusPtr, &source,
00436 &source, ¶ms ), stat );
00437 }
00438 }
00439
00440
00441
00442
00443 delayDt = output->deltaT/( 2.0*dtDelayBy2 );
00444 nMax = (UINT4)( output->data->length*delayDt ) + 3;
00445 TRY( LALDCreateVector( stat->statusPtr, &delay, nMax ), stat );
00446 delayData = delay->data;
00447
00448
00449 if ( detector->site && detector->ephemerides ) {
00450 LIGOTimeGPS gpsTime;
00451 EarthState state;
00452 BarycenterInput input;
00453 EmissionTime emit;
00454
00455
00456 gpsTime = input.tgps = output->epoch;
00457 gpsTime.gpsSeconds -= dtDelayBy2;
00458 input.tgps.gpsSeconds -= dtDelayBy2;
00459 input.site = *(detector->site);
00460 for ( i = 0; i < 3; i++ )
00461 input.site.location[i] /= LAL_C_SI;
00462 input.alpha = source.longitude;
00463 input.delta = source.latitude;
00464 input.dInv = 0.0;
00465 delayMin = delayMax = 1.1*LAL_AU_SI/( LAL_C_SI*output->deltaT );
00466 delayMax *= -1;
00467
00468
00469 for ( i = 0; i < nMax; i++ ) {
00470 REAL8 tDelay;
00471 LALBarycenterEarth( stat->statusPtr, &state, &gpsTime,
00472 detector->ephemerides );
00473 BEGINFAIL( stat )
00474 TRY( LALDDestroyVector( stat->statusPtr, &delay ), stat );
00475 ENDFAIL( stat );
00476 LALBarycenter( stat->statusPtr, &emit, &input, &state );
00477 BEGINFAIL( stat )
00478 TRY( LALDDestroyVector( stat->statusPtr, &delay ), stat );
00479 ENDFAIL( stat );
00480 delayData[i] = tDelay = emit.deltaT/output->deltaT;
00481 if ( tDelay < delayMin )
00482 delayMin = tDelay;
00483 if ( tDelay > delayMax )
00484 delayMax = tDelay;
00485 gpsTime.gpsSeconds += 2*dtDelayBy2;
00486 input.tgps.gpsSeconds += 2*dtDelayBy2;
00487 }
00488 }
00489
00490
00491 else if ( detector->site ) {
00492 LIGOTimeGPS gpsTime;
00493 LALPlaceAndGPS event;
00494 DetTimeAndASource input;
00495
00496 LALInfo( stat, "Ephemeris field absent; computing propagation"
00497 " delays from Earth centre" );
00498
00499
00500 event.p_detector = detector->site;
00501 event.p_gps = &gpsTime;
00502 input.p_det_and_time = &event;
00503 input.p_source = &source;
00504 gpsTime = output->epoch;
00505 gpsTime.gpsSeconds -= dtDelayBy2;
00506 delayMin = delayMax = LAL_REARTH_SI / ( LAL_C_SI*output->deltaT );
00507 delayMin *= -1;
00508
00509
00510 for ( i = 0; i < nMax; i++ ) {
00511 REAL8 tDelay;
00512 LALTimeDelayFromEarthCenter( stat->statusPtr, &tDelay, &input );
00513 BEGINFAIL( stat )
00514 TRY( LALDDestroyVector( stat->statusPtr, &delay ), stat );
00515 ENDFAIL( stat );
00516
00517
00518
00519 tDelay /= -output->deltaT;
00520 delayData[i] = tDelay;
00521 if ( tDelay < delayMin )
00522 delayMin = tDelay;
00523 if ( tDelay > delayMax )
00524 delayMax = tDelay;
00525 gpsTime.gpsSeconds += 2*dtDelayBy2;
00526 }
00527 }
00528
00529
00530 else {
00531 LALInfo( stat, "Detector site absent; simulating hplus with no"
00532 " propagation delays" );
00533 memset( delayData, 0, nMax*sizeof(REAL8) );
00534 delayMin = delayMax = 0.0;
00535 }
00536
00537
00538 polDt = output->deltaT/( 2.0*dtPolBy2 );
00539 nMax = (UINT4)( output->data->length*polDt ) + 3;
00540 memset( &polResponse, 0, sizeof( LALDetAMResponseSeries ) );
00541 polResponse.pPlus = (REAL4TimeSeries *)
00542 LALMalloc( sizeof(REAL4TimeSeries) );
00543 polResponse.pCross = (REAL4TimeSeries *)
00544 LALMalloc( sizeof(REAL4TimeSeries) );
00545 polResponse.pScalar = (REAL4TimeSeries *)
00546 LALMalloc( sizeof(REAL4TimeSeries) );
00547 if ( !polResponse.pPlus || !polResponse.pCross ||
00548 !polResponse.pScalar ) {
00549 if ( polResponse.pPlus )
00550 LALFree( polResponse.pPlus );
00551 if ( polResponse.pCross )
00552 LALFree( polResponse.pCross );
00553 if ( polResponse.pScalar )
00554 LALFree( polResponse.pScalar );
00555 TRY( LALDDestroyVector( stat->statusPtr, &delay ), stat );
00556 ABORT( stat, SIMULATECOHERENTGWH_EMEM,
00557 SIMULATECOHERENTGWH_MSGEMEM );
00558 }
00559 memset( polResponse.pPlus, 0, sizeof(REAL4TimeSeries) );
00560 memset( polResponse.pCross, 0, sizeof(REAL4TimeSeries) );
00561 memset( polResponse.pScalar, 0, sizeof(REAL4TimeSeries) );
00562 LALSCreateVector( stat->statusPtr, &( polResponse.pPlus->data ),
00563 nMax );
00564 BEGINFAIL( stat ) {
00565 LALFree( polResponse.pPlus );
00566 LALFree( polResponse.pCross );
00567 LALFree( polResponse.pScalar );
00568 TRY( LALDDestroyVector( stat->statusPtr, &delay ), stat );
00569 } ENDFAIL( stat );
00570 LALSCreateVector( stat->statusPtr, &( polResponse.pCross->data ),
00571 nMax );
00572 BEGINFAIL( stat ) {
00573 TRY( LALSDestroyVector( stat->statusPtr,
00574 &( polResponse.pPlus->data ) ), stat );
00575 LALFree( polResponse.pPlus );
00576 LALFree( polResponse.pCross );
00577 LALFree( polResponse.pScalar );
00578 TRY( LALDDestroyVector( stat->statusPtr, &delay ), stat );
00579 } ENDFAIL( stat );
00580 LALSCreateVector( stat->statusPtr, &( polResponse.pScalar->data ),
00581 nMax );
00582 BEGINFAIL( stat ) {
00583 TRY( LALSDestroyVector( stat->statusPtr,
00584 &( polResponse.pPlus->data ) ), stat );
00585 TRY( LALSDestroyVector( stat->statusPtr,
00586 &( polResponse.pCross->data ) ), stat );
00587 LALFree( polResponse.pPlus );
00588 LALFree( polResponse.pCross );
00589 LALFree( polResponse.pScalar );
00590 TRY( LALDDestroyVector( stat->statusPtr, &delay ), stat );
00591 } ENDFAIL( stat );
00592 plusData = polResponse.pPlus->data->data;
00593 crossData = polResponse.pCross->data->data;
00594 if ( detector->site ) {
00595 LALSource polSource;
00596 LALDetAndSource input;
00597 LALTimeIntervalAndNSample params;
00598
00599
00600 polSource.equatorialCoords = source;
00601 polSource.orientation = (REAL8)( signal->psi );
00602 input.pSource = &polSource;
00603 input.pDetector = detector->site;
00604 params.epoch = output->epoch;
00605 params.epoch.gpsSeconds -= dtPolBy2;
00606 params.deltaT = 2.0*dtPolBy2;
00607 params.nSample = nMax;
00608 params.accuracy = LALLEAPSEC_STRICT;
00609
00610
00611 LALComputeDetAMResponseSeries( stat->statusPtr, &polResponse,
00612 &input, ¶ms );
00613 BEGINFAIL( stat ) {
00614 TRY( LALSDestroyVector( stat->statusPtr,
00615 &( polResponse.pPlus->data ) ), stat );
00616 TRY( LALSDestroyVector( stat->statusPtr,
00617 &( polResponse.pCross->data ) ), stat );
00618 TRY( LALSDestroyVector( stat->statusPtr,
00619 &( polResponse.pScalar->data ) ), stat );
00620 LALFree( polResponse.pPlus );
00621 LALFree( polResponse.pCross );
00622 LALFree( polResponse.pScalar );
00623 TRY( LALDDestroyVector( stat->statusPtr, &delay ), stat );
00624 } ENDFAIL( stat );
00625 } else {
00626
00627 for ( i = 0; i < nMax; i++ ) {
00628 plusData[i] = 1.0;
00629 crossData[i] = 0.0;
00630 }
00631 }
00632
00633 TRY( LALSDestroyVector( stat->statusPtr,
00634 &( polResponse.pScalar->data ) ), stat );
00635 LALFree( polResponse.pScalar );
00636
00637
00638
00639 if ( transfer ) {
00640 nMax = detector->transfer->data->length;
00641 LALSCreateVector( stat->statusPtr, &phiTemp, nMax );
00642 BEGINFAIL( stat ) {
00643 TRY( LALDDestroyVector( stat->statusPtr, &delay ), stat );
00644 TRY( LALSDestroyVector( stat->statusPtr,
00645 &( polResponse.pPlus->data ) ), stat );
00646 TRY( LALSDestroyVector( stat->statusPtr,
00647 &( polResponse.pCross->data ) ), stat );
00648 LALFree( polResponse.pPlus );
00649 LALFree( polResponse.pCross );
00650 } ENDFAIL( stat );
00651 LALCVectorAngle( stat->statusPtr, phiTemp,
00652 detector->transfer->data );
00653 BEGINFAIL( stat ) {
00654 TRY( LALDDestroyVector( stat->statusPtr, &delay ), stat );
00655 TRY( LALSDestroyVector( stat->statusPtr, &phiTemp ), stat );
00656 TRY( LALSDestroyVector( stat->statusPtr,
00657 &( polResponse.pPlus->data ) ), stat );
00658 TRY( LALSDestroyVector( stat->statusPtr,
00659 &( polResponse.pCross->data ) ), stat );
00660 LALFree( polResponse.pPlus );
00661 LALFree( polResponse.pCross );
00662 } ENDFAIL( stat );
00663 LALSCreateVector( stat->statusPtr, &phiTransfer, nMax );
00664 BEGINFAIL( stat ) {
00665 TRY( LALDDestroyVector( stat->statusPtr, &delay ), stat );
00666 TRY( LALSDestroyVector( stat->statusPtr, &phiTemp ), stat );
00667 TRY( LALSDestroyVector( stat->statusPtr,
00668 &( polResponse.pPlus->data ) ), stat );
00669 TRY( LALSDestroyVector( stat->statusPtr,
00670 &( polResponse.pCross->data ) ), stat );
00671 LALFree( polResponse.pPlus );
00672 LALFree( polResponse.pCross );
00673 } ENDFAIL( stat );
00674 LALUnwrapREAL4Angle( stat->statusPtr, phiTransfer, phiTemp );
00675 BEGINFAIL( stat ) {
00676 TRY( LALDDestroyVector( stat->statusPtr, &delay ), stat );
00677 TRY( LALSDestroyVector( stat->statusPtr, &phiTemp ), stat );
00678 TRY( LALSDestroyVector( stat->statusPtr, &phiTransfer ), stat );
00679 TRY( LALSDestroyVector( stat->statusPtr,
00680 &( polResponse.pPlus->data ) ), stat );
00681 TRY( LALSDestroyVector( stat->statusPtr,
00682 &( polResponse.pCross->data ) ), stat );
00683 LALFree( polResponse.pPlus );
00684 LALFree( polResponse.pCross );
00685 } ENDFAIL( stat );
00686 TRY( LALSDestroyVector( stat->statusPtr, &phiTemp ), stat );
00687 LALSCreateVector( stat->statusPtr, &aTransfer, nMax );
00688 BEGINFAIL( stat ) {
00689 TRY( LALDDestroyVector( stat->statusPtr, &delay ), stat );
00690 TRY( LALSDestroyVector( stat->statusPtr, &phiTransfer ), stat );
00691 TRY( LALSDestroyVector( stat->statusPtr,
00692 &( polResponse.pPlus->data ) ), stat );
00693 TRY( LALSDestroyVector( stat->statusPtr,
00694 &( polResponse.pCross->data ) ), stat );
00695 LALFree( polResponse.pPlus );
00696 LALFree( polResponse.pCross );
00697 } ENDFAIL( stat );
00698 LALCVectorAbs( stat->statusPtr, aTransfer,
00699 detector->transfer->data );
00700 BEGINFAIL( stat ) {
00701 TRY( LALDDestroyVector( stat->statusPtr, &delay ), stat );
00702 TRY( LALSDestroyVector( stat->statusPtr, &phiTransfer ), stat );
00703 TRY( LALSDestroyVector( stat->statusPtr, &aTransfer ), stat );
00704 TRY( LALSDestroyVector( stat->statusPtr,
00705 &( polResponse.pPlus->data ) ), stat );
00706 TRY( LALSDestroyVector( stat->statusPtr,
00707 &( polResponse.pCross->data ) ), stat );
00708 LALFree( polResponse.pPlus );
00709 LALFree( polResponse.pCross );
00710 } ENDFAIL( stat );
00711 phiTransData = phiTransfer->data;
00712 aTransData = aTransfer->data;
00713 }
00714
00715
00716
00717 aOff = ( output->epoch.gpsSeconds -
00718 signal->a->