Source code for skypy.halos.quenching

"""Galaxy quenching.

This module implements models for environment and mass
quenching by dark matter halos.

Models
======
.. autosummary::
   :nosignatures:
   :toctree: ../api/

   environment_quenched
   mass_quenched
"""

import numpy as np
from scipy import special

__all__ = [
    'environment_quenched',
    'mass_quenched',
    ]


[docs]def environment_quenched(nh, probability): r'''Environment quenching function. This function implements the model proposed by A.Amara where the probability of a subhalo being quenched is a fixed probability. The model is inspired on [1]_ and [2]_. Parameters ---------- nh: integer Number of subhalos. probability: float Quenching probability. Returns ------- quenched: (nh,) array_like, boolean Boolean array indicating which subhalo's host galaxies are (satellite) environment-quenched. Examples --------- This example shows how many subhalos are environtment quenched (True) and how many survive (False) from a list of 1000 halos: >>> import numpy as np >>> from skypy.halos.quenching import environment_quenched >>> from collections import Counter >>> quenched = environment_quenched(1000, 0.5) >>> Counter(quenched) Counter({...}) References ---------- .. [1] Peng et al. 2010, doi 10.1088/0004-637X/721/1/193. .. [2] Birrer et al. 2014, arXiv 1401.3162. ''' return np.random.uniform(size=nh) < probability
[docs]def mass_quenched(halo_mass, offset, width): r'''Mass quenching function. This function implements the model proposed by A.Amara where the probability of a halo being quenched is related to the error function of the logarithm of the halo's mass standardised by an offset and width parameter. The model is inspired on [1]_ and [2]_. Parameters ---------- halo_mass: (nh,) array_like Array of halo masses in units of solar mass, Msun. offset: float Halo mass in Msun at which quenching probability is 50%. width: float Width of the error function. Returns ------- quenched: (nh,) array_like, boolean Boolean array indicating which halo's host galaxies are mass-quenched. Examples --------- This example shows how many halos are mass quenched (True) and how many survive (False) from a list of 1000 halos: >>> import numpy as np >>> from astropy import units >>> from skypy.halos.quenching import mass_quenched >>> from collections import Counter >>> offset, width = 1.0e12, 0.5 >>> halo_mass = np.random.lognormal(mean=np.log(offset), sigma=width, ... size=1000) >>> quenched = mass_quenched(halo_mass, offset, width) >>> Counter(quenched) Counter({...}) References ---------- .. [1] Peng et al. 2010, doi 10.1088/0004-637X/721/1/193. .. [2] Birrer et al. 2014, arXiv 1401.3162. ''' standardised_mass = np.log10(halo_mass / offset) / width probability = 0.5 * (1.0 + special.erf(standardised_mass/np.sqrt(2))) nh = len(halo_mass) return np.random.uniform(size=nh) < probability