# Leauthaud et al. (2011) Composite Model¶

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

## Overview of the Leauthaud et al. (2011) Model Features¶

This HOD-style model is based on Leauthaud et al. (2011), arXiv:1103.2077. The behavior of this model is governed by an assumed underlying stellar-to-halo-mass relation.

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 Leauthaud11Cens. 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 class governing this behavior is Leauthaud11Sats; satellites in this model follow an (unbiased) NFW profile, as governed by the NFWPhaseSpace class.

## Building the Leauthaud et al. (2011) Model¶

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

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


## Customizing the Leauthaud et al. (2011) Model¶

There are two keyword arguments you can use to customize the instance returned by the factory:

First, the threshold keyword argument pertains to the minimum stellar mass of the galaxy sample, in logarithmic units of Msun in h=1 units:

>>> model = PrebuiltHodModelFactory('leauthaud11', threshold = 10.75)


Second, the redshift keyword argument must be set to the redshift of the halo catalog you might populate with this model.

>>> model = PrebuiltHodModelFactory('leauthaud11', threshold = 11, redshift = 2)


It is not permissible to dynamically change the threshold and redshift of the model instance. If you want to explore the effects of different thresholds and redshifts, you should instantiate multiple models.

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['alphasat'] = 1.1


The above line of code changes the power law slope between halo mass and satellite occupation number, $$\langle N_{\rm sat} \rangle \propto M_{\rm halo}^{\alpha}$$. See Parameters of the Leauthaud et al. (2011) model for a description of all parameters of this model.

## Populating Mocks and Generating Leauthaud et al. (2011) 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('leauthaud11')
>>> 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 Leauthaud et al. (2011) Model Features¶

In addition to populating mocks, the leauthaud11 model also gives you access to its underlying analytical relations. Here are a few examples:

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


To compute the mean number of each galaxy type as a function of halo mass:

>>> mean_ncen = model.mean_occupation_centrals(prim_haloprop = halo_mass)
>>> mean_nsat = model.mean_occupation_satellites(prim_haloprop = halo_mass)


To compute the mean stellar mass of central galaxies as a function of halo mass:

>>> mean_sm_cens = model.mean_stellar_mass_centrals(prim_haloprop = halo_mass)


Now suppose you wish to know the mean halo mass of a central galaxy with known stellar mass:

>>> log_stellar_mass = np.linspace(9, 12, 100)
>>> inferred_log_halo_mass = model.mean_log_halo_mass_centrals(log_stellar_mass)


## Parameters of the Leauthaud et al. (2011) model¶

The best way to learn what the parameters of a model do is to just play with the code: change parameter values, make plots of how the underying analytical relations vary, and also of how the mock observables vary. Here we just give a simple description of the meaning of each parameter. You can also refer to the original Leauthaud et al. (2011) publication, arXiv:1103.2077, and also the original Behroozi et al. (2010) publication, arXiv:1001.0015, for further details. A succinct summary also appears in Section 2.4 of arXiv:1512.03050.

To see how the following parameters are implemented, see Leauthaud11Cens.mean_occupation and Behroozi10SmHm.mean_stellar_mass.

• param_dict[‘smhm_m0_0’] - Characteristic stellar mass at redshift-zero in the $$\langle M_{\ast} \rangle(M_{\rm halo})$$ map.
• param_dict[‘smhm_m0_a’] - Redshift evolution of the characteristic stellar mass.
• param_dict[‘smhm_m1_0’] - Characteristic halo mass at redshift-zero in the $$\langle M_{\ast} \rangle(M_{\rm halo})$$ map.
• param_dict[‘smhm_m1_a’] - Redshift evolution of the characteristic halo mass.
• param_dict[‘smhm_beta_0’] - Low-mass slope at redshift-zero of the $$\langle M_{\ast} \rangle(M_{\rm halo})$$ map.
• param_dict[‘smhm_beta_a’] - Redshift evolution of the low-mass slope.
• param_dict[‘smhm_delta_0’] - High-mass slope at redshift-zero of the $$\langle M_{\ast} \rangle(M_{\rm halo})$$ map.
• param_dict[‘smhm_delta_a’] - Redshift evolution of the high-mass slope.
• param_dict[‘smhm_gamma_0’] - Transition between low- and high-mass behavior at redshift-zero of the $$\langle M_{\ast} \rangle(M_{\rm halo})$$ map.
• param_dict[‘smhm_gamma_a’] - Redshift evolution of the transition.
• param_dict[‘u’scatter_model_param1’] - Log-normal scatter in the stellar-to-halo mass relation.

To see how the following parameters are implemented, see Leauthaud11Sats.mean_occupation and Behroozi10SmHm.mean_stellar_mass.

• param_dict[‘alphasat’] - Power law slope of the relation between halo mass and $$\langle N_{\rm sat} \rangle$$.
• param_dict[‘betasat’] - Controls the amplitude of the power law slope $$\langle N_{\rm sat} \rangle$$.
• param_dict[‘bsat’] - Also controls the amplitude of the power law slope $$\langle N_{\rm sat} \rangle$$.
• param_dict[‘betacut’] - Controls the low-mass cutoff of $$\langle N_{\rm sat} \rangle$$.
• param_dict[‘bcut’] - Also controls the low-mass cutoff of $$\langle N_{\rm sat} \rangle$$.