Source code for hierarc.Likelihood.SneLikelihood.sne_likelihood
import numpy as np
from hierarc.Likelihood.SneLikelihood.sne_likelihood_from_file import (
SneLikelihoodFromFile,
)
from hierarc.Likelihood.SneLikelihood.sne_likelihood_custom import CustomSneLikelihood
from hierarc.Likelihood.SneLikelihood.sne_pantheon_plus import PantheonPlusData
[docs]
class SneLikelihood(object):
"""Supernovae likelihood This class supports custom likelihoods as well as
likelihoods from the Pantheon sample from file."""
def __init__(self, sample_name="CUSTOM", **kwargs_sne_likelihood):
"""
:param sample_name: string, either 'CUSTOM' or a specific name supported by SneLikelihoodFromFile() class
:param kwargs_sne_likelihood: keyword arguments to initiate likelihood class
"""
if sample_name == "CUSTOM":
self._likelihood = CustomSneLikelihood(**kwargs_sne_likelihood)
elif sample_name == "PantheonPlus":
from hierarc.Likelihood.SneLikelihood.sne_pantheon_plus import (
PantheonPlusData,
)
data = PantheonPlusData()
mag_mean = data.m_obs
cov_mag = data.cov_mag_b
zhel = data.zHEL
zcmb = data.zCMB
self._likelihood = CustomSneLikelihood(
mag_mean, cov_mag, zhel, zcmb, no_intrinsic_scatter=True
)
else:
self._likelihood = SneLikelihoodFromFile(
sample_name=sample_name, **kwargs_sne_likelihood
)
self.zhel = self._likelihood.zhel
self.zcmb = self._likelihood.zcmb
[docs]
def log_likelihood(self, cosmo, apparent_m_z=None, sigma_m_z=None, z_anchor=0.1):
"""
:param cosmo: instance of a class to compute angular diameter distances on arrays
:param apparent_m_z: mean apparent magnitude of SN Ia at z=z_anchor (optional)
:param z_anchor: redshift where definition of apparent_m_z is set (only applicable when apparent_m_z != None)
:param sigma_m_z: 1-sigma scatter in magnitude in the intrinsic SNe brightness distribution not accounted-for
by the covariance matrix
:return: log likelihood of the data given the specified cosmology
"""
angular_diameter_distances = cosmo.angular_diameter_distance(self.zcmb).value
lum_dists = 5 * np.log10(
(1 + self.zhel) * (1 + self.zcmb) * angular_diameter_distances
)
ang_dist_anchor = cosmo.angular_diameter_distance(z_anchor).value
lum_dist_anchor = 5 * np.log10(
(1 + z_anchor) * (1 + z_anchor) * ang_dist_anchor
)
return self._likelihood.log_likelihood_lum_dist(
lum_dists - lum_dist_anchor, apparent_m_z, sigma_m_z
)