Effective spin models

We explore features in the binary black hole effective aligned spin distribution using several different models.

Gaussian gaussian-image

Our simplest approach is just to model the BBH \(\chi_\mathrm{eff}\) distribution as a Gaussian:

\[p(\chi_\mathrm{eff}) = N(\chi_\mathrm{eff}|\mu_\mathrm{eff},\sigma_\mathrm{eff}) \qquad (-1\leq\chi_\mathrm{eff}\leq 1)\]

This model can be rerun as follows:

$ conda activate gwtc3-spin-studes
$ cd code/numpyroCode/
$ python run_gaussian.py

The output will be a .cdf file storing the resulting posterior samples and diagnostic information:

data/effective_spin_gaussian.cdf

Note

A notebook that demonstrates how to load in, inspect, and manipulate this output file can be found here

GaussianSpike gaussian-spike-image

To explore the possible presence of a zero-spin subpopulation, we extend the Gaussian model with a narrow (possibly delta-function) “spike” at \(\chi_\mathrm{eff}=0\):

\[p(\chi_\mathrm{eff}) = \zeta_\mathrm{spike} N(\chi_\mathrm{eff}|0,\epsilon_\mathrm{spike}) + (1 - \zeta_\mathrm{spike}) N(\chi_\mathrm{eff}|\mu_\mathrm{eff},\sigma_\mathrm{eff}) \qquad (-1\leq\chi_\mathrm{eff}\leq 1)\]

In most cases, we will take \(\epsilon_\mathrm{spike}=0\) and let the “spike” population become a true delta function (see Appendix D of our paper text to learn about the KDE trick that allows us to evaluate the delta function’s likelihood). Occasionally, though, we will let \(\epsilon\) be non-zero in order to check the appropriate convergence of our results; see Fig. 10.

This model can be rerun as follows:

$ conda activate gwtc3-spin-studes
$ cd code/numpyroCode/
$ python run_gaussian_spike.py

The output will be a .cdf file storing the resulting posterior samples and diagnostic information:

output/effective_spin_gaussian_spike.cdf

Note

A notebook that demonstrates how to load in, inspect, and manipulate this output file can be found here

We include an analogous script, run_gaussian_spike_gwtc2.py, to run the GaussianSpike model over only those events included in GWTC-2, in order to better compare with past results.

DoubleGaussian double-gaussian-image

\[p(\chi_\mathrm{eff}) = \zeta_a N(\chi_\mathrm{eff}|\mu_{\mathrm{eff},a}\sigma_{\mathrm{eff},a}) + (1-\zeta_a)N(\chi_\mathrm{eff}|\mu_{\mathrm{eff},b},\sigma_{\mathrm{eff},b}) \qquad (-1\leq\chi_\mathrm{eff}\leq 1)\]

This model can be rerun as follows:

$ conda activate gwtc3-spin-studes
$ cd code/numpyroCode/
$ python run_double_gaussian.py

The output will be a .cdf file storing the resulting posterior samples and diagnostic information:

data/effective_spin_doubleGaussians.cdf

Note

A notebook that demonstrates how to load in, inspect, and manipulate this output file can be found here.

numpyroCode.likelihoods.gaussian(sampleDict, injectionDict, mMin)[source]

Implementation of a Gaussian effective spin distribution for inference within numpyro

Parameters
  • sampleDict (dict) – Precomputed dictionary containing posterior samples for each event in our catalog

  • injectionDict (dict) – Precomputed dictionary containing successfully recovered injections

  • mMin (float) – Minimum black hole mass

numpyroCode.likelihoods.doubleGaussian(sampleDict, injectionDict, mMin)[source]

Implementation of an effective spin distribution described as a mixture of two Gaussians, for inference within numpyro

Parameters
  • sampleDict (dict) – Precomputed dictionary containing posterior samples for each event in our catalog

  • injectionDict (dict) – Precomputed dictionary containing successfully recovered injections

  • mMin (float) – Minimum black hole mass

numpyroCode.likelihoods.gaussianSpike(sampleDict, injectionDict, mMin, sig_eps)[source]

Implementation of a Gaussian and zero-spin spike effective spin distribution for inference within numpyro. As this implementation makes use of KDEs over posterior samples and found injections, the “spike width” parameter sig_eps can be zero.

Parameters
  • sampleDict (dict) – Precomputed dictionary containing posterior samples for each event in our catalog

  • injectionDict (dict) – Precomputed dictionary containing successfully recovered injections

  • mMin (float) – Minimum black hole mass

  • sig_eps (float) – Width of “spike” mixture component.

numpyroCode.likelihoods.gaussianSpike_MonteCarloAvg(sampleDict, injectionDict, mMin, sig_eps)[source]

Implementation of a Gaussian and zero-spin spike effective spin distribution for inference within numpyro. Relies on standard Monte Carlo averaging of posterior samples and found injections, hence the “spike width” parameter sig_eps must be non-zero.

Parameters
  • sampleDict (dict) – Precomputed dictionary containing posterior samples for each event in our catalog

  • injectionDict (dict) – Precomputed dictionary containing successfully recovered injections

  • mMin (float) – Minimum black hole mass

  • sig_eps (float) – Width of “spike” mixture component.