Remnant models: final mass, spin, and kick
HLZ kick (precessing) : precessing kick velocity from Gonzalez et al. (2007), Campanelli et al. (2007), Lousto & Zlochower (2008, 2013)
HLZ kick (aligned-spin) : aligned-spin kick from arXiv:1406.7295
HBR final mass : Barausse, Morozova & Rezzolla (2012), ApJ 758, 63
HBR final spin : Hofmann, Barausse & Rezzolla (2016), ApJL 825, L19
UIB2016 final mass & spin : Jimenez Forteza, Keitel, Husa et al. [arXiv:1611.00332]
[1]:
import sys
!{sys.executable} -m pip install -e ../ --no-deps --quiet
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore", "Wswiglal-redir-stdio")
import gwModels
gwModels.utils.set_rcparams()
lal.MSUN_SI != Msun
1. HLZ precessing kick velocity
[2]:
# Equal mass, anti-aligned spins
q = 0.8
chi1, chi2 = 0.7, 0.7
theta1, theta2 = np.pi/4, 3*np.pi/4
deltaphi = np.pi
vk = gwModels.remnants.bbh_final_kick_precessing_CLZM2007(
q, chi1, chi2, theta1, theta2, deltaphi, Theta=0.0)
print(f'Kick velocity: {vk:.2f} km/s')
Kick velocity: 2000.46 km/s
[3]:
# Kick vs mass ratio for fixed spin configuration
q_arr = np.linspace(0.1, 1.0, 500)
chi1, chi2 = 0.7, 0.7
theta1, theta2 = np.pi/3, 2*np.pi/3
deltaphi = np.pi
vk_arr = np.array([gwModels.remnants.bbh_final_kick_precessing_CLZM2007(
qq, chi1, chi2, theta1, theta2, deltaphi, Theta=0.0) for qq in q_arr])
plt.figure(figsize=(7, 4))
plt.plot(q_arr, vk_arr, lw=2)
plt.xlabel('$q = m_2/m_1$')
plt.ylabel(r'$v_{\rm kick}$ [km/s]')
plt.title(r'HLZ kick: $\chi_1=\chi_2=0.7$, $\theta_1=\pi/3$, $\theta_2=2\pi/3$, $\Delta\phi=\pi$')
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
2. HLZ aligned-spin kick (arXiv:1406.7295)
[4]:
q_arr = np.linspace(1, 50, 500)
plt.figure(figsize=(7, 4))
for s1z, s2z, label in [
(0.9, -0.9, r'$[\chi_1,\chi_2]=[0.9,-0.9]$'),
(0.0, 0.5, r'$[\chi_1,\chi_2]=[0.0,0.5]$'),
(0.5, 0.0, r'$[\chi_1,\chi_2]=[0.5,0.0]$'),
(-0.9, 0.5, r'$[\chi_1,\chi_2]=[-0.9,0.5]$'),
]:
vk = gwModels.remnants.HLZ_2014_aligned_spin(q_arr, s1z, s2z)
plt.plot(q_arr, vk, lw=2, alpha=0.8, label=label)
plt.xlabel('$q = m_1/m_2$')
plt.ylabel(r'$v_{\rm kick}$ [km/s]')
plt.title('HLZ 2014 aligned-spin kick')
plt.legend(frameon=False)
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
3. HBR final mass (Barausse, Morozova & Rezzolla 2012)
[5]:
q_arr = np.linspace(0.1, 1.0, 500)
plt.figure(figsize=(7, 4))
for chi1, chi2, label in [
(0.0, 0.0, r'$\chi_1=\chi_2=0$'),
(0.5, 0.5, r'$\chi_1=\chi_2=0.5$'),
(0.9, 0.9, r'$\chi_1=\chi_2=0.9$'),
(0.5, -0.5, r'$\chi_1=0.5, \chi_2=-0.5$'),
]:
mf = gwModels.remnants.bbh_final_mass_precessing_BMR2012(
theta1=0.0, theta2=0.0, q=q_arr, chi1=chi1, chi2=chi2)
plt.plot(q_arr, mf, lw=2, label=label)
plt.xlabel('$q = m_2/m_1$')
plt.ylabel('$M_f / M$')
plt.title('BMR2012 final mass (aligned spins)')
plt.legend(frameon=False)
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
4. HBR final spin (Hofmann, Barausse & Rezzolla 2016)
[6]:
q_arr = np.linspace(0.1, 1.0, 500)
plt.figure(figsize=(7, 4))
for chi1, chi2, label in [
(0.0, 0.0, r'$\chi_1=\chi_2=0$'),
(0.5, 0.5, r'$\chi_1=\chi_2=0.5$'),
(0.9, 0.9, r'$\chi_1=\chi_2=0.9$'),
(0.5, -0.5, r'$\chi_1=0.5, \chi_2=-0.5$'),
]:
sf = gwModels.remnants.bbh_final_spin_precessing_HBR2016(
theta1=0.0, theta2=0.0, deltaphi=0.0, q=q_arr, chi1=chi1, chi2=chi2)
plt.plot(q_arr, sf, lw=2, label=label)
plt.xlabel('$q = m_2/m_1$')
plt.ylabel('$\\chi_f$')
plt.title('HBR2016 final spin (aligned spins)')
plt.legend(frameon=False)
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
5. UIB2016 final mass and spin (aligned-spin, Jimenez Forteza et al.)
[7]:
m1 = 30.0
m2_arr = np.linspace(3, 30, 500)
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
for chi1, chi2, label in [
(0.0, 0.0, r'$\chi_1=\chi_2=0$'),
(0.5, 0.5, r'$\chi_1=\chi_2=0.5$'),
(0.9, 0.9, r'$\chi_1=\chi_2=0.9$'),
(0.5, -0.5, r'$\chi_1=0.5, \chi_2=-0.5$'),
]:
mf = gwModels.remnants.bbh_final_mass_non_precessing_UIB2016(m1, m2_arr, chi1, chi2)
sf = gwModels.remnants.bbh_final_spin_non_precessing_UIB2016(m1, m2_arr, chi1, chi2)
axes[0].plot(m2_arr/m1, mf/(m1+m2_arr), lw=2, label=label)
axes[1].plot(m2_arr/m1, sf, lw=2, label=label)
axes[0].set_xlabel('$q = m_2/m_1$')
axes[0].set_ylabel('$M_f / M$')
axes[0].set_title('UIB2016 final mass')
axes[0].legend(frameon=False)
axes[0].grid(alpha=0.3)
axes[1].set_xlabel('$q = m_2/m_1$')
axes[1].set_ylabel('$\\chi_f$')
axes[1].set_title('UIB2016 final spin')
axes[1].legend(frameon=False)
axes[1].grid(alpha=0.3)
plt.tight_layout()
plt.show()
[ ]: