This module contains a collection of routines related to the splashback radius.

## Basics¶

The splashback radius, $$R_{\rm sp}$$, corresponds to the apocenter of particles on their first orbit after falling into a halo. By analogy with the spherical collapse model, this radius represents a physically motivated definition of the halo boundary because it separates infalling from orbiting material. The splashback mass, $$M_{\rm sp}$$, is defined as the mass within $$R_{\rm sp}$$.

In practice, not all particles reach apocenter at the same radius, and the resulting drop in the density profile is less sharp than in spherical models. As a result, there are several different definitions of the splashback radius, for example the radius where the logarithmic slope of the density profile is steepest, or definitions derived from the actual distribution of particle apocenters. For more information, please see the papers that first suggested the splashback radius, namely Diemer & Kravtsov 2014, Adhikari et al. 2014, and More et al. 2015, as well as any of the model papers listed below.

This module implements a number of theoretical models and fitting functions for the splashback radius, splashback mass, the scatter in those quantities, and the mass accretion rate. The models can be evaluated using the generalized function splashbackModel() as well as a convenient wrapper, splashbackRadius() which evaluates $$R_{\rm sp}$$ given a spherical overdensity mass. The splashback models can return a number of different quantities, identified by the following shorthand:

• RspR200m, the splashback radius in units of $$R_{\rm 200m}$$

• MspM200m, the splashback mass in units of $$M_{\rm 200m}$$

• Deltasp, the enclosed overdensity wrt. the mean density of the universe, $$\Delta_{\rm sp} = M_{\rm sp} / (4 \pi R_{\rm sp}^3 / 3) / \rho_{\rm m}$$

• RspR200m-1s, the 68% scatter in $$R_{\rm sp}/R_{\rm 200m}$$ in dex

• MspM200m-1s, the 68% scatter in $$M_{\rm sp}/M_{\rm 200m}$$ in dex

• Deltasp-1s, the 68% scatter in $$\Delta_{\rm sp}$$ in dex

Not all models can return all of these quantities (see table below). Moreover, depending on the model the quantities can be computed as a function of different input variables, namely

• Gamma, the mass accretion rate $$\Gamma$$

• nu200m, the peak height corresponding to $$M_{\rm 200m}$$ (see peakHeight())

• z, the redshift

Note that the mass accretion rate is defined in different ways depending on which model is used. In theoretical models, $$\Gamma$$ typically stands for the instantaneous accretion rate $$s = d \log(M) / d \log(a)$$. In other models, it means the mass accretion rate measured over either a fixed time interval as in Diemer & Kravtsov 2014, or measured over a dynamical time. Please consult the model papers for details. The following code example shows how to calculate $$R_{\rm sp}/R_{\rm 200m}$$ when only the mass of a halo is known:

from colossus.lss import peaks
from colossus.halo import splashback

M200m = 1E12
z = 0.5
nu200m = peaks.peakHeight(M200m, z)
RspR200m, mask = splashback.splashbackModel('RspR200m', nu200m = nu200m, z = z)


If the mass accretion rate is known, that constraint can also be used:

Gamma = 1.1
RspR200m, mask = splashback.splashbackModel('RspR200m', Gamma = Gamma, nu200m = nu200m, z = z)


All functions take numpy arrays as well as float values, though with certain restrictions (see below). The mask return variable indicates whether the chosen model could be evaluated given the input parameters. If not (e.g., because the redshift of peak height were outside a model’s range), mask (or certain elements of it) will be False and the corresponding elements of RspR200m will be missing. Please see the Tutorials for more extensive code examples.

## Splashback models¶

The following models are supported in this module, and their ID can be passed as the model parameter to the splashbackModel() and splashbackRadius() functions:

ID

Predicts…

…as a function of…

Reference

Rsp/Msp

(Gamma, z)

more15

Rsp/Msp

(Gamma, z, M) or (z, M)

More et al. 2015

shi16

Rsp/Msp

(Gamma, z)

Shi 2016

mansfield17

Rsp/Msp, Scatter

(Gamma, z, M)

Mansfield et al. 2017

diemer17

