Source code for halotools.empirical_models.composite_models.hod_models.tinker13

"""
Module containing some commonly used composite HOD models.
"""
from __future__ import division, print_function, absolute_import, unicode_literals

from ... import model_defaults
from ...occupation_models import tinker13_components
from ...phase_space_models import NFWPhaseSpace, TrivialPhaseSpace

__all__ = ["tinker13_model_dictionary"]


[docs] def tinker13_model_dictionary( threshold=model_defaults.default_stellar_mass_threshold, **kwargs ): """Dictionary to build an HOD-style based on Tinker et al. (2013), arXiv:1308.2974. See :ref:`tinker13_composite_model` for a tutorial on this model. Parameters ---------- threshold : float, optional Stellar mass threshold of the mock galaxy sample in h=1 solar mass units. Default value is specified in the `~halotools.empirical_models.model_defaults` module. prim_haloprop_key : string, optional String giving the column name of the primary halo property governing the occupation statistics of gal_type galaxies. Default value is specified in the `~halotools.empirical_models.model_defaults` module. redshift : float, optional Redshift of the stellar-to-halo-mass relation. Default is set in `~halotools.sim_manager.sim_defaults`. quiescent_fraction_abscissa : array, optional Values of the primary halo property at which the quiescent fraction is specified. Default is [10**12, 10**13.5, 10**15]. quiescent_fraction_ordinates : array, optional Values of the quiescent fraction when evaluated at the input abscissa. Default is [0.25, 0.7, 0.95] Examples ---------- The simplest way to instantiate the tinker13 model is using the `~halotools.empirical_models.PrebuiltHodModelFactory` class: >>> from halotools.empirical_models import PrebuiltHodModelFactory >>> model_instance = PrebuiltHodModelFactory('tinker13') Alternatively, you can pass the returned values of `tinker13_model_dictionary` to `~halotools.empirical_models.HodModelFactory`. The calling signature is slightly more complicated relative to, for example, `~halotools.empirical_models.leauthaud11_model_dictionary` because `tinker13_model_dictionary` also returns a supplementary_dictionary specifying the `model_feature_calling_sequence` (see :ref:`model_feature_calling_sequence_mechanism`). >>> model_dictionary, supplementary_dictionary = tinker13_model_dictionary() >>> constructor_kwargs = model_dictionary >>> for key in supplementary_dictionary: constructor_kwargs[key] = supplementary_dictionary[key] >>> from halotools.empirical_models import HodModelFactory >>> model_instance = HodModelFactory(**constructor_kwargs) To load a model based on a different threshold and redshift: >>> model_instance = PrebuiltHodModelFactory('tinker13', threshold = 11, redshift = 2) Or, equivalently, >>> model_dictionary, supplementary_dictionary = tinker13_model_dictionary(threshold = 11, redshift = 2) >>> constructor_kwargs = model_dictionary >>> for key in supplementary_dictionary: constructor_kwargs[key] = supplementary_dictionary[key] >>> model_instance = HodModelFactory(**constructor_kwargs) As with all instances of the `~halotools.empirical_models.PrebuiltHodModelFactory`, you can populate a mock by passing the model a halo catalog: >>> from halotools.sim_manager import FakeSim >>> halocat = FakeSim(redshift = model_instance.redshift) >>> model_instance.populate_mock(halocat) """ # Build the occupation model centrals_occupation = tinker13_components.Tinker13Cens( threshold=threshold, **kwargs ) centrals_occupation._suppress_repeated_param_warning = True # Build the profile model centrals_profile = TrivialPhaseSpace(**kwargs) # Build the occupation model quiescent_satellites_occupation = tinker13_components.Tinker13QuiescentSats( threshold=threshold, **kwargs ) # Build the profile model quiescent_satellites_profile = NFWPhaseSpace( concentration_binning=(1, 35, 1), **kwargs ) # Build the occupation model active_satellites_occupation = tinker13_components.Tinker13ActiveSats( threshold=threshold, **kwargs ) # Build the profile model active_satellites_profile = NFWPhaseSpace( concentration_binning=(1, 35, 1), **kwargs ) active_satellites_profile.new_haloprop_func_dict.pop("conc_NFWmodel") model_dictionary = { "centrals_occupation": centrals_occupation, "centrals_profile": centrals_profile, "quiescent_satellites_profile": quiescent_satellites_profile, "quiescent_satellites_occupation": quiescent_satellites_occupation, "active_satellites_profile": active_satellites_profile, "active_satellites_occupation": active_satellites_occupation, } gal_type_list = ["centrals", "active_satellites", "quiescent_satellites"] model_feature_calling_sequence = ( "centrals_occupation", "quiescent_satellites_occupation", "active_satellites_occupation", "centrals_profile", "quiescent_satellites_profile", "active_satellites_profile", ) supplementary_dictionary = { "gal_type_list": gal_type_list, "model_feature_calling_sequence": model_feature_calling_sequence, } return model_dictionary, supplementary_dictionary