Remnants

Aligned-spin kick (Islam & Wadekar 2025)

gwModels.remnants.IW_final_kick_aligned.gwModel_kick_q200(q, s1z, s2z, return_std=False)[source]

Kick velocity for aligned-spin binaries. From Islam & Wadekar (2025), https://arxiv.org/abs/2511.11536

Trained on NR (SXS + RIT, q <= 32) and BHPT data (q <= 200). Valid for 1 <= q <= 1000.

Parameters:
  • q – Mass ratio m1/m2 >= 1

  • s1z – Dimensionless spin of primary along z, in [-1, 1]

  • s2z – Dimensionless spin of secondary along z, in [-1, 1]

  • return_std – If True, also return parameter uncertainty estimate

Returns:

Kick velocity in km/s V_kick_std (optional): Estimated uncertainty in km/s

Return type:

V_kick

GPR kick (Islam & Wadekar 2025)

class gwModels.remnants.IW_final_kick_GPR.gwModel_kick_q200_GPR(model_path)[source]

Bases: object

GPR-based aligned-spin kick velocity model. From Islam & Wadekar (2025), https://arxiv.org/abs/2511.11536

The model has two components: 1. Analytical model: refitted RIT formula with 20 coefficients 2. GPR model: Gaussian Process trained on kick data with features

[log2(q), chi_hat, chi_a]

Parameters:

model_path (str) – Path to the .pkl model file.

predict_analytical(q, s1z, s2z, return_std=False)[source]

Analytical aligned-spin kick (refitted RIT formula).

Parameters:
  • q – Mass ratio m1/m2 >= 1

  • s1z – Dimensionless spin of primary along z, in [-1, 1]

  • s2z – Dimensionless spin of secondary along z, in [-1, 1]

  • return_std – If True, also return parameter uncertainty estimate

Returns:

Kick velocity in km/s V_kick_std (optional): Uncertainty in km/s

Return type:

V_kick

predict_gpr(q, s1z, s2z)[source]

GPR kick prediction.

Parameters:
  • q – Mass ratio m1/m2 >= 1

  • s1z – Dimensionless spin of primary along z, in [-1, 1]

  • s2z – Dimensionless spin of secondary along z, in [-1, 1]

Returns:

Kick velocity in km/s vk_std: GPR uncertainty in km/s

Return type:

vk

info()[source]

Precessing kick flow (Islam & Wadekar 2025)

class gwModels.remnants.IW_final_kick_precessing.gwModel_kick_prec_flow(datadir)[source]

Bases: object

Normalizing-flow model for precessing-spin kick velocity distributions.

Samples kick velocities for given (q, a1, a2), marginalizing over spin orientation angles.

Parameters:

datadir (str) – Directory containing gwModel_kick_prec_flow.pt and gwModel_kick_prec_flow_config.npy

sample(q, a1, a2, num_samples=5000)[source]

Sample kick velocities from the flow model.

For non-spinning systems (a1==0 and a2==0), falls back to the aligned-spin model gwModel_kick_q200.

Parameters:
  • q – Mass ratio (m1/m2 >= 1)

  • a1 – Spin magnitude of primary BH

  • a2 – Spin magnitude of secondary BH

  • num_samples – Number of samples to draw

Returns:

1-D array of kick velocities in km/s

Return type:

samples

info()[source]

HLZ kick

gwModels.remnants.HLZ_final_kick.spin_difference_vector(theta1, theta2, deltaphi, q, chi1, chi2)[source]

Calculate the antisymmetric spin combination Delta = (S2/m2 - S1/m1)/(1+q).

Parameters:
  • theta1 – angles between L and spin vectors (radians)

  • theta2 – angles between L and spin vectors (radians)

  • deltaphi – azimuthal angle difference between spins (radians)

  • q – mass ratio (q <= 1)

  • chi1 – spin magnitudes

  • chi2 – spin magnitudes

Returns:

Delta_parallel, Delta_perp

gwModels.remnants.HLZ_final_kick.total_spin_vector(theta1, theta2, deltaphi, q, chi1, chi2)[source]

Calculate the symmetric spin combination chi = (S1 + S2)/M^2.

Parameters:
  • theta1 – angles between L and spin vectors (radians)

  • theta2 – angles between L and spin vectors (radians)

  • deltaphi – azimuthal angle difference between spins (radians)

  • q – mass ratio (q <= 1)

  • chi1 – spin magnitudes

  • chi2 – spin magnitudes

Returns:

chi_tilde_parallel, chi_tilde_perp

gwModels.remnants.HLZ_final_kick.calculate_kick_components(q, chi1, chi2, theta1, theta2, deltaphi, Theta=None)[source]

Calculate the three kick velocity components.

Parameters:
  • q – mass ratio (q <= 1)

  • chi1 – spin magnitudes

  • chi2 – spin magnitudes

  • theta1 – angles between L and spin vectors (radians)

  • theta2 – angles between L and spin vectors (radians)

  • deltaphi – azimuthal angle difference between spins (radians)

  • Theta – angle between Delta x L and fiducial infall direction (radians). If None, a random value between 0 and 2pi is used.

Returns:

Vm, Vs_perp, Vs_parallel, Theta_used

gwModels.remnants.HLZ_final_kick.bbh_final_kick_precessing_CLZM2007(q, chi1, chi2, theta1, theta2, deltaphi, Theta=None, debug=False)[source]

Calculate total kick velocity magnitude.

Parameters:
  • q – mass ratio (q <= 1)

  • chi1 – spin magnitudes

  • chi2 – spin magnitudes

  • theta1 – angles between L and spin vectors (radians)

  • theta2 – angles between L and spin vectors (radians)

  • deltaphi – azimuthal angle difference between spins (radians)

  • Theta – angle between Delta x L and fiducial infall direction (radians). If None, a random value between 0 and 2pi is used.

  • debug – if True, return all components

