Calculating Remnant Fits
PESummary has multiple methods for calculating the remnant properties of a binary. These include averaging multiple fits tuned to numerical relativity, and using waveform specific fitting functions. Below we go into more details about how each of these can be used with the summarypages executable and/or the convert function directly.
Average NR fits
By default, the average of the fits tuned to numerical relativity will always be calculated for you. We input the spins defined at a given reference frequency and return the final_mass_non_evolved, final_spin_non_evolved among other quantities. However, we also offer the ability to evolve the spins up to the ISCO frequency and input these to the fitting functions. The returned posterior distributions are then final_mass, final_spin among others (note the lack of non_evolved in the parameter name) and will consequently be more accurate than the corresponding non_evolved quantities. The evolved spin fits can be achieve with the following command summarypages executable:
$ summarypages --webdir ./evolved_spin --samples example.hdf5 \
--evolve_spins --gw
or:
>>> from pesummary.gw.conversions import convert
>>> data = convert(data_table, evolve_spins='ISCO')
This then calls the following functions:
- pesummary.gw.conversions.nrutils.bbh_final_mass_average(*args, fits=['UIB2016', 'Healyetal'], return_fits_used=False)[source]
Return the final mass averaged across multiple fits
- Parameters:
mass_1 (float/np.ndarray) – float/array of masses for the primary object
mass_2 (float/np.ndarray) – float/array of masses for the secondary object
spin_1z (float/np.ndarray) – float/array of primary spin aligned with the orbital angular momentum
spin_2z (float/np.ndarray) – float/array of secondary spin aligned with the orbital angular momentum
fits (list, optional) – list of fits that you wish to use
return_fits_used (Bool, optional) – if True, return the fits that were used to calculate the average
- pesummary.gw.conversions.nrutils.bbh_final_spin_average_precessing(*args, fits=['UIB2016', 'Healyetal', 'HBR2016'], return_fits_used=False)[source]
Return the final spin averaged across multiple fits
- Parameters:
mass_1 (float/np.ndarray) – float/array of masses for the primary object
mass_2 (float/np.ndarray) – float/array of masses for the secondary object
a_1 (float/np.ndarray) – float/array of primary spin magnitudes
a_2 (float/np.ndarray) – float/array of secondary spin magnitudes
tilt_1 (float/np.ndarray) – float/array of primary spin tilt angle from the orbital angular momentum
tilt_2 (float/np.ndarray) – float/array of secondary spin tilt angle from the orbital angular momentum
phi_12 (float/np.ndarray) – float/array of samples for the angle between the in-plane spin components
fits (list, optional) – list of fits that you wish to use
return_fits_used (Bool, optional) – if True, return the fits that were used to calculate the average
- pesummary.gw.conversions.nrutils.bbh_final_spin_average_non_precessing(*args, fits=['UIB2016', 'Healyetal', 'HBR2016'], return_fits_used=False)[source]
Return the final spin averaged across multiple non-precessing fits
- Parameters:
mass_1 (float/np.ndarray) – float/array of masses for the primary object
mass_2 (float/np.ndarray) – float/array of masses for the secondary object
spin_1z (float/np.ndarray) – float/array of primary spin aligned with the orbital angular momentum
spin_2z (float/np.ndarray) – float/array of secondary spin aligned with the orbital angular momentum
fits (list, optional) – list of fits that you wish to use
return_fits_used (Bool, optional) – if True, return the fits that were used to calculate the average
- pesummary.gw.conversions.nrutils.bbh_peak_luminosity_average(*args, fits=['UIB2016', 'Healyetal'], return_fits_used=False)[source]
Return the peak luminosity (in units of 10^56 ergs/s) averaged across multiple fits.
- Parameters:
mass_1 (float/np.ndarray) – float/array of masses for the primary object
mass_2 (float/np.ndarray) – float/array of masses for the secondary object
spin_1z (float/np.ndarray) – float/array of primary spin aligned with the orbital angular momentum
spin_2z (float/np.ndarray) – float/array of secondary spin aligned with the orbital angular momentum
fits (list, optional) – list of fits that you wish to use
return_fits_used (Bool, optional) – if True, return the fits that were used to calculate the average
NRSurrogate fits
Alternatively, we may use an NRSurrogate remnant fit to evolve the spins and calculate the remnant properties. This can be done with the following summarypages executable:
$ summarypages --webdir ./NRSurrogate --samples example.hdf5 \
--NRSur_fits --gw
By default, the NRSur7dq4Remnant is used. The user may choose their own NRSurrogate remnant model by passing it from the command line:
$ summarypages --webdir ./NRSurrogate --samples example.hdf5 \
--NRSur_fits NRSur3dq8Remnant --gw
Using the convert function:
>>> data = convert(data_table, NRSur_fits='NRSur7dq4Remnant')
This then calls the following function:
- pesummary.gw.conversions.nrutils.NRSur_fit(mass_1, mass_2, a_1, a_2, tilt_1, tilt_2, phi_12, phi_jl, theta_jn, phi_ref, f_low=20.0, f_ref=20.0, model='NRSur7dq4Remnant', fits=['final_mass', 'final_spin', 'final_kick'], return_fits_used=False, approximant=None, **kwargs)[source]
Return the NR fits based on a chosen NRSurrogate model
- Parameters:
mass_1 (float/np.ndarray) – float/array of masses for the primary object. In units of solar mass
mass_2 (float/np.ndarray) – float/array of masses for the secondary object. In units of solar mass
a_1 (float/np.ndarray) – float/array of primary spin magnitudes
a_2 (float/np.ndarray) – float/array of secondary spin magnitudes
tilt_1 (float/np.ndarray) – float/array of primary spin tilt angle from the orbital angular momentum
tilt_2 (float/np.ndarray) – float/array of secondary spin tilt angle from the orbital angular momentum
phi_12 (float/np.ndarray) – float/array of samples for the angle between the in-plane spin components
phi_jl (float/np.ndarray) – float/array of samples for the azimuthal angle of the orbital angular momentum around the total orbital angular momentum
theta_jn (float/np.ndarray) – float/array of samples for the angle between the total angular momentum and the line of sight
phi_ref (float/np.ndarray) – float/array of samples for the reference phase used in the analysis
f_low (float) – the low frequency cut-off used in the analysis
f_ref (float/np.ndarray, optional) – the reference frequency used in the analysis
model (str, optional) – NRSurrogate model that you wish to use for the calculation
fits (list, optional) – list of fits that you wish to evaluate
approximant (str, optional) – The approximant that was used to generate the posterior samples
kwargs (dict, optional) – optional kwargs that are passed directly to the lalsimulation.nrfits.eval_fits.eval_nrfit function
A list of available NRSurrogate remnant models can be found here.
Note
This will require the LAL_DATA_PATH to be set correctly. This will require cloning https://git.ligo.org/lscsoft/lalsuite-extra and pointing to lalsuite-extra/data/lalsimulation:
export LAL_DATA_PATH=~/lalsuite-extra/data/lalsimulation
Waveform specific waveform fits
Finally specific waveform approximants can be used to evaluate the remnant fits. This means that the functions used when evaluating the waveform are directly used for the posterior samples. For example, we can use the SEOBNRv4PHM approximant to calculate the remnant properties with the following summarypages executable:
$ summarypages --webdir ./waveform --samples example.hdf5 \
--waveform_fits --gw --approximant SEOBNRv4PHM
Sometimes, it can take a while to evaluate these fits for computationally expensive waveform models. Therefore we offer parallelisation to reduce wall time. This can be done with the following:
$ summarypages --webdir ./waveform --samples example.hdf5 \
--waveform_fits --gw --approximant SEOBNRv4PHM \
--multi_process 20
f_low is required for this conversion. If f_low cannot be extracted from the result file, the code will return a ValueError and ask for an f_low to be passed from the command line. This can be done with the following:
$ summarypages --webdir ./waveform --samples example.hdf5 \
--waveform_fits --gw --approximant SEOBNRv4PHM \
--multi_process 20 --f_low 3.0
Using the convert function:
>>> data = convert(data_table, waveform_fits=True, approximant="SEOBNRv4PHM")
This then calls the following function: