Source code for pyccl.halos.hmfunc.watson13

__all__ = ("MassFuncWatson13",)

import numpy as np

from . import MassFunc


[docs]class MassFuncWatson13(MassFunc): """Implements the mass function of `Watson et al. 2013 <https://arxiv.org/abs/1212.0095>`_. This parametrization accepts `fof` and any S.O. masses. Args: mass_def (:class:`~pyccl.halos.massdef.MassDef` or :obj:`str`): a mass definition object, or a name string. mass_def_strict (:obj:`bool`): if ``False``, consistency of the mass definition will be ignored. """ name = 'Watson13' def __init__(self, *, mass_def="200m", mass_def_strict=True): super().__init__(mass_def=mass_def, mass_def_strict=mass_def_strict) def _check_mass_def_strict(self, mass_def): return mass_def.name == "vir" def _get_fsigma_fof(self, cosmo, sigM, a, lnM): pA = 0.282 pa = 2.163 pb = 1.406 pc = 1.210 return pA * ((pb / sigM)**pa + 1.) * np.exp(-pc / sigM**2) def _get_fsigma_SO(self, cosmo, sigM, a, lnM): om = cosmo.omega_x(a, "matter") Delta_178 = self.mass_def.Delta / 178 if a == 1: pA = 0.194 pa = 1.805 pb = 2.267 pc = 1.287 elif a < 1/(1+6): pA = 0.563 pa = 3.810 pb = 0.874 pc = 1.453 else: pA = om * (1.097 * a**3.216 + 0.074) pa = om * (5.907 * a**3.058 + 2.349) pb = om * (3.136 * a**3.599 + 2.344) pc = 1.318 f_178 = pA * ((pb / sigM)**pa + 1.) * np.exp(-pc / sigM**2) C = np.exp(0.023 * (Delta_178 - 1.0)) d = -0.456 * om - 0.139 Gamma = (C * Delta_178**d * np.exp(0.072 * (1.0 - Delta_178) / sigM**2.130)) return f_178 * Gamma def _get_fsigma(self, cosmo, sigM, a, lnM): if self.mass_def.name == 'fof': return self._get_fsigma_fof(cosmo, sigM, a, lnM) return self._get_fsigma_SO(cosmo, sigM, a, lnM)