Source code for skypy.galaxies.stellar_mass
"""Models of galaxy stellar mass.
"""
import numpy as np
from ..utils.random import schechter
__all__ = [
'schechter_smf_mass',
]
[docs]def schechter_smf_mass(redshift, alpha, m_star, m_min, m_max, size=None,
resolution=1000):
r""" Stellar masses following the Schechter mass function [1]_.
Parameters
----------
redshift : array_like
Galaxy redshifts for which to sample magnitudes.
alpha : float
The alpha parameter in the Schechter stellar mass function.
m_star : (nm,) array-like
Characteristic stellar mass m_*.
size: int, optional
Output shape of stellar mass samples. If size is None and m_star
is a scalar, a single sample is returned. If size is None and
m_star is an array, an array of samples is returned with the same
shape as m_star.
m_min, m_max : float
Lower and upper bounds for the stellar mass.
resolution : int, optional
Resolution of the inverse transform sampling spline. Default is 100.
Returns
-------
stellar mass : (nm,) array_like
Drawn stellar masses from the Schechter stellar mass function in units
of the solar mass.
Notes
-----
The stellar mass probability distribution (pdf) follows a Schechter
profile of the form
.. math::
\Phi(M) = \frac{1}{M_*} \left(\frac{M}{M_*}\right)^\alpha
\exp\left(-\frac{M}{M_*}\right) \;.
From this pdf one can sample the stellar masses.
References
----------
.. [1] Mo, H., Van den Bosch, F., & White, S. (2010). Galaxy Formation and
Evolution. Cambridge: Cambridge University Press.
doi:10.1017/CBO9780511807244
"""
# only alpha scalars supported at the moment
if np.ndim(alpha) > 0:
raise NotImplementedError('only scalar alpha is supported')
if size is None and np.shape(redshift):
size = np.shape(redshift)
# convert m_min, m_max to units of m_star
x_min = m_min / m_star
x_max = m_max / m_star
# sample masses
m = schechter(alpha, x_min, x_max, resolution, size=size, scale=m_star)
return m