Source code for pyccl.halos.concentration.prada12

__all__ = ("ConcentrationPrada12",)

import numpy as np

from . import Concentration


[docs]class ConcentrationPrada12(Concentration): """Concentration-mass relation by `Prada et al. 2012 <https://arXiv.org/abs/1104.5130>`_. This parametrization is only valid for S.O. masses with :math:`\\Delta = 200` times the critical density. Args: mass_def (:class:`~pyccl.halos.massdef.MassDef` or :obj:`str`): a mass definition object ora name string. """ name = 'Prada12' def __init__(self, *, mass_def="200c"): super().__init__(mass_def=mass_def) def _check_mass_def_strict(self, mass_def): return mass_def.name != "200c" def _setup(self): self.c0 = 3.681 self.c1 = 5.033 self.al = 6.948 self.x0 = 0.424 self.i0 = 1.047 self.i1 = 1.646 self.be = 7.386 self.x1 = 0.526 self.cnorm = 1. / self._cmin(1.393) self.inorm = 1. / self._imin(1.393) def _form(self, x, x0, v0, v1, v2): # form factor for `cmin` and `imin` return v0 + (v1 - v0) * (np.arctan(v2 * (x - x0)) / np.pi + 0.5) def _cmin(self, x): return self._form(x, x0=self.x0, v0=self.c0, v1=self.c1, v2=self.al) def _imin(self, x): return self._form(x, x0=self.x1, v0=self.i0, v1=self.i1, v2=self.be) def _concentration(self, cosmo, M, a): sig = cosmo.sigmaM(M, a) x = a * (cosmo["Omega_l"] / cosmo["Omega_m"])**(1. / 3.) B0 = self._cmin(x) * self.cnorm B1 = self._imin(x) * self.inorm sig_p = B1 * sig Cc = 2.881 * ((sig_p / 1.257)**1.022 + 1) * np.exp(0.060 / sig_p**2) return B0 * Cc