Source code for clmm.utils.beta_lens

"""General utility functions that are used in multiple modules"""
import numpy as np
from scipy.integrate import quad

from ..redshift import distributions as zdist


[docs] def compute_beta(z_src, z_cl, cosmo): r"""Geometric lensing efficicency .. math:: \beta = max(0, D_{a,\ ls}/D_{a,\ s}) Eq.2 in https://arxiv.org/pdf/1611.03866.pdf Parameters ---------- z_src : float, array_like Source galaxy redshift z_cl: float Galaxy cluster redshift cosmo: clmm.Cosmology CLMM Cosmology object Returns ------- float, array Geometric lensing efficicency """ # pylint: disable-msg=protected-access _z_src = np.array(z_src) return ( np.heaviside(_z_src - z_cl, 0) * cosmo._eval_da_z1z2(z_cl, _z_src) / cosmo._eval_da(_z_src) )
[docs] def compute_beta_s(z_src, z_cl, z_inf, cosmo): r"""Geometric lensing efficicency ratio .. math:: \beta_s = \beta(z_{src})/\beta(z_{inf}) Parameters ---------- z_src : float, array_like Source galaxy redshift z_cl: float Galaxy cluster redshift z_inf: float Redshift at infinity cosmo: clmm.Cosmology CLMM Cosmology object Returns ------- numpy array Geometric lensing efficicency ratio """ beta_s = compute_beta(z_src, z_cl, cosmo) / compute_beta(z_inf, z_cl, cosmo) return beta_s
[docs] def compute_beta_s_func(z_src, z_cl, z_inf, cosmo, func, *args, **kwargs): r"""Geometric lensing efficicency ratio times a value of a function .. math:: \beta_{s}\times \text{func} = \beta_s(z_{src}, z_{cl}, z_{inf}) \times\text{func}(*args,\ **kwargs) Parameters ---------- z_src : array_like, float, function Information on the background source galaxy redshift(s). Value required depends on `z_src_info` (see below). z_cl: float Galaxy cluster redshift z_inf: float Redshift at infinity cosmo: clmm.Cosmology CLMM Cosmology object func: callable A scalar function *args: positional arguments args to be passed to `func` **kwargs: keyword arguments kwargs to be passed to `func` Returns ------- numpy array Geometric lensing efficicency ratio for each source """ beta_s = compute_beta(z_src, z_cl, cosmo) / compute_beta(z_inf, z_cl, cosmo) beta_s_func = beta_s * func(*args, **kwargs) return beta_s_func
[docs] def compute_beta_s_mean_from_distribution( z_cl, z_inf, cosmo, zmax=10.0, delta_z_cut=0.1, zmin=None, z_distrib_func=None ): r"""Mean value of the geometric lensing efficicency .. math:: \left<\beta_s\right> = \frac{\int_{z = z_{min}}^{z_{max}}\beta_s(z)N(z)} {\int_{z = z_{min}}^{z_{max}}N(z)} Parameters ---------- z_cl: float Galaxy cluster redshift z_inf: float Redshift at infinity cosmo: clmm.Cosmology CLMM Cosmology object zmax: float, optional Maximum redshift to be set as the source of the galaxy when performing the sum. Default: 10 delta_z_cut: float, optional Redshift interval to be summed with :math:`z_{cl}` to return :math:`z_{min}`. This feature is not used if :math:`z_{min}` is provided by the user. Default: 0.1 zmin: float, None, optional Minimum redshift to be set as the source of the galaxy when performing the sum. Default: None z_distrib_func: one-parameter function, optional Redshift distribution function. Default is Chang et al (2013) distribution function. Returns ------- float Mean value of the geometric lensing efficicency """ if z_distrib_func is None: z_distrib_func = zdist.chang2013 def integrand(z_i): return compute_beta_s(z_i, z_cl, z_inf, cosmo) * z_distrib_func(z_i) if zmin is None: zmin = z_cl + delta_z_cut return quad(integrand, zmin, zmax)[0] / quad(z_distrib_func, zmin, zmax)[0]
[docs] def compute_beta_s_square_mean_from_distribution( z_cl, z_inf, cosmo, zmax=10.0, delta_z_cut=0.1, zmin=None, z_distrib_func=None ): r"""Mean square value of the geometric lensing efficicency ratio .. math:: \left<\beta_s^2\right> =\frac{\int_{z = z_{min}}^{z_{max}}\beta_s^2(z)N(z)} {\int_{z = z_{min}}^{z_{max}}N(z)} Parameters ---------- z_cl: float Galaxy cluster redshift z_inf: float Redshift at infinity cosmo: clmm.Cosmology CLMM Cosmology object zmax: float Minimum redshift to be set as the source of the galaxy\ when performing the sum. delta_z_cut: float Redshift interval to be summed with $z_cl$ to return\ $zmin$. This feature is not used if $z_min$ is provided by the user. zmin: float, None, optional Minimum redshift to be set as the source of the galaxy when performing the sum. Default: None z_distrib_func: one-parameter function, optional Redshift distribution function. Default is Chang et al (2013) distribution function. Returns ------- float Mean square value of the geometric lensing efficicency ratio. """ if z_distrib_func is None: z_distrib_func = zdist.chang2013 def integrand(z_i): return compute_beta_s(z_i, z_cl, z_inf, cosmo) ** 2 * z_distrib_func(z_i) if zmin is None: zmin = z_cl + delta_z_cut return quad(integrand, zmin, zmax)[0] / quad(z_distrib_func, zmin, zmax)[0]
[docs] def compute_beta_s_mean_from_weights(z_src, z_cl, z_inf, cosmo, shape_weights): r"""Mean square value of the geometric lensing efficicency ratio .. math:: \left<\beta_s\right> =\frac{\sum_i \beta_s(z_i)w_i} {\sum_i w_i} Parameters ---------- z_src: float, array_like Invididual source galaxies redshift. z_cl: float Galaxy cluster redshift. z_inf: float Redshift at infinity. cosmo: clmm.Cosmology CLMM Cosmology object shape_weights: float, array_like Individual source galaxies shape weights.\ If not None, the function uses Eq.(13) from\ https://arxiv.org/pdf/1611.03866.pdf with evenly distributed\ weights summing to one. Returns ------- float Mean value of the geometric lensing efficicency ratio. """ _z_src = np.array(z_src) if shape_weights is None: _shape_weights = np.ones_like(_z_src) else: _shape_weights = np.array(shape_weights) beta_s = compute_beta_s(_z_src, z_cl, z_inf, cosmo) return (_shape_weights * beta_s).sum() / _shape_weights.sum()
[docs] def compute_beta_s_square_mean_from_weights( z_src, z_cl, z_inf, cosmo, shape_weights, ): r"""Mean square value of the geometric lensing efficicency ratio .. math:: \left<\beta_s^2\right> =\frac{\sum_i \beta_s^2(z_i)w_i} {\sum_i w_i} Parameters ---------- z_src: float, array_like Invididual source galaxies redshift. z_cl: float Galaxy cluster redshift. z_inf: float Redshift at infinity. cosmo: clmm.Cosmology CLMM Cosmology object shape_weights: float, array_like Individual source galaxies shape weights. Returns ------- float Mean square value of the geometric lensing efficicency ratio. """ _z_src = np.array(z_src) if shape_weights is None: _shape_weights = np.ones_like(_z_src) else: _shape_weights = np.array(shape_weights) beta_s = compute_beta_s(_z_src, z_cl, z_inf, cosmo) return (_shape_weights * beta_s**2).sum() / _shape_weights.sum()