mcfacts.physics.binary.merge

Module for calculating the final variables of a merging binary.

mcfacts.physics.binary.merge.chi_effective(masses_1, masses_2, spins_1, spins_2, spin_angles_1, spin_angles_2, bin_ang_mom)

Calculates the effective spin \(\chi_{\rm eff}\) associated with a merger.

The measured effective spin of a merger is calculated as

\[\chi_{\rm eff}=\frac{m_1\chi_1\cos(\theta_1) + m_2\chi_2\cos(\theta_2)}{m_{\rm bin}} L_{\rm bin}\]
Parameters:
  • masses_1 (numpy.ndarray) – Mass [M_sun] of object 1 with float type

  • masses_2 (numpy.ndarray) – Mass [M_sun] of object 2 with float type

  • spins_1 (numpy.ndarray) – Spin magnitude [unitless] of object 1 with float type

  • spins_2 (numpy.ndarray) – Spin magnitude [unitless] of object 2 with float type

  • spin_angles_1 (numpy.ndarray) – Spin angle [radian] of object 1 with float type

  • spin_angles_2 (numpy.ndarray) – Spin angle [radian] of object 2 with float type

  • bin_ang_mom (int/ndarray) – Magnitude of the binary’s mutual angular momentum. If 1, the binary is prograde (aligned with disk angular momentum). If -1, the binary is retrograde (anti-aligned with disk angular momentum).

Returns:

chi_eff – The effective spin value [unitless] for these object(s) with float type

Return type:

numpy.ndarray

mcfacts.physics.binary.merge.chi_p(masses_1, masses_2, spins_1, spins_2, spin_angles_1, spin_angles_2, bin_orbs_inc)

Calculates the precessing spin component \(\chi_p\) associated with a merger.

chi_p = max[spin_1_perp, (q(4q+3)/(4+3q)) * spin_2_perp] where

spin_1_perp = spin_1 * sin(spin_angle_1) and

spin_2_perp = spin_2 * sin(spin_angle_2)

are perpendicular to spin_1 and spin_2, respectively,

and q = mass_2 / mass_1 where mass_2 < mass_1.

Parameters:
Returns:

chi_p – Precessing spin component for these objects

Return type:

numpy.ndarray

mcfacts.physics.binary.merge.generate_truncated_normal(mean=0, std=1, lower=0.75, upper=0.85, size=10)

Random Guassian distribution generator

Parameters:
  • mean (int) – Peak value of the distribution

  • std (int) – Standard deiviation of the distriubtion

  • lower (float) – Lower bound of the distribution

  • upper (float) – Upper bound of the distribution

  • size (int) – Number of bins based on sample size

Returns:

spin_dist – Random distribution of the spins within a set range

Return type:

numpy.ndarray

mcfacts.physics.binary.merge.merge_blackholes(blackholes_binary, blackholes_pro, blackholes_merged, bh_binary_id_num_merger, smbh_mass, flag_use_surrogate, flag_use_spin_check, disk_aspect_ratio, disk_density, disk_sound_speed, time_passed, galaxy)

Calculates parameters for merged BHs and adds them to blackholes_pro and blackholes_merged

This function calculates the new parameters for merged BHs and adds them to the blackholes_pro and blackholes_merged objects. It does NOT delete them from blackholes_binary or update the filing_cabinet with the new information.

Parameters:
  • blackholes_binary (AGNBinaryBlackHole) – Binary black hole parameters

  • blackholes_pro (AGNBlackHole) – Prograde black holes

  • blackholes_merged (AGNMergedBlackHole) – Merged black holes

  • bh_binary_id_num_merger (np.ndarray) – Array of BH ID numbers to be merged

  • smbh_mass (float) – Mass [Msun] of SMBH

  • flag_use_surrogate (int) – Flag to use surrogate model for kick calculations

  • flag_use_spin_check (int) – Flag to apply spin_check filter to spin results

  • disk_aspect_ratio (function) – Disk aspect ratio at specified rg

  • disk_density (function) – Disk density at specified rg

  • time_passed (float) – Current timestep [yr] in disk

  • galaxy (int) – Current galaxy iteration

mcfacts.physics.binary.merge.merge_blackholes_precession(mass_1, mass_2, chi_1, chi_2, theta1, theta2, bin_sep_r_g, bin_ecc, smbh_mass)

Use Davide Gerosa’s precession package to calculate merged properties

https://pure-oai.bham.ac.uk/ws/files/61360327/1605.01067.pdf

Parameters:
Returns:

  • bh_mass_merged (np.ndarray) – Merged mass of remnant

  • bh_spin_merged (np.ndarray) – spin magnitudes of merged remnant

  • bh_v_kick (np.ndarray) – Kick velocity of merged remnant (km/s)

