33 #include <lal/LALSimIMRPhenomUtils.h>
35 #include <lal/LALSimIMR.h>
36 #include <lal/SphericalHarmonics.h>
100 REAL8 af_parallel, q_factor;
112 REAL8 Sperp = chip * q_factor * q_factor;
113 REAL8 af = copysign(1.0, af_parallel) * sqrt(Sperp * Sperp + af_parallel * af_parallel);
137 "PhenomInternal_AlignedSpinEnforcePrimaryIsm1 failed");
138 REAL8 Mtot = m1 + m2;
139 REAL8 eta = m1 * m2 / (Mtot * Mtot);
166 REAL8 af_parallel, primary_q_factor, secondary_q_factor;
169 primary_q_factor = m1 /
M;
170 secondary_q_factor = m2 /
M;
175 primary_q_factor = m2 /
M;
176 secondary_q_factor = m1 /
M;
180 REAL8 S1perp = sqrt(chi1x * chi1x + chi1y * chi1y) * primary_q_factor * primary_q_factor;
181 REAL8 S2perp = sqrt(chi2x * chi2x + chi2y * chi2y) * secondary_q_factor * secondary_q_factor;
182 REAL8 Sperp = S1perp + S2perp;
183 REAL8 af = copysign(1.0, af_parallel) * sqrt(Sperp * Sperp + af_parallel * af_parallel);
201 XLAL_CHECK(fabs(s1x * s1x + s1y * s1y) <= 1.0,
XLAL_EDOM,
"|S1_perp/m1^2| must be <= 1.\n");
202 XLAL_CHECK(fabs(s2x * s2x + s2y * s2y) <= 1.0,
XLAL_EDOM,
"|S2_perp/m2^2| must be <= 1.\n");
204 const REAL8 m1_2 = m1 * m1;
205 const REAL8 m2_2 = m2 * m2;
208 const REAL8 S1_perp = m1_2 * sqrt(s1x * s1x + s1y * s1y);
209 const REAL8 S2_perp = m2_2 * sqrt(s2x * s2x + s2y * s2y);
211 const REAL8 A1 = 2 + (3 * m2) / (2 * m1);
212 const REAL8 A2 = 2 + (3 * m1) / (2 * m2);
213 const REAL8 ASp1 = A1 * S1_perp;
214 const REAL8 ASp2 = A2 * S2_perp;
215 const REAL8 num = (ASp2 > ASp1) ? ASp2 : ASp1;
216 const REAL8 den = (m2 > m1) ? A2 * m2_2 : A1 * m1_2;
217 const REAL8 chip = num / den;
237 for (
int m = -ell ;
m<=ell;
m++){
239 p->Ylm2[1][midx] = conj(
p->Ylm2[0][midx]);
247 for (
int m = -ell;
m <= ell;
m++)
250 p->Ylm3[1][midx] = conj(
p->Ylm3[0][midx]);
257 for (
int m = -ell;
m <= ell;
m++)
260 p->Ylm4[1][midx] = conj(
p->Ylm4[0][midx]);
290 COMPLEX16 cexp_2i_alpha = cexp_i_alpha * cexp_i_alpha;
291 COMPLEX16 cexp_mi_alpha = 1.0 / cexp_i_alpha;
292 COMPLEX16 cexp_m2i_alpha = cexp_mi_alpha * cexp_mi_alpha;
302 (*p)->alpha2[0] = cexp_m2i_alpha;
303 (*p)->alpha2[1] = cexp_mi_alpha;
304 (*p)->alpha2[2] = 1.0;
305 (*p)->alpha2[3] = cexp_i_alpha;
306 (*p)->alpha2[4] = cexp_2i_alpha;
311 cexp_3i_alpha = cexp_2i_alpha * cexp_i_alpha;
312 cexp_m3i_alpha = cexp_m2i_alpha * cexp_mi_alpha;
314 (*p)->alpha3[0] = cexp_m3i_alpha;
315 (*p)->alpha3[1] = cexp_m2i_alpha;
316 (*p)->alpha3[2] = cexp_mi_alpha;
317 (*p)->alpha3[3] = 1.0;
318 (*p)->alpha3[4] = cexp_i_alpha;
319 (*p)->alpha3[5] = cexp_2i_alpha;
320 (*p)->alpha3[6] = cexp_3i_alpha;
324 cexp_3i_alpha = cexp_2i_alpha * cexp_i_alpha;
325 cexp_m3i_alpha = cexp_m2i_alpha * cexp_mi_alpha;
326 cexp_4i_alpha = cexp_3i_alpha * cexp_i_alpha;
327 cexp_m4i_alpha = cexp_m3i_alpha * cexp_mi_alpha;
329 (*p)->alpha4[0] = cexp_m4i_alpha;
330 (*p)->alpha4[1] = cexp_m3i_alpha;
331 (*p)->alpha4[2] = cexp_m2i_alpha;
332 (*p)->alpha4[3] = cexp_mi_alpha;
333 (*p)->alpha4[4] = 1.0;
334 (*p)->alpha4[5] = cexp_i_alpha;
335 (*p)->alpha4[6] = cexp_2i_alpha;
336 (*p)->alpha4[7] = cexp_3i_alpha;
337 (*p)->alpha4[8] = cexp_4i_alpha;
368 REAL8 cos2b_over_two = 0.;
373 REAL8 cosb_minus_1 = cosb - 1.0;
374 REAL8 cosb_plus_1 = cosb + 1.0;
378 if (ell == 2 && mprime == 2)
381 (*p)->d22[0][0] = -cosb_over_two + cos2b_fac_1;
382 (*p)->d22[0][1] = cosb_minus_1 * sinb_over_two;
384 (*p)->d22[0][3] = -cosb_plus_1 * sinb_over_two;
385 (*p)->d22[0][4] = cosb_over_two + cos2b_fac_1;
388 (*p)->d22[1][0] = (*p)->d22[0][4];
389 (*p)->d22[1][1] = -(*p)->d22[0][3];
390 (*p)->d22[1][2] = (*p)->d22[0][2];
391 (*p)->d22[1][3] = -(*p)->d22[0][1];
392 (*p)->d22[1][4] = (*p)->d22[0][0];
394 else if (ell == 2 && mprime == 1)
396 REAL8 sin2b = sin(2.*b);
400 (*p)->d21[0][0] = cosb_minus_1 * sinb_over_two;
401 (*p)->d21[0][1] = cosb_over_two - cos2b_over_two;
403 (*p)->d21[0][3] = cosb_over_two + cos2b_over_two;
404 (*p)->d21[0][4] = cosb_plus_1 * sinb_over_two;
407 (*p)->d21[1][0] = -(*p)->d21[0][4];
408 (*p)->d21[1][1] = (*p)->d21[0][3];
409 (*p)->d21[1][2] = -(*p)->d21[0][2];
410 (*p)->d21[1][3] = (*p)->d21[0][1];
411 (*p)->d21[1][4] = -(*p)->d21[0][0];
413 else if (ell == 3 && mprime == 3)
418 REAL8 sin2b = sin(2. * b);
419 REAL8 sin3b = sin(b3);
426 REAL8 FIVE_sinb = 5.0 * sinb;
427 REAL8 FOUR_sin2b = 4.0 * sin2b;
428 REAL8 FIFTEEN_OVER_32_cosb_plus_ONE_OVER_32_cos3b = FIFTEEN_OVER_32_cosb + ONE_OVER_32_cos3b;
429 REAL8 FIVE_sinb_plus_sin3b = FIVE_sinb + sin3b;
431 REAL8 cosb_m_cos3b = cosb - cos3b;
434 (*p)->d33[0][0] = -(FIFTEEN_OVER_32_cosb_plus_ONE_OVER_32_cos3b - THREE_OVER_16_cos2b_plus_5_OVER_16);
435 (*p)->d33[0][1] =
mSQRT_6_OVER_32 * (FIVE_sinb_plus_sin3b - FOUR_sin2b);
439 (*p)->d33[0][5] =
mSQRT_6_OVER_32 * (FIVE_sinb_plus_sin3b + FOUR_sin2b);
440 (*p)->d33[0][6] = FIFTEEN_OVER_32_cosb_plus_ONE_OVER_32_cos3b + THREE_OVER_16_cos2b_plus_5_OVER_16;
443 (*p)->d33[1][0] = (*p)->d33[0][6];
444 (*p)->d33[1][1] = -(*p)->d33[0][5];
445 (*p)->d33[1][2] = (*p)->d33[0][4];
446 (*p)->d33[1][3] = -(*p)->d33[0][3];
447 (*p)->d33[1][4] = (*p)->d33[0][2];
448 (*p)->d33[1][5] = -(*p)->d33[0][1];
449 (*p)->d33[1][6] = (*p)->d33[0][0];
451 else if (ell == 3 && mprime == 2)
456 REAL8 FOUR_sin2b = 4.0 * sin(
b2);
457 REAL8 FIVE_sinb = 5.0 * sinb;
458 REAL8 sin3b = sin(b3);
463 REAL8 FIVE_sinb_sin3b = FIVE_sinb + sin3b;
467 REAL8 FIVE_OVER_16_cosb_p_THREE_OVER_16_cos3b = FIVE_OVER_16_cosb + THREE_OVER_16_cos3b;
469 REAL8 THREE_sin3b = 3.0 * sin3b;
470 REAL8 sinb_m_THREE_sin3b = sinb - THREE_sin3b;
473 (*p)->d32[0][0] =
SQRT_6_OVER_32 * (FOUR_sin2b - FIVE_sinb_sin3b);
474 (*p)->d32[0][1] = FIVE_OVER_16_cosb_p_THREE_OVER_16_cos3b - cos2b_over_two;
478 (*p)->d32[0][5] = FIVE_OVER_16_cosb_p_THREE_OVER_16_cos3b + cos2b_over_two;
479 (*p)->d32[0][6] =
SQRT_6_OVER_32 * (FIVE_sinb_sin3b + FOUR_sin2b);
482 (*p)->d32[1][0] = -(*p)->d32[0][6];
483 (*p)->d32[1][1] = (*p)->d32[0][5];
484 (*p)->d32[1][2] = -(*p)->d32[0][4];
485 (*p)->d32[1][3] = (*p)->d32[0][3];
486 (*p)->d32[1][4] = -(*p)->d32[0][2];
487 (*p)->d32[1][5] = (*p)->d32[0][1];
488 (*p)->d32[1][6] = -(*p)->d32[0][0];
490 else if (ell == 4 && mprime == 4)
497 REAL8 cos4b = cos(b4);
500 REAL8 sin3b = sin(b3);
501 REAL8 sin4b = sin(b4);
507 REAL8 sinb_14 = 14.0 * sinb;
508 REAL8 sin2b_14 = 14.0 * sin2b;
510 REAL8 sin3b_6 = 6.0 * sin3b;
512 REAL8 sin2b_14_p_sin4b = sin2b_14 + sin4b;
513 REAL8 sinb_14_p_sin3b_6 = sinb_14 + sin3b_6;
517 REAL8 two_sin_pow_4 = 2.0 * sin_pow_4;
521 REAL8 four_sin_pow_2 = 4.0 * sin_pow_2;
522 REAL8 four_sin_pow_2_m_two_sin_pow_4 = four_sin_pow_2 - two_sin_pow_4;
525 REAL8 four_sin_pow_3_cosb = (3.*sinb - sin3b) * cosb;
528 REAL8 sin3b_m_sinb_3 = sin3b - 3. * sinb;
532 (*p)->d44[0][1] =
mSQRT_2_OVER_64 * (sinb_14_p_sin3b_6 - sin2b_14_p_sin4b);
533 (*p)->d44[0][2] =
SQRT_7_OVER_16 * (four_sin_pow_2_m_two_sin_pow_4 - cosb + cos3b);
534 (*p)->d44[0][3] =
SQRT_14_OVER_32 * (four_sin_pow_3_cosb + sin3b_m_sinb_3);
536 (*p)->d44[0][5] =
SQRT_14_OVER_32 * (sin3b_m_sinb_3 - four_sin_pow_3_cosb);
537 (*p)->d44[0][6] =
SQRT_7_OVER_16 * (four_sin_pow_2_m_two_sin_pow_4 + cosb - cos3b);
538 (*p)->d44[0][7] =
mSQRT_2_OVER_64 * (sinb_14_p_sin3b_6 + sin2b_14_p_sin4b);
542 (*p)->d44[1][0] = (*p)->d44[0][8];
543 (*p)->d44[1][1] = -(*p)->d44[0][7];
544 (*p)->d44[1][2] = (*p)->d44[0][6];
545 (*p)->d44[1][3] = -(*p)->d44[0][5];
546 (*p)->d44[1][4] = (*p)->d44[0][4];
547 (*p)->d44[1][5] = -(*p)->d44[0][3];
548 (*p)->d44[1][6] = (*p)->d44[0][2];
549 (*p)->d44[1][7] = -(*p)->d44[0][1];
550 (*p)->d44[1][8] = (*p)->d44[0][0];
552 else if (ell == 4 && mprime == 3)
559 REAL8 cos4b = cos(b4);
562 REAL8 sin3b = sin(b3);
563 REAL8 sin4b = sin(b4);
565 REAL8 sinb_14 = 14.0 * sinb;
566 REAL8 sin2b_14 = 14.0 * sin2b;
568 REAL8 sin3b_6 = 6. * sin3b;
569 REAL8 sin3b_3 = 3. * sin3b;
571 REAL8 cosb_3 = 3. * cosb;
572 REAL8 cos2b_2 = 2. * cos2b;
573 REAL8 cos3b_3 = 3. * cos3b;
574 REAL8 cos4b_2 = 2. * cos4b;
576 REAL8 cosb_3_m_cos3b_3 = cosb_3 - cos3b_3;
578 REAL8 sin2b_14_p_sin4b = sin2b_14 + sin4b;
579 REAL8 sinb_14_p_sin3b_6 = sinb_14 + sin3b_6;
588 REAL8 cosb_7_OVER_32_p_cos3b_9_OVER_32 = cosb_7_OVER_32 + cos3b_9_OVER_32;
589 REAL8 cos2b_7_OVER_16_p_cos4b_OVER_16 = cos2b_7_OVER_16 + cos4b_OVER_16;
591 REAL8 sin2b_2 = 2.0 * sin2b;
593 REAL8 sin2b_2_p_sin4b = sin2b_2 + sin4b;
599 (*p)->d43[0][0] =
mSQRT_2_OVER_64 * (sinb_14_p_sin3b_6 - sin2b_14_p_sin4b);
600 (*p)->d43[0][1] = cosb_7_OVER_32_p_cos3b_9_OVER_32 - cos2b_7_OVER_16_p_cos4b_OVER_16;
601 (*p)->d43[0][2] =
SQRT_14_OVER_32 * (sin3b_3 - sinb - sin2b_2_p_sin4b);
602 (*p)->d43[0][3] =
SQRT_7_OVER_32 * (cosb_3_m_cos3b_3 - cos2b_2 + cos4b_2);
604 (*p)->d43[0][5] =
SQRT_7_OVER_32 * (cosb_3_m_cos3b_3 + cos2b_2 - cos4b_2);
605 (*p)->d43[0][6] =
SQRT_14_OVER_32 * (sinb - sin3b_3 - sin2b_2_p_sin4b);
606 (*p)->d43[0][7] = cosb_7_OVER_32_p_cos3b_9_OVER_32 + cos2b_7_OVER_16_p_cos4b_OVER_16;
607 (*p)->d43[0][8] =
SQRT_2_OVER_64 * (sinb_14_p_sin3b_6 + sin2b_14_p_sin4b);
610 (*p)->d43[1][0] = -(*p)->d43[0][8];
611 (*p)->d43[1][1] = (*p)->d43[0][7];
612 (*p)->d43[1][2] = -(*p)->d43[0][6];
613 (*p)->d43[1][3] = (*p)->d43[0][5];
614 (*p)->d43[1][4] = -(*p)->d43[0][4];
615 (*p)->d43[1][5] = (*p)->d43[0][3];
616 (*p)->d43[1][6] = -(*p)->d43[0][2];
617 (*p)->d43[1][7] = (*p)->d43[0][1];
618 (*p)->d43[1][8] = -(*p)->d43[0][0];
652 fac = pow(-1., mm + mprime);
659 if (abs(mprime) == 2)
664 ans = -cos(b) / 2.0 + cos(2.0 * b) / 8.0 + 3.0 / 8.0;
669 ans = (cos(b) - 1.0) * sin(b) / 2.0;
674 ans = sqrt(6.0) * pow(sin(b), 2.0) / 4.0;
679 ans = -(cos(b) + 1.0) * sin(b) / 2.0;
684 ans = cos(b) / 2.0 + cos(2.0 * b) / 8.0 + 3.0 / 8.0;
687 if (abs(mprime) == 1)
692 ans = (cos(b) - 1.0) * sin(b) / 2.0;
697 ans = cos(b) / 2.0 - cos(2.0 * b) / 2.0;
702 ans = -sqrt(6.0) * sin(2.0 * b) / 4.0;
707 ans = cos(b) / 2.0 + cos(2.0 * b) / 2.0;
712 ans = (cos(b) + 1.0) * sin(b) / 2.0;
718 if (abs(mprime) == 3)
723 ans = -15.0 * cos(b) / 32.0 + 3.0 * cos(2.0 * b) / 16.0 - cos(3.0 * b) / 32.0 + 5.0 / 16.0;
728 ans = sqrt(6.0) * (-5.0 * sin(b) + 4.0 * sin(2.0 * b) - sin(3.0 * b)) / 32.0;
733 ans = sqrt(15.0) * (4.0 * pow(sin(b), 2.0) - cos(b) + cos(3.0 * b)) / 32.0;
738 ans = sqrt(5.0) * (-3.0 * sin(b) + sin(3.0 * b)) / 16.0;
743 ans = sqrt(15.0) * (4.0 * pow(sin(b), 2.0) + cos(b) - cos(3.0 * b)) / 32.0;
748 ans = -sqrt(6.0) * (5.0 * sin(b) + 4.0 * sin(2.0 * b) + sin(3.0 * b)) / 32.0;
753 ans = 15.0 * cos(b) / 32.0 + 3.0 * cos(2.0 * b) / 16.0 + cos(3.0 * b) / 32.0 + 5.0 / 16.0;
756 if (abs(mprime) == 2)
761 ans = sqrt(6.0) * (-5.0 * sin(b) + 4.0 * sin(2.0 * b) - sin(3.0 * b)) / 32.0;
766 ans = 5.0 * cos(b) / 16.0 - cos(2.0 * b) / 2.0 + 3.0 * cos(3.0 * b) / 16.0;
771 ans = sqrt(10.0) * (-sin(b) - 4.0 * sin(2.0 * b) + 3.0 * sin(3.0 * b)) / 32.0;
776 ans = sqrt(30.0) * (cos(b) - cos(3.0 * b)) / 16.0;
781 ans = sqrt(10.0) * (sin(b) - 4.0 * sin(2.0 * b) - 3.0 * sin(3.0 * b)) / 32.0;
786 ans = 5.0 * cos(b) / 16.0 + cos(2.0 * b) / 2.0 + 3.0 * cos(3.0 * b) / 16.0;
791 ans = sqrt(6.0) * (5.0 * sin(b) + 4.0 * sin(2.0 * b) + sin(3.0 * b)) / 32.0;
797 if (abs(mprime) == 4)
802 ans = -7.0 * cos(b) / 16.0 + 7.0 * cos(2.0 * b) / 32.0 - cos(3.0 * b) / 16.0 + cos(4.0 * b) / 128.0 + 35.0 / 128.0;
807 ans = sqrt(2.0) * (-14.0 * sin(b) + 14.0 * sin(2.0 * b) - 6.0 * sin(3.0 * b) + sin(4 * b)) / 64.0;
812 ans = sqrt(7.0) * (-2.0 * pow(sin(b), 4.0) + 4.0 * pow(sin(b), 2.0) - cos(b) + cos(3.0 * b)) / 16.0;
817 ans = sqrt(14.0) * (4.0 * pow(sin(b), 3.0) * cos(b) - 3.0 * sin(b) + sin(3.0 * b)) / 32.0;
822 ans = sqrt(70.0) * pow(sin(b), 4.0) / 16.0;
827 ans = sqrt(14.0) * (-4.0 * pow(sin(b), 3.0) * cos(b) - 3.0 * sin(b) + sin(3.0 * b)) / 32.0;
832 ans = sqrt(7.0) * (-2.0 * pow(sin(b), 4.0) + 4.0 * pow(sin(b), 2.0) + cos(b) - cos(3.0 * b)) / 16.0;
837 ans = -sqrt(2.0) * (14.0 * sin(b) + 14.0 * sin(2.0 * b) + 6.0 * sin(3.0 * b) + sin(4.0 * b)) / 64.0;
842 ans = pow(sin(b), 4.0) / 16.0 - pow(sin(b), 2.0) / 2.0 + 7.0 * cos(b) / 16.0 + cos(3.0 * b) / 16.0 + 1.0 / 2.0;
845 if (abs(mprime) == 3)
850 ans = sqrt(2.0) * (-14.0 * sin(b) + 14.0 * sin(2.0 * b) - 6.0 * sin(3.0 * b) + sin(4.0 * b)) / 64.0;
855 ans = 7.0 * cos(b) / 32.0 - 7.0 * cos(2.0 * b) / 16.0 + 9.0 * cos(3.0 * b) / 32.0 - cos(4.0 * b) / 16.0;
860 ans = sqrt(14.0) * (-sin(b) - 2.0 * sin(2.0 * b) + 3.0 * sin(3.0 * b) - sin(4.0 * b)) / 32.0;
865 ans = sqrt(7.0) * (3.0 * cos(b) - 2.0 * cos(2.0 * b) - 3.0 * cos(3.0 * b) + 2.0 * cos(4.0 * b)) / 32.0;
870 ans = -sqrt(35.0) * pow(sin(b), 3.0) * cos(b) / 4.0;
875 ans = sqrt(7.0) * (3.0 * cos(b) + 2.0 * cos(2.0 * b) - 3.0 * cos(3.0 * b) - 2.0 * cos(4.0 * b)) / 32.0;
880 ans = sqrt(14.0) * (sin(b) - 2.0 * sin(2.0 * b) - 3.0 * sin(3.0 * b) - sin(4.0 * b)) / 32.0;
885 ans = 7.0 * cos(b) / 32.0 + 7.0 * cos(2.0 * b) / 16.0 + 9.0 * cos(3.0 * b) / 32.0 + cos(4.0 * b) / 16.0;
890 ans = sqrt(2.0) * (14.0 * sin(b) + 14.0 * sin(2.0 * b) + 6.0 * sin(3.0 * b) + sin(4.0 * b)) / 64.0;
double XLALSimIMRPhenomDFinalSpin(const REAL8 m1_in, const REAL8 m2_in, const REAL8 chi1_in, const REAL8 chi2_in)
Function to return the final spin (spin of the remnant black hole) as predicted by the IMRPhenomD mod...
double PhenomInternal_EradRational0815(double eta, double chi1, double chi2)
Wrapper function for EradRational0815_s.
int PhenomInternal_AlignedSpinEnforcePrimaryIsm1(REAL8 *m1, REAL8 *m2, REAL8 *chi1z, REAL8 *chi2z)
Given m1 with aligned-spin chi1z and m2 with aligned-spin chi2z.
double XLALSimPhenomUtilsFDamp0(REAL8 Mtot_Msun, REAL8 distance)
compute the frequency domain amplitude pre-factor
double XLALSimPhenomUtilsIMRPhenomDFinalMass(REAL8 m1, REAL8 m2, REAL8 chi1z, REAL8 chi2z)
Helper function used in PhenomHM and PhenomPv3HM Returns the final mass from the fit used in PhenomD.
REAL8 XLALSimPhenomUtilsPhenomPv2FinalSpin(const REAL8 m1, const REAL8 m2, const REAL8 chi1_l, const REAL8 chi2_l, const REAL8 chip)
Wrapper for final-spin formula based on:
REAL8 XLALSimPhenomUtilsChiP(const REAL8 m1, const REAL8 m2, const REAL8 s1x, const REAL8 s1y, const REAL8 s2x, const REAL8 s2y)
Function to compute the effective precession parameter chi_p (1408.1810)
int XLALSimIMRPhenomPv3HMComputeAlphaElements(IMRPhenomPv3HMAlphaStruct **p, UINT4 ell, REAL8 alpha)
int XLALSimIMRPhenomPv3HMComputeWignerdElements(IMRPhenomPv3HMWignderStruct **p, UNUSED UINT4 ell, UNUSED INT4 mprime, UNUSED REAL8 b)
computes the wigner-d elements for -beta in batches.
double XLALSimPhenomUtilsMftoHz(REAL8 Mf, REAL8 Mtot_Msun)
Convert from geometric frequency to frequency in Hz.
double XLALSimPhenomUtilsHztoMf(REAL8 fHz, REAL8 Mtot_Msun)
Convert from frequency in Hz to geometric frequency.
REAL8 XLALSimPhenomUtilsPhenomPv3HMFinalSpin(const REAL8 m1, const REAL8 m2, const REAL8 chi1x, const REAL8 chi1y, const REAL8 chi1z, const REAL8 chi2x, const REAL8 chi2y, const REAL8 chi2z)
Wrapper for final-spin formula based on:
IMRPhenomPv3HMYlmStruct * XLALSimIMRPhenomPv3HMComputeYlmElements(REAL8 theta, REAL8 phi, INT4 ell)
int XLALSimPhenomUtilsPhenomPv3HMWignerdElement(REAL8 *wig_d, UINT4 ell, INT4 mprime, INT4 mm, REAL8 b)
Hard coded expressions for relevant Wignerd matrix elements.
#define THIRTYFIVE_OVER_128
void * XLALMalloc(size_t n)
COMPLEX16 XLALSpinWeightedSphericalHarmonic(REAL8 theta, REAL8 phi, int s, int l, int m)
#define XLAL_CHECK(assertion,...)
#define XLAL_PRINT_ERROR(...)
a strcut to keep the complex exponential terms of the alpha precession angle
a strcut to keep the wigner-d matrix elements
a strcut to keep the spherical harmonic terms