Source code for slsim.Deflectors.MassLightConnection.richness2mass
import numpy as np
"""
Module to convert richness to mass using mass-richness relations. This is used in ClusterDeflector
to assign a mass to each cluster based on its richness.
"""
[docs]
def general_mass_richness(rich, alpha, rich_0, m_0, ln_m_scatter, min_mass=0.0):
"""Mass-richness relation:
M(N) = M_0 * (N / N_0) ** alpha VAR[ln(M)] = alpha**2 / N + lnM_scatter**2.
:param rich: richness
:type rich: float
:param alpha: slope
:type alpha: float
:param rich_0: pivot richness
:type rich_0: float
:param m_0: mass at pivot richness
:type m_0: float
:param ln_m_scatter: scatter in log mass
:type ln_m_scatter: float
:param min_mass: minimum mass
:type min_mass: float
"""
m = m_0 * (rich / rich_0) ** alpha
ln_m_var = alpha**2 / rich + ln_m_scatter**2
m_var = ln_m_var * m**2 # VAR[log(X)] ~ VAR[X] / E[X]^2
m += np.random.normal(0, np.sqrt(m_var))
m = np.maximum(m, min_mass)
return m
[docs]
def mass_richness_simet2017(rich, min_mass=1e12):
"""Mass-richness relation from Simet et al.
2017
:param rich: richness
:type rich: float
:param min_mass: minimum mass
:type min_mass: float
"""
return general_mass_richness(
rich,
alpha=1.33,
rich_0=40,
m_0=10**14.344,
ln_m_scatter=0.25,
min_mass=min_mass,
)
[docs]
def mass_richness_abdullah2022(rich, min_mass=1e12):
"""Mass-richness relation from Abdullah et al.
2022 (sred13)
:param rich: richness
:type rich: float
:param min_mass: minimum mass
:type min_mass: float
"""
return general_mass_richness(
rich, alpha=0.95, rich_0=1, m_0=11.4e12, ln_m_scatter=0.25, min_mass=min_mass
)
[docs]
def mass_richness_relation(rich, relation="Abdullah2022"):
"""Mass-richness relation :param rich: richness :param relation: mass-
richness relation :type relation: str."""
if relation == "simet2017":
return mass_richness_simet2017(rich)
elif relation == "Abdullah2022":
return mass_richness_abdullah2022(rich)
else:
raise ValueError(f"Unknown mass-richness relation: {relation}")