Splashback radius¶
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}\)RspR200m1s
, the 68% scatter in \(R_{\rm sp}/R_{\rm 200m}\) in dexMspM200m1s
, the 68% scatter in \(M_{\rm sp}/M_{\rm 200m}\) in dexDeltasp1s
, 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}\) (seepeakHeight()
)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 

adhikari14  Rsp/Msp  (Gamma, z)  Adhikari et al. 2014 
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¶
SplashbackModel () 
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. 
modelAdhikari14Deltasp (s, Om) 
\(\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 quantitiesq_out
the model is capable of processing. Additionally, thedepends_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 thesplashbackModel()
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
, andnu200m
.

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
, andrspdef
.

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 at 0x11ab919b0>, 'diemer17': <halo.splashback.SplashbackModel object at 0x11ab91be0>, 'mansfield17': <halo.splashback.SplashbackModel object at 0x11ab91ba8>, 'more15': <halo.splashback.SplashbackModel object at 0x11ab91a90>, 'shi16': <halo.splashback.SplashbackModel object at 0x11ab91b00>}¶ 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
ormedian
, 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 definitionrspdef
used in thediemer17
model. rspdef: str
The definition of the splashback radius. This parameter is ignored by most models, but used by the
diemer17
model to distinguish themean
of the apocenter distribution or higher percentiles (e.g.percentile75
).
Returns:  y: array_like
The desired quantity; if the input (
Gamma
ornu200m
) is a number, this is a number, otherwise a numpy array. mask: array_like
A boolean mask of the same dimensions as the input, indicating whether a valid input was returned for each input element (
Gamma
ornu200m
). Note that only the valid values are returned, meaningy
can contain fewer items thanmask
.

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 thesplashbackModel()
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
, andc
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
orM
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
orM
need to be passed, not both. c: array_like
Halo concentration; must have the same dimensions as
R
orM
, or beNone
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
ormedian
, 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 themean
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
ordk14
.
Returns:  Rsp: array_like
\(R_{\rm sp}\) in physical \(kpc/h\)
 Msp: array_like
\(M_{\rm sp}\) in \(M_{\odot}/h\)
 mask: array_like
A boolean mask of the same dimensions as
R
orM
, 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
andc
. MspM200m: array_like
\(M_{\rm sp}/M_{\rm 200m}\); has the same dimensions as
Delta
andc
.

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
ormedian
, 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
ornu200m
.

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
ormedian
, 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
ornu200m
.

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/orOm
.

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
ornu200m
.

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/ornu200m
and/orOm
.

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/orOm
.

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/orz
.

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
orMspM200m
. 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 asGamma
.

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
RspR200m1s
orMspM200m1s
. 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 asGamma
.