25#include <lal/SphericalHarmonics.h>
102 "Error: XLALIMRPhenomXPCheckMassesAndSpins failed in XLALSimIMRPhenomX_PNR_GeneratePNRAngles.\n");
108 LALDict *lalParams_aux;
109 if (lalParams == NULL)
127 REAL8 fRef = (fRef_In == 0.0) ?
f_min : fRef_In;
131 "Error: fRef needs to be within the specified minimum and maximum frequency values!\n");
137 "Error: deltaF needs to be a positive number!\n");
141 size_t iStart = (size_t)(
f_min / deltaF);
142 size_t iStop = (size_t)(
f_max / deltaF) + 1;
147 "Error: the starting frequency index is greater than the stopping index! Please ensure that f_min <= f_max.\n");
172 for (
UINT4 i = iStart;
i < iStop;
i++)
174 (*freqs)->data[
i - iStart] =
i * deltaF;
178 REAL8 distance = 1.0;
182 REAL8 f_min_eval = (*freqs)->data[0];
183 REAL8 f_max_eval = (*freqs)->data[(*freqs)->length - 1];
188 status =
IMRPhenomXSetWaveformVariables(pWF, m1_SI, m2_SI, chi1z, chi2z, deltaF, fRef, phiRef, f_min_eval, f_max_eval, distance, inclination, lalParams_aux,
DEBUG);
252 alphaPNR, gammaPNR, &cosBeta, *freqs,
257 fRef_In, 2, lalParams_aux
260 for (
UINT4 i = 0;
i < (*freqs)->length;
i++)
262 (*betaPNR)->data[
i] = acos(cosBeta->
data[
i]);
281 alphaPNR, gammaPNR, &cosBeta, *freqs,
286 fRef_In, 2, lalParams_aux
289 for (
UINT4 i = 0;
i < (*freqs)->length;
i++)
291 (*betaPNR)->data[
i] = acos(cosBeta->
data[
i]);
355 "Error: XLALIMRPhenomXPCheckMassesAndSpins failed in XLALSimIMRPhenomX_PNR_GeneratePNRAnglesHM.\n");
358 LALDict *lalParams_aux;
359 if (lalParams == NULL)
381 if (ModeArray == NULL)
394 REAL8 fRef = (fRef_In == 0.0) ?
f_min : fRef_In;
398 "Error: fRef needs to be within the specified minimum and maximum frequency values!\n");
404 "Error: deltaF needs to be a positive number!\n");
407 REAL8 distance = 1.0;
413 status =
IMRPhenomXSetWaveformVariables(pWF, m1_SI, m2_SI, chi1z, chi2z, deltaF, fRef, phiRef,
f_min,
f_max, distance, inclination, lalParams_aux,
DEBUG);
423 size_t iStart = (
size_t)(f_min_eval / df);
424 size_t iStop = (size_t)(f_max_eval / df) + 1;
449 for (
UINT4 i = iStart;
i < iStop;
i++)
451 (*freqs)->data[
i - iStart] =
i * df;
500 if ((ell == 2) && (emmprime == 2))
502 for (
size_t i = 0;
i < (*freqs)->length;
i++)
505 (*alphaPNR)->data[
i] = gsl_spline_eval(hm_angle_spline->
alpha_spline, (*freqs)->data[
i], hm_angle_spline->
alpha_acc);
506 (*betaPNR)->data[
i] = gsl_spline_eval(hm_angle_spline->
beta_spline, (*freqs)->data[
i], hm_angle_spline->
beta_acc);
507 (*gammaPNR)->data[
i] = gsl_spline_eval(hm_angle_spline->
gamma_spline, (*freqs)->data[
i], hm_angle_spline->
gamma_acc);
510 (*alphaPNR)->data[
i] = 0.0;
511 (*betaPNR)->data[
i] = 0.0;
512 (*gammaPNR)->data[
i] = 0.0;
536 sprintf(fileSpecII,
"interpolation_frequencies.dat");
538 fileangle = fopen(fileSpecII,
"w");
540 fprintf(fileangle,
"Mf_RD_22: %.16e\n", Mf_RD_22);
541 fprintf(fileangle,
"Mf_RD_lm: %.16e\n", Mf_RD_lm);
543 fprintf(fileangle,
"Mf_low: %.16e\n", Mf_low);
544 fprintf(fileangle,
"Mf_high: %.16e\n", Mf_high);
548 for (
size_t i = 0;
i < (*freqs)->length;
i++)
556 (*alphaPNR)->data[
i] = gsl_spline_eval(hm_angle_spline->
alpha_spline, f_mapped, hm_angle_spline->
alpha_acc);
557 (*betaPNR)->data[
i] = gsl_spline_eval(hm_angle_spline->
beta_spline, f_mapped, hm_angle_spline->
beta_acc);
558 (*gammaPNR)->data[
i] = gsl_spline_eval(hm_angle_spline->
gamma_spline, f_mapped, hm_angle_spline->
gamma_acc);
560 (*alphaPNR)->data[
i] = 0.0;
561 (*betaPNR)->data[
i] = 0.0;
562 (*gammaPNR)->data[
i] = 0.0;
579 "Error: IMRPhenomX_PNR_RemapThetaJSF failed in IMRPhenomX_PNR_GeneratePNRAnglesHM.");
589 gsl_interp_accel_free(hm_angle_spline->
alpha_acc);
590 gsl_interp_accel_free(hm_angle_spline->
beta_acc);
591 gsl_interp_accel_free(hm_angle_spline->
gamma_acc);
607 alphaPNR, gammaPNR, &cosBeta, *freqs,
612 fRef_In, emmprime, lalParams_aux
615 for (
UINT4 i = 0;
i < (*freqs)->length;
i++)
617 (*betaPNR)->data[
i] = acos(cosBeta->
data[
i]);
636 alphaPNR, gammaPNR, &cosBeta, *freqs,
641 fRef_In, emmprime, lalParams_aux
644 for (
UINT4 i = 0;
i < (*freqs)->length;
i++)
646 (*betaPNR)->data[
i] = acos(cosBeta->
data[
i]);
712 "Error: PNR angles called without being activated!\n");
737 "Error: IMRPhenomX_PNR_PopulateStructs failed!\n");
755 "Error: IMRPhenomX_PNR_GeneratePNRAngles_UniformFrequencies failed in IMRPhenomX_PNR_GeneratePNRAngles.");
773 "Error: IMRPhenomX_PNR_RemapThetaJSF failed in IMRPhenomX_PNR_GeneratePNRAngles.");
793 "Error: IMRPhenomX_PNR_GeneratePNRAngleInterpolants failed in IMRPhenomX_PNR_GeneratePNRAngles");
799 fval = freqs->
data[
i];
817 "Error: IMRPhenomX_PNR_RemapThetaJSF failed in IMRPhenomX_PNR_GeneratePNRAngles.");
824 gsl_interp_accel_free(angle_spline->
alpha_acc);
825 gsl_interp_accel_free(angle_spline->
beta_acc);
826 gsl_interp_accel_free(angle_spline->
gamma_acc);
884 "Error: PNR angles called without being activated!\n");
897 if ((q <= pPrec->PNR_q_window_lower) && (chi <= pPrec->PNR_chi_window_lower))
904 for (
size_t i = 0;
i < freqs->
length;
i++)
915 for (
size_t i = 0;
i < freqs->
length;
i++)
926 else if ((q <= pPrec->PNR_q_window_upper) && (chi <= pPrec->PNR_chi_window_upper))
932 for (
size_t i = 0;
i < freqs->
length;
i++)
943 for (
size_t i = 0;
i < freqs->
length;
i++)
957 for (
size_t i = 0;
i < freqs->
length;
i++)
970 if (gammaPNR != NULL)
977 "Error: IMRPhenomX_PNR_GeneratePNRGamma failed");
1012 "Error: IMRPhenomX_PNR_precompute_alpha_coefficients failed.\n");
1018 "Error: IMRPhenomX_PNR_alpha_connection_parameters failed.\n");
1025 if ((q <= pPrec->PNR_q_window_lower) && (chi <= pPrec->PNR_chi_window_lower))
1027 for (
size_t i = 0;
i < freqs->
length;
i++)
1036 else if ((q <= pPrec->PNR_q_window_upper) && (chi <= pPrec->PNR_chi_window_upper))
1038 for (
size_t i = 0;
i < freqs->
length;
i++)
1049 for (
size_t i = 0;
i < freqs->
length;
i++)
1112 "Error: IMRPhenomX_PNR_PopulateStructs failed!\n");
1133 size_t iStart = (size_t) (f_min_22 / pWF->
deltaF);
1136 f_min_22 = (fMinFromDeltaF < f_min_22) ? fMinFromDeltaF : f_min_22;
1139 f_max_22 = pWF->
fMax;
1149 if (ModeArray != NULL)
1152 for (
UINT4 ell = 2; ell <= 4; ell++)
1154 for (
UINT4 emmprime = 1; emmprime <= ell; emmprime++)
1167 if(coarseFMax >
f_max){
1176 if((pWF->
q == 1) && (pWF->
chi1L == pWF->
chi2L) && (emmprime % 2 != 0))
1184 REAL8 Mf_high = 0.0;
1196 REAL8 MfCoarseFMin = coarseFreqs->
data[0];
1205 if(coarseFMin <
f_min)
1210 if(coarseFMax >
f_max)
1249 f_max += 2.0 * deltaF_int;
1252 size_t iStart = (size_t)(
f_min / deltaF_int);
1253 size_t iStop = (size_t)(
f_max / deltaF_int) + 1;
1258 char fileSpecII[40];
1259 sprintf(fileSpecII,
"interpolation_parameters.dat");
1261 fileangle = fopen(fileSpecII,
"w");
1263 fprintf(fileangle,
"f_min_22: %.16e\n", f_min_22);
1264 fprintf(fileangle,
"f_max_22: %.16e\n", f_max_22);
1268 fprintf(fileangle,
"f_min from df: %.16e\n", iStart * deltaF_int);
1269 fprintf(fileangle,
"f_max from df: %.16e\n", iStop * deltaF_int);
1270 fprintf(fileangle,
"deltaF: %.16e\n\n", deltaF_int);
1276 "minimum freq index %zu and maximum freq index %zu do not fulfill 0<=ind_min<=ind_max.\n", iStart, iStop);
1306 for (
UINT4 i = iStart;
i < iStop;
i++)
1308 freqs_22->
data[
i - iStart] =
i * deltaF_int;
1319 int success =
IMRPhenomX_InspiralAngles_SpinTaylor(pPrec->
PNarrays, &pPrec->
fmin_integration, pPrec->
chi1x,pPrec->
chi1y,pPrec->
chi1z,pPrec->
chi2x,pPrec->
chi2y,pPrec->
chi2z,freqs_22->
data[0],pPrec->
IMRPhenomXPrecVersion,pWF,lalparams);
1323 XLAL_PRINT_WARNING(
"Warning: due to a failure in the SpinTaylor routines, the model will default to MSA angles.");
1334 gsl_interp_accel_free(pPrec->
alpha_acc);
1335 gsl_interp_accel_free(pPrec->
gamma_acc);
1349 pWF_SingleSpin = NULL;
1350 pPrec_SingleSpin = NULL;
1363 XLAL_EFUNC,
"Error: IMRPhenomX_PNR_PopulateStructs failed!\n");
1385 "Error: IMRPhenomX_PNR_GeneratePNRAngles_UniformFrequencies failed in IMRPhenomX_PNR_GeneratePNRAngleInterpolants.\n");
1390 gsl_spline *a_spline = gsl_spline_alloc(gsl_interp_cspline, flen);
1391 gsl_spline *b_spline = gsl_spline_alloc(gsl_interp_cspline, flen);
1392 gsl_spline *g_spline = gsl_spline_alloc(gsl_interp_cspline, flen);
1394 gsl_interp_accel *a_acc = gsl_interp_accel_alloc();
1395 gsl_interp_accel *b_acc = gsl_interp_accel_alloc();
1396 gsl_interp_accel *g_acc = gsl_interp_accel_alloc();
1398 gsl_spline_init(a_spline, freqs_22->
data, alphaPNR_22->
data, flen);
1399 gsl_spline_init(b_spline, freqs_22->
data, betaPNR_22->
data, flen);
1415 "Error: IMRPhenomX_PNR_GeneratePNRGamma_FromInterpolants failed in IMRPhenomX_PNR_GeneratePNRAngleInterpolants.\n");
1419 gsl_interp_accel_reset(angle_spline->
alpha_acc);
1420 gsl_interp_accel_reset(angle_spline->
beta_acc);
1423 gsl_spline_init(g_spline, freqs_22->
data, gammaPNR_22->
data, flen);
1473 LALDict *lalParams_aux;
1474 if (lalParams == NULL)
1489 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);
1544 LALDict *lalParams_aux;
1545 if (lalParams == NULL)
1561 REAL8 fRef = (fRef_In == 0.0) ?
f_min : fRef_In;
1565 REAL8 distance = 1.0;
1566 REAL8 inclination = 0.0;
1572 status =
IMRPhenomXSetWaveformVariables(pWF, m1_SI, m2_SI, chi1z, chi2z, deltaF, fRef, phiRef,
f_min,
f_max, distance, inclination, lalParams_aux,
DEBUG);
1620 LALDict *lalParams )
1623 LALDict *lalParams_aux;
1624 if (lalParams == NULL)
1639 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(const LALDict *orig)
LALDict * XLALCreateDict(void)
IMRPhenomX_UsefulPowers powers_of_lalpi
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...
REAL8 IMRPhenomX_PNR_GeneratePNRBetaNoMR(REAL8 Mf, const IMRPhenomX_PNR_beta_parameters *betaParams, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec)
This function evaluates only the rescaled inspiral beta given in Eq.
UINT4 IMRPhenomX_PNR_AttachMRBeta(const IMRPhenomX_PNR_beta_parameters *betaParams)
Determine whether to attach the MR contributions to beta.
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 IMRPhenomX_Initialize_Powers(IMRPhenomX_UsefulPowers *p, REAL8 number)
int IMRPhenomX_SpinTaylorAnglesSplinesAll(REAL8 fmin, REAL8 fmax, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec, LALDict *LALparams)
This function builds and stores splines for and in the frequency range covered by PN,...
int IMRPhenomX_InspiralAngles_SpinTaylor(PhenomXPInspiralArrays *arrays, double *fmin_PN, REAL8 chi1x, REAL8 chi1y, REAL8 chi1z, REAL8 chi2x, REAL8 chi2y, REAL8 chi2z, REAL8 fmin, int PrecVersion, IMRPhenomXWaveformStruct *pWF, LALDict *LALparams)
Wrapper of XLALSimInspiralSpinTaylorPNEvolveOrbit : if integration is successful, stores arrays conta...
int IMRPhenomX_Initialize_Euler_Angles(IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec, LALDict *lalParams)
Wrapper of IMRPhenomX_SpinTaylorAnglesSplinesAll: fmin and fmax are determined by the function based ...
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:
IMRPhenomX_UsefulPowers powers_of_lalpiHM
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,...)
#define XLAL_PRINT_WARNING(...)
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
gsl_interp_accel * gamma_acc
PhenomXPbetaMRD * beta_params
Parameters needed for analytical MRD continuation of cosbeta.
REAL8 Mfmin_integration
Minimum frequency covered by the integration of PN spin-precessing equations for SpinTaylor models
gsl_spline * gamma_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 fmin_integration
Minimum frequency covered by the integration of PN spin-precessing equations for SpinTaylor models
REAL8 epsilon_offset
Offset for .
gsl_interp_accel * alpha_acc
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 .
PhenomXPalphaMRD * alpha_params
Parameters needed for analytical MRD continuation of alpha.
gsl_spline * alpha_spline
REAL8 chi_singleSpin
Magnitude of effective single spin used for tapering two-spin angles, Eq.
PhenomXPInspiralArrays * PNarrays
gsl_interp_accel * cosbeta_acc
gsl_spline * cosbeta_spline
REAL8 PNR_HM_Mfhigh
Mf_beta_lower stored from betaParams struct, Eq.