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

Merge branch 'add-safety-for-time-reconstruction' into 'master'

Add a safety check to the time reconstruction

See merge request !633
parents 944db95a 3e9ddb5e
No related branches found
No related tags found
1 merge request!633Add a safety check to the time reconstruction
Pipeline #91275 passed
......@@ -455,3 +455,7 @@ class JointLikelihood(Likelihood):
def noise_log_likelihood(self):
""" This is just the sum of the noise likelihoods of all parts of the joint likelihood"""
return sum([likelihood.noise_log_likelihood() for likelihood in self.likelihoods])
class MarginalizedLikelihoodReconstructionError(Exception):
pass
......@@ -5,6 +5,7 @@ from tqdm import tqdm
import numpy as np
from pandas import DataFrame
from ..core.likelihood import MarginalizedLikelihoodReconstructionError
from ..core.utils import logger, solar_mass
from ..core.prior import DeltaFunction
from .utils import lalsim_SimInspiralTransformPrecessingNewInitialConditions
......@@ -665,11 +666,20 @@ def _generate_all_cbc_parameters(sample, defaults, base_conversion,
output_sample = fill_from_fixed_priors(output_sample, priors)
output_sample, _ = base_conversion(output_sample)
if likelihood is not None:
if (hasattr(likelihood, 'phase_marginalization') or
hasattr(likelihood, 'time_marginalization') or
hasattr(likelihood, 'distance_marginalization')):
generate_posterior_samples_from_marginalized_likelihood(
samples=output_sample, likelihood=likelihood)
if (
hasattr(likelihood, 'phase_marginalization') or
hasattr(likelihood, 'time_marginalization') or
hasattr(likelihood, 'distance_marginalization')
):
try:
generate_posterior_samples_from_marginalized_likelihood(
samples=output_sample, likelihood=likelihood)
except MarginalizedLikelihoodReconstructionError as e:
logger.warning(
"Marginalised parameter reconstruction failed with message "
"{}. Some parameters may not have the intended "
"interpretation.".format(e)
)
if priors is not None:
for par, name in zip(
['distance', 'phase', 'time'],
......
......@@ -15,7 +15,7 @@ except ImportError:
from scipy.misc import logsumexp
from scipy.special import i0e
from ..core import likelihood
from ..core.likelihood import Likelihood, MarginalizedLikelihoodReconstructionError
from ..core.utils import BilbyJsonEncoder, decode_bilby_json
from ..core.utils import (
logger, UnsortedInterp2d, create_frequency_series, create_time_series,
......@@ -29,7 +29,7 @@ from .waveform_generator import WaveformGenerator
from collections import namedtuple
class GravitationalWaveTransient(likelihood.Likelihood):
class GravitationalWaveTransient(Likelihood):
""" A gravitational-wave transient likelihood object
This is the usual likelihood object to use for transient gravitational
......@@ -395,8 +395,14 @@ class GravitationalWaveTransient(likelihood.Likelihood):
time_post = time_post[keep]
times = times[keep]
new_time = Interped(times, time_post).sample()
return new_time
if len(times) > 1:
new_time = Interped(times, time_post).sample()
return new_time
else:
raise MarginalizedLikelihoodReconstructionError(
"Time posterior reconstruction failed, at least two samples "
"are required."
)
def generate_distance_sample_from_marginalized_likelihood(
self, signal_polarizations=None):
......@@ -712,7 +718,7 @@ class GravitationalWaveTransient(likelihood.Likelihood):
lal_version=self.lal_version)
class BasicGravitationalWaveTransient(likelihood.Likelihood):
class BasicGravitationalWaveTransient(Likelihood):
def __init__(self, interferometers, waveform_generator):
"""
......
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