mcfacts.physics.binary.merge.merged_mass(masses_1, masses_2, spins_1, spins_2, spin_angles_1, spin_angles_2)

Calculates the final mass of a merged binary.

Using approximations from Tichy & Maronetti (2008) where

\[m_{\rm final}=(M_1+M_2)[1.0-0.2\nu-0.208\nu^2(a_1+a_2)]\]

where \(\nu\) is the symmetric mass ratio or \(\nu=q/((1+q)^2)\) and \(q=M_2/M_1\) with \(M_2<M_1\)

Parameters:
Returns:

merged_masses – Final mass [M_sun] of merger remnant with float type

Return type:

numpy.ndarray

mcfacts.physics.binary.merge.merged_orb_ecc(bin_orbs_a, v_kicks, smbh_mass)

Calculates orbital eccentricity of a merged binary.

Parameters:
  • bin_orbs_a (numpy.ndarray) – Location of binary [r_{g,SMBH}] wrt to the SMBH with float type

  • v_kicks (numpy.ndarray) – Kick velocity [km/s] with float type

  • smbh_mass (float) – Mass [Msun] of the SMBH

Returns:

merged_ecc – Orbital eccentricity of merged binary with float type

Return type:

numpy.ndarray

mcfacts.physics.binary.merge.merged_spin(masses_1, masses_2, spins_1, spins_2, spin_angles_1, spin_angles_2)

Calculates the spin magnitude of a merged binary.

Only depends on \(M_1,M_2,a_1,a_2\) and the binary ang mom around its center of mass. Using approximations from Tichy & Maronetti (2008)

\[a_{\rm final}=0.686(5.04\nu-4.16\nu^2) +0.4[a_1/(0.632+1/q)^2+ a_2/(0.632+q)^2]\]

where \(q=M_2/M_1\) and \(nu=q/((1+q)^2)\).

Parameters:
  • masses_1 (numpy.ndarray) – Mass [M_sun] of object 1 with float type

  • masses_2 (numpy.ndarray) – Mass [M_sun] of object 2 with float type

  • spins_1 (numpy.ndarray) – Spin magnitude [unitless] of object 1 with float type

  • spins_2 (numpy.ndarray) – Spin magnitude [unitless] of object 2 with float type

  • spin_angles_1 (numpy.ndarray) – Spin angle of m1 (wrt disk angular momentum) in radians with float type

  • spin_angles_2 (numpy.nbdarray) – Spin angle of m2 (wrt disk angular momentum) in radians with float type

Returns:

merged_spins – Final spin magnitude [unitless] of merger remnant with float type

Return type:

numpy array

mcfacts.physics.binary.merge.normalize_tgw(smbh_mass, inner_disk_outer_radius)

Normalizes Gravitational wave timescale.

Calculate the normalization for timescale of a merger (in s) due to GW emission. From Peters (1964):

\[t_{\rm gw} \approx \frac{5}{256} \frac{c^5}{G^3} \frac{a_b^4}{M_b^2\mu_b}\]

assuming eccentricity \(e=0.0\).

For \(a_b\) in units of \(r_g=GM_{\rm SMBH}/c^2\) we find

\[t_{\rm gw}=\frac{5}{256} \frac{G}{c^3} \left(\frac{a_b}{r_g}\right)^{4} \frac{M_s^4}{M_b^2\mu_b}\]

Put bin_mass_ref in units of \(10\,M_\odot\) (is a reference mass). reduced_mass in units of \(2.5\,M_\odot\).

Parameters:
  • smbh_mass (float) – Mass [M_sun] of the SMBH

  • inner_disk_outer_radius (float) – Outer radius of the inner disk [r_g]

Returns:

time_gw_normalization – Normalization to gravitational wave timescale [s]

Return type:

float

mcfacts.physics.binary.merge.spin_check(gen_1, gen_2, spin_merged)

Since the Tichy and Marronetti ‘08 perscription generates spin values outside of the expected range for higher mass ratio objects this file checks spin values after merger and if the magnitude is too low, this function resets it to a random distribution between a set range in order to generate results similiar to that of the NRsurrogate model.

Parameters:
  • gen_1 (numpy.ndarray) – generation of m1 (before merger) (1=natal BH that has never been in a prior merger)

  • gen_2 (numpy.darray) – generation of m2 (before merger) (1=natal BH that has never been in a prior merger)

  • spin_merged (numpy.darray) – Final spin magnitude [unitless] of merger remnant with float type

Returns:

merged_spins – Final spin magnitude [unitless] of merger remnant with float type

Return type:

numpy array