Returns:

total kick velocity in km/s If debug=True: V_kick, Vm, Vs_perp, Vs_parallel, Theta_used

Return type:

V_kick (float)

gwModels.remnants.HLZ_final_kick.HLZ_2014_aligned_spin(q, s1z, s2z)[source]

RIT aligned-spin recoil (kick) for binaries with spins along +/-z. Coefficients from arXiv:1406.7295.

Parameters:
  • q – mass ratio m1/m2 >= 1 (primary is m1)

  • s1z – dimensionless spin of primary along z in [-1, 1]

  • s2z – dimensionless spin of secondary along z in [-1, 1]

Returns:

kick velocity in km/s

Return type:

V_kick

HBR final mass and spin

gwModels.remnants.HBR_final_mass_final_spin.energy_at_isco(a)[source]

Dimensionless specific energy at the ISCO: E_ISCO(a).

gwModels.remnants.HBR_final_mass_final_spin.angular_momentum_at_isco(a)[source]

Dimensionless specific angular momentum at ISCO: L_ISCO(a).

gwModels.remnants.HBR_final_mass_final_spin.angle_between_spins(theta1, theta2, deltaphi)[source]

Angle alpha between the two spin vectors using spherical law of cosines.

gwModels.remnants.HBR_final_mass_final_spin.angle_correction(theta, eps)[source]

Angle remapping from Eq. (18): tan(theta’/2) = (1+eps) tan(theta/2).

gwModels.remnants.HBR_final_mass_final_spin.bbh_final_mass_precessing_BMR2012(theta1, theta2, q, chi1, chi2, verbose=False)[source]

Final remnant mass using Barausse-Morozova-Rezzolla (2012) fit.

Parameters:
  • theta1 – Angles (radians) between orbital momentum and spins

  • theta2 – Angles (radians) between orbital momentum and spins

  • q – Mass ratio m2/m1 with 0 <= q <= 1 (m1 >= m2)

  • chi1 – Dimensionless spin magnitudes (0 <= chi <= 1)

  • chi2 – Dimensionless spin magnitudes (0 <= chi <= 1)

  • verbose – Print intermediate calculations (default: False)

Returns:

Remnant mass as fraction of initial total mass M_f/M

Return type:

Mfin

Reference: Barausse, Morozova & Rezzolla (2012), ApJ 758, 63

gwModels.remnants.HBR_final_mass_final_spin.bbh_final_spin_precessing_HBR2016(theta1, theta2, deltaphi, q, chi1, chi2, model='HBR16_34corr', verbose=False)[source]

Final spin magnitude using Hofmann, Barausse & Rezzolla (2016) fit.

Parameters:
  • theta1 – Angles (radians) between orbital momentum and spins

  • theta2 – Angles (radians) between orbital momentum and spins

  • deltaphi – Angle between spin projections on orbital plane

  • q – Mass ratio m2/m1 with 0 <= q <= 1 (m1 >= m2)

  • chi1 – Dimensionless spin magnitudes (0 <= chi <= 1)

  • chi2 – Dimensionless spin magnitudes (0 <= chi <= 1)

  • model – Fit model selection (default: “HBR16_34corr”)

  • verbose – Print intermediate calculations

Returns:

Final spin magnitude |a_final| <= 1

Return type:

chi_final

Reference: Hofmann, Barausse & Rezzolla (2016), ApJL 825, L19

UIB2016 final mass and spin

gwModels.remnants.UIB2016_final_mass_final_spin.bbh_UIBfits_setup(m1, m2, chi1, chi2)[source]

Common setup function for UIB final-state fit functions.

gwModels.remnants.UIB2016_final_mass_final_spin.bbh_final_mass_non_precessing_UIB2016(m1, m2, chi1, chi2, version='v2')[source]

Final mass with the aligned-spin NR fit by Jimenez Forteza, Keitel, Husa et al. [LIGO-P1600270] [https://arxiv.org/abs/1611.00332]

Parameters:
  • m1 – component masses (m1 > m2)

  • m2 – component masses (m1 > m2)

  • chi1 – dimensionless spins of two BHs

  • chi2 – dimensionless spins of two BHs

  • version – “v1” or “v2” (default “v2”)

Returns:

final mass

Return type:

Mf

gwModels.remnants.UIB2016_final_mass_final_spin.bbh_final_spin_non_precessing_UIB2016(m1, m2, chi1, chi2, version='v2')[source]

Final spin with the aligned-spin NR fit by Jimenez Forteza, Keitel, Husa et al. [LIGO-P1600270] [https://arxiv.org/abs/1611.00332]

Parameters:
  • m1 – component masses (m1 > m2)

  • m2 – component masses (m1 > m2)

  • chi1 – dimensionless spins of two BHs

  • chi2 – dimensionless spins of two BHs

  • version – “v1” or “v2” (default “v2”)

Returns:

final spin

Return type:

chif

Utilities

gwModels.remnants.remnant_utils.symmetric_mass_ratio(q)[source]

Calculate symmetric mass ratio eta(q) with q = m2/m1 <= 1.

eta = 0.25 for equal masses (q = 1), eta -> 0 for q -> 0.

Parameters:

q – Mass ratio (q <= 1).

Returns:

Symmetric mass ratio.

Return type:

float or array

gwModels.remnants.remnant_utils.kerr_isco_radius(a)[source]

Calculate Boyer-Lindquist r_ISCO(a) for equatorial orbits of a Kerr BH.

Parameters:

a – Dimensionless spin parameter (|a| <= 1). Positive for prograde, negative for retrograde orbits.

Returns:

ISCO radius in units of GM/c^2.

Return type:

float or array