23 #include <lal/LALStdlib.h>
24 #include <lal/LALSimIMR.h>
25 #include <lal/LALConstants.h>
27 #include <lal/FrequencySeries.h>
28 #include <lal/StringInput.h>
29 #include <lal/TimeSeries.h>
30 #include <lal/TimeFreqFFT.h>
31 #include <lal/Units.h>
32 #include <lal/XLALError.h>
33 #include <gsl/gsl_blas.h>
34 #include <gsl/gsl_linalg.h>
35 #include <gsl/gsl_permutation.h>
36 #include <gsl/gsl_complex.h>
38 typedef struct tagBBHPhenomParams{
67 static size_t NextPow2(
const size_t n);
92 const REAL8 totalMass = m1 + m2;
93 const REAL8 eta = m1 * m2 / (totalMass * totalMass);
95 const REAL8 etap2 = eta*eta;
97 const REAL8 fMerg_a = 6.6389e-01;
98 const REAL8 fMerg_b = -1.0321e-01;
99 const REAL8 fMerg_c = 1.0979e-01;
101 const REAL8 fRing_a = 1.3278e+00;
102 const REAL8 fRing_b = -2.0642e-01;
103 const REAL8 fRing_c = 2.1957e-01;
105 const REAL8 sigma_a = 1.1383e+00;
106 const REAL8 sigma_b = -1.7700e-01;
107 const REAL8 sigma_c = 4.6834e-02;
109 const REAL8 fCut_a = 1.7086e+00;
110 const REAL8 fCut_b = -2.6592e-01;
111 const REAL8 fCut_c = 2.8236e-01;
113 const REAL8 psi0_a = -1.5829e-01;
114 const REAL8 psi0_b = 8.7016e-02;
115 const REAL8 psi0_c = -3.3382e-02;
117 const REAL8 psi2_a = 3.2967e+01;
118 const REAL8 psi2_b = -1.9000e+01;
119 const REAL8 psi2_c = 2.1345e+00;
121 const REAL8 psi3_a = -3.0849e+02;
122 const REAL8 psi3_b = 1.8211e+02;
123 const REAL8 psi3_c = -2.1727e+01;
125 const REAL8 psi4_a = 1.1525e+03;
126 const REAL8 psi4_b = -7.1477e+02;
127 const REAL8 psi4_c = 9.9692e+01;
129 const REAL8 psi6_a = 1.2057e+03;
130 const REAL8 psi6_b = -8.4233e+02;
131 const REAL8 psi6_c = 1.8046e+02;
133 const REAL8 psi7_a = 0.;
134 const REAL8 psi7_b = 0.;
135 const REAL8 psi7_c = 0.;
143 phenParams->
fCut = (fCut_a*etap2 + fCut_b*eta + fCut_c)/piM;
144 phenParams->
fMerger = (fMerg_a*etap2 + fMerg_b*eta + fMerg_c)/piM;
145 phenParams->
fRing = (fRing_a*etap2 + fRing_b*eta + fRing_c)/piM;
146 phenParams->
sigma = (sigma_a*etap2 + sigma_b*eta + sigma_c)/piM;
148 phenParams->
psi0 = (psi0_a*etap2 + psi0_b*eta + psi0_c)/(eta*pow(piM, 5./3.));
149 phenParams->
psi1 = 0.;
150 phenParams->
psi2 = (psi2_a*etap2 + psi2_b*eta + psi2_c)/(eta*pow(piM, 3./3.));
151 phenParams->
psi3 = (psi3_a*etap2 + psi3_b*eta + psi3_c)/(eta*pow(piM, 2./3.));
152 phenParams->
psi4 = (psi4_a*etap2 + psi4_b*eta + psi4_c)/(eta*cbrt(piM));
153 phenParams->
psi5 = 0.;
154 phenParams->
psi6 = (psi6_a*etap2 + psi6_b*eta + psi6_c)/(eta/cbrt(piM));
155 phenParams->
psi7 = (psi7_a*etap2 + psi7_b*eta + psi7_c)/(eta*pow(piM, -2./3.));
169 const REAL8 totalMass = m1 + m2;
170 const REAL8 eta = m1 * m2 / (totalMass * totalMass);
174 const REAL8 etap2 = eta*eta;
175 const REAL8 chip2 = chi*chi;
176 const REAL8 etap3 = etap2*eta;
177 const REAL8 etap2chi = etap2*chi;
178 const REAL8 etachip2 = eta*chip2;
179 const REAL8 etachi = eta*chi;
185 phenParams->
psi0 = 3./(128.*eta);
187 phenParams->
psi2 = 3715./756. +
188 -9.2091e+02*eta + 4.9213e+02*etachi + 1.3503e+02*etachip2 +
189 6.7419e+03*etap2 + -1.0534e+03*etap2chi +
192 phenParams->
psi3 = -16.*
LAL_PI + 113.*chi/3. +
193 1.7022e+04*eta + -9.5659e+03*etachi + -2.1821e+03*etachip2 +
194 -1.2137e+05*etap2 + 2.0752e+04*etap2chi +
197 phenParams->
psi4 = 15293365./508032. - 405.*chip2/8. +
198 -1.2544e+05*eta + 7.5066e+04*etachi + 1.3382e+04*etachip2 +
199 8.7354e+05*etap2 + -1.6573e+05*etap2chi +
202 phenParams->
psi6 = -8.8977e+05*eta + 6.3102e+05*etachi + 5.0676e+04*etachip2 +
203 5.9808e+06*etap2 + -1.4148e+06*etap2chi +
206 phenParams->
psi7 = 8.6960e+05*eta + -6.7098e+05*etachi + -3.0082e+04*etachip2 +
207 -5.8379e+06*etap2 + 1.5145e+06*etap2chi +
210 phenParams->
psi8 = -3.6600e+05*eta + 3.0670e+05*etachi + 6.3176e+02*etachip2 +
211 2.4265e+06*etap2 + -7.2180e+05*etap2chi +
214 phenParams->
fMerger = 1. - 4.4547*pow(1.-chi,0.217) + 3.521*pow(1.-chi,0.26) +
215 6.4365e-01*eta + 8.2696e-01*etachi + -2.7063e-01*etachip2 +
216 -5.8218e-02*etap2 + -3.9346e+00*etap2chi +
219 phenParams->
fRing = (1. - 0.63*pow(1.-chi,0.3))/2. +
220 1.4690e-01*eta + -1.2281e-01*etachi + -2.6091e-02*etachip2 +
221 -2.4900e-02*etap2 + 1.7013e-01*etap2chi +
224 phenParams->
sigma = (1. - 0.63*pow(1.-chi,0.3))*pow(1.-chi,0.45)/4. +
225 -4.0979e-01*eta + -3.5226e-02*etachi + 1.0082e-01*etachip2 +
226 1.8286e+00*etap2 + -2.0169e-02*etap2chi +
229 phenParams->
fCut = 3.2361e-01 + 4.8935e-02*chi + 1.3463e-02*chip2 +
230 -1.3313e-01*eta + -8.1719e-02*etachi + 1.4512e-01*etachip2 +
231 -2.7140e-01*etap2 + 1.2788e-01*etap2chi +
234 phenParams->
fCut /= piM;
236 phenParams->
fRing /= piM;
237 phenParams->
sigma /= piM;
239 phenParams->
psi1 = 0.;
240 phenParams->
psi5 = 0.;
249 const REAL8 totalMass = m1 + m2;
250 const REAL8 eta = m1 * m2 / (totalMass * totalMass);
263 return 1 << (size_t) ceil(log2(n));
272 const REAL8 totalMass = m1 + m2;
273 const REAL8 eta = m1 * m2 / (totalMass * totalMass);
277 if (temp_f_min < 0.5) temp_f_min = 0.5;
289 if (temp_f_max > 2. /
deltaT - 100.) temp_f_max = 2. /
deltaT - 100.;
310 const REAL8 distance,
320 const REAL8 totalMass = m1 + m2;
321 const REAL8 eta = m1 * m2 / (totalMass * totalMass);
325 / pow(
LAL_PI, 2./3.) * sqrt(5. * eta / 24.) / (distance /
LAL_C_SI);
330 memset((*htilde)->data->data, 0, n *
sizeof(
COMPLEX16));
335 data = (*htilde)->data->data;
336 for (
i=1;
i < n - 1;
i++) {
337 REAL8 ampEff, psiEff;
340 REAL8 cbrt_f = cbrt(f);
341 REAL8 fNorm = f / fMerg;
345 else if (f <= fMerg) ampEff = amp0 * pow(fNorm, -7./6.);
346 else if ((f > fMerg) & (f <= fRing)) ampEff = amp0 * pow(fNorm, -2./3.);
348 ampEff = amp0 *
LAL_PI_2 * pow(fRing / fMerg, -2./3.) *
sigma
358 +
params->psi0 / (f * f) * cbrt_f
359 +
params->psi1 / (f * cbrt_f)
361 +
params->psi3 / f * cbrt_f
365 +
params->psi7 * f / cbrt_f;
368 data[
i] = ampEff * cos(psiEff);
369 data[
i] += -I * ampEff * sin(psiEff);
387 const REAL8 distance,
396 const REAL8 totalMass = m1 + m2;
397 const REAL8 eta = m1 * m2 / (totalMass * totalMass);
402 / pow(
LAL_PI, 2./3.) * sqrt(5. * eta / 24.) / (distance /
LAL_C_SI);
410 const REAL8 alpha2 = -323./224. + 451.*eta/168.;
411 const REAL8 alpha3 = (27./8. - 11.*eta/6.)*chi;
414 static REAL8 mergPower = -2./3.;
417 const REAL8 epsilon_1 = 1.4547*chi - 1.8897;
418 const REAL8 epsilon_2 = -1.8153*chi + 1.6557;
421 const REAL8 vMerg = cbrt(piM * fMerg);
422 const REAL8 vRing = cbrt(piM * fRing);
424 REAL8 w1 = (1. + alpha2 * vMerg * vMerg + alpha3 * piM * fMerg) / (1. + epsilon_1 * vMerg + epsilon_2 * vMerg * vMerg);
426 * (1. + epsilon_1 * vRing + epsilon_2 * vRing * vRing);
431 memset((*htilde)->data->data, 0, n *
sizeof(
COMPLEX16));
436 size_t ind_max = (size_t) (
f_max / deltaF);
437 for (
i = (
size_t) (
f_min / deltaF);
i < ind_max;
i++) {
438 REAL8 ampEff, psiEff;
439 REAL8 v, v2, v3, v4, v5, v6, v7, v8;
446 v2 = v*v; v3 = v2*v; v4 = v2*v2; v5 = v4*v; v6 = v3*v3; v7 = v6*v, v8 = v7*v;
450 ampEff = pow(f / fMerg, -7./6.)*(1. + alpha2 * v2 + alpha3 * v3);
454 ampEff = w1 * pow(f / fMerg, mergPower) * (1. + epsilon_1 * v + epsilon_2 * v2);
458 + 3./(128.*eta*v5)*(1 +
params->psi2*v2
464 ((*htilde)->data->data)[
i] = amp0 * ampEff * cos(psiEff);
465 ((*htilde)->data->data)[
i] += -I * amp0 * ampEff * sin(psiEff);
485 XLALPrintWarning(
"Warning: sampling rate too low to capture chosen f_max\n");
534 const size_t nt = 2 * (nf - 1);
536 const REAL8 winFLo = (
f_min + f_min_wide) / 2.;
539 REAL8FFTPlan *revPlan;
550 REAL8 softWin = (1. + tanh(f - winFLo))
551 * (1. - tanh(f - winFHi)) / 4.;
552 FDdata[k] *= softWin;
572 TDdata = (*signalTD)->data->data;
573 for (k = windowLength; k--;)
574 TDdata[nt-k-1] *= k / windowLength;
581 size_t k = start + 1;
593 if (f >= target)
return k - 1;
603 size_t peak_ind = -1;
604 REAL8 peak_amp_sq = 0.;
607 const REAL8 amp_sq = hpdata[k] * hpdata[k] + hcdata[k] * hcdata[k];
608 if (amp_sq > peak_amp_sq) {
610 peak_amp_sq = amp_sq;
620 const double cs = cos(shift);
621 const double ss = sin(shift);
624 const REAL8 temp_hpdata = hpdata[k] * cs - hcdata[k] * ss;
625 hcdata[k] = hpdata[k] * ss + hcdata[k] * cs;
626 hpdata[k] = temp_hpdata;
638 REAL8 inclFacPlus, inclFacCross;
643 inclFacCross = cos(inclination);
644 inclFacPlus = 0.5 * (1. + inclFacCross * inclFacCross);
646 hpdata[k] *= inclFacPlus;
647 hcdata[k] *= inclFacCross;
662 typedef struct tagIMRDerivCoeffs{
770 REAL8 eta = m1*m2/((m1 + m2)*(m1 + m2));
779 REAL8 M_p1by6 = sqrt(cbrt(
M));
780 REAL8 M_p5by6 =
M/M_p1by6;
781 REAL8 M_p7by6 =
M*M_p1by6;
783 REAL8 M_p2by3 = M_p1by3*M_p1by3;
784 REAL8 sqrt_eta = sqrt(eta);
785 REAL8 eta_p2 = eta*eta;
786 REAL8 chi_x_eta = chi*eta;
787 REAL8 chi_p2 = chi*chi;
789 REAL8 f2_p3 = f2_p2*f2;
790 REAL8 f2_p4 = f2_p3*f2;
791 REAL8 f1_p7by6 = f1*sqrt(cbrt(f1));
792 REAL8 f1_p3by2 = sqrt(f1*f1*f1);
793 REAL8 f1_p3 = f1*f1*f1;
796 REAL8 f1M_p1by3 = cbrt(f1*
M);
797 REAL8 f1M_p2by3 = f1M_p1by3*f1M_p1by3;
798 REAL8 f2M_p1by3 = cbrt(f2*
M);
799 REAL8 f2M_p2by3 = f2M_p1by3*f2M_p1by3;
800 REAL8 f1byf2_p1by3 = cbrt(f1/f2);
801 REAL8 f1byf2_p2by3 = f1byf2_p1by3*f1byf2_p1by3;
805 REAL8 dF1dEta = (0.3183098861837907*(0.64365 + 0.82696*chi - 0.27063*chi_p2 - 0.116436*eta - 7.8692*chi_x_eta - 21.2748*eta_p2))/
M;
806 REAL8 dF1dChi = (0.3183098861837907*(0.9666699/pow(1. - chi,0.783) - 0.91546/pow(1. - chi,0.74)))/
M + (0.3183098861837907*(0.82696*eta - 0.54126*chi_x_eta - 3.9346*eta_p2))/
M;
810 REAL8 dF2dEta = (0.3183098861837907*(0.1469 - 0.12281*chi - 0.026091*chi_p2 - 0.0498*eta + 0.34026*chi_x_eta + 6.9756*eta_p2))/
M;
811 REAL8 dF2dChi = 0.03008028424436822/(pow(1. - chi,0.7)*
M) + (0.3183098861837907*(-0.12281*eta - 0.052182*chi_x_eta + 0.17013*eta_p2))/
M;
815 REAL8 dSigmadEta = (0.3183098861837907*(-0.40979 - 0.035226*chi + 0.10082*chi_p2 + 3.6572*eta - 0.040338*chi_x_eta - 8.6094*eta_p2))/
M;
816 REAL8 dSigmadChi = (-0.03580986219567645*(1. - 0.63*pow(1. - chi,0.3)))/(pow(1. - chi,0.55)*
M) + 0.01504014212218411/(pow(1. - chi,0.24999999999999994)*
M) + (0.3183098861837907*(-0.035226*eta + 0.20164*chi_x_eta - 0.020169*eta_p2))/
M;
819 derCoeffs->
alpha2 = -323./224. + 451.*eta/168.;
820 derCoeffs->
alpha3 = (27./8. - 11.*eta/6.)*chi;
823 derCoeffs->
eps1 = 1.4547*chi - 1.8897;
824 derCoeffs->
eps2 = -1.8153*chi + 1.6557;
827 REAL8 dAlpha2dEta = 2.6845238095238093;
828 REAL8 dAlpha3dEta = -1.8333333333333333*chi;
829 REAL8 dAlpha3dChi = 3.375 - 1.8333333333333333*eta;
832 REAL8 dEps1dChi = 1.4547;
833 REAL8 dEps2dChi = -1.8153;
836 REAL8 norm_expr_1 = (1. + 1.4645918875615231*derCoeffs->
eps1*f2M_p1by3 + 2.1450293971110255*derCoeffs->
eps2*f2M_p2by3);
837 REAL8 norm_expr_2 = 0.33424583931521507*sqrt_eta*f1byf2_p2by3*M_p5by6;
838 REAL8 norm_expr_3 = 1. + 1.4645918875615231*derCoeffs->
eps1*f1M_p1by3 + 2.1450293971110255*derCoeffs->
eps2*f1M_p2by3;
839 REAL8 norm_expr_4 = sqrt_eta*f1byf2_p2by3*M_p5by6*norm_expr_1/f1_p7by6;
840 REAL8 norm_expr_5 = 0.22283055954347672*sqrt_eta*M_p5by6*norm_expr_1*
sigma;
843 derCoeffs->
Wm = (1. + 3.141592653589793*derCoeffs->
alpha3*f1*
M + 2.1450293971110255*derCoeffs->
alpha2*f1M_p2by3)/(norm_expr_3);
844 derCoeffs->
Wr = derCoeffs->
Wm*(norm_expr_2*norm_expr_1*
sigma)/f1_p7by6;
847 REAL8 dWmDen = norm_expr_3*norm_expr_3;
849 derCoeffs->
dWmdM = 0.;
850 derCoeffs->
dWmdEta = ((-0.48819729585384103*dF1dEta*
M*(derCoeffs->
eps1 + 2.9291837751230463*derCoeffs->
eps2*f1M_p1by3)*(1. + 3.141592653589793*derCoeffs->
alpha3*f1*
M + 2.1450293971110255*derCoeffs->
alpha2*f1M_p2by3))/f1M_p2by3 + (3.141592653589793*derCoeffs->
alpha3*dF1dEta*
M + 3.141592653589793*dAlpha3dEta*f1*
M + (1.430019598074017*derCoeffs->
alpha2*dF1dEta*
M)/f1M_p1by3 + 2.1450293971110255*dAlpha2dEta*f1M_p2by3)*(norm_expr_3))/dWmDen;
851 derCoeffs->
dWmdChi = ((3.141592653589793*derCoeffs->
alpha3*dF1dChi*
M + 3.141592653589793*dAlpha3dChi*f1*
M + (1.430019598074017*derCoeffs->
alpha2*dF1dChi*
M)/f1M_p1by3)*(norm_expr_3) - (0.48819729585384103*
M*(1. + 3.141592653589793*derCoeffs->
alpha3*f1*
M + 2.1450293971110255*derCoeffs->
alpha2*f1M_p2by3)*(3.*f1*(dEps1dChi + 1.4645918875615231*dEps2dChi*f1M_p1by3) + dF1dChi*(derCoeffs->
eps1 + 2.9291837751230463*derCoeffs->
eps2*f1M_p1by3)))/f1M_p2by3)/dWmDen;
853 derCoeffs->
dWrdM = derCoeffs->
Wm*((0.33424583931521507*dSigmadM*norm_expr_4) + (0.27853819942934593*sqrt_eta*f1byf2_p2by3*norm_expr_1*
sigma)/(f1_p7by6*M_p1by6) + (norm_expr_5*((-1.*dF2dM*f1)/f2_p2 + dF1dM/f2))/(f1_p7by6*f1byf2_p1by3) - (0.38995347920108425*dF1dM*norm_expr_4*
sigma)/(f1) + (norm_expr_2*((0.48819729585384103*derCoeffs->
eps1*(f2 + dF2dM*
M))/f2M_p2by3 + (1.430019598074017*derCoeffs->
eps2*(f2 + dF2dM*
M))/f2M_p1by3)*
sigma)/f1_p7by6);
854 derCoeffs->
dWrdEta = derCoeffs->
Wm*((0.33424583931521507*dSigmadEta*norm_expr_4) + (norm_expr_2*((0.48819729585384103*dF2dEta*derCoeffs->
eps1*
M)/f2M_p2by3 + (1.430019598074017*dF2dEta*derCoeffs->
eps2*
M)/f2M_p1by3)*
sigma)/f1_p7by6 + (norm_expr_5*((-1.*dF2dEta*f1)/f2_p2 + dF1dEta/f2))/(f1_p7by6*f1byf2_p1by3) - (0.38995347920108425*dF1dEta*norm_expr_4*
sigma)/(f1) + (0.16712291965760753*f1byf2_p2by3*M_p5by6*norm_expr_1*
sigma)/(sqrt_eta*f1_p7by6)) + derCoeffs->
Wr*derCoeffs->
dWmdEta/derCoeffs->
Wm;
855 derCoeffs->
dWrdChi = derCoeffs->
Wm*((0.33424583931521507*dSigmadChi*norm_expr_4) + (norm_expr_2*((0.48819729585384103*dF2dChi*derCoeffs->
eps1*
M)/f2M_p2by3 + (1.430019598074017*dF2dChi*derCoeffs->
eps2*
M)/f2M_p1by3 + 1.4645918875615231*dEps1dChi*f2M_p1by3 + 2.1450293971110255*dEps2dChi*f2M_p2by3)*
sigma)/f1_p7by6 + (norm_expr_5*((-1.*dF2dChi*f1)/f2_p2 + dF1dChi/f2))/(f1_p7by6*f1byf2_p1by3) - (0.38995347920108425*dF1dChi*norm_expr_4*
sigma)/(f1)) + derCoeffs->
Wr*derCoeffs->
dWmdChi/derCoeffs->
Wm;
862 derCoeffs->
dA1dM_0 = (0.1773229251163862*sqrt_eta)/M_p1by6;
863 derCoeffs->
dA1dM_1 = 0.6846531968814576*derCoeffs->
alpha2*sqrt(eta*
M);
864 derCoeffs->
dA1dM_2 = 1.2255680774891218*derCoeffs->
alpha3*sqrt_eta*M_p5by6;
866 derCoeffs->
dA1deta_0 = (0.10639375506983172*M_p5by6)/sqrt_eta;
867 derCoeffs->
dA1deta_1 = (0.22821773229381923*(derCoeffs->
alpha2 + 2.*dAlpha2dEta*eta)*sqrt(
M*
M*
M))/sqrt_eta;
868 derCoeffs->
dA1deta_2 = (0.33424583931521507*(derCoeffs->
alpha3 + 2.*dAlpha3dEta*eta)*M_p5by6*
M)/sqrt_eta;
872 derCoeffs->
dA1dchi_2 = 0.6684916786304301*dAlpha3dChi*sqrt_eta*M_p5by6*
M;
875 derCoeffs->
dA2dM_0 = (0.03546458502327724*sqrt_eta*(-3.*dF1dM*
M*derCoeffs->
Wm + f1*(6.*derCoeffs->
dWmdM*
M + 5.*derCoeffs->
Wm)))/(f1_p3by2*M_p1by6);
876 derCoeffs->
dA2dM_1 = (0.05194114352082774*derCoeffs->
eps1*sqrt_eta*M_p1by6*(-3.*dF1dM*
M*derCoeffs->
Wm + f1*(6.*derCoeffs->
dWmdM*
M + 7.*derCoeffs->
Wm)))/f1_p3by2;
877 derCoeffs->
dA2dM_2 = (0.22821773229381923*derCoeffs->
eps2*sqrt(eta*
M)*(-1.*dF1dM*
M*derCoeffs->
Wm + f1*(2.*derCoeffs->
dWmdM*
M + 3.*derCoeffs->
Wm)))/f1_p3by2;
879 derCoeffs->
dA2deta_0 = (0.10639375506983172*M_p5by6*(-1.*dF1dEta*eta*derCoeffs->
Wm + f1*(2.*derCoeffs->
dWmdEta*eta + derCoeffs->
Wm)))/sqrt(eta*f1_p3);
880 derCoeffs->
dA2deta_1 = (0.1558234305624832*derCoeffs->
eps1*M_p7by6*(-1.*dF1dEta*eta*derCoeffs->
Wm + f1*(2.*derCoeffs->
dWmdEta*eta + derCoeffs->
Wm)))/sqrt(eta*f1_p3);
881 derCoeffs->
dA2deta_2 = (0.22821773229381923*derCoeffs->
eps2*sqrt(
M*
M*
M)*(-1.*dF1dEta*eta*derCoeffs->
Wm + f1*(2.*derCoeffs->
dWmdEta*eta + derCoeffs->
Wm)))/sqrt(eta*f1_p3);
883 derCoeffs->
dA2dchi_0 = (0.10639375506983172*sqrt_eta*M_p5by6*(2.*derCoeffs->
dWmdChi*f1 - 1.*dF1dChi*derCoeffs->
Wm))/f1_p3by2;
884 derCoeffs->
dA2dchi_1 = (0.1558234305624832*sqrt_eta*M_p7by6*(-1.*dF1dChi*derCoeffs->
eps1*derCoeffs->
Wm + 2.*f1*(derCoeffs->
dWmdChi*derCoeffs->
eps1 + dEps1dChi*derCoeffs->
Wm)))/f1_p3by2;
885 derCoeffs->
dA2dchi_2 = 0.22821773229381923*sqrt_eta*sqrt(
M*
M*
M/(f1*f1*f1))*(-1.*dF1dChi*derCoeffs->
eps2*derCoeffs->
Wm + 2.*f1*(derCoeffs->
dWmdChi*derCoeffs->
eps2 + dEps2dChi*derCoeffs->
Wm));
888 derCoeffs->
dA3dMnum_0 = 8.*derCoeffs->
dWrdM*f2_p2*
sigma + 2.*derCoeffs->
dWrdM*sigma_p3 + (8.*dSigmadM*f2_p2 - 16.*dF2dM*f2*
sigma - 2.*dSigmadM*sigma_p2)*derCoeffs->
Wr;
901 derCoeffs->
dA3denom_0 = 50.26548245743669*f2_p4 + 25.132741228718345*f2_p2*sigma_p2 + 3.141592653589793*sigma_p2*sigma_p2;
902 derCoeffs->
dA3denom_1 = -201.06192982974676*f2_p3 - 50.26548245743669*f2*sigma_p2;
903 derCoeffs->
dA3denom_2 = 301.59289474462014*f2_p2 + 25.132741228718345*sigma_p2;
904 derCoeffs->
dA3denom_3 = -201.06192982974676*f2;
908 REAL8 dPsi2dEta = -920.91 + 492.13*chi + 135.03*chi_p2 + 13483.8*eta - 2106.8*chi_x_eta - 40191.*eta_p2;
909 REAL8 dPsi2dChi = 492.13*eta + 270.06*chi_x_eta - 1053.4*eta_p2;
910 REAL8 dPsi3dEta = 17022. - 9565.9*chi - 2182.1*chi_p2 - 242740.*eta + 41504.*chi_x_eta + 715770.*eta_p2;
911 REAL8 dPsi3dChi = 37.666666666666664 - 9565.9*eta - 4364.2*chi_x_eta + 20752.*eta_p2;
912 REAL8 dPsi4dEta = -125440. + 75066.*chi + 13382.*chi_p2 + 1.74708e6*eta - 331460.*chi_x_eta - 5.0808e6*eta_p2;
913 REAL8 dPsi4dChi = -101.25*chi + 75066.*eta + 26764.*chi_x_eta - 165730.*eta_p2;
914 REAL8 dPsi6dEta = -889770. + 631020.*chi + 50676.*chi_p2 + 1.19616e7*eta - 2.8296e6*chi_x_eta - 3.383999999999999e7*eta_p2;
915 REAL8 dPsi6dChi = 631020.*eta + 101352.*chi_x_eta - 1.4148e6*eta_p2;
916 REAL8 dPsi7dEta = 869600. - 670980.*chi - 30082.*chi_p2 - 1.16758e7*eta + 3.029e6*chi_x_eta + 3.2673e7*eta_p2;
917 REAL8 dPsi7dChi = -670980.*eta - 60164.*chi_x_eta + 1.5145e6*eta_p2;
919 derCoeffs->
dPsidM_0 = -0.005796647796902313/(eta*M_p2by3*
M*
M);
921 derCoeffs->
dPsidM_2 = (-0.007460387957432594*
params->psi2)/(eta*M_p2);
922 derCoeffs->
dPsidM_3 = (-0.007284282453678307*
params->psi3)/(eta*M_p5by6*M_p5by6);
923 derCoeffs->
dPsidM_4 = (-0.005334250494181998*
params->psi4)/(eta*M_p1by3*
M);
925 derCoeffs->
dPsidM_6 = (0.0114421241215744*
params->psi6)/(eta*M_p2by3);
926 derCoeffs->
dPsidM_7 = (0.03351608432985977*
params->psi7)/(eta*M_p1by3);
928 derCoeffs->
dPsideta_0 = -0.0034779886781413872/(eta_p2*M_p5by6*M_p5by6);
930 derCoeffs->
dPsideta_2 = (0.007460387957432594*(dPsi2dEta*eta - 1.*
params->psi2))/(eta_p2*
M);
931 derCoeffs->
dPsideta_3 = (0.010926423680517461*(dPsi3dEta*eta - 1.*
params->psi3))/(eta_p2*M_p2by3);
932 derCoeffs->
dPsideta_4 = (0.016002751482545992*(dPsi4dEta*eta - 1.*
params->psi4))/(eta_p2*M_p1by3);
934 derCoeffs->
dPsideta_6 = (0.0343263723647232*M_p1by3*(dPsi6dEta*eta - 1.*
params->psi6))/eta_p2;
935 derCoeffs->
dPsideta_7 = (0.050274126494789656*M_p2by3*(dPsi7dEta*eta - 1.*
params->psi7))/eta_p2;
939 derCoeffs->
dPsidchi_2 = (0.007460387957432594*dPsi2dChi)/(eta*
M);
940 derCoeffs->
dPsidchi_3 = (0.010926423680517461*dPsi3dChi)/(eta*M_p2by3);
941 derCoeffs->
dPsidchi_4 = (0.016002751482545992*dPsi4dChi)/(eta*M_p1by3);
943 derCoeffs->
dPsidchi_6 = (0.0343263723647232*dPsi6dChi*M_p1by3)/eta;
944 derCoeffs->
dPsidchi_7 = (0.050274126494789656*dPsi7dChi*M_p2by3)/eta;
974 REAL8 eta = m1*m2/((m1+m2)*(m1+m2));
989 size_t nBins = (f3 - fLow) / df;
996 REAL8 gamma_MEta= 0.;
997 REAL8 gamma_MChi = 0.;
998 REAL8 gamma_MT0 = 0.;
999 REAL8 gamma_MPhi0 = 0.;
1000 REAL8 gamma_EtaEta = 0.;
1001 REAL8 gamma_EtaChi = 0.;
1002 REAL8 gamma_EtaT0 = 0.;
1003 REAL8 gamma_EtaPhi0= 0.;
1004 REAL8 gamma_ChiChi = 0.;
1005 REAL8 gamma_ChiT0 = 0.;
1006 REAL8 gamma_ChiPhi0 = 0.;
1007 REAL8 gamma_T0T0 = 0.;
1008 REAL8 gamma_T0Phi0 = 0.;
1009 REAL8 gamma_Phi0Phi0 = 0.;
1011 REAL8 amp, dAdM, dAdEta, dAdChi, dA3Den;
1012 REAL8 f1_pm7by6 = 1./(f1*cbrt(sqrt(f1)));
1013 REAL8 f1_p2by3 = cbrt(f1*f1);
1015 REAL8 amp_merg_const = coef->
Wm*AmpCoef*f1_pm7by6;
1022 for (
size_t k=0; k<nBins; k++) {
1024 REAL8 v = cbrt(piM*f);
1026 REAL8 v_p3 = v_p2*v;
1028 REAL8 f_p3 = f_p2*f;
1029 REAL8 f_p4 = f_p3*f;
1030 REAL8 f_p1by3 = cbrt(f);
1031 REAL8 f_p2by3 = f_p1by3*f_p1by3;
1034 REAL8 f_pm1by2 = sqrt(f_pm1);
1035 REAL8 f_pm1by3 = 1./f_p1by3;
1036 REAL8 f_pm2by3 = 1./f_p2by3;
1038 REAL8 f_pm1by6 = cbrt(sqrt(f_pm1));
1039 REAL8 f_pm5by3 = f_pm2by3*f_pm1;
1040 REAL8 f_pm7by6 = f_pm1by6*f_pm1;
1042 REAL8 fbyf1_pm2by3 = f1_p2by3*f_pm2by3;
1046 amp = AmpCoef*f_pm7by6*(1. + coef->
alpha2*v_p2 + coef->
alpha3*v_p3);
1051 else if ((f1<f) && (f<=f2)) {
1052 amp = amp_merg_const*fbyf1_pm2by3*(1. + coef->
eps1*v + coef->
eps2*v_p2);
1058 amp = amp_ring_const/((f-f2)*(f-f2) + sigma_p2*0.25);
1072 REAL8 amp_p2 = amp*amp;
1073 REAL8 ampSqr_x_dPsiM = amp_p2*dPsidM;
1074 REAL8 ampSqr_x_dPsiEta = amp_p2*dPsidEta;
1075 REAL8 ampSqr_x_dPsidChi = amp_p2*dPsidChi;
1077 REAL8 ampSqr_by_Sh = amp_p2*psd_pm1;
1079 gamma_MM += (ampSqr_x_dPsiM*dPsidM + dAdM*dAdM)*psd_pm1;
1080 gamma_MEta += (ampSqr_x_dPsiM*dPsidEta + dAdM*dAdEta)*psd_pm1;
1081 gamma_MChi += (ampSqr_x_dPsiM*dPsidChi + dAdM*dAdChi)*psd_pm1;
1082 gamma_MT0 += ampSqr_x_dPsiM*dPsidT0*psd_pm1;
1083 gamma_MPhi0 += ampSqr_x_dPsiM*psd_pm1;
1084 gamma_EtaEta += (ampSqr_x_dPsiEta*dPsidEta + dAdEta*dAdEta)*psd_pm1;
1085 gamma_EtaChi += (ampSqr_x_dPsiEta*dPsidChi + dAdEta*dAdChi)*psd_pm1;
1086 gamma_EtaT0 += ampSqr_x_dPsiEta*dPsidT0*psd_pm1;
1087 gamma_EtaPhi0 += ampSqr_x_dPsiEta*psd_pm1;
1088 gamma_ChiChi += (ampSqr_x_dPsidChi*dPsidChi + dAdChi*dAdChi)*psd_pm1;
1089 gamma_ChiT0 += ampSqr_x_dPsidChi*dPsidT0*psd_pm1;
1090 gamma_ChiPhi0 += ampSqr_x_dPsidChi*psd_pm1;
1091 gamma_T0T0 += dPsidT0*dPsidT0*ampSqr_by_Sh;
1092 gamma_T0Phi0 += dPsidT0*ampSqr_by_Sh;
1093 gamma_Phi0Phi0 += ampSqr_by_Sh;
1099 REAL8 hSqr = 2.*gamma_Phi0Phi0;
1102 gsl_matrix * g = gsl_matrix_calloc (5, 5);
1104 gsl_matrix_set (g, 0,0, gamma_MM/hSqr);
1105 gsl_matrix_set (g, 0,1, gamma_MEta/hSqr);
1106 gsl_matrix_set (g, 0,2, gamma_MChi/hSqr);
1107 gsl_matrix_set (g, 0,3, gamma_MT0/hSqr);
1108 gsl_matrix_set (g, 0,4, gamma_MPhi0/hSqr);
1110 gsl_matrix_set (g, 1,0, gsl_matrix_get(g, 0,1));
1111 gsl_matrix_set (g, 1,1, gamma_EtaEta/hSqr);
1112 gsl_matrix_set (g, 1,2, gamma_EtaChi/hSqr);
1113 gsl_matrix_set (g, 1,3, gamma_EtaT0/hSqr);
1114 gsl_matrix_set (g, 1,4, gamma_EtaPhi0/hSqr);
1116 gsl_matrix_set (g, 2,0, gsl_matrix_get(g, 0,2));
1117 gsl_matrix_set (g, 2,1, gsl_matrix_get(g, 1,2));
1118 gsl_matrix_set (g, 2,2, gamma_ChiChi/hSqr);
1119 gsl_matrix_set (g, 2,3, gamma_ChiT0/hSqr);
1120 gsl_matrix_set (g, 2,4, gamma_ChiPhi0/hSqr);
1122 gsl_matrix_set (g, 3,0, gsl_matrix_get(g, 0,3));
1123 gsl_matrix_set (g, 3,1, gsl_matrix_get(g, 1,3));
1124 gsl_matrix_set (g, 3,2, gsl_matrix_get(g, 2,3));
1125 gsl_matrix_set (g, 3,3, gamma_T0T0/hSqr);
1126 gsl_matrix_set (g, 3,4, gamma_T0Phi0/hSqr);
1128 gsl_matrix_set (g, 4,0, gsl_matrix_get(g, 0,4));
1129 gsl_matrix_set (g, 4,1, gsl_matrix_get(g, 1,4));
1130 gsl_matrix_set (g, 4,2, gsl_matrix_get(g, 2,4));
1131 gsl_matrix_set (g, 4,3, gsl_matrix_get(g, 3,4));
1132 gsl_matrix_set (g, 4,4, gamma_Phi0Phi0/hSqr);
1148 gsl_matrix_view g1v = gsl_matrix_submatrix (g, 0, 0, 3, 3);
1149 gsl_matrix_view g2v = gsl_matrix_submatrix (g, 0, 3, 3, 2);
1150 gsl_matrix_view g3v = gsl_matrix_submatrix (g, 3, 3, 2, 2);
1151 gsl_matrix_view g4v = gsl_matrix_submatrix (g, 3, 0, 2, 3);
1153 gsl_matrix *
g1 = gsl_matrix_calloc (3, 3);
1154 gsl_matrix *
g2 = gsl_matrix_calloc (3, 2);
1155 gsl_matrix *
g3 = gsl_matrix_calloc (2, 2);
1156 gsl_matrix *
g4 = gsl_matrix_calloc (2, 3);
1157 gsl_matrix * g3invg4 = gsl_matrix_calloc (2, 3);
1158 gsl_matrix * g2g3invg4 = gsl_matrix_calloc (3, 3);
1161 gsl_matrix * g3inv = gsl_matrix_calloc (2, 2);
1162 gsl_permutation *
p = gsl_permutation_calloc (2);
1164 gsl_matrix_memcpy (
g1, &g1v.matrix);
1165 gsl_matrix_memcpy (
g2, &g2v.matrix);
1166 gsl_matrix_memcpy (
g3, &g3v.matrix);
1167 gsl_matrix_memcpy (
g4, &g4v.matrix);
1168 gsl_matrix_free (g);
1170 gsl_linalg_LU_decomp (
g3,
p, &
s);
1171 gsl_linalg_LU_invert (
g3,
p, g3inv);
1172 gsl_permutation_free (
p);
1173 gsl_matrix_free (
g3);
1175 gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0, g3inv,
g4, 0.0, g3invg4);
1176 gsl_matrix_free (
g4);
1177 gsl_matrix_free (g3inv);
1178 gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0,
g2, g3invg4, 0.0, g2g3invg4);
1179 gsl_matrix_free (
g2);
1180 gsl_matrix_free (g3invg4);
1182 gsl_matrix_sub (
g1, g2g3invg4);
1183 gsl_matrix_free (g2g3invg4);
1294 const REAL8 distance
1322 if (f_max_prime <=
f_min) {
1344 const REAL8 phiPeak,
1350 const REAL8 distance,
1351 const REAL8 inclination
1354 size_t cut_ind, peak_ind;
1382 if (f_max_prime <=
f_min) {
1408 if (!(*hplus) || !(*hcross))
1413 peak_phase = atan2((*hcross)->data->data[peak_ind], (*hplus)->data->data[peak_ind]);
1432 return phenomParams->
fCut;
1453 return (m1 * s1z + m2 * s2z) / (m1 + m2);
1466 return phenomParams->
fCut;
1482 const REAL8 phiPeak,
1489 const REAL8 distance,
1490 const REAL8 inclination
1493 size_t cut_ind, peak_ind;
1522 if (f_max_prime <=
f_min) {
1548 if (!(*hplus) || !(*hcross))
1553 peak_phase = atan2((*hcross)->data->data[peak_ind], (*hplus)->data->data[peak_ind]);
1583 const REAL8 distance
1613 if (f_max_prime <=
f_min) {
1651 *gamma00 = gsl_matrix_get(
g1, 0, 0);
1652 *gamma01 = gsl_matrix_get(
g1, 0, 1);
1653 *gamma02 = gsl_matrix_get(
g1, 0, 2);
1654 *gamma11 = gsl_matrix_get(
g1, 1, 1);
1655 *gamma12 = gsl_matrix_get(
g1, 1, 2);
1656 *gamma22 = gsl_matrix_get(
g1, 2, 2);
1658 gsl_matrix_free (
g1);
1686 const REAL8 eta = m1*m2/((m1+m2)*(m1+m2));
1692 const REAL8 theta0 = 5.0/(128.0*eta*v0*v0*v0*v0*v0);
1694 const REAL8 theta3S = (
LAL_PI/(4.0*v0*v0))*(17022. - 9565.9*chi);
1695 const REAL8 theta3_p2 = theta3*theta3;
1696 const REAL8 theta0_p2 = theta0*theta0;
1697 const REAL8 theta0_p2by3 = cbrt(theta3_p2);
1700 const REAL8 dMdTheta0 = (-0.015831434944115277*theta3)/(fLow*theta0_p2);
1701 const REAL8 dMdTheta3 = 0.015831434944115277/(fLow*theta0);
1702 const REAL8 dMdTheta3S = 0.;
1703 const REAL8 dEtadTheta0 = 3.8715528021485643/(cbrt(theta0)*theta3*theta0_p2by3);
1704 const REAL8 dEtadTheta3 = (-9.678882005371412*cbrt(theta0_p2))/(theta3_p2*theta0_p2by3);
1705 const REAL8 dEtadTheta3S = 0.;
1706 const REAL8 dChidTheta0 = (0.000012000696668619612*theta0_p2by3*theta3S)/(theta0*cbrt(theta0_p2));
1707 const REAL8 dChidTheta3 = (-0.000012000696668619612*theta3S)/(cbrt(theta0_p2)*cbrt(theta3));
1708 const REAL8 dChidTheta3S = (-0.00001800104500292942*theta0_p2by3)/cbrt(theta0_p2);
1711 gsl_matrix * jaco = gsl_matrix_calloc (5, 5);
1712 gsl_matrix * gPre = gsl_matrix_calloc (5, 5);
1713 gsl_matrix * g = gsl_matrix_calloc (5, 5);
1715 gsl_matrix_set (jaco, 0,0 , dMdTheta0);
1716 gsl_matrix_set (jaco, 0,1 , dEtadTheta0);
1717 gsl_matrix_set (jaco, 0,2 , dChidTheta0);
1718 gsl_matrix_set (jaco, 0,3 , 0.);
1719 gsl_matrix_set (jaco, 0,4 , 0.);
1721 gsl_matrix_set (jaco, 1,0 , dMdTheta3);
1722 gsl_matrix_set (jaco, 1,1 , dEtadTheta3);
1723 gsl_matrix_set (jaco, 1,2 , dChidTheta3);
1724 gsl_matrix_set (jaco, 1,3 , 0.);
1725 gsl_matrix_set (jaco, 1,4 , 0.);
1727 gsl_matrix_set (jaco, 2,0 , dMdTheta3S);
1728 gsl_matrix_set (jaco, 2,1 , dEtadTheta3S);
1729 gsl_matrix_set (jaco, 2,2 , dChidTheta3S);
1730 gsl_matrix_set (jaco, 2,3 , 0.);
1731 gsl_matrix_set (jaco, 2,4 , 0.);
1733 gsl_matrix_set (jaco, 3,0 , 0.);
1734 gsl_matrix_set (jaco, 3,1 , 0.);
1735 gsl_matrix_set (jaco, 3,2 , 0.);
1736 gsl_matrix_set (jaco, 3,3 , 1.);
1737 gsl_matrix_set (jaco, 3,4 , 0.);
1739 gsl_matrix_set (jaco, 4,0 , 0.);
1740 gsl_matrix_set (jaco, 4,1 , 0.);
1741 gsl_matrix_set (jaco, 4,2 , 0.);
1742 gsl_matrix_set (jaco, 4,3 , 0.);
1743 gsl_matrix_set (jaco, 4,4 , 1.);
1745 gsl_blas_dgemm (CblasNoTrans, CblasTrans, 1.0, gMass, jaco, 0.0, gPre);
1746 gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0, jaco, gPre, 0.0, g);
1747 gsl_matrix_free (jaco);
1748 gsl_matrix_free (gPre);
1753 *gamma00 = gsl_matrix_get(
g1, 0, 0);
1754 *gamma01 = gsl_matrix_get(
g1, 0, 1);
1755 *gamma02 = gsl_matrix_get(
g1, 0, 2);
1756 *gamma11 = gsl_matrix_get(
g1, 1, 1);
1757 *gamma12 = gsl_matrix_get(
g1, 1, 2);
1758 *gamma22 = gsl_matrix_get(
g1, 2, 2);
1760 gsl_matrix_free (
g1);
static BBHPhenomParams * ComputeIMRPhenomBParams(const REAL8 m1, const REAL8 m2, const REAL8 chi)
static REAL8 ComputeTau0(const REAL8 m1, const REAL8 m2, const REAL8 f_min)
static REAL8 EstimateSafeFMinForTD(const REAL8 m1, const REAL8 m2, const REAL8 f_min, const REAL8 deltaT)
static size_t find_peak_amp(const REAL8TimeSeries *hp, const REAL8TimeSeries *hc)
static int IMRPhenomAGenerateTD(REAL8TimeSeries **h, const REAL8 phiPeak, const REAL8 deltaT, const REAL8 m1, const REAL8 m2, const REAL8 f_min, const REAL8 f_max, const REAL8 distance, const BBHPhenomParams *params)
static BBHPhenomParams * ComputeIMRPhenomAParams(const REAL8 m1, const REAL8 m2)
static int apply_phase_shift(const REAL8TimeSeries *hp, const REAL8TimeSeries *hc, const REAL8 shift)
static gsl_matrix * XLALSimIMRPhenomBProjectExtrinsicParam(gsl_matrix *g)
static int IMRPhenomBGenerateTD(REAL8TimeSeries **h, const REAL8 phiPeak, const REAL8 deltaT, const REAL8 m1, const REAL8 m2, const REAL8 chi, const REAL8 f_min, const REAL8 f_max, const REAL8 distance, const BBHPhenomParams *params)
static int FDToTD(REAL8TimeSeries **signalTD, const COMPLEX16FrequencySeries *signalFD, const REAL8 totalMass, const REAL8 deltaT, const REAL8 f_min, const REAL8 f_max, const REAL8 f_min_wide, const REAL8 f_max_wide)
static gsl_matrix * XLALSimIMRPhenomBFisherMatrix(const REAL8 m1, const REAL8 m2, const REAL8 chi, const REAL8 fLow, const REAL8FrequencySeries *Sh)
static size_t find_instant_freq(const REAL8TimeSeries *hp, const REAL8TimeSeries *hc, const REAL8 target, const size_t start)
static int apply_inclination(const REAL8TimeSeries *hp, const REAL8TimeSeries *hc, const REAL8 inclination)
static int IMRPhenomBGenerateFD(COMPLEX16FrequencySeries **htilde, const REAL8 phi0, const REAL8 deltaF, const REAL8 m1, const REAL8 m2, const REAL8 chi, const REAL8 f_min, const REAL8 f_max, const REAL8 distance, const BBHPhenomParams *params)
static REAL8 LorentzianFn(const REAL8 freq, const REAL8 fRing, const REAL8 sigma)
static size_t EstimateIMRLength(const REAL8 m1, const REAL8 m2, const REAL8 f_min, const REAL8 deltaT)
static REAL8 EstimateSafeFMaxForTD(const REAL8 f_max, const REAL8 dt)
static size_t NextPow2(const size_t n)
static int IMRPhenomAGenerateFD(COMPLEX16FrequencySeries **htilde, const REAL8 phi0, const REAL8 deltaF, const REAL8 m1, const REAL8 m2, const REAL8 f_min, const REAL8 f_max, const REAL8 distance, const BBHPhenomParams *params)
static IMRDerivCoeffs * XLALComputeIMRPhenomBDerivativeCoeffs(const REAL8 m1, const REAL8 m2, const REAL8 chi, BBHPhenomParams *params)
static double sigma(const double a, const double b, const sysq *system)
Internal function that computes the spin-spin couplings.
COMPLEX16FrequencySeries * XLALCreateCOMPLEX16FrequencySeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaF, const LALUnit *sampleUnits, size_t length)
void XLALDestroyCOMPLEX16FrequencySeries(COMPLEX16FrequencySeries *series)
void * XLALMalloc(size_t n)
double XLALSimIMRPhenomAGetFinalFreq(const REAL8 m1, const REAL8 m2)
Compute the default final frequency.
int XLALSimIMRPhenomBGenerateFD(COMPLEX16FrequencySeries **htilde, const REAL8 phi0, const REAL8 deltaF, const REAL8 m1_SI, const REAL8 m2_SI, const REAL8 chi, const REAL8 f_min, const REAL8 f_max, const REAL8 distance)
Driver routine to compute the spin-aligned, inspiral-merger-ringdown phenomenological waveform IMRPhe...
int XLALSimIMRPhenomBMetricInTheta0Theta3Theta3S(REAL8 *gamma00, REAL8 *gamma01, REAL8 *gamma02, REAL8 *gamma11, REAL8 *gamma12, REAL8 *gamma22, const REAL8 m1_SI, const REAL8 m2_SI, const REAL8 chi, const REAL8 fLow, const REAL8FrequencySeries *Sh)
Compute the template-space metric of the IMRPhenomB waveform in the theta0, theta3,...
double XLALSimIMRPhenomBComputeChi(const REAL8 m1, const REAL8 m2, const REAL8 s1z, const REAL8 s2z)
Compute the dimensionless, spin-aligned parameter chi as used in the IMRPhenomB waveform.
int XLALSimIMRPhenomAGenerateFD(COMPLEX16FrequencySeries **htilde, const REAL8 phi0, const REAL8 deltaF, const REAL8 m1_SI, const REAL8 m2_SI, const REAL8 f_min, const REAL8 f_max, const REAL8 distance)
Driver routine to compute the non-spinning, inspiral-merger-ringdown phenomenological waveform IMRPhe...
int XLALSimIMRPhenomAGenerateTD(REAL8TimeSeries **hplus, REAL8TimeSeries **hcross, const REAL8 phiPeak, const REAL8 deltaT, const REAL8 m1_SI, const REAL8 m2_SI, const REAL8 f_min, const REAL8 f_max, const REAL8 distance, const REAL8 inclination)
Driver routine to compute the non-spinning, inspiral-merger-ringdown phenomenological waveform IMRPhe...
double XLALSimIMRPhenomBGetFinalFreq(const REAL8 m1, const REAL8 m2, const REAL8 chi)
Compute the default final frequency.
int XLALSimIMRPhenomBGenerateTD(REAL8TimeSeries **hplus, REAL8TimeSeries **hcross, const REAL8 phiPeak, const REAL8 deltaT, const REAL8 m1_SI, const REAL8 m2_SI, const REAL8 chi, const REAL8 f_min, const REAL8 f_max, const REAL8 distance, const REAL8 inclination)
Driver routine to compute the spin-aligned, inspiral-merger-ringdown phenomenological waveform IMRPhe...
int XLALSimIMRPhenomBMetricInMEtaChi(REAL8 *gamma00, REAL8 *gamma01, REAL8 *gamma02, REAL8 *gamma11, REAL8 *gamma12, REAL8 *gamma22, const REAL8 m1_SI, const REAL8 m2_SI, const REAL8 chi, const REAL8 fLow, const REAL8FrequencySeries *Sh)
Compute the template-space metric of the IMRPhenomB waveform in the M, eta, chi coordinates.
void XLALDestroyREAL8FFTPlan(REAL8FFTPlan *plan)
REAL8FFTPlan * XLALCreateReverseREAL8FFTPlan(UINT4 size, int measurelvl)
int XLALREAL8FreqTimeFFT(REAL8TimeSeries *tser, const COMPLEX16FrequencySeries *freq, const REAL8FFTPlan *plan)
REAL8TimeSeries * XLALResizeREAL8TimeSeries(REAL8TimeSeries *series, int first, size_t length)
REAL8TimeSeries * XLALCreateREAL8TimeSeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length)
void XLALDestroyREAL8TimeSeries(REAL8TimeSeries *series)
const LALUnit lalStrainUnit
const LALUnit lalSecondUnit
LALUnit * XLALUnitMultiply(LALUnit *output, const LALUnit *unit1, const LALUnit *unit2)
#define XLAL_ERROR_NULL(...)
int XLALPrintError(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
int int XLALPrintWarning(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
LIGOTimeGPS * XLALGPSSetREAL8(LIGOTimeGPS *epoch, REAL8 t)