Loading [MathJax]/extensions/TeX/AMSsymbols.js
LALInspiral 5.0.3.1-ea7c608
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
LALTaylorF2ReducedSpin.c
Go to the documentation of this file.
1/*
2* Copyright (C) 2011 P. Ajith
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#include <math.h>
21#include <lal/LALInspiral.h>
22
23/**
24 * Generate the "reduced-spin templates" proposed in http://arxiv.org/abs/1107.1267
25 */
28
29 REAL8 df, shft, phi0, amp0, amp, f, m, eta, delta, chi_s, chi_a, chi, Psi;
30 REAL8 psiNewt, psi2, psi3, psi4, psi5, psi6, psi6L, psi7, psi3S, psi4S, psi5S;
31 REAL8 alpha2, alpha3, alpha4, alpha5, alpha6, alpha6L, alpha7, alpha3S, alpha4S, alpha5S;
32 REAL8 v, v2, v3, v4, v5, v6, v7, v0, mSevenBySix, piM, oneByThree;
33 INT4 i, j, n, nBy2;
34
35 /* check inputs */
36 if (!signalvec || !(signalvec->data) || !params) {
37 XLALPrintError(LALINSPIRALH_MSGENULL);
39 }
40 if ((signalvec->length < 2) || (params->fCutoff <= params->fLower)
41 || (params->mass1 <= 0) || (params->mass2 <= 0)
42 || (params->spin1[0] != 0) || (params->spin1[1] != 0)
43 || (params->spin2[0] != 0) || (params->spin2[1] != 0)) {
44 XLALPrintError(LALINSPIRALH_MSGECHOICE);
46 }
47
48 /* fill the waveform with zeros */
49 memset(signalvec->data, 0, signalvec->length * sizeof( REAL4 ));
50
51 /* compute total mass (secs), mass ratio and the reduced spin parameter */
52 m = (params->mass1+params->mass2)*LAL_MTSUN_SI;
53 eta = params->mass1*params->mass2/pow(params->mass1+params->mass2,2.);
54 delta = (params->mass1-params->mass2)/(params->mass1+params->mass2);
55 chi_s = (params->spin1[2] + params->spin2[2])/2.;
56 chi_a = (params->spin1[2] - params->spin2[2])/2.;
57 chi = chi_s*(1. - 76.*eta/113.) + delta*chi_a;
58
59 /* freq resolution and the low-freq bin */
60 df = params->tSampling/signalvec->length;
61 n = signalvec->length;
62
63 /* extrinsic parameters */
64 phi0 = params->startPhase;
65 amp0 = pow(m,5./6.)*sqrt(5.*eta/24.)/(pow(LAL_PI,2./3.)*params->distance/LAL_C_SI);
66 shft = -2.*LAL_PI * ((REAL8)signalvec->length/params->tSampling +
67 params->nStartPad/params->tSampling + params->startTime);
68 // UNUSED!!: REAL8 t0 = params->startTime;
69 phi0 = params->startPhase;
70
71 /* spin terms in the amplitude and phase (in terms of the reduced
72 * spin parameter */
73 psi3S = 113.*chi/3.;
74 psi4S = 63845.*(-81. + 4.*eta)*chi*chi/(8.*pow(-113. + 76.*eta, 2.));
75 psi5S = -565.*(-146597. + 135856.*eta + 17136.*eta*eta)*chi/(2268.*(-113. + 76.*eta));
76
77 alpha3S = (113.*chi)/24.;
78 alpha4S = (12769.*pow(chi,2)*(-81. + 4.*eta))/(32.*pow(-113. + 76.*eta,2));
79 alpha5S = (-113.*chi*(502429. - 591368.*eta + 1680*eta*eta))/(16128.*(-113 + 76*eta));
80
81 /* coefficients of the phase at PN orders from 0 to 3.5PN */
82 psiNewt = 3./(128.*eta);
83 psi2 = 3715./756. + 55.*eta/9.;
84 psi3 = psi3S - 16.*LAL_PI;
85 psi4 = 15293365./508032. + 27145.*eta/504. + 3085.*eta*eta/72. + psi4S;
86 psi5 = (38645.*LAL_PI/756. - 65.*LAL_PI*eta/9. + psi5S);
87 psi6 = 11583231236531./4694215680. - (640.*LAL_PI*LAL_PI)/3. - (6848.*LAL_GAMMA)/21.
88 + (-5162.983708047263 + 2255.*LAL_PI*LAL_PI/12.)*eta
89 + (76055.*eta*eta)/1728. - (127825.*eta*eta*eta)/1296.;
90 psi6L = -6848./21.;
91 psi7 = (77096675.*LAL_PI)/254016. + (378515.*LAL_PI*eta)/1512.
92 - (74045.*LAL_PI*eta*eta)/756.;
93
94 /* amplitude coefficients */
95 alpha2 = 1.1056547619047619 + (11*eta)/8.;
96 alpha3 = -2*LAL_PI + alpha3S;
97 alpha4 = 0.8939214212884228 + (18913*eta)/16128. + (1379*eta*eta)/1152. + alpha4S;
98 alpha5 = (-4757*LAL_PI)/1344. + (57*eta*LAL_PI)/16. + alpha5S;
99 alpha6 = -58.601030974347324 + (3526813753*eta)/2.7869184e7 -
100 (1041557*eta*eta)/258048. + (67999*eta*eta*eta)/82944. +
101 (10*pow(LAL_PI,2))/3. - (451*eta*pow(LAL_PI,2))/96.;
102 alpha6L = 856/105.;
103 alpha7 = (-5111593*LAL_PI)/2.709504e6 - (72221*eta*LAL_PI)/24192. -
104 (1349*eta*eta*LAL_PI)/24192.;
105
106 /* select the terms according to the PN order chosen */
107 switch (params->order) {
109 psi7 = 0.;
110 alpha7 = 0.;
111 break;
113 psi6 = 0.;
114 psi6L = 0.;
115 psi7 = 0.;
116 alpha6 = 0.;
117 alpha6L = 0.;
118 alpha7 = 0.;
119 break;
120 case LAL_PNORDER_TWO:
121 psi5 = 0.;
122 psi6 = 0.;
123 psi6L = 0.;
124 psi7 = 0.;
125 alpha5 = 0.;
126 alpha6 = 0.;
127 alpha6L = 0.;
128 alpha7 = 0.;
129 break;
131 psi4 = 0.;
132 psi5 = 0.;
133 psi6 = 0.;
134 psi6L = 0.;
135 psi7 = 0.;
136 alpha4 = 0.;
137 alpha5 = 0.;
138 alpha6 = 0.;
139 alpha6L = 0.;
140 alpha7 = 0.;
141 break;
142 case LAL_PNORDER_ONE:
143 psi3 = 0.;
144 psi4 = 0.;
145 psi5 = 0.;
146 psi6 = 0.;
147 psi6L = 0.;
148 psi7 = 0.;
149 alpha3 = 0.;
150 alpha4 = 0.;
151 alpha5 = 0.;
152 alpha6 = 0.;
153 alpha6L = 0.;
154 alpha7 = 0.;
155 break;
157 psi2 = 0.;
158 psi3 = 0.;
159 psi4 = 0.;
160 psi5 = 0.;
161 psi6 = 0.;
162 psi6L = 0.;
163 psi7 = 0.;
164 alpha2 = 0.;
165 alpha3 = 0.;
166 alpha4 = 0.;
167 alpha5 = 0.;
168 alpha6 = 0.;
169 alpha6L = 0.;
170 alpha7 = 0.;
171 break;
172 default:
173 break;
174 }
175
176 /* fill the zero and Nyquist */
177 signalvec->data[0] = 0.;
178 signalvec->data[n/2] = 0.;
179
180 mSevenBySix = -7./6.;
181 piM = LAL_PI*m;
182 oneByThree = 1./3.;
183 nBy2 = n/2;
184
185 v0 = pow(LAL_PI*m*params->fLower, 1./3.);
186
187 for (i=1; i<nBy2; i++) {
188
189 /* this is the index of the imaginary part */
190 j = n-i;
191
192 /* fourier frequency corresponding to this bin */
193 f = i * df;
194
195 /* PN expansion parameter */
196 v = pow(piM*f, oneByThree);
197
198 v2 = v*v; v3 = v2*v; v4 = v3*v; v5 = v4*v; v6 = v5*v; v7 = v6*v;
199
200 if ((f < params->fLower) || (f > params->fCutoff)) {
201 amp = 0.;
202 Psi = 0.;
203 }
204 else {
205
206 /* compute the phase and amplitude */
207 Psi = psiNewt*pow(v, -5.)*(1.
208 + psi2*v2 + psi3*v3 + psi4*v4
209 + psi5*v5*(1.+3.*log(v/v0))
210 + (psi6 + psi6L*log(4.*v))*v6 + psi7*v7);
211
212 amp = amp0*pow(f, mSevenBySix)*(1.
213 + alpha2*v2 + alpha3*v3 + alpha4*v4
214 + alpha5*v5 + (alpha6 + alpha6L*(LAL_GAMMA+log(4.*v)) )*v6
215 + alpha7*v7);
216
217 }
218
219 signalvec->data[i] = (REAL4) (amp * cos(Psi+shft*f+phi0+LAL_PI/4.)); /* real */
220 signalvec->data[j] = (REAL4) -(amp * sin(Psi+shft*f+phi0+LAL_PI/4.)); /* imag */
221
222 }
223
224 params->fFinal = params->fCutoff;
225
226 return XLAL_SUCCESS;
227}
228
229/**
230 * Generate two orthogonal "reduced-spin" templates
231 */
233 REAL4Vector *signalvec2,
235
236 /* check inputs */
237 if (!signalvec1 || !signalvec2 || !(signalvec1->data) || !(signalvec2->data)) {
238 XLALPrintError(LALINSPIRALH_MSGENULL);
240 }
241
242 /* generate one waveform with startPhase specified by the user */
243 if (!XLALTaylorF2ReducedSpin(signalvec1, params))
245
246 /* generate another waveform orthogonal to it */
247 params->startPhase += LAL_PI_2;
248 if (!XLALTaylorF2ReducedSpin(signalvec2, params))
250
251 return XLAL_SUCCESS;
252}
253
254/**
255 * Compute the chirp time of the "reduced-spin" templates
256 */
258 REAL8 spin2, UINT4 pnOrder) {
259
260 REAL8 chis, chia, chis2, chia2;
261 REAL8 tau, tk[8], eta2, eta3;
262 UINT4 k;
263
264 REAL8 m = m1+m2;
265 REAL8 eta = m1*m2/(m*m);
266 REAL8 delta = (m1-m2)/m;
267
268 chis = (spin1+spin2)/2.;
269 chia = (spin1-spin2)/2.;
270
271 eta2 = eta*eta;
272 eta3 = eta2*eta;
273 chis2 = chis*chis;
274 chia2 = chia*chia;
275
276 /* chirp time coefficients up to 3.5PN */
277 tk[0] = (5.*m*LAL_MTSUN_SI)/(256.*pow(v,8)*eta);
278 tk[1] = 0.;
279 tk[2] = 2.9484126984126986 + (11*eta)/3.;
280 tk[3] = (-32*LAL_PI)/5. + (226*chia*delta)/15. + chis*(15.066666666666666 - (152*eta)/15.);
281 tk[4] = 6.020630590199042 + ((233*chis*chia)/24. - (719*chia*chis)/24.)*delta +
282 chia*chia*(4.854166666666667 - 20*eta) + chis2*(-14.979166666666666 - eta/12.) +
283 chis*chis*(4.854166666666667 + (7*eta)/12.) + (5429*eta)/504. + (617*eta2)/72. +
284 chia2*(-14.979166666666666 + 60*eta);
285 tk[5] = (-7729*LAL_PI)/252. + (13*LAL_PI*eta)/3. + delta*((146597*chia)/756. + (28*chia*eta)/3.) +
286 chis*(193.91137566137567 - (4852*eta)/27. - (68*eta2)/3.);
287 tk[6] = -428.291776175525 + (128*LAL_PI*LAL_PI)/3. + (6848*LAL_GAMMA)/105. + (3147553127*eta)/3.048192e6 -
288 (451*LAL_PI*LAL_PI*eta)/12. - (15211*eta2)/1728. + (25565*eta3)/1296. + (6848*log(4*v))/105.;
289 tk[7] = (-15419335*LAL_PI)/127008. - (75703*LAL_PI*eta)/756. + (14809*LAL_PI*eta2)/378.;
290
291 /* compute chirp time. return it */
292 tau = 1.;
293 for (k = 2; k<=pnOrder; k++) {
294 tau = tau + tk[k]*pow(v, k);
295 }
296 tau = tau*tk[0];
297
298 return (tau);
299}
static double double delta
REAL8 XLALChirpTimeReducedSpin(REAL8 v, REAL8 m1, REAL8 m2, REAL8 spin1, REAL8 spin2, UINT4 pnOrder)
Compute the chirp time of the "reduced-spin" templates.
int XLALTaylorF2ReducedSpin(REAL4Vector *signalvec, InspiralTemplate *params)
Generate the "reduced-spin templates" proposed in http://arxiv.org/abs/1107.1267.
int XLALTaylorF2ReducedSpinTemplates(REAL4Vector *signalvec1, REAL4Vector *signalvec2, InspiralTemplate *params)
Generate two orthogonal "reduced-spin" templates.
double i
#define LAL_PI_2
#define LAL_C_SI
#define LAL_PI
#define LAL_MTSUN_SI
#define LAL_GAMMA
double REAL8
uint32_t UINT4
int32_t INT4
float REAL4
#define LALINSPIRALH_ENULL
Arguments contained an unexpected null pointer.
Definition: LALInspiral.h:56
LAL_PNORDER_TWO_POINT_FIVE
LAL_PNORDER_THREE
LAL_PNORDER_TWO
LAL_PNORDER_ONE
LAL_PNORDER_ONE_POINT_FIVE
LAL_PNORDER_NEWTONIAN
static const INT4 m
#define XLAL_ERROR(...)
int XLALPrintError(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
XLAL_SUCCESS
XLAL_EFAULT
XLAL_EFUNC
XLAL_EDOM
int n
The inspiral waveform parameter structure containing information about the waveform to be generated.
Definition: LALInspiral.h:205
REAL4 * data
double distance
double df