Rsp/Msp, Scatter

(Gamma, z, M) or (z, M)

Diemer et al. 2017

The individual functions for these models are documented towards the bottom of this page. Note that the diemer17 model includes a fitting function for the mass accretion rate as a function of peak height and redshift, modelDiemer17Gamma().

Note that, in principle, the user can overwrite the model properties and limitations stored in the models dictionary, for example to evaluate a model outside of the range of parameters where it was calibrated. However, there is no guarantee that the results will be correct.

## Module contents¶

 Characteristics of splashback models. models Dictionary containing a list of models. splashbackModel(q_out[, Gamma, nu200m, z, …]) The splashback radius, mass, and scatter. splashbackRadius(z, mdef[, R, M, c, Gamma, …]) $$R_{\rm sp}$$ and $$M_{\rm sp}$$ as a function of spherical overdensity radius or mass. $$\Delta_{\rm sp}$$ and concentration for the Adhikari et al 2014 model. modelAdhikari14RspR200m(Delta, c, z) $$R_{\rm sp}/R_{\rm 200m}$$ and $$M_{\rm sp}/M_{\rm 200m}$$ for the Adhikari et al 2014 model. modelMore15RspR200m([nu200m, z, Gamma, …]) $$R_{\rm sp}/R_{\rm 200m}$$ for the More et al 2015 model. modelMore15MspM200m([nu200m, z, Gamma, …]) $$M_{\rm sp}/M_{\rm 200m}$$ for the More et al 2015 model. modelShi16Delta(s, Om) $$\Delta_{\rm sp}$$ for the Shi 2016 model. modelShi16RspR200m(s, Om) $$R_{\rm sp}/R_{\rm 200m}$$ for the Shi 2016 model. modelMansfield17RspR200m(Gamma, Om, nu200m) $$R_{\rm sp}/R_{\rm 200m}$$ for the Mansfield et al 2017 model. modelMansfield17MspM200m(Gamma, Om) $$M_{\rm sp}/M_{\rm 200m}$$ for the Mansfield et al 2017 model. modelDiemer17Gamma(nu200m, z) $$\Gamma_{\rm dyn}$$ as a function of peak height. modelDiemer17RspR200m(q_out, Gamma, nu200m, …) $$R_{\rm sp}/R_{\rm 200m}$$ and $$M_{\rm sp}/M_{\rm 200m}$$ for the Diemer et al 2017 model. modelDiemer17Scatter(q_out, Gamma, nu200m, …) The 68% scatter for the Diemer et al 2017 model.

## Module reference¶

class halo.splashback.SplashbackModel

Characteristics of splashback models.

This object contains certain characteristics of a model, most importantly the input quantities q_in and output quantities q_out the model is capable of processing. Additionally, the depends_on field lists the quantities the model depends on. If, for example, z is among these quantities, then the redshift needs to be passed to the splashbackModel() function.

This object does not contain a function pointer to the model functions because those functions do not work in a uniform way, necessitating a somewhat more complex decision tree when evaluating them.

The models dictionary contains one item of this class for each available model.

q_in = None

The model can be evaluated as a function of these quantities. Valid entries are Gamma, z, and nu200m.

q_out = None

The quantities the model can predict. See table above.

depends_on = None

The quantities the model depends on (which need to be passed to the evaluating function). Valid entries are Gamma, z, nu, and rspdef.

min_Gamma = None

The minimum mass accretion rate where the model is valid.

max_Gamma = None

The maximum mass accretion rate where the model is valid.

min_nu200m = None

The minimum peak height where the model is valid.

max_nu200m = None

The maximum peak height where the model is valid.

min_z = None

The minimum redshift where the model is valid.

max_z = None

The maximum redshift where the model is valid.

halo.splashback.models = {'adhikari14': <halo.splashback.SplashbackModel object>, 'diemer17': <halo.splashback.SplashbackModel object>, 'mansfield17': <halo.splashback.SplashbackModel object>, 'more15': <halo.splashback.SplashbackModel object>, 'shi16': <halo.splashback.SplashbackModel object>}

Dictionary containing a list of models.

