Source code for halotools.empirical_models.sfr_models.zu_mandelbaum16
"""
Module containing the `~halotools.empirical_models.ZuMandelbaum16QuenchingCens`
and `~halotools.empirical_models.ZuMandelbaum16QuenchingSats` classes
responsible for providing a mapping between halo mass and galaxy quenching designation.
"""
from __future__ import division, print_function, absolute_import
import numpy as np
from ..component_model_templates import BinaryGalpropModel
__all__ = ('ZuMandelbaum16QuenchingCens', 'ZuMandelbaum16QuenchingSats')
[docs]
class ZuMandelbaum16QuenchingCens(BinaryGalpropModel):
""" Model for the quiescent fraction of centrals as a function of halo mass
defined by an exponential function of halo mass.
See :ref:`zu_mandelbaum16_composite_model` for a tutorial on this model.
"""
def __init__(self, prim_haloprop_key='halo_m200m', **kwargs):
"""
Parameters
-----------
prim_haloprop_key : string
Name of the column of the halo table storing the
mass-like variable the model is based on,
e.g., 'halo_mvir' or 'halo_m200b'.
Examples
--------
>>> model = ZuMandelbaum16QuenchingCens()
"""
BinaryGalpropModel.__init__(self,
galprop_name='quiescent', prim_haloprop_key=prim_haloprop_key)
self.param_dict = self._retrieve_default_param_dict()
self.gal_type = 'centrals'
[docs]
def mean_quiescent_fraction(self, **kwargs):
r"""
Quiescent fraction as a function of halo mass, modeled as an exponential:
:math:`F_{\rm quiescent}(M_{\rm halo}) = 1 - {\rm exp}(-(M_{\rm halo}/M_{\rm char})^{\alpha})`
Parameters
----------
prim_haloprop : array, optional
Array of mass-like variable upon which occupation statistics are based.
If ``prim_haloprop`` is not passed, then ``table`` keyword argument must be passed.
table : object, optional
Data table storing halo catalog.
If ``table`` is not passed, then ``prim_haloprop`` keyword argument must be passed.
Returns
-------
quiescent_fraction : array_like
Array containing mean fraction of quiescent galaxies.
Examples
--------
>>> model = ZuMandelbaum16QuenchingCens()
>>> quiescent_fraction = model.mean_quiescent_fraction(prim_haloprop=1e12)
"""
if 'table' in list(kwargs.keys()):
halo_mass = np.atleast_1d(kwargs['table'][self.prim_haloprop_key])
elif 'prim_haloprop' in list(kwargs.keys()):
halo_mass = np.atleast_1d(kwargs['prim_haloprop'])
else:
raise KeyError("Must pass one of the following keyword arguments "
"to mean_stellar_mass:\n``table`` or ``prim_haloprop``")
mass_ratio = halo_mass/self.param_dict['quenching_mass_centrals']
exparg = mass_ratio**self.param_dict['quenching_exp_power_centrals']
result = 1 - np.exp(-exparg)
result = np.where(result < 0, 0, result)
result = np.where(result > 1, 1, result)
return result
def _retrieve_default_param_dict(self):
d = {}
d['quenching_mass_centrals'] = 10**12.2
d['quenching_exp_power_centrals'] = 0.38
return d
[docs]
class ZuMandelbaum16QuenchingSats(BinaryGalpropModel):
""" Model for the quiescent fraction of satellites as a function of halo mass
defined by an exponential function of halo mass.
See :ref:`zu_mandelbaum16_composite_model` for a tutorial on this model.
"""
def __init__(self, prim_haloprop_key='halo_m200m', **kwargs):
"""
Parameters
-----------
prim_haloprop_key : string
Name of the column of the halo table storing the
mass-like variable the model is based on,
e.g., 'halo_mvir' or 'halo_m200b'.
Examples
--------
>>> model = ZuMandelbaum16QuenchingSats()
"""
BinaryGalpropModel.__init__(self,
galprop_name='quiescent', prim_haloprop_key=prim_haloprop_key)
self.param_dict = self._retrieve_default_param_dict()
self.gal_type = 'satellites'
[docs]
def mean_quiescent_fraction(self, **kwargs):
r"""
Quiescent fraction as a function of halo mass, modeled as an exponential:
:math:`F_{\rm quiescent}(M_{\rm halo}) = 1 - {\rm exp}(-(M_{\rm halo}/M_{\rm char})^{\alpha})`
Parameters
----------
prim_haloprop : array, optional
Array of mass-like variable upon which occupation statistics are based.
If ``prim_haloprop`` is not passed, then ``table`` keyword argument must be passed.
table : object, optional
Data table storing halo catalog.
If ``table`` is not passed, then ``prim_haloprop`` keyword argument must be passed.
Returns
-------
quiescent_fraction : array_like
Array containing mean fraction of quiescent galaxies.
Examples
--------
>>> model = ZuMandelbaum16QuenchingSats()
>>> quiescent_fraction = model.mean_quiescent_fraction(prim_haloprop=1e12)
"""
if 'table' in list(kwargs.keys()):
halo_mass = np.atleast_1d(kwargs['table'][self.prim_haloprop_key])
elif 'prim_haloprop' in list(kwargs.keys()):
halo_mass = np.atleast_1d(kwargs['prim_haloprop'])
else:
raise KeyError("Must pass one of the following keyword arguments "
"to mean_stellar_mass:\n``table`` or ``prim_haloprop``")
mass_ratio = halo_mass/self.param_dict['quenching_mass_satellites']
exparg = mass_ratio**self.param_dict['quenching_exp_power_satellites']
result = 1 - np.exp(-exparg)
result = np.where(result < 0, 0, result)
result = np.where(result > 1, 1, result)
return result
def _retrieve_default_param_dict(self):
d = {}
d['quenching_mass_satellites'] = 10**12.17
d['quenching_exp_power_satellites'] = 0.15
return d