25 #include <lal/SphericalHarmonics.h>
42 #ifndef PHENOMXHMDEBUG
102 "Error: XLALIMRPhenomXPCheckMassesAndSpins failed in XLALSimIMRPhenomX_PNR_GeneratePNRAngles.\n");
105 LALDict *lalParams_aux;
106 if (lalParams == NULL)
124 REAL8 fRef = (fRef_In == 0.0) ?
f_min : fRef_In;
128 "Error: fRef needs to be within the specified minimum and maximum frequency values!\n");
134 "Error: deltaF needs to be a positive number!\n");
138 size_t iStart = (size_t)(
f_min / deltaF);
139 size_t iStop = (size_t)(
f_max / deltaF) + 1;
144 "Error: the starting frequency index is greater than the stopping index! Please ensure that f_min <= f_max.\n");
169 for (
UINT4 i = iStart;
i < iStop;
i++)
171 (*freqs)->data[
i - iStart] =
i * deltaF;
175 REAL8 distance = 1.0;
179 REAL8 f_min_eval = (*freqs)->data[0];
180 REAL8 f_max_eval = (*freqs)->data[(*freqs)->length - 1];
185 status =
IMRPhenomXSetWaveformVariables(pWF, m1_SI, m2_SI, chi1z, chi2z, deltaF, fRef, phiRef, f_min_eval, f_max_eval, distance, inclination, lalParams_aux,
DEBUG);
231 alphaPNR, gammaPNR, &cosBeta, *freqs,
236 fRef_In, 2, lalParams_aux
239 for (
UINT4 i = 0;
i < (*freqs)->length;
i++)
241 (*betaPNR)->data[
i] = acos(cosBeta->
data[
i]);
260 alphaPNR, gammaPNR, &cosBeta, *freqs,
265 fRef_In, 2, lalParams_aux
268 for (
UINT4 i = 0;
i < (*freqs)->length;
i++)
270 (*betaPNR)->data[
i] = acos(cosBeta->
data[
i]);
327 "Error: XLALIMRPhenomXPCheckMassesAndSpins failed in XLALSimIMRPhenomX_PNR_GeneratePNRAnglesHM.\n");
330 LALDict *lalParams_aux;
331 if (lalParams == NULL)
353 if (ModeArray == NULL)
366 REAL8 fRef = (fRef_In == 0.0) ?
f_min : fRef_In;
370 "Error: fRef needs to be within the specified minimum and maximum frequency values!\n");
376 "Error: deltaF needs to be a positive number!\n");
380 size_t iStart = (size_t)(
f_min / deltaF);
381 size_t iStop = (size_t)(
f_max / deltaF) + 1;
386 "Error: the starting frequency index is greater than the stopping index! Please ensure that f_min <= f_max.\n");
411 for (
UINT4 i = iStart;
i < iStop;
i++)
413 (*freqs)->data[
i - iStart] =
i * deltaF;
417 REAL8 distance = 1.0;
421 REAL8 f_min_eval = (*freqs)->data[0];
422 REAL8 f_max_eval = (*freqs)->data[(*freqs)->length - 1];
427 status =
IMRPhenomXSetWaveformVariables(pWF, m1_SI, m2_SI, chi1z, chi2z, deltaF, fRef, phiRef, f_min_eval, f_max_eval, distance, inclination, lalParams_aux,
DEBUG);
461 if ((ell == 2) && (emmprime == 2))
463 for (
size_t i = 0;
i < (*freqs)->length;
i++)
465 (*alphaPNR)->data[
i] = gsl_spline_eval(hm_angle_spline->
alpha_spline, (*freqs)->data[
i], hm_angle_spline->
alpha_acc);
466 (*betaPNR)->data[
i] = gsl_spline_eval(hm_angle_spline->
beta_spline, (*freqs)->data[
i], hm_angle_spline->
beta_acc);
467 (*gammaPNR)->data[
i] = gsl_spline_eval(hm_angle_spline->
gamma_spline, (*freqs)->data[
i], hm_angle_spline->
gamma_acc);
490 sprintf(fileSpecII,
"interpolation_frequencies.dat");
492 fileangle = fopen(fileSpecII,
"w");
494 fprintf(fileangle,
"Mf_RD_22: %.16e\n", Mf_RD_22);
495 fprintf(fileangle,
"Mf_RD_lm: %.16e\n", Mf_RD_lm);
497 fprintf(fileangle,
"Mf_low: %.16e\n", Mf_low);
498 fprintf(fileangle,
"Mf_high: %.16e\n", Mf_high);
502 for (
size_t i = 0;
i < (*freqs)->length;
i++)
509 (*alphaPNR)->data[
i] = gsl_spline_eval(hm_angle_spline->
alpha_spline, f_mapped, hm_angle_spline->
alpha_acc);
510 (*betaPNR)->data[
i] = gsl_spline_eval(hm_angle_spline->
beta_spline, f_mapped, hm_angle_spline->
beta_acc);
511 (*gammaPNR)->data[
i] = gsl_spline_eval(hm_angle_spline->
gamma_spline, f_mapped, hm_angle_spline->
gamma_acc);
527 "Error: IMRPhenomX_PNR_RemapThetaJSF failed in IMRPhenomX_PNR_GeneratePNRAnglesHM.");
537 gsl_interp_accel_free(hm_angle_spline->
alpha_acc);
538 gsl_interp_accel_free(hm_angle_spline->
beta_acc);
539 gsl_interp_accel_free(hm_angle_spline->
gamma_acc);
555 alphaPNR, gammaPNR, &cosBeta, *freqs,
560 fRef_In, emmprime, lalParams_aux
563 for (
UINT4 i = 0;
i < (*freqs)->length;
i++)
565 (*betaPNR)->data[
i] = acos(cosBeta->
data[
i]);
584 alphaPNR, gammaPNR, &cosBeta, *freqs,
589 fRef_In, emmprime, lalParams_aux
592 for (
UINT4 i = 0;
i < (*freqs)->length;
i++)
594 (*betaPNR)->data[
i] = acos(cosBeta->
data[
i]);
660 "Error: PNR angles called without being activated!\n");
685 "Error: IMRPhenomX_PNR_PopulateStructs failed!\n");
703 "Error: IMRPhenomX_PNR_GeneratePNRAngles_UniformFrequencies failed in IMRPhenomX_PNR_GeneratePNRAngles.");
720 "Error: IMRPhenomX_PNR_RemapThetaJSF failed in IMRPhenomX_PNR_GeneratePNRAngles.");
740 "Error: IMRPhenomX_PNR_GeneratePNRAngleInterpolants failed in IMRPhenomX_PNR_GeneratePNRAngles");
746 fval = freqs->
data[
i];
764 "Error: IMRPhenomX_PNR_RemapThetaJSF failed in IMRPhenomX_PNR_GeneratePNRAngles.");
771 gsl_interp_accel_free(angle_spline->
alpha_acc);
772 gsl_interp_accel_free(angle_spline->
beta_acc);
773 gsl_interp_accel_free(angle_spline->
gamma_acc);
831 "Error: PNR angles called without being activated!\n");
844 if ((q <= pPrec->PNR_q_window_lower) && (chi <= pPrec->PNR_chi_window_lower))
850 for (
size_t i = 0;
i < freqs->
length;
i++)
860 for (
size_t i = 0;
i < freqs->
length;
i++)
871 else if ((q <= pPrec->PNR_q_window_upper) && (chi <= pPrec->PNR_chi_window_upper))
877 for (
size_t i = 0;
i < freqs->
length;
i++)
887 for (
size_t i = 0;
i < freqs->
length;
i++)
900 for (
size_t i = 0;
i < freqs->
length;
i++)
913 if (gammaPNR != NULL)
920 "Error: IMRPhenomX_PNR_GeneratePNRGamma failed");
955 "Error: IMRPhenomX_PNR_precompute_alpha_coefficients failed.\n");
961 "Error: IMRPhenomX_PNR_alpha_connection_parameters failed.\n");
968 if ((q <= pPrec->PNR_q_window_lower) && (chi <= pPrec->PNR_chi_window_lower))
970 for (
size_t i = 0;
i < freqs->
length;
i++)
979 else if ((q <= pPrec->PNR_q_window_upper) && (chi <= pPrec->PNR_chi_window_upper))
981 for (
size_t i = 0;
i < freqs->
length;
i++)
992 for (
size_t i = 0;
i < freqs->
length;
i++)
1055 "Error: IMRPhenomX_PNR_PopulateStructs failed!\n");
1076 size_t iStart = (size_t) (f_min_22 / pWF->
deltaF);
1079 f_min_22 = (fMinFromDeltaF < f_min_22) ? fMinFromDeltaF : f_min_22;
1086 if (ModeArray != NULL)
1089 for (
UINT4 ell = 2; ell <= 4; ell++)
1091 for (
UINT4 emmprime = 1; emmprime <= ell; emmprime++)
1104 if(coarseFMax > f_max_22){
1105 f_max_22 = coarseFMax;
1113 if((pWF->
q == 1) && (pWF->
chi1L == pWF->
chi2L) && (emmprime % 2 != 0))
1121 REAL8 Mf_high = 0.0;
1133 REAL8 MfCoarseFMin = coarseFreqs->
data[0];
1142 if(coarseFMin < f_min_22)
1144 f_min_22 = coarseFMin;
1147 if(coarseFMax > f_max_22)
1149 f_max_22 = coarseFMax;
1189 f_max += 2.0 * deltaF_int;
1192 size_t iStart = (size_t)(
f_min / deltaF_int);
1193 size_t iStop = (size_t)(
f_max / deltaF_int) + 1;
1198 char fileSpecII[40];
1199 sprintf(fileSpecII,
"interpolation_parameters.dat");
1201 fileangle = fopen(fileSpecII,
"w");
1203 fprintf(fileangle,
"f_min_22: %.16e\n", f_min_22);
1204 fprintf(fileangle,
"f_max_22: %.16e\n", f_max_22);
1208 fprintf(fileangle,
"f_min from df: %.16e\n", iStart * deltaF_int);
1209 fprintf(fileangle,
"f_max from df: %.16e\n", iStop * deltaF_int);
1210 fprintf(fileangle,
"deltaF: %.16e\n\n", deltaF_int);
1216 "minimum freq index %zu and maximum freq index %zu do not fulfill 0<=ind_min<=ind_max.\n", iStart, iStop);
1246 for (
UINT4 i = iStart;
i < iStop;
i++)
1248 freqs_22->
data[
i - iStart] =
i * deltaF_int;
1269 "Error: IMRPhenomX_PNR_GeneratePNRAngles_UniformFrequencies failed in IMRPhenomX_PNR_GeneratePNRAngleInterpolants.\n");
1274 gsl_spline *a_spline = gsl_spline_alloc(gsl_interp_cspline, flen);
1275 gsl_spline *b_spline = gsl_spline_alloc(gsl_interp_cspline, flen);
1276 gsl_spline *g_spline = gsl_spline_alloc(gsl_interp_cspline, flen);
1278 gsl_interp_accel *a_acc = gsl_interp_accel_alloc();
1279 gsl_interp_accel *b_acc = gsl_interp_accel_alloc();
1280 gsl_interp_accel *g_acc = gsl_interp_accel_alloc();
1282 gsl_spline_init(a_spline, freqs_22->
data, alphaPNR_22->
data, flen);
1283 gsl_spline_init(b_spline, freqs_22->
data, betaPNR_22->
data, flen);
1299 "Error: IMRPhenomX_PNR_GeneratePNRGamma_FromInterpolants failed in IMRPhenomX_PNR_GeneratePNRAngleInterpolants.\n");
1303 gsl_interp_accel_reset(angle_spline->
alpha_acc);
1304 gsl_interp_accel_reset(angle_spline->
beta_acc);
1307 gsl_spline_init(g_spline, freqs_22->
data, gammaPNR_22->
data, flen);
1357 LALDict *lalParams_aux;
1358 if (lalParams == NULL)
1373 status =
IMRPhenomXSetWaveformVariables(pWF, m1_SI, m2_SI, chi1z, chi2z, 0.0, fRef, 0.0,
f_min,
f_max, 1.0, 0.0, lalParams_aux, 0);
1428 LALDict *lalParams_aux;
1429 if (lalParams == NULL)
1445 REAL8 fRef = (fRef_In == 0.0) ?
f_min : fRef_In;
1449 REAL8 distance = 1.0;
1450 REAL8 inclination = 0.0;
1456 status =
IMRPhenomXSetWaveformVariables(pWF, m1_SI, m2_SI, chi1z, chi2z, deltaF, fRef, phiRef,
f_min,
f_max, distance, inclination, lalParams_aux,
DEBUG);
1504 LALDict *lalParams )
1507 LALDict *lalParams_aux;
1508 if (lalParams == NULL)
1523 status =
IMRPhenomXSetWaveformVariables(pWF, m1_SI, m2_SI, chi1z, chi2z, 0.0, fRef, 0.0,
f_min,
f_max, 1.0, 0.0, lalParams_aux, 0);
void XLALDestroyDict(LALDict *dict)
LALDict * XLALDictDuplicate(LALDict *old)
LALDict * XLALCreateDict(void)
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_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.
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...
UINT4 IMRPhenomX_PNR_AttachMRBeta(const IMRPhenomX_PNR_beta_parameters *betaParams)
Determine whether to attach the MR contributions to beta.
REAL8 IMRPhenomX_PNR_GeneratePNRBetaNoMR(REAL8 Mf, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec)
This function evaluates only the rescaled inspiral beta given in Eq.
REAL8 IMRPhenomX_PNR_GenerateRingdownPNRBeta(IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec)
We evaluate beta at the final Mf_beta_upper connection frequency to approximate the final value of be...
REAL8 IMRPhenomX_PNR_GenerateMergedPNRBetaAtMf(REAL8 Mf, const IMRPhenomX_PNR_beta_parameters *betaParams, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec, IMRPhenomXWaveformStruct *pWF_SingleSpin, IMRPhenomXPrecessionStruct *pPrec_SingleSpin)
This function generates beta with the tuned angles and PN expressions blended during merger-ringdown.
REAL8 IMRPhenomX_PNR_GeneratePNRBetaAtMf(REAL8 Mf, const IMRPhenomX_PNR_beta_parameters *betaParams, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec, IMRPhenomXWaveformStruct *pWF_SingleSpin, IMRPhenomXPrecessionStruct *pPrec_SingleSpin)
This function evaluates Eqs.
void IMRPhenomX_PNR_FreeStructs(IMRPhenomXWaveformStruct **pWF_SingleSpin, IMRPhenomXPrecessionStruct **pPrec_SingleSpin, IMRPhenomX_PNR_alpha_parameters **alphaParams, IMRPhenomX_PNR_beta_parameters **betaParams)
void IMRPhenomX_PNR_AngleParameterDebugPrint(IMRPhenomX_PNR_alpha_parameters *alphaParams, IMRPhenomX_PNR_beta_parameters *betaParams)
Print various parameters in the angle structs.
INT4 IMRPhenomX_PNR_CheckTwoSpin(IMRPhenomXPrecessionStruct *pPrec)
This function quickly checks to see if we expect two-spin effects to be present in the inspiral prece...
REAL8 IMRPhenomX_PNR_GenerateEffectiveRingdownFreq(IMRPhenomXWaveformStruct *pWF, UINT4 ell, UINT4 emmprime, LALDict *lalParams)
This code recomputes the skymapped locations in the J-frame using the new value of beta computed from...
INT4 IMRPhenomX_PNR_PopulateStructs(IMRPhenomXWaveformStruct **pWF_SingleSpin, IMRPhenomXPrecessionStruct **pPrec_SingleSpin, IMRPhenomX_PNR_alpha_parameters **alphaParams, IMRPhenomX_PNR_beta_parameters **betaParams, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec, LALDict *lalParams)
These two functions create and populate the required parameter structs for PNR.
REAL8 IMRPhenomX_PNR_HMInterpolationDeltaF(REAL8 f_min, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec)
Here we compute an appropriate deltaF to be used when generating the (2,2) angle interpolants and map...
REAL8 IMRPhenomX_PNR_LinearFrequencyMap(REAL8 Mf, REAL8 ell, REAL8 emm, REAL8 Mf_lower, REAL8 Mf_upper, REAL8 Mf_RD_22, REAL8 Mf_RD_lm, UINT4 INSPIRAL)
Computes a linear frequency map for the HM PNR angles based on the linear frequency mapping used orig...
INT4 IMRPhenomX_PNR_GeneratePNRGamma(REAL8Sequence *gamma, const REAL8Sequence *freqs, const REAL8Sequence *alpha, const REAL8Sequence *beta)
This function computes the frequency integral outlined in Eq.
INT4 IMRPhenomX_PNR_RemapThetaJSF(REAL8 beta_ref, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec, LALDict *lalParams)
This code recomputes the skymapped locations in the J-frame using the new value of beta computed from...
int IMRPhenomX_PNR_GeneratePNRGamma_FromInterpolants(REAL8Sequence *gamma, const REAL8Sequence *freqs, IMRPhenomX_PNR_angle_spline *ab_splines)
This function computes the frequency integral outlined in Eq.
INT4 IMRPhenomX_PNR_LinearFrequencyMapTransitionFrequencies(REAL8 *Mf_low, REAL8 *Mf_high, REAL8 emmprime, REAL8 Mf_RD_22, REAL8 Mf_RD_lm, IMRPhenomXPrecessionStruct *pPrec)
Compute the transition frequencies for the HM PNR angle mapping.
REAL8 IMRPhenomX_PNR_AngleAtFRef(const REAL8Sequence *angle, const REAL8 f_ref, const REAL8Sequence *freqs, const REAL8 deltaF)
Evaluates a function at two points and interpolates between them.
int IMRPhenomXSetWaveformVariables(IMRPhenomXWaveformStruct *wf, const REAL8 m1_SI, const REAL8 m2_SI, const REAL8 chi1L_In, const REAL8 chi2L_In, const REAL8 deltaF, const REAL8 fRef, const REAL8 phi0, const REAL8 f_min, const REAL8 f_max, const REAL8 distance, const REAL8 inclination, LALDict *LALParams, UNUSED const UINT4 debug)
int IMRPhenomXGetAndSetPrecessionVariables(IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec, REAL8 m1_SI, REAL8 m2_SI, REAL8 chi1x, REAL8 chi1y, REAL8 chi1z, REAL8 chi2x, REAL8 chi2y, REAL8 chi2z, LALDict *lalParams, INT4 debug_flag)
Function to populate the IMRPhenomXPrecessionStruct:
REAL8 IMRPhenomXHM_GenerateRingdownFrequency(UINT4 ell, UINT4 emm, IMRPhenomXWaveformStruct *wf22)
INT4 XLALSimIMRPhenomXPHMMultibandingGrid(REAL8Sequence **coarseFreqs, UINT4 ell, UINT4 emmprime, IMRPhenomXWaveformStruct *pWF, LALDict *lalParams)
INT4 XLALIMRPhenomXPCheckMassesAndSpins(REAL8 *m1, REAL8 *m2, REAL8 *chi1x, REAL8 *chi1y, REAL8 *chi1z, REAL8 *chi2x, REAL8 *chi2y, REAL8 *chi2z)
Check if m1 > m2.
REAL8 XLALSimIMRPhenomXUtilsHztoMf(REAL8 fHz, REAL8 Mtot_Msun)
Convert from frequency in Hz to geometric frequency.
REAL8 XLALSimIMRPhenomXUtilsMftoHz(REAL8 Mf, REAL8 Mtot_Msun)
Convert from geometric frequency to Hz.
void XLALDestroyValue(LALValue *value)
void * XLALMalloc(size_t n)
int XLALSimIMRPhenomX_PNR_GeneratePNRAnglesHM(REAL8Sequence **alphaPNR, REAL8Sequence **betaPNR, REAL8Sequence **gammaPNR, REAL8Sequence **freqs, REAL8 *alphaPNR_ref, REAL8 *gammaPNR_ref, REAL8 m1_SI, REAL8 m2_SI, REAL8 chi1x, REAL8 chi1y, REAL8 chi1z, REAL8 chi2x, REAL8 chi2y, REAL8 chi2z, REAL8 inclination, REAL8 deltaF, REAL8 f_min, REAL8 f_max, REAL8 fRef_In, INT4 ell, INT4 emmprime, LALDict *lalParams)
This is an external wrapper to generate the (l,m) PNR angles, following the prescriptions outlined in...
int XLALSimIMRPhenomX_PNR_GeneratePNRAngles(REAL8Sequence **alphaPNR, REAL8Sequence **betaPNR, REAL8Sequence **gammaPNR, REAL8Sequence **freqs, REAL8 *alphaPNR_ref, REAL8 *gammaPNR_ref, REAL8 m1_SI, REAL8 m2_SI, REAL8 chi1x, REAL8 chi1y, REAL8 chi1z, REAL8 chi2x, REAL8 chi2y, REAL8 chi2z, REAL8 inclination, REAL8 deltaF, REAL8 f_min, REAL8 f_max, REAL8 fRef_In, LALDict *lalParams)
This is an external wrapper to generate the (2,2) PNR angles, following the prescription outlined in ...
REAL8 XLALSimIMRPhenomX_PNR_GenerateEffectiveRingdownFreq(REAL8 m1_SI, REAL8 m2_SI, REAL8 chi1x, REAL8 chi1y, REAL8 chi1z, REAL8 chi2x, REAL8 chi2y, REAL8 chi2z, REAL8 f_min, REAL8 f_max, REAL8 fRef, UINT4 ell, UINT4 emmprime, LALDict *lalParams)
External wrapper for IMRPhenomX_PNR_GenerateEffectiveRingdownFreq.
int IMRPhenomX_PNR_GeneratePNRAlphaForAntisymmetry(REAL8Sequence *alphaPNR, const REAL8Sequence *freqs, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec, LALDict *lalParams)
Internal helper function to generate PNR alpha for the antisymmetric waveform.
int XLALSimIMRPhenomXPMSAAngles(REAL8Sequence **alpha_of_f, REAL8Sequence **gamma_of_f, REAL8Sequence **cosbeta_of_f, const REAL8Sequence *freqs, REAL8 m1_SI, REAL8 m2_SI, REAL8 chi1x, REAL8 chi1y, REAL8 chi1z, REAL8 chi2x, REAL8 chi2y, REAL8 chi2z, REAL8 inclination, REAL8 fRef_In, INT4 mprime, LALDict *lalParams)
int IMRPhenomX_PNR_GeneratePNRAngles_UniformFrequencies(REAL8Sequence *alphaPNR, REAL8Sequence *betaPNR, REAL8Sequence *gammaPNR, const REAL8Sequence *freqs, IMRPhenomXWaveformStruct *pWF_SingleSpin, IMRPhenomXPrecessionStruct *pPrec_SingleSpin, IMRPhenomX_PNR_alpha_parameters *alphaParams, IMRPhenomX_PNR_beta_parameters *betaParams, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec, LALDict *lalParams)
Generate the tuned precession angles outlined in arXiv:2107.08876 specifically on a uniform frequency...
int XLALSimIMRPhenomX_PNR_InterpolationDeltaF(INT4 *twospin, INT4 *precversion, REAL8 *deltaF, REAL8 m1_SI, REAL8 m2_SI, REAL8 chi1x, REAL8 chi1y, REAL8 chi1z, REAL8 chi2x, REAL8 chi2y, REAL8 chi2z, REAL8 f_min, REAL8 f_max, REAL8 fRef, LALDict *lalParams)
int IMRPhenomX_PNR_GeneratePNRAngles(REAL8Sequence *alphaPNR, REAL8Sequence *betaPNR, REAL8Sequence *gammaPNR, const REAL8Sequence *freqs, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec, LALDict *lalParams)
Generate the tuned precession angles outlined in arXiv:2107.08876.
int XLALSimIMRPhenomXPPNAngles(REAL8Sequence **alpha_of_f, REAL8Sequence **gamma_of_f, REAL8Sequence **cosbeta_of_f, const REAL8Sequence *freqs, REAL8 m1_SI, REAL8 m2_SI, REAL8 chi1x, REAL8 chi1y, REAL8 chi1z, REAL8 chi2x, REAL8 chi2y, REAL8 chi2z, REAL8 inclination, REAL8 fRef_In, INT4 mprime, LALDict *lalParams)
REAL8 XLALSimIMRPhenomX_PNR_GenerateRingdownPNRBeta(REAL8 m1_SI, REAL8 m2_SI, REAL8 chi1x, REAL8 chi1y, REAL8 chi1z, REAL8 chi2x, REAL8 chi2y, REAL8 chi2z, REAL8 deltaF, REAL8 f_min, REAL8 f_max, REAL8 fRef_In, LALDict *lalParams)
External wrapper for IMRPhenomX_PNR_GenerateRingdownPNRBeta.
int IMRPhenomX_PNR_GeneratePNRAngleInterpolants(IMRPhenomX_PNR_angle_spline *angle_spline, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec, LALDict *lalparams)
Generate the tuned precession angles outlined in arXiv:2107.08876 specifically populate the angle int...
void XLALDestroyREAL8Sequence(REAL8Sequence *sequence)
REAL8Sequence * XLALCreateREAL8Sequence(size_t length)
#define XLAL_CHECK(assertion,...)
REAL8 Mf_alpha_lower
connection frequency
gsl_spline * beta_spline
beta cubic spline
gsl_interp_accel * beta_acc
beta cubic spline accelerator
gsl_interp_accel * alpha_acc
alpha cubic spline accelerator
gsl_interp_accel * gamma_acc
gamma cubic spline accelerator
gsl_spline * gamma_spline
gamma cubic spline
gsl_spline * alpha_spline
alpha cubic spline
REAL8 PNR_HM_Mflow
Mf_alpha_lower stored from alphaParams struct, 2 A4 / 7 from arXiv:2107.08876.
INT4 MBandPrecVersion
Flag to control multibanding for Euler angles.
INT4 IMRPhenomXPNRUseTunedAngles
REAL8 epsilon_offset
Offset for .
INT4 IMRPhenomXPrecVersion
Flag to set version of Euler angles used.
UINT4 PNRInspiralScaling
Enforce inpsiral scaling for HM angles outside of calibration window.
REAL8 alpha_offset
Offset for .
REAL8 epsilon0
Coefficient of .
REAL8 chi_singleSpin
Magnitude of effective single spin used for tapering two-spin angles, Eq.
REAL8 PNR_HM_Mfhigh
Mf_beta_lower stored from betaParams struct, Eq.