Tinker et al. (2013) Composite Model

This section of the documentation describes the basic behavior of the tinker13 composite HOD model. To see how this composite model is built by the PrebuiltHodModelFactory class, see tinker13_model_dictionary.

Overview of the Tinker et al. (2013) Model Features

This HOD-style model is based on Tinker et al. (2013), arXiv:1308.2974. The behavior of this model is governed by an assumed underlying stellar-to-halo-mass relation that is distinct for star-forming and quiescent populations.

There are two populations, centrals and satellites. Central occupation statistics are given by a nearest integer distribution with first moment given by an erf function; the class governing this behavior is Tinker13Cens. Central galaxies are assumed to reside at the exact center of the host halo; the class governing this behavior is TrivialPhaseSpace.

Satellite occupation statistics are given by a Poisson distribution with first moment given by a power law that has been truncated at the low-mass end; the classes governing this behavior are Tinker13QuiescentSats and Tinker13ActiveSats; satellites in this model follow an (unbiased) NFW profile, as governed by the NFWPhaseSpace class.

Building the Tinker et al. (2013) Model

You can build an instance of this model using the PrebuiltHodModelFactory class as follows:

>>> from halotools.empirical_models import PrebuiltHodModelFactory
>>> model = PrebuiltHodModelFactory('tinker13')

Customizing the Tinker et al. (2013) Model

There are several keyword arguments you can use to customize the instance returned by the factory.

The threshold keyword argument and the redshift keyword argument behave in the exact same way as they do in the leauthaud11 model. See Leauthaud et al. (2011) Composite Model for further details.

In the tinker13 model, the quiescent fraction of central galaxies is specified at a set of control points via the quiescent_fraction_abscissa and quiescent_fraction_ordinates keywords. Linear interpolation is used to for the values of the quenched fraction evaluated at distinct values from the control points. So, for example, if you wanted to initialize your model so that the quenched fraction at \(M_{\rm vir}/M_{\odot} = 10^{12}, 10^{13}, 10^{14}, 10^{15}\) is \(0.25, 0.5, 0.75, 0.9\):

>>> model = PrebuiltHodModelFactory('tinker13', quiescent_fraction_abscissa = [1e12, 1e13, 1e14, 1e15], quiescent_fraction_ordinates = [0.25, 0.5, 0.75, 0.9])

As described in Changing Composite Model Parameters, you can always change the model parameters after instantiation by changing the values in the param_dict dictionary. For example,

>>> model.param_dict['quiescent_fraction_ordinates_param1'] = 0.35

There will be one param_dict parameter for each entry of the input quiescent_fraction_ordinates. Once you instantiate the model you are not permitted to change the abscissa. To do that, you need to instantiate another model.

Populating Mocks and Generating Tinker et al. (2013) Model Predictions

As with any Halotools composite model, the model instance can populate N-body simulations with mock galaxy catalogs. In the following, we’ll show how to do this with fake simulation data via the halocat argument.

>>> from halotools.sim_manager import FakeSim
>>> halocat = FakeSim()
>>> model = PrebuiltHodModelFactory('tinker13')
>>> model.populate_mock(halocat)  # doctest: +SKIP

See ModelFactory.populate_mock for information about how to populate your model into different simulations. See Tutorials on analyzing galaxy catalogs for a sequence of worked examples on how to use the mock_observables sub-package to study a wide range of astronomical statistics predicted by your model.

Studying the Tinker et al. (2013) Model Features

In addition to populating mocks, the tinker13 model also gives you access to its underlying analytical relations. For the most part, the tinker13 model simply inherits the methods of the leauthaud11 model, which you can read about in Leauthaud et al. (2011) Composite Model. However, there are slight differences due as tinker13 also models quiescent designation.

>>> import numpy as np
>>> halo_mass = np.logspace(11, 15, 100)

Whereas in leauthaud11 there was a mean_occupation_centrals method, in tinker13 there are instead methods for mean_occupation_active_centrals and mean_occupation_quiescent_centrals.

>>> mean_ncen_q = model.mean_occupation_quiescent_centrals(prim_haloprop = halo_mass)
>>> mean_ncen_a = model.mean_occupation_active_centrals(prim_haloprop = halo_mass)

Similar comments apply to mean_stellar_mass and mean_log_halo_mass for centrals and satellites alike.

Parameters of the Tinker et al. (2013) model

For satellite galaxies, the tinker13 model inherits all of the parameters of the leauthaud11 model twice: one set of parameters for the star-forming satellites, a second set for the quiescent satellites. Please refer to Parameters of the Leauthaud et al. (2011) model for details. The same duplicate parameter inheritance applies for centrals. Additionally, as described in Overview of the Tinker et al. (2013) Model Features, there are parameters specifying the quiescent fraction of centrals at the set of control points determined by the quiescent_fraction_abscissa keyword passed to the constructor.