Source code for lenstronomy.Cosmo.background
__author__ = "sibirrer"
import numpy as np
import lenstronomy.Util.constants as const
from lenstronomy.Cosmo.cosmo_interp import CosmoInterp
__all__ = ["Background"]
[docs]
class Background(object):
"""Class to compute cosmological distances."""
[docs]
def __init__(self, cosmo=None, interp=False, **kwargs_interp):
"""
:param cosmo: instance of astropy.cosmology
:param interp: boolean, if True, uses interpolated cosmology to evaluate specific redshifts
:param kwargs_interp: keyword arguments of CosmoInterp specifying the interpolation interval and maximum
redshift
:return: Background class with instance of astropy.cosmology
"""
if cosmo is None:
from astropy.cosmology import default_cosmology
cosmo = default_cosmology.get()
if interp:
self.cosmo = CosmoInterp(cosmo, **kwargs_interp)
else:
self.cosmo = cosmo
[docs]
@staticmethod
def a_z(z):
"""Returns scale factor (a_0 = 1) for given redshift.
:param z: redshift
:return: scale factor
"""
return 1.0 / (1 + z)
[docs]
def d_xy(self, z_observer, z_source):
"""
:param z_observer: observer redshift
:param z_source: source redshift
:return: angular diameter distance in units of Mpc
"""
D_xy = self.cosmo.angular_diameter_distance_z1z2(z_observer, z_source)
return D_xy.value
[docs]
def ddt(self, z_lens, z_source):
"""Time-delay distance.
:param z_lens: redshift of lens
:param z_source: redshift of source
:return: time-delay distance in units of proper Mpc
"""
return (
self.d_xy(0, z_lens)
* self.d_xy(0, z_source)
/ self.d_xy(z_lens, z_source)
* (1 + z_lens)
)
[docs]
def T_xy(self, z_observer, z_source):
"""
:param z_observer: observer
:param z_source: source
:return: transverse comoving distance in units of Mpc
"""
D_xy = self.d_xy(z_observer, z_source)
T_xy = D_xy * (1 + z_source)
return T_xy
@property
def rho_crit(self):
"""Critical density.
:return: value in M_sol/Mpc^3
"""
h = self.cosmo.H(0).value / 100.0
return 3 * h**2 / (8 * np.pi * const.G) * 10**10 * const.Mpc / const.M_sun