An ordered dictionary containing one SplashbackModel entry for each model.

halo.splashback.splashbackModel(q_out, Gamma=None, nu200m=None, z=None, model='diemer17', statistic='median', rspdef='mean')

The splashback radius, mass, and scatter.

Depending on the model, this function can return quantities such as $$R_{sp} / R_{\rm 200m}$$, $$M_{\rm sp} / M_{\rm 200m}$$, the splashback overdensity, or the scatter in these quantities (see the table of models above). The primary input variable can be mass or accretion rate, and other quantities such as redshift may be required depending on which model is chosen (see the properties listed in models for details).

The function returns only valid predictions for the desired quantity. If any of the parameters lie outside the range of validity of the chosen model, no output is returned for that input, as indicated by the returned boolean mask. No warning is output in such cases unless there is no valid output for any input.

Parameters
q_out: str

Identifier of the output quantity (see listing above).

Gamma: array_like

Mass accretion rate; can be a number or a numpy array. This quantity only needs to be passed for models that depend on the mass accretion rate.

nu200m: array_like

The peak height as computed from $$M_{\rm 200m}$$; can be a number or a numpy array. This quantity only needs to be passed for models that depend on peak height.

z: array_like

Redshift; can be a number or a numpy array. This quantity only needs to be passed for models that depend on redshift.

model: str

The splashback model to use for the prediction (see table above).

statistic: str

Can be mean or median, determining whether the function returns the best fit to the mean or median profile of a halo sample. This parameter is ignored by most models. Not to be mixed up with the definition rspdef used in the diemer17 model.

rspdef: str

The definition of the splashback radius. This parameter is ignored by most models, but used by the diemer17 model to distinguish the mean of the apocenter distribution or higher percentiles (e.g. percentile75).

Returns
y: array_like

The desired quantity; if the input (Gamma or nu200m) is a number, this is a number, otherwise a numpy array.

A boolean mask of the same dimensions as the input, indicating whether a valid input was returned for each input element (Gamma or nu200m). Note that only the valid values are returned, meaning y can contain fewer items than mask.

halo.splashback.splashbackRadius(z, mdef, R=None, M=None, c=None, Gamma=None, model='diemer17', statistic='median', rspdef='mean', c_model='diemer19', profile='nfw')

$$R_{\rm sp}$$ and $$M_{\rm sp}$$ as a function of spherical overdensity radius or mass.

This function represents a convenient wrapper for the splashbackModel() function, where only a spherical overdensity mass or radius needs to be passed. Additionally, the user can pass any of the parameters to the splashbackModel() function. Note that the redshift must be a number, not an array.

Parameters
z: float

Redshift

mdef: str

Mass definition in which any combination of R, M, and c is given. See Halo Mass Definitions for details.

R: array_like

Spherical overdensity radius in physical $$kpc/h$$; can be a number or a numpy array. Either R or M need to be passed, not both.

M: array_like

Spherical overdensity mass in $$M_{\odot}/h$$; can be a number or a numpy array. Either R or M need to be passed, not both.

c: array_like

Halo concentration; must have the same dimensions as R or M, or be None in which case the concentration is computed automatically.

Gamma: array_like

The mass accretion rate that can be optionally passed to the splashback model. If this field is set, the splashback model is evaluated with Gamma as the primary input, otherwise peak height is the primary input.

model: str

The splashback model to use for the prediction (see table above).

statistic: str

Can be mean or median, determining whether the function returns the best fit to the mean or median profile of a halo sample. This parameter is ignored by most models.

rspdef: str

The definition of the splashback radius. This parameter is ignored by most models, but used by the diemer17 model to distinguish the mean of the apocenter distribution or higher percentiles (e.g. percentile75).

c_model: str

The concentration model used to compute c if it is not passed by the user. See the Concentration module for details.

profile: str

The functional form of the profile assumed in the conversion between mass definitions; can be nfw or dk14.

Returns
Rsp: array_like

$$R_{\rm sp}$$ in physical $$kpc/h$$

Msp: array_like

$$M_{\rm sp}$$ in $$M_{\odot}/h$$

