30 #include <lal/LALStdlib.h>
31 #include <lal/LALConstants.h>
32 #include <lal/LALDatatypes.h>
33 #include <lal/XLALError.h>
41 #ifndef PHENOMXHMDEBUG
64 if (Mf <= Mf_alpha_lower)
70 if (Mf >= Mf_alpha_upper)
92 double msa_window = 1 - pnr_window;
101 if (Mf <= Mf_alpha_lower)
107 if (Mf >= Mf_alpha_upper)
112 return pnr_window * alpha_MR + msa_window * alpha_PN;
118 return pnr_window * alpha_IM + msa_window * alpha_PN;
134 const double omega =
LAL_PI * Mf;
135 const double omega_cbrt = cbrt(omega);
148 const double omega_cbrt2 = omega_cbrt * omega_cbrt;
149 const double logomega = log(omega);
161 vector vangles = {0., 0., 0.};
172 XLAL_ERROR(
XLAL_EINVAL,
"Error: IMRPhenomXPrecessionVersion not recognized in IMRPhenomX_PNR_GetPNAlphaAtFreq.\n");
218 alphaParams->
A2 = A2;
219 alphaParams->
A3 = A3;
243 REAL8 D = (Mf2 - Mf1) * (Mf2 - Mf1) * (Mf2 - Mf1);
244 REAL8 N = 2.0 * (Mf1 * alpha1 - Mf2 * alpha2) - (Mf1 - Mf2) * ((Mf1 * dalpha1 + Mf2 * dalpha2) + (alpha1 + alpha2));
259 REAL8 D = (Mf2 - Mf1) * (Mf2 - Mf1) * (Mf2 - Mf1);
260 REAL8 N = 3.0 * (Mf1 + Mf2) * (Mf2 * alpha2 - Mf1 * alpha1) + (Mf1 - Mf2) * ((Mf1 + 2.0 * Mf2) * (Mf1 * dalpha1 + alpha1) + (2.0 * Mf1 + Mf2) * (Mf2 * dalpha2 + alpha2));
275 REAL8 D = (Mf2 - Mf1) * (Mf2 - Mf1) * (Mf2 - Mf1);
276 REAL8 N = 6.0 * Mf1 * Mf2 * (Mf1 * alpha1 - Mf2 * alpha2) - (Mf1 - Mf2) * (Mf2 * (2.0 * Mf1 + Mf2) * (Mf1 * dalpha1 + alpha1) + Mf1 * (Mf1 + 2.0 * Mf2) * (Mf2 * dalpha2 + alpha2));
291 REAL8 D = (Mf2 - Mf1) * (Mf2 - Mf1) * (Mf2 - Mf1);
292 REAL8 N = Mf1 * Mf2 * Mf2 * (Mf2 - 3.0 * Mf1) * alpha1 - Mf1 * Mf1 * Mf2 * (Mf1 - 3.0 * Mf2) * alpha2 + Mf1 * Mf2 * (Mf1 - Mf2) * (Mf2 * (Mf1 * dalpha1 + alpha1) + Mf1 * (Mf2 * dalpha2 + alpha2));
315 return a0 * Mf * Mf + a1 * Mf +
a2 + a3 / Mf;
336 return -(A1 / Mf + (A2 * sqrt(A3)) / (A3 + (Mf - A4) * (Mf - A4)));
363 REAL8 Mf_alpha_upper = alphaParams->
A4 / 3.0;
364 REAL8 Mf_alpha_lower = (3.0 / 3.5) * Mf_alpha_upper;
369 Mf_alpha_lower = 100.0;
370 Mf_alpha_upper = 100.0;
383 REAL8 derivative_alpha_lower = (a3 - a1) / (2.0 * dMf);
384 REAL8 derivative_alpha_upper = (a6 -
a4) / (2.0 * dMf);
392 alpha_interp_0 = isnan(alpha_interp_0) ? 0.0 : alpha_interp_0;
393 alpha_interp_1 = isnan(alpha_interp_1) ? 0.0 : alpha_interp_1;
394 alpha_interp_2 = isnan(alpha_interp_2) ? 0.0 : alpha_interp_2;
395 alpha_interp_3 = isnan(alpha_interp_3) ? 0.0 : alpha_interp_3;
400 REAL8 alpha_MR_offset = alpha_upper - MR_alpha_at_Mf_upper;
REAL8 IMRPhenomX_PNR_MR_alpha_expression(REAL8 Mf, const IMRPhenomX_PNR_alpha_parameters *alphaParams)
This function evaluates Eq.
int IMRPhenomX_PNR_precompute_alpha_coefficients(IMRPhenomX_PNR_alpha_parameters *alphaParams, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec)
This function evaluates the coefficients outlined in Sec 7A of arXiv:2107.08876 for alpha.
REAL8 IMRPhenomX_PNR_alpha_interpolation_0(REAL8 Mf1, REAL8 Mf2, REAL8 alpha1, REAL8 alpha2, REAL8 dalpha1, REAL8 dalpha2)
The following four functions are used to compute the C1 interpolation function used to connect the in...
REAL8 IMRPhenomX_PNR_intermediate_alpha_expression(REAL8 Mf, const IMRPhenomX_PNR_alpha_parameters *alphaParams)
This function evaluates Eq.
REAL8 IMRPhenomX_PNR_GetPNAlphaAtFreq(REAL8 Mf, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec)
Here we write a wrapper function to produce either MSA or NNLO alpha for use in IMRPhenomX_PNR_Genera...
REAL8 IMRPhenomX_PNR_GeneratePNRAlphaAtMf(REAL8 Mf, const IMRPhenomX_PNR_alpha_parameters *alphaParams, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec)
This function evaluates Eq.
REAL8 IMRPhenomX_PNR_alpha_interpolation_1(REAL8 Mf1, REAL8 Mf2, REAL8 alpha1, REAL8 alpha2, REAL8 dalpha1, REAL8 dalpha2)
REAL8 IMRPhenomX_PNR_alpha_interpolation_3(REAL8 Mf1, REAL8 Mf2, REAL8 alpha1, REAL8 alpha2, REAL8 dalpha1, REAL8 dalpha2)
int IMRPhenomX_PNR_alpha_connection_parameters(IMRPhenomX_PNR_alpha_parameters *alphaParams, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec)
This function evaluates the connection frequencies Mf1 and Mf2 detailed in Sec.
REAL8 IMRPhenomX_PNR_GenerateMergedPNRAlphaAtMf(REAL8 Mf, const IMRPhenomX_PNR_alpha_parameters *alphaParams, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec)
This function generates the blended PNR and PN expressions for alpha for the transition region of par...
REAL8 IMRPhenomX_PNR_alpha_interpolation_2(REAL8 Mf1, REAL8 Mf2, REAL8 alpha1, REAL8 alpha2, REAL8 dalpha1, REAL8 dalpha2)
REAL8 IMRPhenomX_PNR_alpha_A1_coefficient(REAL8 eta, REAL8 chi, REAL8 costheta)
expressions for each of the coefficients that appear in the merger-ringdown expression for alpha
REAL8 IMRPhenomX_PNR_alpha_A2_coefficient(REAL8 eta, REAL8 chi, REAL8 costheta)
REAL8 IMRPhenomX_PNR_alpha_A3_coefficient(REAL8 eta, REAL8 chi, REAL8 costheta)
REAL8 IMRPhenomX_PNR_alpha_A4_coefficient(REAL8 eta, REAL8 chi, REAL8 costheta)
REAL8 IMRPhenomX_PNR_AnglesWindow(IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec)
double IMRPhenomX_PN_Euler_alpha_NNLO(IMRPhenomXPrecessionStruct *pPrec, const double omega, const double omega_cbrt2, const double omega_cbrt, const double logomega)
Internal function to calculate alpha using pre-cached NNLO PN expressions.
vector IMRPhenomX_Return_phi_zeta_costhetaL_MSA(const double v, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec)
Wrapper to generate , and at a given frequency.
REAL8 XLALSimIMRPhenomXUtilsHztoMf(REAL8 fHz, REAL8 Mtot_Msun)
Convert from frequency in Hz to geometric frequency.
#define XLAL_CHECK(assertion,...)
REAL8 derivative_alpha_upper
derivative at connection frequency
REAL8 derivative_alpha_lower
derivative at connection frequency
REAL8 A3
MR Ansatz coefficient.
REAL8 alpha_interp_2
intermediate coefficient
REAL8 A1
MR Ansatz coefficient.
REAL8 alpha_lower
alpha at connection frequency
REAL8 A4
MR Ansatz coefficient.
REAL8 alpha_MR_offset
continuity offset between intermediate and MR
REAL8 alpha_interp_0
intermediate coefficient
REAL8 Mf_alpha_lower
connection frequency
REAL8 alpha_interp_3
intermediate coefficient
REAL8 Mf_alpha_upper
connection frequency
REAL8 A2
MR Ansatz coefficient.
REAL8 alpha_upper
alpha at connection frequency
REAL8 alpha_interp_1
intermediate coefficient
REAL8 costheta_singleSpin
Polar angle of effective single spin, Eq.
INT4 IMRPhenomXPrecVersion
Flag to set version of Euler angles used.
REAL8 chi_singleSpin
Magnitude of effective single spin used for tapering two-spin angles, Eq.