Loading [MathJax]/extensions/TeX/AMSsymbols.js
LALApps 10.1.0.1-5e288d3
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
coh_PTF_template.c
Go to the documentation of this file.
1/*
2* Copyright (C) 2007 Ian Harry, Diego Fazi, Duncan Brown
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#include "config.h"
22#include "coh_PTF.h"
23#include "FindChirpSP.h"
24
26 FindChirpTemplate *fcTmplt,
27 InspiralTemplate *InspTmplt,
29 )
30{
31 UINT4 i;
33 switch ( params->approximant )
34 {
35 /* Speacial case #1 */
36 case FindChirpSP:
37 LALFindChirpSPTemplate( &status,fcTmplt,InspTmplt,params );
38 for (i=0 ; i < params->xfacVec->length ; i++ )
39 {
40 fcTmplt->data->data[i] = fcTmplt->data->data[i] * params->PTFphi->data[i];
41 }
42 break;
43 /* Speacial case #2 */
44 case FindChirpPTF:
45 coh_PTF_template_PTF(fcTmplt,InspTmplt,params);
46 break;
47 /* Otherwise let LALFindChirpTDTemplate handle it */
48 default:
49 LALFindChirpTDTemplate( &status,fcTmplt,InspTmplt,params );
50 break;
51 }
52}
53
54void
56 FindChirpTemplate *fcTmplt,
57 InspiralTemplate *InspTmplt,
59 )
60{
61
62 // This function generates Q_{1-5} as a function of time and then FFTs
63 // them before returning Q(f) in fcTmplt->PTFQtilde
64 // It would be nice to use the stuff in LAL to do most of this ....
65
66 UINT4 errcode;
67 /* local variables */
68 UINT4 i, N;
69 REAL4 phi, omega_2_3, e1x, e1y, e1z, e2x, e2y, e2z, sqrtoftwo,
70 onebysqrtoftwo, onebysqrtofsix;
71 REAL4Vector Q[5];
72 COMPLEX8Vector Qtilde[5];
73
74 sqrtoftwo = sqrt(2.0);
75 onebysqrtoftwo = 1.0 / sqrtoftwo;
76 onebysqrtofsix = 1.0 / sqrt(6.0);
77
78 /*
79 *
80 * check that the arguments are reasonable
81 *
82 */
83
84 /* check that the output structures exist */
85 sanity_check( fcTmplt );
86 sanity_check( fcTmplt->PTFQtilde );
87 sanity_check( fcTmplt->PTFQtilde->length == 5 );
88 sanity_check( fcTmplt->PTFQtilde->data );
89 sanity_check( fcTmplt->PTFQ );
90 sanity_check( fcTmplt->PTFQ->length == 5 );
91 sanity_check( fcTmplt->PTFQ->data );
92
93 /* check that the parameter structure exists */
95 sanity_check( params->fwdPlan );
96
97 /* check that the timestep is positive */
98 sanity_check( params->deltaT > 0 );
99
100 /* check that the input exists */
101 sanity_check( InspTmplt );
102
103 N = params->PTFphi->length;
104
105 /* set the parameter structure */
106 /* to the correct waveform approximant */
107 InspTmplt->approximant = FindChirpPTF;
108 sanity_check( InspTmplt->fLower );
109
110 /* copy the template parameters to the finchirp template structure */
111 memcpy( &(fcTmplt->tmplt), InspTmplt, sizeof(InspiralTemplate) );
112
113 /* XXX delete this line if the low frequency cutoff XXX */
114 /* XXX should be read from the template bank XXX */
115 fcTmplt->tmplt.fLower = params->fLow = InspTmplt->fLower;
116
117 /* Zero out the Q and Qtilde vectors */
118 memset( fcTmplt->PTFQ->data, 0, 5 * N * sizeof(REAL4) );
119 memset( fcTmplt->PTFQtilde->data, 0, 5 * (N /2 + 1) * sizeof(COMPLEX8) );
120
121 /* Point the dummy variables Q and Qtilde to the actual output structures */
122 for ( i = 0; i < 5; ++i )
123 {
124 Q[i].length = N;
125 Qtilde[i].length = N / 2 + 1;
126 Q[i].data = fcTmplt->PTFQ->data + (i * N);
127 Qtilde[i].data = fcTmplt->PTFQtilde->data + (i * (N / 2 + 1)) ;
128 }
129
130 /* call the waveform generation function */
131 errcode = XLALFindChirpPTFWaveform( params->PTFphi, params->PTFomega_2_3,
132 params->PTFe1, params->PTFe2, InspTmplt,
133 params->deltaT);
134 sanity_check( errcode == XLAL_SUCCESS );
135
136 if (InspTmplt->tC > params->maxTempLength )
137 {
138 fprintf(stderr,"Template generated is longer than max. Template must not ");
139 fprintf(stderr,"be longer than this as it causes wrapping issues in the ");
140 fprintf(stderr,"FFT. Template length is %lf \n",InspTmplt->tC);
141 exit(1);
142 }
143
144 /* evaluate the Q^I factors from the dynamical variables */
145 for( i = 0; i < N; ++i)
146 {
147 omega_2_3 = params->PTFomega_2_3->data[i];
148 phi = params->PTFphi->data[i];
149 e1x = params->PTFe1->data[i];
150 e1y = params->PTFe1->data[N + i];
151 e1z = params->PTFe1->data[2 * N + i];
152 e2x = params->PTFe2->data[i];
153 e2y = params->PTFe2->data[N + i];
154 e2z = params->PTFe2->data[2 * N + i];
155
156 Q[0].data[i] = omega_2_3 * onebysqrtoftwo * ( cos(2 * phi) * ( e1x * e1x +
157 e2y * e2y - e2x * e2x - e1y * e1y ) + 2 * sin(2 * phi) *
158 ( e1x * e2x - e1y * e2y ));
159 Q[1].data[i] = omega_2_3 * sqrtoftwo * ( cos(2 * phi) * ( e1x * e1y -
160 e2x * e2y ) + sin(2 * phi) * ( e1x * e2y + e1y * e2x ));
161 Q[2].data[i] = omega_2_3 * sqrtoftwo * ( cos(2 * phi) * ( e1x * e1z -
162 e2x * e2z ) + sin(2 * phi) * ( e1x * e2z + e1z * e2x ));
163 Q[3].data[i] = omega_2_3 * sqrtoftwo * ( cos(2 * phi) * ( e1y * e1z -
164 e2y * e2z ) + sin(2 * phi) * ( e1y * e2z + e1z * e2y ));
165 Q[4].data[i] = omega_2_3 * onebysqrtofsix * ( cos(2 * phi) *
166 ( 2 * e2z * e2z - 2 * e1z * e1z + e1x * e1x + e1y * e1y -
167 e2x * e2x - e2y * e2y ) + 2 * sin(2 * phi) * ( e1x * e2x +
168 e1y * e2y - 2 * e1z * e2z ));
169 }
170
171 /* Fourier transform the Q's into the Qtilde's */
172 for ( i = 0; i < 5; ++i )
173 {
174 XLALREAL4ForwardFFT( &Qtilde[i], &Q[i],
175 params->fwdPlan);
176 }
177
178 /* FIXME: Q and Qtilde should be outputtable. Probably easier outside of
179 this function as template number is available. */
180
181 fcTmplt->tmplt.tC = InspTmplt->tC; /* length of template in seconds */
182 fcTmplt->tmplt.fFinal = InspTmplt->fFinal; /* upper freq of template in Hz */
183}
184
185
187 struct coh_PTF_params *params,
188 FindChirpTemplate *fcTmplt,
189 REAL4FrequencySeries *invspec,
190 REAL8Array *PTFM,
191 REAL8Array *PTFN,
192 COMPLEX8VectorSequence *PTFqVec,
194 COMPLEX8FFTPlan *invPlan,
195 UINT4 spinTemplate
196 )
197/* Note that I use a different notation than Diego. In our notation M is
198 * the same as Diego's B matrix (Q_0 | Q_0). We also have
199 * A = ( Q_0 | s ) and B = ( Q_{\pi/2} | s ) Diego's A matrix is equal to
200 * sqrt(A**2 + B**2) in this notation. */
201{
202 // This function calculates the various filters used to calculate SNR
203 // It calculates (Q_0 | Q_0), (Q | s) and if necessary it will calculate
204 // (Q_0 | Q_{\pi/2}) as well (for the spin checker code).
205
206
207 UINT4 i, j, k, kmin, len, kmax,numPoints,vecLength;
208 REAL8 f_min, deltaF,deltaT, fFinal, r, s, x, y, length;
209 COMPLEX8 *qtilde, *inputData;
210 COMPLEX8Vector *qtildeVec,qVec;
211 COMPLEX8 *PTFQtilde = NULL;
212
213
214 /* check the required input exists */
215 sanity_check( fcTmplt );
216 sanity_check( PTFM );
217 sanity_check( PTFM->data );
218 sanity_check( PTFqVec );
219 sanity_check( PTFqVec->data );
220 sanity_check( invspec );
221 sanity_check( invspec->data );
222 sanity_check( invspec->deltaF );
223 sanity_check( sgmnt );
224 sanity_check( sgmnt->data );
225 sanity_check( invPlan );
226
227 /* wtilde contains 1/S_n(f) (up to dynamic range issues) */
228 numPoints = PTFqVec->vectorLength;
229 PTFQtilde = fcTmplt->PTFQtilde->data;
230 len = invspec->data->length;
231 deltaF = invspec->deltaF;
232 deltaT = 1.0 / ( deltaF * (REAL4) numPoints);
233 f_min = params->lowFilterFrequency;
234 kmin = f_min / deltaF > 1 ? f_min / deltaF : 1;
235 fFinal = params->highFilterFrequency;
236 kmax = fFinal / deltaF < (len - 1) ? fFinal / deltaF : (len - 1);
237 qVec.length = numPoints;
238 qtildeVec = XLALCreateCOMPLEX8Vector( numPoints );
239 qtilde = qtildeVec->data;
240
241 /* Data params */
242 inputData = sgmnt->data->data;
243 length = sgmnt->data->length;
244
245 /* Check that these input values are sane */
246 sanity_check ( deltaT > 0 );
247 sanity_check ( deltaF > 0 );
248 sanity_check ( fcTmplt->tmplt.tC > 0 );
249 /*Segment, response function and PTFQtilde must be the same length */
250 sanity_check ( len == length ) ;
251 sanity_check ( fcTmplt->PTFQtilde->vectorLength == len);
252
253// sanity_check ( fcTmplt->tmplt.approximant == FindChirpPTF );
254
255 /* Set parameters to determine spin/nonspin */
256 /* For non-spin we only need one filter. For PTF all 5 are needed */
257 vecLength = 1;
258 if (spinTemplate == 1)
259 {
260 vecLength = 5;
261 }
262
263 /*
264 *
265 * compute PTF normalization matrix
266 *
267 */
268
269 /* Compute M_ij from Qtilde_i and Qtilde_j */
270 for( i = 0; i < vecLength; ++i )
271 {
272 for ( j = 0; j < i + 1; ++j )
273 {
274 for ( k = kmin; k < kmax ; ++k )
275 {
276 PTFM->data[5 * i + j] += (crealf(PTFQtilde[k + i * len]) *
277 crealf(PTFQtilde[k + j * len]) +
278 cimagf(PTFQtilde[k + i * len]) *
279 cimagf(PTFQtilde[k + j * len]) )
280 * invspec->data->data[k] ;
281 }
282 PTFM->data[5 * i + j] *= 4.0 * deltaF ;
283 /* Use the symmetry of M */
284 PTFM->data[5 * j + i] = PTFM->data[5 * i + j];
285 }
286 }
287
288 if (PTFN)
289 {
290 /* Compute N_ij */
291 for( i = 0; i < vecLength; ++i )
292 {
293 for ( j = 0; j < i + 1; ++j )
294 {
295 for ( k = kmin; k < kmax ; ++k )
296 {
297 PTFN->data[5 * i + j] += (crealf(PTFQtilde[k + i * len]) *
298 cimagf(PTFQtilde[k + j * len]) -
299 cimagf(PTFQtilde[k + i * len]) *
300 crealf(PTFQtilde[k + j * len]) )
301 * invspec->data->data[k] ;
302 }
303 PTFN->data[5 * i + j] *= 4.0 * deltaF ;
304 /* Use the anti-symmetry of M */
305 PTFN->data[5 * j + i] = -PTFN->data[5 * i + j];
306 }
307 }
308 }
309
310 for ( i = 0; i < vecLength; ++i )
311 {
312
313 /* compute qtilde using data and Qtilde */
314
315 memset( qtildeVec->data, 0,
316 qtildeVec->length * sizeof(COMPLEX8) );
317
318 /* qtilde positive frequency, not DC or nyquist */
319 for ( k = kmin; k < kmax ; ++k )
320 {
321 r = crealf(inputData[k]);
322 s = cimagf(inputData[k]);
323 x = crealf(PTFQtilde[i * (numPoints / 2 + 1) + k]);
324 y = 0 - cimagf(PTFQtilde[i * (numPoints / 2 + 1) + k]); /* cplx conj */
325
326 qtilde[k] = crectf( 4. * (r*x - s*y)*deltaF, 4. * (r*y + s*x)*deltaF );
327 }
328
329 qVec.data = PTFqVec->data + (i * numPoints);
330
331 /* inverse fft to get q */
332 XLALCOMPLEX8VectorFFT( &qVec, qtildeVec, invPlan );
333 }
334
335 /* FIXME: We would like to be able to print off A,B and M.
336 like above, this may be better in the main function */
337
338 XLALDestroyCOMPLEX8Vector( qtildeVec );
339}
340
342 struct coh_PTF_params *params,
343 FindChirpTemplate *fcTmplt1,
344 FindChirpTemplate *fcTmplt2,
345 REAL4FrequencySeries *invspec,
346 UINT4 spinBank,
347 REAL8Array *PTFM
348 )
349{
350 // This function calculates the real part of the overlap between two templates
351
352 UINT4 i, j, k, kmin, kmax, len,vecLen;
353 REAL8 f_min, deltaF, fFinal;
354 COMPLEX8 *PTFQtilde1 = NULL;
355 COMPLEX8 *PTFQtilde2 = NULL;
356
357
358 PTFQtilde1 = fcTmplt1->PTFQtilde->data;
359 PTFQtilde2 = fcTmplt2->PTFQtilde->data;
360
361 len = invspec->data->length;
362 deltaF = invspec->deltaF;
363 f_min = params->lowFilterFrequency;
364 kmin = f_min / deltaF > 1 ? f_min / deltaF : 1;
365 fFinal = params->highFilterFrequency;
366 kmax = fFinal / deltaF < (len - 1) ? fFinal / deltaF : (len - 1);
367
368 vecLen = 5;
369 if (! spinBank )
370 {
371 vecLen = 1;
372 }
373
374 for( i = 0; i < vecLen; ++i )
375 {
376 for ( j = 0; j < vecLen; ++j )
377 {
378 for ( k = kmin; k < kmax ; ++k )
379 {
380 PTFM->data[vecLen * i + j] += (crealf(PTFQtilde1[k + i * len]) *
381 crealf(PTFQtilde2[k + j * len]) +
382 cimagf(PTFQtilde1[k + i * len]) *
383 cimagf(PTFQtilde2[k + j * len]) )
384 * invspec->data->data[k] ;
385
386 }
387 PTFM->data[vecLen * i + j] *= 4.0 * deltaF ;
388 }
389 }
390
391}
392
394 struct coh_PTF_params *params,
395 FindChirpTemplate *fcTmplt1,
396 FindChirpTemplate *fcTmplt2,
397 REAL4FrequencySeries *invspec,
398 UINT4 spinBank,
399 COMPLEX8Array *PTFM
400 )
401{
402
403 // This function calculates the complex overlap between two templates
404 UINT4 i, j, k, kmin, kmax, len,vecLen;
405 REAL8 f_min, deltaF, fFinal;
406 COMPLEX8 *PTFQtilde1 = NULL;
407 COMPLEX8 *PTFQtilde2 = NULL;
408
409
410 PTFQtilde1 = fcTmplt1->PTFQtilde->data;
411 PTFQtilde2 = fcTmplt2->PTFQtilde->data;
412
413 len = invspec->data->length;
414 deltaF = invspec->deltaF;
415 f_min = params->lowFilterFrequency;
416 kmin = f_min / deltaF > 1 ? f_min / deltaF : 1;
417 fFinal = params->highFilterFrequency;
418 kmax = fFinal / deltaF < (len - 1) ? fFinal / deltaF : (len - 1);
419
420 vecLen = 5;
421 if (! spinBank )
422 {
423 vecLen = 1;
424 }
425
426 for( i = 0; i < vecLen; ++i )
427 {
428 for ( j = 0; j < vecLen; ++j )
429 {
430 for ( k = kmin; k < kmax ; ++k )
431 {
432 PTFM->data[vecLen * i + j] += crectf(
433 ( crealf(PTFQtilde1[k + i * len]) *
434 crealf(PTFQtilde2[k + j * len]) +
435 cimagf(PTFQtilde1[k + i * len]) *
436 cimagf(PTFQtilde2[k + j * len]) )
437 * invspec->data->data[k] ,
438 ( -crealf(PTFQtilde1[k + i * len]) *
439 cimagf(PTFQtilde2[k + j * len]) +
440 cimagf(PTFQtilde1[k + i * len]) *
441 crealf(PTFQtilde2[k + j * len]) )
442 * invspec->data->data[k] );
443 }
444 PTFM->data[vecLen * i + j] *= 4.0 * deltaF ;
445 }
446 }
447
448}
449
451 struct coh_PTF_params *params,
452 FindChirpTemplate *fcTmplt,
453 UINT4 spinBank,
455 COMPLEX8FFTPlan *invBankPlan,
456 COMPLEX8VectorSequence *PTFqVec,
457 COMPLEX8VectorSequence *PTFBankqVec,
458 REAL8 f_min,
459 REAL8 fFinal)
460{
461 /* This function calculates (Q|s) for the bank veto. It only returns the
462 * middle half of the time series with some buffer to allow for time shifts */
463
464 /* FIXME: Can this function be merged with normalize?? */
465
466 UINT4 i, j, k, kmin, len, kmax,vecLen;
467 REAL8 deltaF, r, s, x, y;
468 COMPLEX8 *inputData,*qtilde;
469 COMPLEX8Vector *qtildeVec,qVec;
470 COMPLEX8 *PTFQtilde = NULL;
471
472 len = sgmnt->data->length;
473 PTFQtilde = fcTmplt->PTFQtilde->data;
474 deltaF = sgmnt->deltaF;
475/* deltaT = 1.0 / ( deltaF * (REAL4) numPoints); */
476
477 /* F_min and F_max are used to do the chisquared limited filters */
478 if (! f_min)
479 {
480 f_min = params->lowFilterFrequency;
481 }
482 kmin = f_min / deltaF > 1 ? f_min / deltaF : 1;
483 if (! fFinal)
484 {
485 fFinal = params->highFilterFrequency;
486 }
487 kmax = fFinal / deltaF < (len - 1) ? fFinal / deltaF : (len - 1);
488 qVec.length = params->numTimePoints;
489 qtildeVec = XLALCreateCOMPLEX8Vector( params->numTimePoints );
490 qtilde = qtildeVec->data;
491
492 if (! spinBank )
493 {
494 vecLen = 1;
495 }
496 else
497 vecLen = 5;
498
499 /* Data params */
500 inputData = sgmnt->data->data;
501
502 for ( i = 0; i < vecLen; ++i )
503 {
504 memset( qtildeVec->data, 0,
505 qtildeVec->length * sizeof(COMPLEX8) );
506 /* qtilde positive frequency, not DC or nyquist */
507 for ( k = kmin; k < kmax ; ++k )
508 {
509 r = crealf(inputData[k]);
510 s = cimagf(inputData[k]);
511 x = crealf(PTFQtilde[i * (params->numFreqPoints) + k]);
512 y = 0 - cimagf(PTFQtilde[i * (params->numFreqPoints) + k]); /* cplx conj */
513
514 qtilde[k] = crectf( 4. * (r*x - s*y)*deltaF, 4. * (r*y + s*x)*deltaF );
515 }
516
517 qVec.data = PTFqVec->data + (i * params->numTimePoints);
518
519 /* inverse fft to get q */
520 XLALCOMPLEX8VectorFFT( &qVec, qtildeVec, invBankPlan );
521 }
522 XLALDestroyCOMPLEX8Vector( qtildeVec );
523
524 for ( i = 0; i < vecLen ; i++ )
525 {
526 for ( j = params->analStartPointBuf; j < params->analEndPointBuf; ++j )
527 {
528 PTFBankqVec->data[i*(params->numAnalPointsBuf) + \
529 (j-params->analStartPointBuf)]\
530 = PTFqVec->data[i*params->numTimePoints + j];
531 }
532 }
533}
534
536 struct coh_PTF_params *params,
537 FindChirpTemplate *fcTmplt,
538 struct bankComplexTemplateOverlaps *autoTempOverlaps,
539 REAL4FrequencySeries *invspec,
540 COMPLEX8FFTPlan *invBankPlan,
541 UINT4 spinBank,
542 UINT4 numAutoPoints,
543 UINT4 timeStepPoints,
544 UINT4 ifoNumber )
545{
546 // This function calculate (Q | Q(delta_t) ) at various different points
547 // for the auto veto
548
549 UINT4 i, j, k, kmin, len, kmax,vecLen,numPoints;
550 REAL8 f_min, deltaF, fFinal, r, s, x, y;
551 COMPLEX8 *qtilde;
552 COMPLEX8Vector *qtildeVec,*qVec;
553 COMPLEX8 *PTFQtilde = NULL;
554
555 len = params->numFreqPoints;
556 PTFQtilde = fcTmplt->PTFQtilde->data;
557 numPoints = params->numTimePoints;
558 deltaF = invspec->deltaF;
559// deltaT = 1.0 / ( deltaF * (REAL4) len);
560
561 f_min = params->lowFilterFrequency;
562 kmin = f_min / deltaF > 1 ? f_min / deltaF : 1;
563 fFinal = params->highFilterFrequency;
564 kmax = fFinal / deltaF < (len - 1) ? fFinal / deltaF : (len - 1);
566 qtildeVec = XLALCreateCOMPLEX8Vector( numPoints );
567 qtilde = qtildeVec->data;
568
569 if (! spinBank )
570 vecLen = 1;
571 else
572 vecLen = 5;
573
574 for ( i = 0; i < vecLen; ++i )
575 {
576 for ( j=0; j < vecLen; ++j )
577 {
578 memset( qtildeVec->data, 0,
579 qtildeVec->length * sizeof(COMPLEX8) );
580 /* qtilde positive frequency, not DC or nyquist */
581 for ( k = kmin; k < kmax ; ++k )
582 {
583 r = crealf(PTFQtilde[i * (len ) + k]);
584 s = cimagf(PTFQtilde[i * (len ) + k]);
585 x = crealf(PTFQtilde[j * (len ) + k]);
586 y = 0 - cimagf(PTFQtilde[j * (len ) + k]); /* cplx conj */
587
588 qtilde[k] = crectf(
589 4. * (r*x - s*y)*deltaF * invspec->data->data[k],
590 4. * (r*y + s*x)*deltaF * invspec->data->data[k]
591 );
592 }
593
594 /* inverse fft to get q */
595 XLALCOMPLEX8VectorFFT( qVec, qtildeVec, invBankPlan );
596 for ( k = 1; k < numAutoPoints+1 ; k++ )
597 {
598 autoTempOverlaps[k-1].timeStepDelay = - k * timeStepPoints;
599 autoTempOverlaps[k-1].PTFM[ifoNumber]->data[i*vecLen + j] = qVec->data[numPoints - k * timeStepPoints];
600 }
601 }
602 }
603
604 /* FIXME: We should be able to print off the autocorrelation timeseries */
605
606 XLALDestroyCOMPLEX8Vector( qtildeVec);
608}
void LALFindChirpTDTemplate(LALStatus *status, FindChirpTemplate *fcTmplt, InspiralTemplate *theTmplt, FindChirpTmpltParams *params)
int j
int k
#define fprintf
int s
#define sanity_check(condition)
Definition: coh_PTF.h:85
void coh_PTF_template_PTF(FindChirpTemplate *fcTmplt, InspiralTemplate *InspTmplt, FindChirpTmpltParams *params)
void coh_PTF_complex_template_overlaps(struct coh_PTF_params *params, FindChirpTemplate *fcTmplt1, FindChirpTemplate *fcTmplt2, REAL4FrequencySeries *invspec, UINT4 spinBank, COMPLEX8Array *PTFM)
void coh_PTF_template(FindChirpTemplate *fcTmplt, InspiralTemplate *InspTmplt, FindChirpTmpltParams *params)
void coh_PTF_template_overlaps(struct coh_PTF_params *params, FindChirpTemplate *fcTmplt1, FindChirpTemplate *fcTmplt2, REAL4FrequencySeries *invspec, UINT4 spinBank, REAL8Array *PTFM)
void coh_PTF_auto_veto_overlaps(struct coh_PTF_params *params, FindChirpTemplate *fcTmplt, struct bankComplexTemplateOverlaps *autoTempOverlaps, REAL4FrequencySeries *invspec, COMPLEX8FFTPlan *invBankPlan, UINT4 spinBank, UINT4 numAutoPoints, UINT4 timeStepPoints, UINT4 ifoNumber)
void coh_PTF_normalize(struct coh_PTF_params *params, FindChirpTemplate *fcTmplt, REAL4FrequencySeries *invspec, REAL8Array *PTFM, REAL8Array *PTFN, COMPLEX8VectorSequence *PTFqVec, COMPLEX8FrequencySeries *sgmnt, COMPLEX8FFTPlan *invPlan, UINT4 spinTemplate)
void coh_PTF_bank_filters(struct coh_PTF_params *params, FindChirpTemplate *fcTmplt, UINT4 spinBank, COMPLEX8FrequencySeries *sgmnt, COMPLEX8FFTPlan *invBankPlan, COMPLEX8VectorSequence *PTFqVec, COMPLEX8VectorSequence *PTFBankqVec, REAL8 f_min, REAL8 fFinal)
const double Q
int XLALCOMPLEX8VectorFFT(COMPLEX8Vector *_LAL_RESTRICT_ output, const COMPLEX8Vector *_LAL_RESTRICT_ input, const COMPLEX8FFTPlan *plan)
INT4 XLALFindChirpPTFWaveform(REAL4Vector *PTFphi, REAL4Vector *PTFomega_2_3, REAL4VectorSequence *PTFe1, REAL4VectorSequence *PTFe2, InspiralTemplate *InspTmplt, REAL8 deltaT)
void LALFindChirpSPTemplate(LALStatus *status, FindChirpTemplate *fcTmplt, InspiralTemplate *tmplt, FindChirpTmpltParams *params)
double REAL8
#define XLAL_INIT_DECL(var,...)
#define crectf(re, im)
uint32_t UINT4
float complex COMPLEX8
float REAL4
FindChirpSP
FindChirpPTF
static const INT4 r
int XLALREAL4ForwardFFT(COMPLEX8Vector *output, const REAL4Vector *input, const REAL4FFTPlan *plan)
COMPLEX8Vector * XLALCreateCOMPLEX8Vector(UINT4 length)
void XLALDestroyCOMPLEX8Vector(COMPLEX8Vector *vector)
XLAL_SUCCESS
static LALStatus status
Definition: inspinj.c:552
int i
Definition: inspinj.c:596
int deltaF
e1y
e1x
e1z
kmin
kmax
int N
COMPLEX8 * data
COMPLEX8Sequence * data
COMPLEX8 * data
This structure contains a frequency domain template used as input to the FindChirpFilter() routine.
COMPLEX8Vector * data
Vector of length containing the frequency template data ; For a template generated in the frequency ...
COMPLEX8VectorSequence * PTFQtilde
UNDOCUMENTED.
InspiralTemplate tmplt
The template parameters of this FindChirpTemplate; In addition to the mass parameters the following f...
REAL4VectorSequence * PTFQ
UNDOCUMENTED.
This structure contains the parameters for generation of templates by the various template generation...
Approximant approximant
REAL4Sequence * data
REAL4 * data
REAL8 * data
COMPLEX8Array * PTFM[LAL_NUM_IFO]
Definition: coh_PTF.h:247
INT4 numPoints
Definition: tmpltbank.c:399
double f_min
double deltaT