A boolean mask of the same dimensions as R or M, indicating whether a valid input was returned for each input. Note that only the valid outputs are returned, meaning Rsp and Msp can have fewer items than mask.

halo.splashback.modelAdhikari14Deltasp(s, Om)

$$\Delta_{\rm sp}$$ and concentration for the Adhikari et al 2014 model.

The model is evaluated numerically, this function returns interpolated results as a function of mass accretion rate s and $$\Omega_{\rm m}(z)$$.

Parameters
s: array_like

Instantaneous mass accretion rate

Om: array_like

Matter density of the universe in units of the critical density.

Returns
Delta: array_like

The overdensity enclosed by the predicted splashback radius, in units of the mean density.

c: array_like

The concentration of the predicted NFW profile.

halo.splashback.modelAdhikari14RspR200m(Delta, c, z)

$$R_{\rm sp}/R_{\rm 200m}$$ and $$M_{\rm sp}/M_{\rm 200m}$$ for the Adhikari et al 2014 model.

Parameters
Delta: array_like

Overdensity; should be computed using the modelAdhikari14Deltasp() function.

c: array_like

Concentration; should be computed using the modelAdhikari14Deltasp() function.

z: float

Redshift

Returns
RspR200m: array_like

$$R_{\rm sp}/R_{\rm 200m}$$; has the same dimensions as Delta and c.

MspM200m: array_like

$$M_{\rm sp}/M_{\rm 200m}$$; has the same dimensions as Delta and c.

halo.splashback.modelMore15RspR200m(nu200m=None, z=None, Gamma=None, statistic='median')

$$R_{\rm sp}/R_{\rm 200m}$$ for the More et al 2015 model.

If the mass accretion rate is given, the prediction is based on that. If not, the peak height is used instead, giving a less accurate fit.

Parameters
nu200m: array_like

The peak height as computed from $$M_{\rm 200m}$$; can be a number or a numpy array.

z: float

Redshift

Gamma: array_like

Mass accretion rate; can be a number or a numpy array. This model was calibrated with Gamma computed according to the definition of Diemer & Kravtsov 2014.

statistic: str

Can be mean or median, determining whether the fit was performed on the mean or median density profile of a halo sample.

Returns
RspR200m: array_like

$$R_{\rm sp}/R_{\rm 200m}$$; has the same dimensions as Gamma or nu200m.

halo.splashback.modelMore15MspM200m(nu200m=None, z=None, Gamma=None, statistic='median')

$$M_{\rm sp}/M_{\rm 200m}$$ for the More et al 2015 model.

If the mass accretion rate is given, the prediction is based on that. If not, the peak height is used instead, giving a less accurate fit.

Parameters
nu200m: array_like

The peak height as computed from $$M_{\rm 200m}$$; can be a number or a numpy array.

z: float

Redshift

Gamma: array_like

Mass accretion rate; can be a number or a numpy array. This model was calibrated with Gamma computed according to the definition of Diemer & Kravtsov 2014.

statistic: str

Can be mean or median, determining whether the fit was performed on the mean or median density profile of a halo sample.

Returns
MspM200m: array_like

$$M_{\rm sp}/M_{\rm 200m}$$; has the same dimensions as Gamma or nu200m.

halo.splashback.modelShi16Delta(s, Om)

$$\Delta_{\rm sp}$$ for the Shi 2016 model.

Parameters
s: array_like

Instantaneous mass accretion rate; can be a number or a numpy array.

Om: array_like

Matter density of the universe in units of the critical density; can be a number or a numpy array.

Returns
Delta: array_like

The overdensity enclosed by the predicted splashback radius, in units of the mean density. Has the same dimensions as s and/or Om.

halo.splashback.modelShi16RspR200m(s, Om)

$$R_{\rm sp}/R_{\rm 200m}$$ for the Shi 2016 model.

Parameters
s: array_like

Instantaneous mass accretion rate; can be a number or a numpy array.

Om: array_like

Matter density of the universe in units of the critical density; can be a number or a numpy array.

Returns
RspR200m: array_like

