Skip to content
Snippets Groups Projects

Add function to convert to a LI prior

Merged Gregory Ashton requested to merge add-prior-conversion into master
+ 55
0
import os
import copy
import numpy as np
from scipy.interpolate import InterpolatedUnivariateSpline
@@ -19,6 +20,60 @@ except ImportError:
" not be able to use some of the prebuilt functions.")
class BilbyPriorConversionError(Exception):
pass
def convert_to_flat_in_component_mass_prior(result, fraction=0.25):
""" Converts samples flat in chirp-mass and mass-ratio to flat in component mass
Parameters
----------
result: bilby.core.result.Result
The output result complete with priors and posteriors
fraction: float [0, 1]
The fraction of samples to draw (default=0.25). Note, if too high a
fraction of samples are draw, the reweighting will not be applied in
effect.
"""
if getattr(result, "priors") is not None:
if isinstance(getattr(result.priors, "chirp_mass", None), Uniform) is False:
BilbyPriorConversionError("chirp mass prior should be Uniform")
if isinstance(getattr(result.priors, "mass_ratio", None), Uniform) is False:
BilbyPriorConversionError("mass_ratio prior should be Uniform")
if isinstance(getattr(result.priors, "mass_1", None), Constraint):
BilbyPriorConversionError("mass_1 prior should be a Constraint")
if isinstance(getattr(result.priors, "mass_2", None), Constraint):
BilbyPriorConversionError("mass_2 prior should be a Constraint")
else:
BilbyPriorConversionError("No prior in the result: unable to convert")
result = copy.copy(result)
priors = result.priors
posterior = result.posterior
logger.info("Resampling posterior to flat-in-component mass")
priors["chirp_mass"] = Constraint(
priors["chirp_mass"].minimum, priors["chirp_mass"].maximum,
"chirp_mass", latex_label=priors["chirp_mass"].latex_label)
priors["mass_ratio"] = Constraint(
priors["mass_ratio"].minimum, priors["mass_ratio"].maximum,
"mass_ratio", latex_label=priors["mass_ratio"].latex_label)
priors["mass_1"] = Uniform(
priors["mass_1"].minimum, priors["mass_1"].maximum, "mass_1",
latex_label=priors["mass_1"].latex_label)
priors["mass_1"] = Uniform(
priors["mass_2"].minimum, priors["mass_2"].maximum, "mass_2",
latex_label=priors["mass_2"].latex_label)
weights = posterior.mass_1 ** 2 / posterior.chirp_mass
result.posterior = posterior.sample(frac=fraction, weights=weights)
result.meta_data["reweighted_to_flat_in_component_mass"] = True
return result
class Cosmological(Interped):
@property
Loading