Skip to content
Snippets Groups Projects
Commit b3c8e741 authored by Gregory Ashton's avatar Gregory Ashton
Browse files

Merge branch '598-marginalized-parameter-reconstruction-broken' into 'master'

Resolve "Marginalized parameter reconstruction broken"

Closes #598

See merge request lscsoft/bilby!1016
parents 08b2a15f a0b9405c
No related branches found
No related tags found
1 merge request!1016Resolve "Marginalized parameter reconstruction broken"
Pipeline #277903 passed
...@@ -244,19 +244,28 @@ def convert_to_lal_binary_black_hole_parameters(parameters): ...@@ -244,19 +244,28 @@ def convert_to_lal_binary_black_hole_parameters(parameters):
converted_parameters[key]) converted_parameters[key])
converted_parameters['cos_tilt_{}'.format(idx)] = \ converted_parameters['cos_tilt_{}'.format(idx)] = \
np.sign(converted_parameters[key]) np.sign(converted_parameters[key])
converted_parameters['phi_jl'] = 0.0
converted_parameters['phi_12'] = 0.0
else: else:
converted_parameters[f"cos_tilt_{idx}"] = ( with np.errstate(invalid="raise"):
converted_parameters[key] / converted_parameters[f"a_{idx}"] try:
) converted_parameters[f"cos_tilt_{idx}"] = (
converted_parameters[key] / converted_parameters[f"a_{idx}"]
)
except (FloatingPointError, ZeroDivisionError):
logger.debug(
"Error in conversion to spherical spin tilt. "
"This is often due to the spin parameters being zero. "
f"Setting cos_tilt_{idx} = 1."
)
converted_parameters[f"cos_tilt_{idx}"] = 1.0
for key in ["phi_jl", "phi_12"]:
if key not in converted_parameters:
converted_parameters[key] = 0.0
for angle in ['tilt_1', 'tilt_2', 'theta_jn']: for angle in ['tilt_1', 'tilt_2', 'theta_jn']:
cos_angle = str('cos_' + angle) cos_angle = str('cos_' + angle)
if cos_angle in converted_parameters.keys(): if cos_angle in converted_parameters.keys():
with np.errstate(invalid="ignore"): converted_parameters[angle] = np.arccos(converted_parameters[cos_angle])
converted_parameters[angle] =\
np.arccos(converted_parameters[cos_angle])
if "delta_phase" in original_keys: if "delta_phase" in original_keys:
with np.errstate(invalid="ignore"): with np.errstate(invalid="ignore"):
...@@ -782,6 +791,7 @@ def _generate_all_cbc_parameters(sample, defaults, base_conversion, ...@@ -782,6 +791,7 @@ def _generate_all_cbc_parameters(sample, defaults, base_conversion,
logger.debug('Assuming {} = {}'.format(key, default)) logger.debug('Assuming {} = {}'.format(key, default))
output_sample = fill_from_fixed_priors(output_sample, priors) output_sample = fill_from_fixed_priors(output_sample, priors)
output_sample, _ = base_conversion(output_sample)
if likelihood is not None: if likelihood is not None:
if ( if (
hasattr(likelihood, 'phase_marginalization') or hasattr(likelihood, 'phase_marginalization') or
...@@ -820,7 +830,6 @@ def _generate_all_cbc_parameters(sample, defaults, base_conversion, ...@@ -820,7 +830,6 @@ def _generate_all_cbc_parameters(sample, defaults, base_conversion,
) )
if likelihood is not None: if likelihood is not None:
compute_snrs(output_sample, likelihood) compute_snrs(output_sample, likelihood)
output_sample, _ = base_conversion(output_sample)
for key, func in zip(["mass", "spin", "source frame"], [ for key, func in zip(["mass", "spin", "source frame"], [
generate_mass_parameters, generate_spin_parameters, generate_mass_parameters, generate_spin_parameters,
generate_source_frame_parameters]): generate_source_frame_parameters]):
......
...@@ -296,6 +296,55 @@ class TestConvertToLALParams(unittest.TestCase): ...@@ -296,6 +296,55 @@ class TestConvertToLALParams(unittest.TestCase):
dict(a_1=a_1, tilt_1=tilt_1, phi_jl=phi_jl, phi_12=phi_12), dict(a_1=a_1, tilt_1=tilt_1, phi_jl=phi_jl, phi_12=phi_12),
) )
def test_bbh_zero_aligned_spin_to_spherical_with_magnitude(self):
"""
Test the the conversion returns the correct tilt angles when zero
aligned spin is passed if the magnitude is also pass.
If the magnitude is zero this returns tilt = 0.
If the magnitude is non-zero this returns tilt = pi.
"""
self.parameters["chi_1"] = 0
self.parameters["chi_2"] = 0
a_1 = 0
self.parameters["a_1"] = a_1
a_2 = 1
self.parameters["a_2"] = a_2
tilt_1 = 0
tilt_2 = np.pi / 2
phi_jl = 0
phi_12 = 0
self.bbh_convert()
self.assertDictEqual(
{
key: self.parameters[key]
for key in ["a_1", "a_2", "tilt_1", "tilt_2", "phi_12", "phi_jl"]
},
dict(a_1=a_1, a_2=a_2, tilt_1=tilt_1, tilt_2=tilt_2, phi_jl=phi_jl, phi_12=phi_12),
)
def test_bbh_zero_aligned_spin_to_spherical_without_magnitude(self):
"""
Test the the conversion returns the correct tilt angles when zero
aligned spin is passed if the magnitude is also pass.
If the magnitude is zero this returns tilt = 0.
If the magnitude is non-zero this returns tilt = pi.
"""
self.parameters["chi_1"] = 0
a_1 = 0
tilt_1 = np.pi / 2
phi_jl = 0
phi_12 = 0
self.bbh_convert()
self.assertDictEqual(
{
key: self.parameters[key]
for key in ["a_1", "tilt_1", "phi_12", "phi_jl"]
},
dict(a_1=a_1, tilt_1=tilt_1, phi_jl=phi_jl, phi_12=phi_12),
)
def test_bbh_cos_angle_to_angle_conversion(self): def test_bbh_cos_angle_to_angle_conversion(self):
self.parameters["cos_tilt_1"] = 1 self.parameters["cos_tilt_1"] = 1
t1 = np.arccos(self.parameters["cos_tilt_1"]) t1 = np.arccos(self.parameters["cos_tilt_1"])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment