Luminosity Functions

CosmoWAP includes luminosity function classes that compute number densities, magnification bias Q, and evolution bias for a given model. See arXiv:2107.13401 for an overview.

Key definitions (for flux-limited surveys):

\[b_e = -\frac{\partial \ln \bar{n}_g}{\partial \ln(1+z)}\bigg|_{F_c}, \quad Q = -\frac{\partial \ln \bar{n}_g}{\partial \ln L}\bigg|_{F_c}\]

Hα Luminosity Functions

For flux-limited Hα surveys (Euclid, Roman). These use Schechter-type luminosity functions:

\[\Phi(z, y) = \phi^*(z) \, g(y), \quad y \equiv L/L^*\]

where the shape function g(y) and characteristic density φ∗(z) are model-dependent.

class lib.luminosity_funcs.Model1LuminosityFunction(cosmo)

Standard Schechter function with g(y) = y^α exp(-y), α = -1.35.

class lib.luminosity_funcs.Model3LuminosityFunction(cosmo)

See Pozzetti et al. (2016) with α = -1.587, ν = 2.288.

Methods:

luminosity_function(L, zz)

Compute Φ(L, z) [h³/Mpc³].

number_density(F_c, zz)

Integrate luminosity function above flux cut F_c [erg/cm²/s].

get_Q(F_c, zz)

Magnification bias: Q = y_c g(y_c) / G(F_c, z).

get_be(F_c, zz)

Evolution bias from number density evolution and Q.

get_b_1(F_c, zz)

Flux-averaged linear bias using semi-analytic model from arXiv:1909.12069 (Table 2).

Magnitude-Limited Surveys

For apparent magnitude-limited surveys with K-corrections. The threshold absolute magnitude is:

\[M_c(z) = m_c - 5 \log_{10}\left[\frac{d_L(z)}{10\,\mathrm{pc}}\right] - K(z)\]
class lib.luminosity_funcs.BGSLuminosityFunction(cosmo)

DESI BGS r-band luminosity function. Schechter with α = -1.23, K(z) = 0.87z.

class lib.luminosity_funcs.LBGLuminosityFunction(cosmo)

Lyman Break Galaxy UV luminosity function for MegaMapper. Parameters from arXiv:1904.13378 (Table 3). K(z) = -2.5 log₁₀(1+z). Bias model from Eq. (2.7).

Methods: Same as Hα classes, but with magnitude cut m_c instead of flux cut.

For magnitude-limited surveys:

\[Q(z, m_c) = \frac{5}{2 \ln(10)} \frac{\Phi(z, M_c)}{\bar{n}_g(z, m_c)}\]

Usage

from cosmo_wap.lib.luminosity_funcs import Model3LuminosityFunction
from cosmo_wap.lib import utils
import numpy as np

cosmo = utils.get_cosmo()
LF = Model3LuminosityFunction(cosmo)

z = np.linspace(0.9, 1.8, 50)
F_c = 2e-16  # erg/cm²/s

# Number density
n_g = LF.number_density(F_c, z)

# Magnification and evolution biases
Q = LF.get_Q(F_c, z)
be = LF.get_be(F_c, z)

# Linear bias - from a magnitude dependent parameterization
b1 = LF.get_b_1(F_c, z)