25 #include <gsl/gsl_linalg.h>
74 printf(
"\nMixing coefficients:\n");
136 {
XLALPrintError(
"Error in IMRPhenomXHM_SetHMWaveformVariables: mode (%i,%i) selected is not currently available. Modes available are ((2,|2|),(2,|1|),(3,|2|),(3,|3|),(4,|4|)).\n", wf->
ell, wf->
emm);}
259 if(wf22->
eta < 0.013886133703630232 && wf22->
chi1L<=0.9){
269 if(wf22->
eta >= 0.0237954){
289 {
XLALPrintError(
"Error in IMRPhenomXHM_SetHMWaveformVariables: mode (%i,%i) selected is not currently available. Modes available are ((2,|2|),(2,|1|),(3,|2|),(3,|3|),(4,|4|)).\n", wf->
ell, wf->
emm);}
400 printf(
"*** PNR Co-precessing model in use for (l,m)=(%i,%i) ***\n\n",wf->
ell,wf->
emm);
401 printf(
"wf22->afinal : %e\n",wf22->
afinal);
402 printf(
"wf22->afinal_prec : %e\n",wf22->
afinal_prec);
417 printf(
"\n** ell, emm ** : %i,%i\n",wf->
ell,wf->
emm);
418 printf(
"fring : %e\n",wf->
fRING);
423 printf(
"fring (coprec) : %e\n",wf->
fRING);
424 printf(
">> Note that fring has now been set to fringEff <<\n");
432 printf(
"fring : %e\n",wf->
fRING);
441 printf(
"fring (coprec) : %e\n",wf->
fRING);
480 UINT4 modeTag = ell * 10 + emm;
512 {
XLAL_ERROR_REAL8(
XLAL_EDOM,
"Error in IMRPhenomXHM_GenerateRingdownFrequency: mode (%i,%i) selected is not currently available. Modes available are ((2,|2|),(2,|1|),(3,|2|),(3,|3|),(4,|4|)).\n", ell, emm);}
726 double emm = 1.*(pWFHM->
emm);
727 double eta = pWF22->
eta;
728 double chi1 = pWF22->
chi1L;
730 double fcutEMR = 1.25*emm*((0.011671068725758493 - 0.0000858396080377194*chi1 + 0.000316707064291237*pow(chi1,2))*(0.8447212540381764 + 6.2873167352395125*eta))/(1.2857082764038923 - 0.9977728883419751*chi1);
737 double chieff = pWF22->
chiEff;
738 double fISCO = (pWF22->
fISCO)*emm*0.5;
743 if(eta < 0.023795359904818562){
747 fcut = fMECO + (0.75-0.235*chieff - 5./6.*chieff*chieff)*fabs(fISCO-fMECO);
752 if(eta < 0.04535147392290249){
756 fcut = fMECO + (0.75-0.235*chieff-5./6.*chieff)*fabs(fISCO-fMECO);
761 if(eta < 0.04535147392290249){
765 fcut = fMECO + (0.75-0.235*fabs(chieff))*fabs(fISCO-fMECO);
771 if(eta < 0.04535147392290249){
775 fcut = fMECO + (0.75-0.235*chieff)*fabs(fISCO-fMECO);
788 REAL8 transition_eta = 0.0192234;
789 REAL8 sharpness = 0.004;
790 REAL8 funcs = 0.5 + 0.5 * tanh((eta - transition_eta)/sharpness);
791 fcut = funcs * fMECO + (1 - funcs) * fcutEMR;
795 default: {
XLALPrintError(
"Error in IMRPhenomXHM_Amplitude_fcutInsp: version %i is not valid.",
version);}
807 double eta = pWF22->
eta;
808 double chi1 = pWF22->
chi1L;
825 double fRD22 = pWF22->
fRING;
826 double c = 0.5,
r=5.;
829 fcut = (
fring*exp(
c*
r) + fRD22*exp(
r*chi1))/(exp(
c*
r) + exp(
r*chi1)) -
fdamp;
834 if(0.02126654064272212<eta && eta<0.12244897959183673 && chi1>0.95)
855 default: {
XLALPrintError(
"Error in IMRPhenomXHM_Amplitude_fcutRD: version %i is not valid.",
version);}
868 double MECOf=pWF22->
fMECO;
869 double eta_factor=1.0+0.001*(0.25/pWF22->
eta-1.);
871 return (eta_factor*pWFHM->
emm*0.5*MECOf);
893 double fRD22 = pWF22->
fRING, fdamp22 = pWF22->
fDAMP;
894 double fEnd= fRD22- 0.5*fdamp22;
923 default: {
XLALPrintError(
"Error in IMRPhenomXHM_Intermediate_CollocPtsFreqs: version is not valid. Version recommended is 122019.");}
936 double fringlm = pWFHM->
fRING, fdamplm = pWFHM->
fDAMP;
937 double fring22 = pWF22->
fRING;
948 double fdamp22 = pWF22->
fDAMP;
981 double chiA = pWFHM->
chi_a;
982 double chiS = pWFHM->
chi_s;
986 const double prefactors[] = {sqrt(2)/3., 0.75*sqrt(5/7.), sqrt(5/7.)/3., 4*sqrt(2)/9*sqrt(5/7.)};
1014 pAmp->
pnSixThirds = (143063173*chiA - (I*1350720)*
delta + 143063173*chiS*
delta - 546199608*chiA*eta - (I*72043776)*
delta*eta - 169191096*chiS*
delta*eta - 9898560*
delta*PI + 20176128*
delta*eta*PI - (I*5402880)*
delta*log(2) - (I*17224704)*
delta*eta*log(2) + 61725888*chiS*
delta*chiA*chiA - 81285120*chiS*
delta*eta*chiA*chiA + 20575296*pow(chiA,3) - 81285120*eta*pow(chiA,3) + 61725888*chiA*chiS*chiS - 165618432*chiA*eta*chiS*chiS + 20575296*
delta*pow(chiS,3) - 1016064*
delta*eta*chiS*chiS*chiS + 128873808*chiA*eta*eta - 3859632*chiS*
delta*eta*eta)/5.419008e6*
powers_of_lalpiHM.
two*powers_of_2d1.
two;
1037 pAmp->
pnSixThirds = (824173699 + 2263282560*chiA*chiS*
delta - 26069649*eta - 15209631360*chiA*chiS*
delta*eta + 3576545280*chiS*eta*PI + 1131641280*chiA*chiA - 7865605440*eta*chiA*chiA + 1131641280*chiS*chiS - 11870591040*eta*chiS*chiS - 13202119896*eta*eta + 13412044800*chiA*chiA*eta*eta + 5830513920*chiS*chiS*eta*eta + 5907445488*pow(eta,3))/4.4706816e8*
powers_of_lalpiHM.
two;
1049 pAmp->
pnSixThirds = (7888301437 - 147113366400*chiA*chiS*
delta - 745140957231*eta + 441340099200*chiA*chiS*
delta*eta - 73556683200*chiA*chiA + 511264353600*eta*chiA*chiA - 73556683200*chiS*chiS + 224302478400*eta*chiS*chiS + 2271682065240*eta*eta - 871782912000*chiA*chiA*eta*eta - 10897286400*chiS*chiS*eta*eta - 805075876080*pow(eta,3))/2.90594304e10*
powers_of_lalpiHM.
two*powers_of_2d4.
two;
1064 double m1 = pWF22->
m1;
1065 double m2 = pWF22->
m2;
1068 double m13 = m12*m1;
1069 double m23 = m22*m2;
1070 double m14 = m13*m1;
1071 double m24 = m23*m2;
1072 double m15 = m14*m1;
1073 double m25 = m24*m2;
1074 double m16 = m15*m1;
1076 double chi1 = pWF22->
chi1L;
1077 double chi2 = pWF22->
chi2L;
1078 double chiS = (chi1 + chi2)*0.5;
1079 double chiA = (chi1 - chi2)*0.5;
1081 double eta = pWF22->
eta;
1082 double chi12 = chi1*chi1;
1083 double chi22 = chi2*chi2;
1084 double Sc = m12*chi1 + m22*chi2;
1085 double Sigmac = m2*chi2 - m1*chi1;
1089 double logof2 = powers_of_2d1.
log;
1090 double log4 = 1.3862943611198906;
1091 double EulerGamma = 0.5772156649015329;
1108 pAmp->
xdot6 = -(m1*m2*(1152597600*m2*m13 + 926818200*m22 + 2494800*m1*m2*(743 + 462*m22) + 1247400*m12*(743 + 1848*m22))/3.274425e7)*powers_of_2d1.
four*
powers_of_lalpiHM.
four;
1111 pAmp->
xdot7 = -(m1*m2*(207900*m2*(-13661 - 19908*chi1*chi2 + 10206*chi12 + 10206*chi22)*m13 - 23100*(34103 + 91854*chi22)*m22 - 1373803200*m14*m22 +
1112 23100*m1*m2*(-2*(34103 + 45927*chi12 + 45927*chi22) + 9*(-13661 - 19908*chi1*chi2 + 10206*chi12 + 10206*chi22)*m22) - 2747606400*m13*m23 -
1114 pAmp->
xdot75 = -(m1*m2*(-4036586400*chi1*m13 + 5821200*m2*(5861*chi1 + 1701*
powers_of_lalpiHM.
itself)*m13 + 17059026600*chi1*m14 + 14721814800*chi1*m2*m14 - 34962127200*chi1*m2*m15 +
1115 207900*(2*chi2*m2*(-9708 + 41027*m2) + 12477*
powers_of_lalpiHM.
itself)*m22 - 14721814800*chi2*m13*m22 - 69924254400*chi1*m14*m22 - 34962127200*(chi1 + chi2)*m13*m23 +
1116 207900*m12*(3*
powers_of_lalpiHM.
itself*(4159 + 31752*m22) + 2*m2*(9708*chi2 + 41027*(chi1 + chi2)*m2 - 35406*chi1*m22 - 168168*chi2*m23)) +
1119 153213984000*m2*chi12*m15 - 76606992000*chi12*m16 - 63392868000*chi1*(chi1 - chi2)*m13*m22 -
1120 51975*(4869 + 2711352*chi1*chi2 + 1702428*chi12 + 228508*chi22)*m14*m22 - 103950*(4869 + 2711352*chi1*chi2 + 228508*chi12 + 228508*chi22)*m13*m23 +
1121 906328500*m15*m23 + 1812657000*m14*m24 + 906328500*m13*m25 +
1123 3*m22*(16447322263 - 2277918720*EulerGamma - 23284800*chi2*m2*(-151 + 376*m2)*
powers_of_lalpiHM.
itself - 2277918720*
log4 + 2321480700*chi22 + 4365900000*chi22*m22 -
1125 m12*(6833756160*EulerGamma + 10548014400*chi2*m2*
powers_of_lalpiHM.
itself + 63392868000*(chi1 - chi2)*chi2*m23 - 51975*(4869 + 2711352*chi1*chi2 + 228508*chi12 + 1702428*chi22)*m24 -
1128 m1*m2*(13667512320*EulerGamma + 10548014400*chi1*m2*
powers_of_lalpiHM.
itself - 63392868000*chi1*chi2*m23 - 153213984000*chi22*m24 -
1132 pAmp->
xdot85 = -(m1*m2*(-14891068500*chi1*m13 + 1925*m2*(97151928*chi1 + 6613488*chi2 - 12912300*
powers_of_lalpiHM.
itself)*m13 + 87143248500*chi1*m14 + 33313480200*chi1*m2*m14 - 198816225300*chi1*m2*m15 +
1134 35665037100*chi1*m15*m22 + 84184254000*chi1*m16*m22 -
1135 23100*m1*m2*(15*
powers_of_lalpiHM.
itself*(-2649 + 71735*m22) + m2*(-(chi1*(644635 + 551124*m2)) + chi2*m2*(-8095994 - 1442142*m2 + 8606763*m22))) -
1136 69300*(4991769*(chi1 + chi2) + 731960*
powers_of_lalpiHM.
itself)*m13*m23 + 35665037100*chi2*m14*m23 + 170726094000*chi1*m15*m23 + 2357586000*chi2*m15*m23 +
1137 35665037100*chi1*m13*m24 + 88899426000*(chi1 + chi2)*m14*m24 + 9702000*(243*chi1 + 17597*chi2)*m13*m25 -
1185 {
XLALPrintError(
"Error in IMRPhenomXHM_GetAmplitudeCoefficients: mode selected is not currently available. Modes available are ((2,|2|),(2,|1|),(3,|2|),(3,|3|),(4,|4|)).\n");}
1302 printf(
"\n\n*** IMRPhenomXHM_GetAmplitudeCoefficients ***\n\n");
1303 printf(
"fring_%i = %.16f\n", pWFHM->
modeTag, pWFHM->
fRING);
1304 printf(
"fdamp_%i = %.16f\n", pWFHM->
modeTag, pWFHM->
fDAMP);
1321 printf(
"nCollocPtsInspAmp = %i \n",nCollocPtsInspAmp);
1322 printf(
"nCollocPtsInterAmp = %i \n",nCollocPtsInterAmp);
1330 printf(
"\n**** INSPIRAL ****\n\n");
1352 double fcutInsp, f1, f2, f3;
1366 double PNf1, PNf2, PNf3;
1376 for(
int i = 0;
i<nCollocPtsInspAmp;
i++)
1385 REAL8 iv1, iv2, iv3;
1392 printf(
"\nAmplitude pseudo collocation points before veto\n");
1393 printf(
"fAmpMatchIN = %.16f\n",pAmp->
fAmpMatchIN);
1394 printf(
"F1 = %.16f\n", f1);
1395 printf(
"F2 = %.16f\n", f2);
1396 printf(
"F3 = %.16f\n\n", f3);
1400 printf(
"PNf1 = %.16f\n", PNf1);
1401 printf(
"PNf2 = %.16f\n", PNf2);
1402 printf(
"PNf3 = %.16f\n\n", PNf3);
1403 REAL8 piv1, piv2, piv3;
1407 printf(
"p1 = %.16f\n", piv1);
1408 printf(
"p2 = %.16f\n", piv2);
1409 printf(
"p3 = %.16f\n\n", piv3);
1410 printf(
"V1 = %.16f\n", iv1);
1411 printf(
"V2 = %.16f\n", iv2);
1412 printf(
"V3 = %.16f\n\n", iv3);
1428 if(pWFHM->
modeTag==32 && pWF22->
q>2.5 && pWF22->
chi1L<-0.6 && pWF22->
chi2L>0. && iv1!=0){
1433 if(pWFHM->
modeTag==33 && (1.2>pWF22->
q && pWF22->
q>1. && pWF22->
chi1L<-0.1 && pWF22->
chi2L>0. && iv1!=0)){
1446 printf(
"\nWavy Inspiral\n");
1453 printf(
"\niv1 iv2 iv3 %e %e %e\n", iv1, iv2, iv3);
1458 printf(
"\niv2 = 0\n");
1462 powers_of_f2 = powers_of_f3;
1466 printf(
"\niv1 = 0\n");
1469 powers_of_f1 = powers_of_f2;
1470 powers_of_fcutInsp = powers_of_f1;
1473 powers_of_f2 = powers_of_f3;
1486 printf(
"\nAmplitude pseudo collocation points after veto\n");
1487 printf(
"fAmpMatchIN = %.16f\n", pAmp->
fAmpMatchIN);
1488 printf(
"F1 = %.16f\n", powers_of_f1.
itself);
1489 printf(
"F2 = %.16f\n", powers_of_f2.
itself);
1490 printf(
"F3 = %.16f\n", powers_of_f3.
itself);
1491 printf(
"V1 = %.16f\n", iv1);
1492 printf(
"V2 = %.16f\n", iv2);
1493 printf(
"V3 = %.16f\n", iv3);
1504 printf(
"\nAmplitude pseudo PN coeffcients after veto\n");
1505 printf(
"rho1 = %.16f\n",pAmp->
rho1);
1506 printf(
"rho2 = %.16f\n",pAmp->
rho2);
1507 printf(
"rho3 = %.16f\n",pAmp->
rho3);
1520 printf(
"\n\n**** RINGDOWN ****\n\n");
1563 printf(
"\n\n**** INTERMEDIATE ****\n\n");
1567 for(
int i = 0;
i<nCollocPtsInterAmp;
i++)
1578 double F1, F2, F3, F4;
1579 F1 = powers_of_fcutInsp.
itself;
1585 printf(
"F1 = %.16f\n",F1);
1586 printf(
"F2 = %.16f\n",F2);
1587 printf(
"F3 = %.16f\n",F3);
1588 printf(
"F4 = %.16f\n\n",F4);
1620 printf(
"d1 = %.16f\n",d1);
1621 printf(
"d4 = %.16f\n",d4);
1625 d1 = ((7.0/6.0) * pow(F1,1.0/6.0) / inspF1) - ( pow(F1,7.0/6.0) * d1 / (inspF1*inspF1) );
1626 d4 = ((7.0/6.0) * pow(F4,1.0/6.0) / rdF4) - ( pow(F4,7.0/6.0) * d4 / (rdF4*rdF4) );
1629 printf(
"d1 = %.16f\n",d1);
1630 printf(
"d4 = %.16f\n\n",d4);
1634 double V1, V2, V3, V4;
1644 printf(
"Before intermediate veto \n");
1645 printf(
"V1 = %.16f\n",V1);
1646 printf(
"V2 = %.16f\n",V2);
1647 printf(
"V3 = %.16f\n",V3);
1648 printf(
"V4 = %.16f\n",V4);
1649 printf(
"rdF4 = %.16f\n",rdF4);
1650 printf(
"F4.m_seven_sixths = %.16f\n\n",powers_of_F4.
m_seven_sixths);
1661 printf(
"VETO: useInspAnsatzRingdown\n");
1662 printf(
"V2 = %.16f\n",V2);
1663 printf(
"V3 = %.16f\n",V3);
1682 printf(
"\nAfter Veto and inverse \n");
1683 printf(
"V1 = %.16f\n",V1);
1684 printf(
"V2 = %.16f\n",V2);
1685 printf(
"V3 = %.16f\n",V3);
1686 printf(
"V4 = %.16f\n",V4);
1703 printf(
"*** TWO INTERMEDIATE REGIONS ***\n\n");
1709 double F0, V0, d0, F0_seven_sixths;
1711 F0 = F1 + (F2-F1)/3.;
1719 printf(
"F0 = %.16f\n",F0);
1720 printf(
"V0 = %.16f\n",V0);
1721 printf(
"d0 = %.16f\n",d0);
1724 F0_seven_sixths = pow(F0,7.0/6.0);
1726 d0 = ((7.0/6.0) / (V0*F0)) - ( d0 / (V0*V0*F0_seven_sixths) );
1730 printf(
"1/V0 = %.16f\n",V0);
1731 printf(
"1/d0 = %.16f\n",d0);
1735 pAmp->
alpha0 =
IMRPhenomXHM_Intermediate_Amp_delta0(d1,d0,V1,V2,V3,V0,F1,F2,F3,F0,104);
1736 pAmp->
alpha1 =
IMRPhenomXHM_Intermediate_Amp_delta1(d1,d0,V1,V2,V3,V0,F1,F2,F3,F0,104);
1737 pAmp->
alpha2 =
IMRPhenomXHM_Intermediate_Amp_delta2(d1,d0,V1,V2,V3,V0,F1,F2,F3,F0,104);
1738 pAmp->
alpha3 =
IMRPhenomXHM_Intermediate_Amp_delta3(d1,d0,V1,V2,V3,V0,F1,F2,F3,F0,104);
1739 pAmp->
alpha4 =
IMRPhenomXHM_Intermediate_Amp_delta4(d1,d0,V1,V2,V3,V0,F1,F2,F3,F0,104);
1742 printf(
"Intermediate 1: feed values \n");
1743 printf(
"d1 = %.16f\n", d1);
1744 printf(
"d0 = %.16f\n", d0);
1745 printf(
"d4 = %.16f\n", d4);
1746 printf(
"V1 = %.16f\n", V1);
1747 printf(
"V0 = %.16f\n", V0);
1748 printf(
"V2 = %.16f\n", V2);
1749 printf(
"V3 = %.16f\n", V3);
1750 printf(
"V4 = %.16f\n", V4);
1751 printf(
"F1 = %.16f\n", F1);
1752 printf(
"F0 = %.16f\n", F0);
1753 printf(
"F2 = %.16f\n", F2);
1754 printf(
"F3 = %.16f\n", F3);
1755 printf(
"F4 = %.16f\n", F4);
1759 printf(
"\nIntermediate 1: polynomial coeffcients \r\n");
1760 printf(
"alpha0 = %.16f\n", pAmp->
alpha0);
1761 printf(
"alpha1 = %.16f\n", pAmp->
alpha1);
1762 printf(
"alpha2 = %.16f\n", pAmp->
alpha2);
1763 printf(
"alpha3 = %.16f\n", pAmp->
alpha3);
1764 printf(
"alpha4 = %.16f\n", pAmp->
alpha4);
1786 printf(
"VETO: Intermediate Amp Veto\n");
1787 printf(
"V2 = %.16f\n",V2);
1788 printf(
"V3 = %.16f\n",V3);
1795 printf(
"VETO: Ringdown Amp Veto\n");
1796 printf(
"V2 = %.16f\n",V2);
1797 printf(
"V3 = %.16f\n",V3);
1808 printf(
"VETO: Wavy Inter colloc points\n");
1809 printf(
"V2 = %.16f\n",V2);
1810 printf(
"V3 = %.16f\n",V3);
1815 if((pWF22->
q>40. && pWF22->
chi1L>0.9 && V2!=1 && V3!=1) ||
1822 printf(
"VETO: veto regions\n");
1823 printf(
"V2 = %.16f\n",V2);
1824 printf(
"V3 = %.16f\n",V3);
1855 printf(
"\nIntermediate Amplitude Input \r\n");
1857 printf(
"V1 = %.16f\n", V1);
1858 printf(
"V2 = %.16f\n", V2);
1859 printf(
"V3 = %.16f\n", V3);
1860 printf(
"V4 = %.16f\n", V4);
1861 printf(
"F1 = %.16f\n", F1);
1862 printf(
"F2 = %.16f\n", F2);
1863 printf(
"F3 = %.16f\n", F3);
1864 printf(
"F4 = %.16f\n", F4);
1865 printf(
"d1 = %.16f\n", d1);
1866 printf(
"d4 = %.16f\n", d4);
1867 printf(
"fAmpMatchIn = %.16f\n", pAmp->
fAmpMatchIN);
1875 printf(
"\nIntermediate polynomial coeffcients Before ChoosePolOrder \r\n");
1877 printf(
"delta0 = %.16f\n", pAmp->
delta0);
1878 printf(
"delta1 = %.16f\n", pAmp->
delta1);
1879 printf(
"delta2 = %.16f\n", pAmp->
delta2);
1880 printf(
"delta3 = %.16f\n", pAmp->
delta3);
1881 printf(
"delta4 = %.16f\n", pAmp->
delta4);
1882 printf(
"delta5 = %.16f\n", pAmp->
delta5);
1883 printf(
"fAmpMatchIn = %.16f\n", pAmp->
fAmpMatchIN);
1892 printf(
"\nIntermediate polynomial coeffcients After ChoosePolOrder\r\n");
1893 printf(
"delta0 = %.16f\n", pAmp->
delta0);
1894 printf(
"delta1 = %.16f\n", pAmp->
delta1);
1895 printf(
"delta2 = %.16f\n", pAmp->
delta2);
1896 printf(
"delta3 = %.16f\n", pAmp->
delta3);
1897 printf(
"delta4 = %.16f\n", pAmp->
delta4);
1898 printf(
"delta5 = %.16f\n", pAmp->
delta5);
1899 printf(
"fAmpMatchIn = %.16f\n", pAmp->
fAmpMatchIN);
1907 switch(rescalefactor){
1923 default:{
XLAL_ERROR_REAL8(
XLAL_EINVAL,
"Error in RescaleFactor: version %i is not valid. Recommended version is 1.", rescalefactor);}
1939 double eta,chi1,chi2;
1943 double delta=sqrt(1 - 4*eta);
1945 double output=(-16*
delta*eta*ff*pow(
LAL_PI,1.5))/(3.*sqrt(5)) + (4*pow(2,0.3333333333333333)*(chi1 - chi2 +
delta *(chi1+ chi2))*eta*pow(ff,1.3333333333333333)*pow(
LAL_PI,1.8333333333333333))/sqrt(5) + (2*pow(2,0.6666666666666666)*eta*(306*
delta - 360*
delta*eta)*pow(ff,1.6666666666666667)*pow(
LAL_PI,2.1666666666666665))/(189.*sqrt(5));
1986 double eta_m1=1./pWF22->
eta;
2013 double phenXnonLog[]={pPhase22->
phi0,pPhase22->
phi1,pPhase22->
phi2,pPhase22->
phi3,pPhase22->
phi4,pPhase22->
phi5,pPhase22->
phi6,pPhase22->
phi7,pPhase22->
phi8,pPhase22->
phi9,0.,0,0,0};
2014 double phenXLog[]={0.,0.,0.,0.,0.,pPhase22->
phi5L,pPhase22->
phi6L,0.,pPhase22->
phi8L,pPhase22->
phi9L,0,0,0,0};
2015 double pseudoPN[]={0.,0.,0.,0.,0.,0.,0.,0.,pPhase22->
sigma1,pPhase22->
sigma2,pPhase22->
sigma3,pPhase22->
sigma4,pPhase22->
sigma5};
2021 double m_over_2=emm*0.5, two_over_m=1./m_over_2;
2027 phenXnonLog[
i]=phenXnonLog[
i]*fact;
2028 phenXLog[
i]=phenXLog[
i]*fact;
2029 pseudoPN[
i]=pseudoPN[
i]*fact;
2032 pPhase->
phi[
i]=(phenXnonLog[
i]+pseudoPN[
i]-phenXLog[
i]*log(m_over_2))*pow(m_over_2,(8-
i)/3.);
2033 pPhase->
phiL[
i]=phenXLog[
i]*pow(m_over_2,(8-
i)/3.);
2039 if(pWF22->
eta>0.01){
2042 printf(
"Add phase shift from PN complex amplitude\n");
2051 printf(
"\nLambdaPN = %.16f\n", pPhase->
LambdaPN);
2071 p = gsl_permutation_alloc(nCollocationPts_inter);
2072 b = gsl_vector_alloc(nCollocationPts_inter);
2073 x = gsl_vector_alloc(nCollocationPts_inter);
2074 A = gsl_matrix_alloc(nCollocationPts_inter,nCollocationPts_inter);
2081 double insp_vals[3], FF, diff12, diff23;
2082 for(
int i=0;
i<3;
i++){
2088 diff12=insp_vals[0]-insp_vals[1];
2089 diff23=insp_vals[1]-insp_vals[2];
2102 int cpoints_indices[nCollocationPts_inter];
2103 cpoints_indices[0]=0;
2104 cpoints_indices[1]=1;
2105 cpoints_indices[4]=5;
2110 cpoints_indices[2]=3;
2111 cpoints_indices[3]=4;
2115 cpoints_indices[2]=2;
2116 cpoints_indices[3]=4;
2120 cpoints_indices[2]=2;
2121 cpoints_indices[3]=3;
2140 if(pWFHM->
ell==pWFHM->
emm) wlm=2;
2141 else wlm=pWFHM->
emm/3.;
2151 printf(
"Ringdown parameters: \n alpha2=%.16e \n alphaL=%.16e\n",pPhase->
alpha2,pPhase->
alphaL);
2164 for(
int i=0;
i<nCollocationPts_inter;
i++){
2166 int ind=cpoints_indices[
i];
2169 REAL8 fpowers[]={1., (pWFHM->
fDAMP)/(pow(pWFHM->
fDAMP,2)+pow(ff-(pWFHM->
fRING),2)),ffm1,ffm2,ffm2*ffm2, ffm1*ffm2};
2170 for(
int j=0; j<nCollocationPts_inter; j++)
2171 gsl_matrix_set(A,
i,j,fpowers[j]);
2187 double complex SphericalWF[3];
2188 double fstep=0.0000001;
2190 for(
int i=0;
i<3;
i++){
2192 double FF=fcutRD+(
i-1)*fstep;
2198 long double phase_args[]={fmodl(carg(SphericalWF[0]),2.*
LAL_PI),fmodl(carg(SphericalWF[1]),2.*
LAL_PI),fmodl(carg(SphericalWF[2]),2.*
LAL_PI)};
2201 for(
int i=0;
i<3;
i++){
2209 pPhase->
phi0RD=phase_args[1];
2210 long double fstep_m1= 1./fstep;
2212 pPhase->
dphi0RD=0.5*fstep_m1*(phase_args[2]-phase_args[0]);
2213 double d2phi0RD=fstep_m1*fstep_m1*(phase_args[2]-2.*phase_args[1]+phase_args[0]);
2216 printf(
"dphi0ref=%.16e\t d2phi0ref=%.16e\n",pPhase->
dphi0RD,d2phi0RD);
2235 for(
int i=0;
i<nCollocationPts_inter;
i++){
2239 REAL8 fpowers[]={1., (pWFHM->
fDAMP)/(pow(pWFHM->
fDAMP,2)+pow(ff-(pWFHM->
fRING),2)),ffm1,ffm2,ffm2*ffm2, ffm1*ffm2};
2240 for(
int j=0; j<nCollocationPts_inter; j++)
2241 gsl_matrix_set(A,
i,j,fpowers[j]);
2246 int cpoint_ind=nCollocationPts_inter-1;
2249 REAL8 ffm1=1./ff, ffm2=ffm1*ffm1, ffm3=ffm2*ffm1, ffm4=ffm2*ffm2, ffm5=ffm3*ffm2;
2251 REAL8 fpowers[]={0.,-2*(pWFHM->
fDAMP)*(ff-(pWFHM->
fRING))/pow((pow(pWFHM->
fDAMP,2)+pow(ff-(pWFHM->
fRING),2)),2),-ffm2, -2.* ffm3, -4.*ffm5,-3* ffm4};
2252 for(
int j=0; j<nCollocationPts_inter; j++){
2253 gsl_matrix_set(A,cpoint_ind,j,fpowers[j]);
2258 printf(
"Collocation points for intermediate ansatz %i:\n",nCollocationPts_inter);
2259 for(
int i=0;
i<nCollocationPts_inter;
i++)
2269 default:{
XLALPrintError(
"Error in IMRPhenomXHM_GetPhaseCoefficients:mode-mixing not properly initialized.\n");}
2280 gsl_linalg_LU_decomp(A,
p,&
s);
2281 gsl_linalg_LU_solve(A,
p,b,
x);
2283 pPhase->
c0 = gsl_vector_get(
x,0);
2284 pPhase->
cL = gsl_vector_get(
x,1);
2285 pPhase->
c1 = gsl_vector_get(
x,2);
2286 pPhase->
c2 = gsl_vector_get(
x,3);
2287 pPhase->
c4 = gsl_vector_get(
x,4);
2300 { pPhase->
c3 = gsl_vector_get(
x,5);
2312 printf(
"Intermediate region coefficients:\n");
2313 printf(
"c0=%.16e\n c1=%.16e\n c2=%.16e\n c3=%.16e\n c4=%.16e\n cL=%.16e\n", pPhase->
c0,pPhase->
c1,pPhase->
c2,pPhase->
c3,pPhase->
c4,pPhase->
cL);
2319 gsl_permutation_free(
p);
2340 falign=0.6*m_over_2*pWF22->
fMECO;
2342 falign=m_over_2*pWF22->
fMECO;
2395 printf(
"\n****** Connection coefficients of 22 in %i******\n", pWFHM->
modeTag);
2414 sprintf(fileSpec,
"PhaseParameters%i.dat", pWFHM->
modeTag);
2416 file = fopen(fileSpec,
"w");
2433 fprintf(
file,
"\n*** Phase Intermediate ***\n f_i\t dphi(f_i)\n");
2446 fprintf(
file,
"\n*** Ringdown Phase Spheroidal ***\n f_i \t dphi(f_i)\n");
2470 double CollocValuesPhaseRingdown[nCollocationPts_RD_Phase];
2471 double CollocFreqsPhaseRingdown[nCollocationPts_RD_Phase];
2474 printf(
"Declare Colloc Values and Freqs:\n");
2482 p = gsl_permutation_alloc(nCollocationPts_RD_Phase);
2483 b = gsl_vector_alloc(nCollocationPts_RD_Phase);
2484 x = gsl_vector_alloc(nCollocationPts_RD_Phase);
2485 A = gsl_matrix_alloc(nCollocationPts_RD_Phase,nCollocationPts_RD_Phase);
2490 printf(
"Initialize RD CollocPtsFreqs:\n");
2495 for(
int i=0;
i<nCollocationPts_RD_Phase;
i++)
2500 gsl_vector_set(b,
i,CollocValuesPhaseRingdown[
i]);
2501 REAL8 ff=CollocFreqsPhaseRingdown[
i], ffm1=1./ff, ffm2=ffm1*ffm1;
2502 REAL8 fpowers[]={1., (pWFHM->
fDAMP)/(pow(pWFHM->
fDAMP,2)+pow(ff-(pWFHM->
fRING),2)),ffm2,ffm2*ffm2};
2503 for(
int j=0; j<nCollocationPts_RD_Phase; j++)
2504 gsl_matrix_set(A,
i,j,fpowers[j]);
2509 for(
int i = 0;
i < nCollocationPts_RD_Phase;
i++){
2512 gsl_vector_set(b,
i,CollocValuesPhaseRingdown[
i]);
2513 REAL8 ff = CollocFreqsPhaseRingdown[
i], ffm1 = 1./ff, ffm2 = ffm1 * ffm1;
2515 REAL8 fpowers[] = {1., ffm1, ffm2, ffm2 * ffm2, lorentzian};
2516 for(
int j = 0; j < nCollocationPts_RD_Phase; j++){
2517 gsl_matrix_set(A,
i, j, fpowers[j]);
2523 printf(
"Collocation points in ringdown region:\n");
2524 for(
int i=0;
i<nCollocationPts_RD_Phase;
i++){
2525 printf(
"p%d=(%.16e,%.16e)\n",
i+1,CollocFreqsPhaseRingdown[
i],CollocValuesPhaseRingdown[
i]);
2530 gsl_linalg_LU_decomp(A,
p,&
s);
2531 gsl_linalg_LU_solve(A,
p,b,
x);
2542 for(
int i=0;
i<nCollocationPts_RD_Phase;
i++){
2548 printf(
"**********\n alpha0_S=%.16e \n alphaL_S=%.16e \n alpha2_S=%.16e \n alpha4_S=%.16e \n \n ", pPhase->
alpha0_S, pPhase->
alphaL_S, pPhase->
alpha2_S, pPhase->
alpha4_S);
2554 gsl_permutation_free(
p);
2601 frefRD = pWF22->
fRING;
2631 printf(
"**********\n alpha0_S=%.16e \n alphaL_S=%.16e \n alpha2_S=%.16e \n alpha4_S=%.16e \n \n ", pPhase->
alpha0_S, pPhase->
alphaL_S, pPhase->
alpha2_S, pPhase->
alpha4_S);
2632 printf(
"**********\n **Spheroidal reconstruction parameters:**\n \n phi0_S=%.16e \n alpha0_S=%.16e \n alphaL_S=%.16e \n alpha2_S=%.16e \n alpha4_S=%.16e \n \n ",pPhase->
phi0_S, pPhase->
alpha0_S, pPhase->
alphaL_S, pPhase->
alpha2_S, pPhase->
alpha4_S);
2659 COMPLEX16 wf22R = amp22 * cexp(I * phi22);
2668 return sphericalWF_32;
2686 return sphericalWF_32;
2741 if (Amp < 0 && pWF->IMRPhenomXHMReleaseVersion != 122019) Amp =
FALSE_ZERO;
2770 if (Amp < 0 && pWF->IMRPhenomXHMReleaseVersion != 122019) Amp =
FALSE_ZERO;
2799 if (Amp < 0 && pWF->IMRPhenomXHMReleaseVersion != 122019) Amp =
FALSE_ZERO;
2879 return dPhiIns + pPhase->
C1INSP;
2885 return dPhiMRD + pPhase->
C1RD;
2899 return dPhiIns + pPhase->
C1INSP;
2904 double dPhiMRD = carg(
SpheroidalToSpherical(powers_of_f, pAmp22, pPhase22, pAmp, pPhase, pWF, pWF22));
2905 return dPhiMRD + pPhase->
C1RD;
2929 sprintf(fileSpec,
"Parameters%i.dat", pWFHM->
modeTag);
2930 printf(
"\nOutput Parameter file: %s\r\n",fileSpec);
2931 file = fopen(fileSpec,
"w");
2959 fprintf(
file,
"\n*** Amplitude Frequencies ***\n");
2969 fprintf(
file,
"\n*** Amplitude Collocation Points ***\n");
2976 fprintf(
file,
"\n*** Amplitude Coefficients ***\n");
2996 fprintf(
file,
"\n*** Amplitude Intermediate Input ***\n");
3008 fprintf(
file,
"\n*** PN Amplitude Inspiral ***\n");
static double fdamp(double eta, double chi1, double chi2, double finspin)
fdamp is the complex part of the ringdown frequency 1508.07250 figure 9
static double fring(double eta, double chi1, double chi2, double finspin)
fring is the real part of the ringdown frequency 1508.07250 figure 9
static double evaluate_QNMfit_fring33(double finalDimlessSpin)
static double evaluate_QNMfit_fdamp33(double finalDimlessSpin)
static double evaluate_QNMfit_fdamp44(double finalDimlessSpin)
static double evaluate_QNMfit_fdamp21(double finalDimlessSpin)
static double evaluate_QNMfit_fring21(double finalDimlessSpin)
static double evaluate_QNMfit_fring44(double finalDimlessSpin)
static double double delta
double IMRPhenomXCP_NU4_l3m3(double theta, double eta, double a1)
double IMRPhenomXCP_NU5_l3m3(double theta, double eta, double a1)
double IMRPhenomXCP_MU3_l3m3(double theta, double eta, double a1)
double IMRPhenomXCP_MU2_l3m3(double theta, double eta, double a1)
double IMRPhenomXCP_ZETA1_l3m3(double theta, double eta, double a1)
double IMRPhenomXCP_MU4_l3m3(double theta, double eta, double a1)
double IMRPhenomXCP_ZETA2_l3m3(double theta, double eta, double a1)
double IMRPhenomXCP_MU1_l3m3(double theta, double eta, double a1)
double IMRPhenomXCP_NU6_l3m3(double theta, double eta, double a1)
double IMRPhenomX_TimeShift_22(IMRPhenomXPhaseCoefficients *pPhase, IMRPhenomXWaveformStruct *pWF)
void IMRPhenomX_Phase_22_ConnectionCoefficients(IMRPhenomXWaveformStruct *pWF, IMRPhenomXPhaseCoefficients *pPhase)
int IMRPhenomX_Initialize_Powers(IMRPhenomX_UsefulPowers *p, REAL8 number)
double IMRPhenomX_Phase_22(double ff, IMRPhenomX_UsefulPowers *powers_of_f, IMRPhenomXPhaseCoefficients *pPhase, IMRPhenomXWaveformStruct *pWF)
double IMRPhenomX_dPhase_22(double ff, IMRPhenomX_UsefulPowers *powers_of_f, IMRPhenomXPhaseCoefficients *pPhase, IMRPhenomXWaveformStruct *pWF)
IMRPhenomX_UsefulPowers powers_of_lalpiHM
void IMRPhenomXHM_Get_Inspiral_Amp_Coefficients(IMRPhenomXHMAmpCoefficients *pAmp, IMRPhenomXHMWaveformStruct *pWFHM, IMRPhenomXWaveformStruct *pWF22)
static double IMRPhenomXHM_Inspiral_Phase_AnsatzInt(double Mf, IMRPhenomX_UsefulPowers *powers_of_Mf, IMRPhenomXHMPhaseCoefficients *pPhase)
static double IMRPhenomXHM_Insp_Amp_21_iv2(IMRPhenomXWaveformStruct *pWF, int InspAmpFlag)
static double IMRPhenomXHM_Inspiral_Amp_rho3(double v1, double v2, double v3, IMRPhenomX_UsefulPowers *powers_of_fcutInsp, IMRPhenomX_UsefulPowers *powers_of_f1, IMRPhenomX_UsefulPowers *powers_of_f2, IMRPhenomX_UsefulPowers *powers_of_f3, IMRPhenomXHMWaveformStruct *pWFHM)
static double IMRPhenomXHM_Inspiral_Amp_NDAnsatz(IMRPhenomX_UsefulPowers *powers_of_Mf, IMRPhenomXHMWaveformStruct *pWFHM, IMRPhenomXHMAmpCoefficients *pAmp)
static double IMRPhenomXHM_Inspiral_Amp_Ansatz(IMRPhenomX_UsefulPowers *powers_of_Mf, IMRPhenomXHMWaveformStruct *pWFHM, IMRPhenomXHMAmpCoefficients *pAmp)
static double IMRPhenomXHM_Insp_Amp_44_iv2(IMRPhenomXWaveformStruct *pWF, int InspAmpFlag)
static double IMRPhenomXHM_Inspiral_Amp_rho2(double v1, double v2, double v3, IMRPhenomX_UsefulPowers *powers_of_fcutInsp, IMRPhenomX_UsefulPowers *powers_of_f1, IMRPhenomX_UsefulPowers *powers_of_f2, IMRPhenomX_UsefulPowers *powers_of_f3, IMRPhenomXHMWaveformStruct *pWFHM)
static double IMRPhenomXHM_Insp_Amp_33_iv1(IMRPhenomXWaveformStruct *pWF, int InspAmpFlag)
static double IMRPhenomXHM_Insp_Phase_33_lambda(IMRPhenomXWaveformStruct *pWF, int InspPhaseFlag)
static double IMRPhenomXHM_Insp_Amp_33_iv2(IMRPhenomXWaveformStruct *pWF, int InspAmpFlag)
static double IMRPhenomXHM_Insp_Amp_32_iv3(IMRPhenomXWaveformStruct *pWF, int InspAmpFlag)
static double IMRPhenomXHM_Insp_Phase_21_lambda(IMRPhenomXWaveformStruct *pWF, int InspPhaseFlag)
static double IMRPhenomXHM_Insp_Phase_44_lambda(IMRPhenomXWaveformStruct *pWF, int InspPhaseFlag)
static double IMRPhenomXHM_Insp_Amp_32_iv1(IMRPhenomXWaveformStruct *pWF, int InspAmpFlag)
static double IMRPhenomXHM_Insp_Phase_32_lambda(IMRPhenomXWaveformStruct *pWF, int InspPhaseFlag)
static double IMRPhenomXHM_Insp_Amp_33_iv3(IMRPhenomXWaveformStruct *pWF, int InspAmpFlag)
static double IMRPhenomXHM_Insp_Amp_44_iv1(IMRPhenomXWaveformStruct *pWF, int InspAmpFlag)
void IMRPhenomXHM_Inspiral_Amplitude_Veto(double *iv1, double *iv2, double *iv3, IMRPhenomX_UsefulPowers *powers_of_f1, IMRPhenomX_UsefulPowers *powers_of_f2, IMRPhenomX_UsefulPowers *powers_of_f3, IMRPhenomXHMAmpCoefficients *pAmp, IMRPhenomXHMWaveformStruct *pWFHM)
static double IMRPhenomXHM_Insp_Amp_21_iv3(IMRPhenomXWaveformStruct *pWF, int InspAmpFlag)
int WavyPoints(double p1, double p2, double p3)
static double IMRPhenomXHM_Insp_Amp_44_iv3(IMRPhenomXWaveformStruct *pWF, int InspAmpFlag)
static double IMRPhenomXHM_Inspiral_PNAmp_Ansatz(IMRPhenomX_UsefulPowers *powers_of_Mf, IMRPhenomXHMWaveformStruct *pWFHM, IMRPhenomXHMAmpCoefficients *pAmp)
static double IMRPhenomXHM_Insp_Amp_21_iv1(IMRPhenomXWaveformStruct *pWF, int InspAmpFlag)
static double IMRPhenomXHM_Inspiral_Phase_Ansatz(double Mf, IMRPhenomX_UsefulPowers *powers_of_Mf, IMRPhenomXHMPhaseCoefficients *pPhase)
static double IMRPhenomXHM_Inspiral_Amp_rho1(double v1, double v2, double v3, IMRPhenomX_UsefulPowers *powers_of_fcutInsp, IMRPhenomX_UsefulPowers *powers_of_f1, IMRPhenomX_UsefulPowers *powers_of_f2, IMRPhenomX_UsefulPowers *powers_of_f3, IMRPhenomXHMWaveformStruct *pWFHM)
static double IMRPhenomXHM_Insp_Phase_LambdaPN(double eta, int modeInt)
static double IMRPhenomXHM_Insp_Amp_32_iv2(IMRPhenomXWaveformStruct *pWF, int InspAmpFlag)
int IMRPhenomXHM_PN21AmpSign(double ff, IMRPhenomXWaveformStruct *wf22)
REAL8 IMRPhenomXHM_Amplitude_ModeMixing(IMRPhenomX_UsefulPowers *powers_of_Mf, IMRPhenomXHMAmpCoefficients *pAmp, IMRPhenomXHMPhaseCoefficients *pPhase, IMRPhenomXHMWaveformStruct *pWF, IMRPhenomXAmpCoefficients *pAmp22, IMRPhenomXPhaseCoefficients *pPhase22, IMRPhenomXWaveformStruct *pWF22)
void IMRPhenomXHM_SetHMWaveformVariables(int ell, int emm, IMRPhenomXHMWaveformStruct *wf, IMRPhenomXWaveformStruct *wf22, QNMFits *qnms, LALDict *LALParams)
double IMRPhenomXHM_Amplitude_fcutInsp(IMRPhenomXHMWaveformStruct *pWFHM, IMRPhenomXWaveformStruct *pWF22)
int ParametersToFile(IMRPhenomXWaveformStruct *pWF, IMRPhenomXHMWaveformStruct *pWFHM, IMRPhenomXHMAmpCoefficients *pAmp, UNUSED IMRPhenomXHMPhaseCoefficients *pPhase)
void IMRPhenomXHM_GetPNAmplitudeCoefficients(IMRPhenomXHMAmpCoefficients *pAmp, IMRPhenomXHMWaveformStruct *pWFHM, IMRPhenomXWaveformStruct *pWF22)
void IMRPhenomXHM_Ringdown_CollocPtsFreqs(IMRPhenomXHMPhaseCoefficients *pPhase, IMRPhenomXHMWaveformStruct *pWFHM, IMRPhenomXWaveformStruct *pWF22)
void Get21PNAmplitudeCoefficients(IMRPhenomXHMAmpCoefficients *pAmp, IMRPhenomXWaveformStruct *pWF22)
void IMRPhenomXHM_Initialize_MixingCoeffs(IMRPhenomXHMWaveformStruct *wf, IMRPhenomXWaveformStruct *wf22)
double IMRPhenomXHM_dPhase_ModeMixing(double f, IMRPhenomX_UsefulPowers *powers_of_f, IMRPhenomXHMAmpCoefficients *pAmp, IMRPhenomXHMPhaseCoefficients *pPhase, IMRPhenomXHMWaveformStruct *pWF, IMRPhenomXAmpCoefficients *pAmp22, IMRPhenomXPhaseCoefficients *pPhase22, IMRPhenomXWaveformStruct *pWF22)
REAL8 IMRPhenomXHM_Phase_ModeMixingRecycle(IMRPhenomX_UsefulPowers *powers_of_Mf, COMPLEX16 wf22, IMRPhenomXHMAmpCoefficients *pAmp, IMRPhenomXHMPhaseCoefficients *pPhase, IMRPhenomXHMWaveformStruct *pWF)
void IMRPhenomXHM_GetAmplitudeCoefficients(IMRPhenomXHMAmpCoefficients *pAmp, IMRPhenomXHMPhaseCoefficients *pPhase, IMRPhenomXAmpCoefficients *pAmp22, IMRPhenomXPhaseCoefficients *pPhase22, IMRPhenomXHMWaveformStruct *pWFHM, IMRPhenomXWaveformStruct *pWF22)
void IMRPhenomXHM_GetPhaseCoefficients(IMRPhenomXHMAmpCoefficients *pAmp, IMRPhenomXHMPhaseCoefficients *pPhase, IMRPhenomXAmpCoefficients *pAmp22, IMRPhenomXPhaseCoefficients *pPhase22, IMRPhenomXHMWaveformStruct *pWFHM, IMRPhenomXWaveformStruct *pWF22, UNUSED LALDict *lalParams)
COMPLEX16 SpheroidalToSpherical(IMRPhenomX_UsefulPowers *powers_of_Mf, IMRPhenomXAmpCoefficients *pAmp22, IMRPhenomXPhaseCoefficients *pPhase22, IMRPhenomXHMAmpCoefficients *pAmplm, IMRPhenomXHMPhaseCoefficients *pPhaselm, IMRPhenomXHMWaveformStruct *pWFlm, IMRPhenomXWaveformStruct *pWF22)
REAL8 IMRPhenomXHM_Amplitude_ModeMixingRecycle(IMRPhenomX_UsefulPowers *powers_of_Mf, COMPLEX16 wf22, IMRPhenomXHMAmpCoefficients *pAmp, IMRPhenomXHMPhaseCoefficients *pPhase, IMRPhenomXHMWaveformStruct *pWF)
REAL8 IMRPhenomXHM_Amplitude_noModeMixing(IMRPhenomX_UsefulPowers *powers_of_Mf, IMRPhenomXHMAmpCoefficients *pAmp, IMRPhenomXHMWaveformStruct *pWF)
void IMRPhenomXHM_Intermediate_CollocPtsFreqs(IMRPhenomXHMPhaseCoefficients *pPhase, IMRPhenomXHMWaveformStruct *pWFHM, IMRPhenomXWaveformStruct *pWF22)
double GetfcutInsp(IMRPhenomXWaveformStruct *pWF22, IMRPhenomXHMWaveformStruct *pWFHM)
double IMRPhenomXHM_Amplitude_fcutRD(IMRPhenomXHMWaveformStruct *pWFHM, IMRPhenomXWaveformStruct *pWF22)
void GetSpheroidalCoefficients(IMRPhenomXHMPhaseCoefficients *pPhase, IMRPhenomXPhaseCoefficients *pPhase22, IMRPhenomXHMWaveformStruct *pWFHM, IMRPhenomXWaveformStruct *pWF22)
void IMRPhenomXHM_FillAmpFitsArray(IMRPhenomXHMAmpCoefficients *pAmp)
void IMRPhenomXHM_FillPhaseFitsArray(IMRPhenomXHMPhaseCoefficients *pPhase)
REAL8 IMRPhenomXHM_Phase_noModeMixing(IMRPhenomX_UsefulPowers *powers_of_Mf, IMRPhenomXHMPhaseCoefficients *pPhase, IMRPhenomXHMWaveformStruct *pWF, UNUSED IMRPhenomXWaveformStruct *pWF22)
double IMRPhenomXHM_dPhase_noModeMixing(double f, IMRPhenomX_UsefulPowers *powers_of_f, IMRPhenomXHMPhaseCoefficients *pPhase, IMRPhenomXHMWaveformStruct *pWF, UNUSED IMRPhenomXWaveformStruct *pWF22)
REAL8 IMRPhenomXHM_Phase_ModeMixing(IMRPhenomX_UsefulPowers *powers_of_Mf, IMRPhenomXHMAmpCoefficients *pAmp, IMRPhenomXHMPhaseCoefficients *pPhase, IMRPhenomXHMWaveformStruct *pWF, IMRPhenomXAmpCoefficients *pAmp22, IMRPhenomXPhaseCoefficients *pPhase22, IMRPhenomXWaveformStruct *pWF22)
REAL8 IMRPhenomXHM_GenerateRingdownFrequency(UINT4 ell, UINT4 emm, IMRPhenomXWaveformStruct *wf22)
COMPLEX16 SpheroidalToSphericalRecycle(IMRPhenomX_UsefulPowers *powers_of_Mf, COMPLEX16 wf22, IMRPhenomXHMAmpCoefficients *pAmplm, IMRPhenomXHMPhaseCoefficients *pPhaselm, IMRPhenomXHMWaveformStruct *pWFlm)
double RescaleFactor(IMRPhenomX_UsefulPowers *powers_of_Mf, IMRPhenomXHMAmpCoefficients *pAmp, UINT2 rescalefactor)
void IMRPhenomXHM_Initialize_QNMs(QNMFits *qnms)
#define NMAX_INSPIRAL_COEFFICIENTS
double evaluate_QNMfit_re_l2m2lp3(double finalDimlessSpin)
double evaluate_QNMfit_re_l2m2lp2(double finalDimlessSpin)
double evaluate_QNMfit_im_l2m2lp3(double finalDimlessSpin)
double evaluate_QNMfit_fdamp32(double finalDimlessSpin)
double evaluate_QNMfit_im_l3m2lp3(double finalDimlessSpin)
double evaluate_QNMfit_im_l2m2lp2(double finalDimlessSpin)
double evaluate_QNMfit_re_l3m2lp3(double finalDimlessSpin)
double evaluate_QNMfit_fring32(double finalDimlessSpin)
double evaluate_QNMfit_im_l3m2lp2(double finalDimlessSpin)
double evaluate_QNMfit_re_l3m2lp2(double finalDimlessSpin)
static double IMRPhenomXHM_RD_Amp_44_rdcp1(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Phase_32_SpheroidalTimeShift(IMRPhenomXWaveformStruct *pWF, int RDPhaseFlag)
static double IMRPhenomXHM_RD_Phase_DerAnsatz(double ff, IMRPhenomX_UsefulPowers *powers_of_f, IMRPhenomXHMWaveformStruct *pWFHM, IMRPhenomXHMPhaseCoefficients *pPhase)
static double IMRPhenomXHM_RD_Amp_33_rdcp1(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Phase_22_alpha2(IMRPhenomXWaveformStruct *pWF, int RDPhaseFlag)
static double IMRPhenomXHM_RD_Amp_DAnsatz(IMRPhenomX_UsefulPowers *powers_of_Mf, IMRPhenomXHMWaveformStruct *pWF, IMRPhenomXHMAmpCoefficients *pAmp)
static void IMRPhenomXHM_RD_Amp_Coefficients(IMRPhenomXWaveformStruct *pWF22, IMRPhenomXHMWaveformStruct *pWFHM, IMRPhenomXHMAmpCoefficients *pAmp)
static double IMRPhenomXHM_RD_Amp_21_rdcp1(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Amp_44_lambda(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
void IMRPhenomXHM_Ringdown_Amplitude_Veto(double *V2, double *V3, double V4, IMRPhenomXHMWaveformStruct *pWFHM, IMRPhenomXWaveformStruct *pWF22)
static double IMRPhenomXHM_RD_Amp_32_lambda(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Amp_21_alambda(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Phase_32_p5(IMRPhenomXWaveformStruct *pWF, int RDPhaseFlag)
static double IMRPhenomXHM_RD_Phase_32_SpheroidalPhaseShift(IMRPhenomXWaveformStruct *pWF, int RDPhaseFlag)
static double IMRPhenomXHM_RD_Amp_32_rdcp1(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Phase_AnsatzInt(double ff, IMRPhenomX_UsefulPowers *powers_of_f, IMRPhenomXHMWaveformStruct *pWFHM, IMRPhenomXHMPhaseCoefficients *pPhase)
static double IMRPhenomXHM_RD_Amp_33_rdcp3(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Amp_21_rdcp2(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Amp_33_lambda(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Amp_Ansatz(IMRPhenomX_UsefulPowers *powers_of_Mf, IMRPhenomXHMWaveformStruct *pWFHM, IMRPhenomXHMAmpCoefficients *pAmp)
static double IMRPhenomXHM_RD_Phase_32_p1(IMRPhenomXWaveformStruct *pWF, int RDPhaseFlag)
static double IMRPhenomXHM_RD_Amp_32_rdaux1(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Amp_21_rdcp3(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Amp_32_rdaux2(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Amp_32_rdcp3(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Amp_32_rdcp2(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Phase_32_p3(IMRPhenomXWaveformStruct *pWF, int RDPhaseFlag)
static double IMRPhenomXHM_RD_Amp_33_alambda(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Amp_33_sigma(UNUSED IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Phase_32_p2(IMRPhenomXWaveformStruct *pWF, int RDPhaseFlag)
static double IMRPhenomXHM_RD_Amp_44_rdcp2(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Amp_32_sigma(UNUSED IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Amp_33_rdcp2(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Phase_22_alphaL(IMRPhenomXWaveformStruct *pWF, int RDPhaseFlag)
static double IMRPhenomXHM_RD_Amp_NDAnsatz(IMRPhenomX_UsefulPowers *powers_of_Mf, IMRPhenomXHMAmpCoefficients *pAmp, IMRPhenomXHMPhaseCoefficients *pPhase, IMRPhenomXHMWaveformStruct *pWFHM, IMRPhenomXAmpCoefficients *pAmp22, IMRPhenomXPhaseCoefficients *pPhase22, IMRPhenomXWaveformStruct *pWF22)
static double IMRPhenomXHM_RD_Phase_Ansatz(double ff, IMRPhenomX_UsefulPowers *powers_of_f, IMRPhenomXHMWaveformStruct *pWFHM, IMRPhenomXHMPhaseCoefficients *pPhase)
static double IMRPhenomXHM_RD_Phase_32_p4(IMRPhenomXWaveformStruct *pWF, int RDPhaseFlag)
static double IMRPhenomXHM_RD_Amp_44_sigma(UNUSED IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Amp_32_alambda(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Amp_44_rdcp3(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Amp_21_sigma(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Amp_21_lambda(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
static double IMRPhenomXHM_RD_Amp_44_alambda(IMRPhenomXWaveformStruct *pWF, int RDAmpFlag)
#define N_MAX_COEFFICIENTS_PHASE_INTER
bool IMRPhenomX_StepFuncBool(const double t, const double t1)
REAL8 XLALSimIMRPhenomXRingdownAmplitude22AnsatzAnalytical(REAL8 ff, REAL8 fRD, REAL8 fDA, REAL8 gamma1, REAL8 gamma2, REAL8 gamma3)
"Analytical" phenomenological ringdown ansatz for amplitude.
REAL8 XLALSimIMRPhenomXPsi4ToStrain(double eta, double S, double dchi)
This is a fit of the time-difference between t_peak of strain and t_peak of psi4 needed to align in t...
#define XLAL_ERROR_VOID(...)
#define XLAL_ERROR_REAL8(...)
int XLALPrintError(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
REAL8 RDCoefficient[N_MAX_COEFFICIENTS_AMPLITUDE_RING]
ParameterSpaceFit RingdownAmpFits[N_HIGHERMODES_IMPLEMENTED *N_MAX_COEFFICIENTS_AMPLITUDE_RING+N_MAX_COEFFICIENTS_AMPLITUDE_RDAUX]
REAL8 CollocationPointsFreqsAmplitudeInter[N_MAX_COEFFICIENTS_AMPLITUDE_INTER]
REAL8 CollocationPointsFreqsAmplitudeInsp[N_MAX_COEFFICIENTS_AMPLITUDE_INS]
UINT2 VersionCollocPtsInter[N_MAX_COEFFICIENTS_AMPLITUDE_INTER]
INT4 useInspAnsatzRingdown
ParameterSpaceFit IntermediateAmpFits[N_HIGHERMODES_IMPLEMENTED *N_MAX_COEFFICIENTS_AMPLITUDE_INTER]
REAL8 fcutInsp_eight_thirds
REAL8 PNAmplitudeInsp[N_MAX_COEFFICIENTS_AMPLITUDE_INS]
REAL8 fcutInsp_seven_thirds
REAL8 CollocationPointsValuesAmplitudeInter[N_MAX_COEFFICIENTS_AMPLITUDE_INTER]
REAL8 CollocationPointsValuesAmplitudeInsp[N_MAX_COEFFICIENTS_AMPLITUDE_INS]
ParameterSpaceFit InspiralAmpFits[N_HIGHERMODES_IMPLEMENTED *N_MAX_COEFFICIENTS_AMPLITUDE_INS]
REAL8 phiL[N_MAX_COEFFICIENTS_PHASE_INS]
ParameterSpaceFit RingdownPhaseFits[N_MAX_COEFFICIENTS_PHASE_RING]
REAL8 CollocationPointsFreqsPhaseRD[N_MAX_COEFFICIENTS_PHASE_RING]
REAL8 CollocationPointsFreqsPhaseInter[N_MAX_COEFFICIENTS_PHASE_INTER]
REAL8 phi[N_MAX_COEFFICIENTS_PHASE_INS]
ParameterSpaceFit IntermediatePhaseFits[N_HIGHERMODES_IMPLEMENTED *N_MAX_COEFFICIENTS_PHASE_INTER]
ParameterSpaceFit InspiralPhaseFits[N_HIGHERMODES_IMPLEMENTED]
REAL8 CollocationPointsValuesPhaseInter[N_MAX_COEFFICIENTS_PHASE_INTER]
REAL8 RDCoefficient[N_MAX_COEFFICIENTS_PHASE_RING+3]
fitQNM_fring fring_lm[N_HIGHERMODES_IMPLEMENTED]
fitQNM_fdamp fdamp_lm[N_HIGHERMODES_IMPLEMENTED]
char output[FILENAME_MAX]