$$R_{\rm sp}/R_{\rm 200m}$$; has the same dimensions as Gamma or nu200m.

halo.splashback.modelMansfield17RspR200m(Gamma, Om, nu200m)

$$R_{\rm sp}/R_{\rm 200m}$$ for the Mansfield et al 2017 model.

Parameters
Gamma: array_like

Mass accretion rate; can be a number or a numpy array. This model was calibrated with Gamma computed according to the definition of Diemer & Kravtsov 2014.

Om: array_like

Matter density of the universe in units of the critical density; can be a number or a numpy array.

nu200m: array_like

The peak height as computed from $$M_{\rm 200m}$$; can be a number or a numpy array.

Returns
RspR200m: array_like

$$R_{\rm sp}/R_{\rm 200m}$$; has the same dimensions as Gamma and/or nu200m and/or Om.

halo.splashback.modelMansfield17MspM200m(Gamma, Om)

$$M_{\rm sp}/M_{\rm 200m}$$ for the Mansfield et al 2017 model.

Note that, unlike the radius function for this model, the mass does not depend on peak height.

Parameters
Gamma: array_like

Mass accretion rate; can be a number or a numpy array. This model was calibrated with Gamma computed according to the definition of Diemer & Kravtsov 2014.

Om: array_like

Matter density of the universe in units of the critical density; can be a number or a numpy array.

Returns
MspM200m: array_like

$$M_{\rm sp}/M_{\rm 200m}$$; has the same dimensions as Gamma and/or Om.

halo.splashback.modelDiemer17Gamma(nu200m, z)

$$\Gamma_{\rm dyn}$$ as a function of peak height.

A fit to the median accretion rate of halos as a function of peak height and redshift. This accretion rate can be used as a guess when the real accretion rate of halos is not known.

Parameters
nu200m: array_like

The peak height as computed from $$M_{\rm 200m}$$; can be a number or a numpy array.

z: array_like

Redshift

Returns
Gamma: array_like

The accretion rate measured over one dynamical time; has the same dimensions as nu200m and/or z.

halo.splashback.modelDiemer17RspR200m(q_out, Gamma, nu200m, z, rspdef)

$$R_{\rm sp}/R_{\rm 200m}$$ and $$M_{\rm sp}/M_{\rm 200m}$$ for the Diemer et al 2017 model.

To evaluate the overdensity, use the splashbackModel() function.

Parameters
q_out: str

Identifier of the output quantity, can be RspR200m or MspM200m.

Gamma: array_like

Mass accretion rate; can be a number or a numpy array. This model was calibrated using $$\Gamma_{\rm dyn}$$.

nu200m: array_like

The peak height as computed from $$M_{\rm 200m}$$; can be a number or a numpy array with the same dimensions as Gamma.

z: float

Redshift

rspdef: str

The definition of the splashback radius, for example the mean of the apocenter distribution or higher percentiles (e.g. percentile75).

Returns
q: array_like

$$R_{\rm sp}/R_{\rm 200m}$$ or $$M_{\rm sp}/M_{\rm 200m}$$ depending on the q_out parameter; has the same dimensions as Gamma.

halo.splashback.modelDiemer17Scatter(q_out, Gamma, nu200m, z, rspdef)

The 68% scatter for the Diemer et al 2017 model.

To evaluate the scatter in the overdensity, use the splashbackModel() function.

Parameters
q_out: str

Identifier of the output quantity, can be RspR200m-1s or MspM200m-1s.

Gamma: array_like

Mass accretion rate; can be a number or a numpy array. This model was calibrated using $$\Gamma_{\rm dyn}$$.

nu200m: array_like

The peak height as computed from $$M_{\rm 200m}$$; can be a number or a numpy array with the same dimensions as Gamma.

z: float

Redshift

rspdef: str

The definition of the splashback radius, for example the mean of the apocenter distribution or higher percentiles (e.g. percentile75).

Returns
scatter: array_like

The scatter in either $$R_{\rm sp}/R_{\rm 200m}$$ or $$M_{\rm sp}/M_{\rm 200m}$$, depending on the q_out parameter; has the same dimensions as Gamma.