Luminosity and stellar mass functions

The stellar mass function (SMF) estimators are production-ready and validated. The luminosity function (LF) estimators share the same underlying code but have not yet been validated against reference datasets; they are marked as development below.

Stable: SMF estimators

1/Vmax (SMF)

Note

The 1/Vmax module contains both SMF and LF functions. Only the SMF functions (stellar_mass_function_vmax()) are stable. LF functions in this module are in development.

1/Vmax estimator for the luminosity function and stellar mass function.

Reference

Schmidt (1968), ApJ 151, 393. Condon (1989), ApJ 338, 13 — Poisson error formula. Johnston (2011), arXiv:1106.2039v3, §3, Eq. 51–53.

sum_stat.lf_smf.vmax.luminosity_function_vmax(cat, z_min, z_max, mag_bins, area_sr, cosmo, z_max_individual=None)[source]

1/Vmax luminosity function estimator.

Non-parametric estimator using the maximum-volume method of Schmidt (1968). Each galaxy contributes w_i / V_{max,i} to its magnitude bin (Johnston 2011 §3, Eq. 51–53).

Parameters:
  • cat (GalaxyCatalogue) – Galaxy catalogue with abs_mag populated.

  • z_min, z_max (float) – Redshift limits of the survey volume.

  • mag_bins (ndarray, shape (n_bins+1,)) – Absolute magnitude bin edges [mag].

  • area_sr (float) – Survey solid angle [sr].

  • cosmo (FlatLambdaCDM) – Cosmology for V_max computation.

  • z_max_individual (ndarray, optional) – Per-galaxy maximum observable redshift. Defaults to z_max.

Returns:

  • mag_centres (ndarray, shape (n_bins,)) – Absolute magnitude bin centres [mag].

  • phi (ndarray, shape (n_bins,)) – Luminosity function [Mpc^-3 mag^-1].

  • phi_err (ndarray, shape (n_bins,)) – Poisson-like uncertainty [Mpc^-3 mag^-1] (Condon 1989).

Parameters:
Return type:

tuple[ndarray, ndarray, ndarray]

References

Schmidt (1968), ApJ 151, 393. Condon (1989), ApJ 338, 13. Johnston (2011), arXiv:1106.2039v3, §3, Eq. 51–53.

sum_stat.lf_smf.vmax.stellar_mass_function_vmax(cat, z_min, z_max, mstar_bins, area_sr, cosmo, z_max_individual=None)[source]

1/Vmax stellar mass function estimator.

Non-parametric estimator using the maximum-volume method of Schmidt (1968), applied to stellar mass (Johnston 2011 §3, Eq. 51–53).

Parameters:
  • cat (GalaxyCatalogue) – Galaxy catalogue with log10_mstar populated.

  • z_min, z_max (float) – Redshift limits of the survey volume.

  • mstar_bins (ndarray, shape (n_bins+1,)) – log10(M_*/M_sun) bin edges [dex].

  • area_sr (float) – Survey solid angle [sr].

  • cosmo (FlatLambdaCDM) – Cosmology for V_max computation.

  • z_max_individual (ndarray, optional) – Per-galaxy maximum observable redshift. Defaults to z_max.

Returns:

  • mstar_centres (ndarray, shape (n_bins,)) – log10(M_*/M_sun) bin centres [dex].

  • phi (ndarray, shape (n_bins,)) – Stellar mass function [Mpc^-3 dex^-1].

  • phi_err (ndarray, shape (n_bins,)) – Poisson-like uncertainty [Mpc^-3 dex^-1] (Condon 1989).

Parameters:
Return type:

tuple[ndarray, ndarray, ndarray]

References

Schmidt (1968), ApJ 151, 393. Condon (1989), ApJ 338, 13. Johnston (2011), arXiv:1106.2039v3, §3, Eq. 51–53.

SWML (SMF)

Note

The SWML module contains both SMF and LF functions. Only the SMF functions (stellar_mass_function_swml()) are stable. LF functions in this module are in development.

Step-wise maximum likelihood (SWML) estimator for the luminosity function and stellar mass function.

Reference

Efstathiou, Ellis & Peterson (1988), MNRAS 232, 431. Johnston (2011), arXiv:1106.2039v3, §5.5, Eq. 87–91.

sum_stat.lf_smf.swml.luminosity_function_swml(cat, z_min, z_max, mag_limit, mag_bins, area_sr, cosmo, z_max_individual=None, max_iter=500, tol=1e-08)[source]

Step-wise maximum likelihood (SWML) luminosity function estimator.

Non-parametric estimator. The LF is modelled as a step function; its shape is found by maximising the normalisation-free likelihood (Johnston 2011 Eq. 87):

ln L = Σ_j n_j ln φ_j − Σ_i w_i ln[Σ_j φ_j H_{ij}]

where H_{ij} = ΔM_j if absolute-magnitude bin j is accessible to galaxy i (M_centre_j < M_faint(z_i)) and 0 otherwise. The fixed-point iteration (Johnston 2011 Eq. 88) is run until convergence. Absolute normalisation is set by matching the integral of φ to the total 1/V_max density.

Error bars are the Poisson approximation σ_k = φ_k / sqrt(n_k) (Johnston 2011 Eq. 90).

Parameters:
  • cat (GalaxyCatalogue) – Catalogue with abs_mag, redshift, and weight populated.

  • z_min, z_max (float) – Redshift limits of the survey.

  • mag_limit (float) – Survey apparent-magnitude limit [mag].

  • mag_bins (ndarray, shape (n_bins+1,)) – Absolute-magnitude bin edges [mag].

  • area_sr (float) – Survey solid angle [sr].

  • cosmo (FlatLambdaCDM) – Cosmology for distance modulus and V_max.

  • z_max_individual (ndarray, optional) – Per-galaxy maximum observable redshift. Defaults to z_max.

  • max_iter (int) – Maximum SWML iterations.

  • tol (float) – Convergence tolerance on relative change in φ.

Returns:

  • mag_centres (ndarray, shape (n_bins,)) – Absolute-magnitude bin centres [mag].

  • phi (ndarray, shape (n_bins,)) – Luminosity function [Mpc^-3 mag^-1].

  • phi_err (ndarray, shape (n_bins,)) – Poisson uncertainty φ_k / sqrt(n_k) [Mpc^-3 mag^-1].

Parameters:
Return type:

tuple[ndarray, ndarray, ndarray]

References

Efstathiou, Ellis & Peterson (1988), MNRAS 232, 431. Johnston (2011), arXiv:1106.2039v3, §5.5, Eq. 87–91.

sum_stat.lf_smf.swml.stellar_mass_function_swml(cat, z_min, z_max, log10_mstar_limit, mstar_bins, area_sr, cosmo, z_max_individual=None, max_iter=500, tol=1e-08)[source]

Step-wise maximum likelihood (SWML) stellar mass function estimator.

Non-parametric estimator. The SMF is modelled as a step function; its shape is found by maximising the normalisation-free likelihood (Johnston 2011 Eq. 87):

ln L = Σ_j n_j ln φ_j − Σ_i w_i ln[Σ_j φ_j H_{ij}]

where H_{ij} = Δm_j if stellar-mass bin j is accessible to galaxy i (mstar_centre_j > log10_M_lim_i) and 0 otherwise. The fixed-point iteration (Johnston 2011 Eq. 88) is run until convergence. Absolute normalisation is set by matching the integral of φ to the total 1/V_max density.

Error bars are the Poisson approximation σ_k = φ_k / sqrt(n_k) (Johnston 2011 Eq. 90).

Parameters:
  • cat (GalaxyCatalogue) – Catalogue with log10_mstar, redshift, and weight populated.

  • z_min, z_max (float) – Redshift limits of the survey.

  • log10_mstar_limit (ndarray, shape (N,), or float) – Per-galaxy log10(M_*/M_sun) completeness limit — the minimum stellar mass observable by the survey at each galaxy’s redshift. A scalar applies a uniform limit to all galaxies.

  • mstar_bins (ndarray, shape (n_bins+1,)) – log10(M_*/M_sun) bin edges [dex].

  • area_sr (float) – Survey solid angle [sr].

  • cosmo (FlatLambdaCDM) – Cosmology for V_max computation (used for absolute normalisation).

  • z_max_individual (ndarray, optional) – Per-galaxy maximum observable redshift. Defaults to z_max.

  • max_iter (int) – Maximum SWML iterations.

  • tol (float) – Convergence tolerance on relative change in φ.

Returns:

  • mstar_centres (ndarray, shape (n_bins,)) – log10(M_*/M_sun) bin centres [dex].

  • phi (ndarray, shape (n_bins,)) – Stellar mass function [Mpc^-3 dex^-1].

  • phi_err (ndarray, shape (n_bins,)) – Poisson uncertainty φ_k / sqrt(n_k) [Mpc^-3 dex^-1].

Parameters:
Return type:

tuple[ndarray, ndarray, ndarray]

References

Efstathiou, Ellis & Peterson (1988), MNRAS 232, 431. Johnston (2011), arXiv:1106.2039v3, §5.5, Eq. 87–91.

C⁻ cumulative (SMF)

Note

The C⁻ module contains both SMF and LF functions. Only the SMF function (cumulative_stellar_mass_function_cminus()) is stable. LF functions in this module are in development.

C⁻ (Lynden-Bell 1971) non-parametric cumulative LF and SMF estimators.

Reference

Lynden-Bell (1971), MNRAS 155, 95. Johnston (2011), arXiv:1106.2039v3, §5.3, Eq. 74–77.

sum_stat.lf_smf.cminus.cumulative_luminosity_function_cminus(cat, z_min, z_max, mag_limit, area_sr, cosmo, z_max_individual=None)[source]

C⁻ (Lynden-Bell 1971) cumulative luminosity function estimator.

Non-parametric, density-independent estimator of the cumulative LF Φ(< M) — the number density of galaxies brighter than M — based on the product formula of Lynden-Bell (1971) as described in Johnston (2011) §5.3, Eq. 74–77:

Φ(M_{(k+1)}) / Φ(M_{(k)}) = (c_k + w_k) / c_k

where c_k = Σ_{j≤k : M_faint(z_j) > M_{(k+1)}} w_j is the weighted count of brighter galaxies at positions where M_{(k+1)} is still observable.

Absolute normalisation is set by matching Φ(M_faintest) to the total 1/V_max number density.

Parameters:
  • cat (GalaxyCatalogue) – Catalogue with abs_mag, redshift, and weight populated.

  • z_min, z_max (float) – Redshift limits.

  • mag_limit (float) – Survey apparent-magnitude limit [mag].

  • area_sr (float) – Survey solid angle [sr].

  • cosmo (FlatLambdaCDM) – Cosmology for distance modulus and V_max.

  • z_max_individual (ndarray, optional) – Per-galaxy maximum observable redshift. Defaults to z_max.

Returns:

  • M (ndarray, shape (N,)) – Sorted absolute magnitudes, brightest → faintest [mag].

  • Phi (ndarray, shape (N,)) – Cumulative LF Φ(< M) [Mpc^-3].

  • Phi_err (ndarray, shape (N,)) – Uncertainty on Φ [Mpc^-3].

Parameters:
Return type:

tuple[ndarray, ndarray, ndarray]

References

Lynden-Bell (1971), MNRAS 155, 95. Johnston (2011), arXiv:1106.2039v3, §5.3, Eq. 74–77.

sum_stat.lf_smf.cminus.cumulative_stellar_mass_function_cminus(cat, z_min, z_max, log10_mstar_limit, area_sr, cosmo, z_max_individual=None)[source]

C⁻ (Lynden-Bell 1971) cumulative stellar mass function estimator.

Non-parametric, density-independent estimator of the cumulative SMF Φ(> m) — the number density of galaxies more massive than m — based on the product formula of Lynden-Bell (1971) as described in Johnston (2011) §5.3, Eq. 74–77:

Φ(m_{(k+1)}) / Φ(m_{(k)}) = (c_k + w_k) / c_k

where c_k = Σ_{j≤k : log10_M_lim(z_j) < m_{(k+1)}} w_j is the weighted count of more-massive galaxies whose survey is complete at m_{(k+1)}. Galaxies are sorted massive → light (descending log10_M).

Absolute normalisation is set by matching Φ(m_lightest) to the total 1/V_max number density.

Parameters:
  • cat (GalaxyCatalogue) – Catalogue with log10_mstar, redshift, and weight populated.

  • z_min, z_max (float) – Redshift limits.

  • log10_mstar_limit (ndarray, shape (N,), or float) – Per-galaxy log10(M_*/M_sun) completeness limit — the minimum stellar mass observable by the survey at each galaxy’s redshift. A scalar applies a uniform limit to all galaxies.

  • area_sr (float) – Survey solid angle [sr].

  • cosmo (FlatLambdaCDM) – Cosmology for V_max computation.

  • z_max_individual (ndarray, optional) – Per-galaxy maximum observable redshift. Defaults to z_max.

Returns:

  • m (ndarray, shape (N,)) – log10(M_*/M_sun) sorted massive → light [dex].

  • Phi (ndarray, shape (N,)) – Cumulative SMF Φ(> m) [Mpc^-3].

  • Phi_err (ndarray, shape (N,)) – Uncertainty on Φ [Mpc^-3].

Parameters:
Return type:

tuple[ndarray, ndarray, ndarray]

References

Lynden-Bell (1971), MNRAS 155, 95. Johnston (2011), arXiv:1106.2039v3, §5.3, Eq. 74–77.

Completeness scan

Completeness scan estimator following Johnston, Teodoro & Hendry (2007–2012).

Scans a completeness threshold m* from bright to the survey faint limit and returns the Tc(m*) and Tv(m*) statistics as arrays, implementing all three contributions from the companion paper series:

  • Paper I — bright-limit extension of the associated sets and the full magnitude scan (Johnston, Teodoro & Hendry 2007, MNRAS 376, 1757).

  • Paper II — adaptive S/N smoothing so that each scan point rests on an equal information content regardless of local galaxy density (Teodoro, Johnston & Hendry 2010, MNRAS 405, 1187).

  • Paper III — error propagation for Tc and Tv; characterisation of incompleteness signatures (Johnston, Teodoro & Hendry 2012, MNRAS 421, 270).

The underlying rank variable is the Rauzy (2001) ζ statistic (MNRAS 324, 51), normalised so that under the null hypothesis of completeness ζ_i ~ Uniform(0,1) and both Tc, Tv ~ N(0, 1).

References

Johnston, Teodoro & Hendry (2007), MNRAS 376, 1757. Teodoro, Johnston & Hendry (2010), MNRAS 405, 1187. Johnston, Teodoro & Hendry (2012), MNRAS 421, 270. Rauzy (2001), MNRAS 324, 51. Johnston (2011), arXiv:1106.2039v3, §10.2, Eq. 160–166.

sum_stat.lf_smf.completeness_scan.completeness_scan(app_mag, abs_mag, redshift, m_lim_faint, cosmo, *, m_lim_bright=None, n_test=50, sn_target=None)[source]

Johnston-Teodoro-Hendry (2007–2012) completeness scan.

Scans a completeness threshold m* across the apparent-magnitude range of the sample and returns the Tc(m*) and Tv(m*) completeness statistics as functions of m*.

Under the null hypothesis that the sample is complete down to m*, both Tc and Tv are drawn from N(0, 1). Significant negative excursions (Tc or Tv ≪ 0) indicate that the sample is incomplete at that magnitude.

Two scan modes are available:

Fixed-grid (sn_target=None, Paper I):

n_test equally-spaced thresholds from min(app_mag) to m_lim_faint. At each threshold m*, ALL galaxies with app_mag m* (and app_mag m_lim_bright if given) are used — a cumulative test.

Adaptive S/N (sn_target given, Paper II):

Galaxies are sorted by app_mag and grouped into sliding windows of N_target = max(int(sn_target**2), 10) galaxies. Each window provides one scan point at m* = max(app_mag in window), maintaining a constant signal-to-noise ratio per point regardless of the local galaxy density (Teodoro et al. 2010 §3).

The associated sets used in both modes account for an optional bright apparent-magnitude limit m_lim_bright following the extension in Johnston et al. (2007) §3.

Parameters:
  • app_mag (ndarray, shape (N,)) – Observed apparent magnitudes.

  • abs_mag (ndarray, shape (N,)) – Absolute magnitudes (must satisfy abs_mag app_mag distmod(z)).

  • redshift (ndarray, shape (N,)) – Spectroscopic redshifts.

  • m_lim_faint (float) – Survey faint apparent-magnitude limit [mag].

  • cosmo (FlatLambdaCDM) – Cosmology used to compute distance moduli.

  • m_lim_bright (float, optional) – Survey bright apparent-magnitude limit [mag]. When given, the associated sets are clipped on both sides (Paper I §3).

  • n_test (int, optional) – Number of threshold values in fixed-grid mode. Default 50. Ignored when sn_target is provided.

  • sn_target (float, optional) – Target signal-to-noise ratio per scan point in adaptive mode (Paper II §3). Each window contains max(int(sn_target**2), 10) galaxies. When None (default), fixed-grid mode is used.

Returns:

  • dict with the following keys, all np.ndarray of the same length

  • m_star (ndarray) – Scan threshold values m* [mag].

  • Tc (ndarray) – Completeness statistic based on mean(ζ). N(0,1) under H₀. NaN where fewer than 3 galaxies contribute.

  • Tv (ndarray) – Completeness statistic based on var(ζ). N(0,1) under H₀. NaN where fewer than 3 galaxies contribute.

  • Tc_err (ndarray) – Formal uncertainty on Tc (Paper III §4). Equals 1.0 for fixed-grid mode; scales as 1 / sqrt(n_galaxies / N_target) in adaptive mode.

  • Tv_err (ndarray) – Formal uncertainty on Tv (Paper III §4). Same scaling as Tc_err.

  • n_galaxies (ndarray, dtype int) – Number of galaxies contributing to each scan point.

Parameters:
Return type:

dict[str, ndarray]

Notes

An incompleteness signature appears as a drop in Tc (and/or Tv) as m* moves through the missing region, sometimes followed by a peak at slightly fainter magnitudes (Johnston et al. 2012 §3).

The statistic Tc is more sensitive to a deficit in the number of faint galaxies; Tv detects changes in the spread of the rank distribution and can flag over-completeness (excess objects) as well.

References

Johnston, Teodoro & Hendry (2007), MNRAS 376, 1757. Teodoro, Johnston & Hendry (2010), MNRAS 405, 1187. Johnston, Teodoro & Hendry (2012), MNRAS 421, 270. Rauzy (2001), MNRAS 324, 51. Johnston (2011), arXiv:1106.2039v3, §10.2, Eq. 160–166.

Statistical independence tests

Statistical tests for magnitude–redshift independence in truncated samples.

Implements the Efron & Petrosian (1992) τ test and the Rauzy (2001) Tc/Tv completeness tests as described in Johnston (2011).

Reference

Efron & Petrosian (1992), ApJ 399, 345. Rauzy (2001), MNRAS 324, 51. Johnston, Teodoro & Hendry (2007), MNRAS 376, 1757. Johnston (2011), arXiv:1106.2039v3, §10.1–10.2, Eq. 155–166.

sum_stat.lf_smf.independence.efron_petrosian_tau(abs_mag, redshift, mag_limit, cosmo, weight=None)[source]

Efron–Petrosian τ statistic for testing LF/redshift independence.

Tests the null hypothesis H₀ that absolute magnitude M is statistically independent of redshift z given the flux-limited selection truncation. Under H₀, τ ~ N(0, 1) (Johnston 2011 §10.1, Eq. 158–159):

τ = Σ_i (R_i − E_i) / sqrt(Σ_i V_i)

For each galaxy i the associated set is (Johnston 2011 Eq. 156):

J_i = {j : z_j ≤ z_i  AND  M_j < M_faint(z_i)}

i.e. galaxies at redshifts no greater than z_i whose magnitude is observable at z_i. R_i is the rank of M_i within {M_j : j ∈ J_i} ordered by brightness, E_i = (|J_i| + 1)/2 is the expected rank under H₀, and V_i = (|J_i|² − 1)/12 is its variance.

A positive τ means brighter galaxies are found preferentially at higher redshift (positive luminosity evolution).

Parameters:
  • abs_mag (ndarray, shape (N,)) – Absolute magnitudes.

  • redshift (ndarray, shape (N,)) – Redshifts.

  • mag_limit (float) – Survey apparent-magnitude limit [mag].

  • cosmo (FlatLambdaCDM) – Cosmology for distance modulus.

  • weight (ndarray, optional) – Per-galaxy weights (currently unused in the rank computation but reserved for future weighted extensions).

Returns:

  • dict with keys

  • tau (float) – τ statistic; τ ~ N(0,1) under H₀.

  • p_value (float) – Two-tailed p-value P(|Z| ≥ |τ|) under H₀.

  • numerator (float) – Σ_i (R_i − E_i).

  • denominator (float) – sqrt(Σ_i V_i).

  • n_used (int) – Number of galaxies with |J_i| ≥ 2 contributing to τ.

Parameters:
Return type:

dict[str, float]

References

Efron & Petrosian (1992), ApJ 399, 345. Johnston (2011), arXiv:1106.2039v3, §10.1, Eq. 155–159.

sum_stat.lf_smf.independence.rauzy_completeness(abs_mag, redshift, mag_limit, cosmo)[source]

Rauzy (2001) Tc and Tv completeness statistics.

The Tc and Tv tests check whether the distribution of magnitudes within the associated sets J_i is consistent with a complete, flux-limited sample (Johnston 2011 §10.2, Eq. 160–166). The ζ_i variables are uniform on [0, 1] under the null hypothesis of completeness; deviations indicate incompleteness.

Two statistics are returned:

  • Tc (completeness in count): based on the mean of ζ_i, which should equal 0.5 under H₀.

  • Tv (completeness in variance): based on the variance of ζ_i, which should equal 1/12 under H₀.

Parameters:
  • abs_mag (ndarray, shape (N,)) – Absolute magnitudes.

  • redshift (ndarray, shape (N,)) – Redshifts.

  • mag_limit (float) – Survey apparent-magnitude limit [mag].

  • cosmo (FlatLambdaCDM) – Cosmology for distance modulus.

Returns:

  • dict with keys

  • Tc (float) – Completeness statistic based on ranks (N(0,1) under H₀).

  • Tv (float) – Completeness statistic based on rank variance (N(0,1) under H₀).

  • zeta_mean (float) – Sample mean of ζ_i (should be 0.5 under H₀).

  • zeta_var (float) – Sample variance of ζ_i (should be 1/12 ≈ 0.0833 under H₀).

  • n_used (int) – Number of galaxies contributing.

Parameters:
Return type:

dict[str, float]

References

Rauzy (2001), MNRAS 324, 51. Johnston, Teodoro & Hendry (2007), MNRAS 376, 1757. Johnston (2011), arXiv:1106.2039v3, §10.2, Eq. 160–166.

Note

The luminosity function (LF) counterparts of the estimators above (luminosity_function_vmax, luminosity_function_swml, cumulative_luminosity_function_cminus) share the same modules but are in active development — validation against COSMOS and GAMA is not yet complete. See Estimators in development for the full status.

Deprecated: Schechter model functions

Deprecated since version 0.1: The modules below are deprecated and will be removed in a future release. Schechter model evaluation functions and reference data have moved to the gga_model package.

Zalesky et al. (2025) galaxy stellar mass function: models and digitized data.

Implements the single and double Schechter SMF in log10-mass units (Eqs. 9–10) with the Eddington bias convolution kernel (Eq. 11) from the Euclid Cosmic Dawn Survey stellar mass function paper. Digitized Tables 1, A.1–A.3 are provided.

Reference

Zalesky, L. et al. (Euclid Collaboration) 2025, A&A (submitted), arXiv:2504.17867.

Cosmology used in the paper

H0 = 70 km/s/Mpc, Ωm = 0.3, ΩΛ = 0.7, Chabrier (2003) IMF.

sum_stat.lf_smf.zalesky25.ZALESKY2025: dict[str, ndarray] = {'quiescent': array([[ 2.000e-01,  5.000e-01,  1.087e+01,  5.000e-02,  5.000e-02,          1.091e+01, -1.850e+00,  2.900e-01,  3.200e-01, -2.340e+00,         -4.880e+00,  1.180e+00,  3.300e-01, -5.870e+00, -4.800e-01,          1.400e-01,  1.100e-01, -5.900e-01, -2.860e+00,  5.000e-02,          5.000e-02, -2.880e+00],        [ 5.000e-01,  8.000e-01,  1.083e+01,  3.000e-02,  3.000e-02,          1.084e+01, -1.660e+00,  4.500e-01,  4.600e-01, -2.480e+00,         -5.000e+00,  2.280e+00,  3.700e-01, -6.390e+00, -3.900e-01,          9.000e-02,  0.000e+00, -4.400e-01, -2.870e+00,  1.000e-02,          1.000e-02, -2.860e+00],        [ 8.000e-01,  1.100e+00,  1.074e+01,  2.000e-02,  2.000e-02,          1.074e+01,        nan,        nan,        nan,        nan,                nan,        nan,        nan,        nan, -1.700e-01,          4.000e-02,  4.000e-02, -1.800e-01, -3.090e+00,  2.000e-02,          2.000e-02, -3.090e+00],        [ 1.100e+00,  1.500e+00,  1.062e+01,  2.000e-02,  3.000e-02,          1.062e+01,        nan,        nan,        nan,        nan,                nan,        nan,        nan,        nan,  4.600e-01,          7.000e-02,  7.000e-02,  4.500e-01, -3.310e+00,  1.000e-02,          1.000e-02, -3.300e+00],        [ 1.500e+00,  2.000e+00,  1.082e+01,  2.000e-02,  2.000e-02,          1.084e+01,        nan,        nan,        nan,        nan,                nan,        nan,        nan,        nan,  1.000e-01,          1.100e-01,  1.100e-01,  2.000e-02, -3.880e+00,  1.000e-02,          1.000e-02, -3.890e+00],        [ 2.000e+00,  2.500e+00,  1.095e+01,  4.000e-02,  5.000e-02,          1.098e+01,        nan,        nan,        nan,        nan,                nan,        nan,        nan,        nan,  5.000e-02,          1.800e-01,  5.000e-02,  0.000e+00, -4.620e+00,  4.000e-02,          4.000e-02, -4.620e+00],        [ 2.500e+00,  3.000e+00,  1.093e+01,  1.700e-01,  2.300e-01,          1.112e+01,        nan,        nan,        nan,        nan,                nan,        nan,        nan,        nan,  4.500e-01,          8.500e-01,  4.000e-01,  0.000e+00, -5.470e+00,  9.000e-01,          2.300e-01, -5.490e+00]]), 'star_forming': array([[ 2.000e-01,  5.000e-01,  1.079e+01,  1.100e-01,  1.300e-01,          1.084e+01, -1.420e+00,  6.000e-02,  6.000e-02, -1.540e+00,         -3.080e+00,  1.400e-01,  1.400e-01, -3.340e+00, -4.900e-01,          6.200e-01,  6.300e-01, -9.400e-01, -3.260e+00,  2.900e-01,          2.900e-01, -3.120e+00],        [ 5.000e-01,  8.000e-01,  1.081e+01,  6.000e-02,  5.000e-02,          1.080e+01, -1.410e+00,  4.000e-02,  4.000e-02, -1.460e+00,         -3.080e+00,  9.000e-02,  1.200e-01, -3.160e+00, -5.100e-01,          3.100e-01,  3.200e-01, -5.600e-01, -3.050e+00,  7.000e-02,          7.000e-02, -2.970e+00],        [ 8.000e-01,  1.100e+00,  1.079e+01,  6.000e-02,  6.000e-02,          1.081e+01, -1.490e+00,  5.000e-02,  5.000e-02, -1.510e+00,         -3.290e+00,  9.000e-02,  9.000e-02, -3.330e+00,  1.000e-02,          3.200e-01,  2.700e-01, -1.000e-01, -3.250e+00,  8.000e-02,          8.000e-02, -3.210e+00],        [ 1.100e+00,  1.500e+00,  1.108e+01,  4.000e-02,  6.000e-02,          1.107e+01, -1.370e+00,  9.000e-02,  6.000e-02, -1.330e+00,         -3.470e+00,  9.000e-02,  1.500e-01, -3.380e+00, -8.200e-01,          1.000e+00,  4.600e-01,  9.700e-01, -4.120e+00,  1.000e+00,          3.300e-01, -5.020e+00],        [ 1.500e+00,  2.000e+00,  1.113e+01,  4.000e-02,  4.000e-02,          1.109e+01, -1.360e+00,  3.000e-02,  5.000e-02, -1.330e+00,         -3.580e+00,  8.000e-02,  1.300e-01, -3.500e+00, -4.400e-01,          1.110e+00,  7.900e-01,  1.000e+00, -4.470e+00,  9.000e-01,          2.800e-01, -4.870e+00],        [ 2.000e+00,  2.500e+00,  1.108e+01,  3.000e-02,  2.000e-02,          1.109e+01, -1.550e+00,  0.000e+00,  0.000e+00, -1.550e+00,         -3.790e+00,  2.000e-02,  2.000e-02, -3.800e+00,        nan,                nan,        nan,        nan,        nan,        nan,                nan,        nan],        [ 2.500e+00,  3.000e+00,  1.101e+01,  2.000e-02,  2.000e-02,          1.102e+01, -1.700e+00,  1.000e-02,  0.000e+00, -1.700e+00,         -3.900e+00,  3.000e-02,  2.000e-02, -3.920e+00,        nan,                nan,        nan,        nan,        nan,        nan,                nan,        nan]]), 'total': array([[ 2.000e-01,  5.000e-01,  1.092e+01,  9.000e-02,  9.000e-02,          1.094e+01, -1.420e+00,  7.000e-02,  8.000e-02, -1.550e+00,         -3.100e+00,  1.900e-01,  1.600e-01, -3.380e+00, -6.100e-01,          3.700e-01,  3.200e-01, -8.400e-01, -2.880e+00,  1.700e-01,          1.700e-01, -2.790e+00],        [ 5.000e-01,  8.000e-01,  1.088e+01,  4.000e-02,  4.000e-02,          1.087e+01, -1.370e+00,  5.000e-02,  5.000e-02, -1.400e+00,         -3.030e+00,  1.200e-01,  1.200e-01, -3.090e+00, -5.400e-01,          2.700e-01,  2.200e-01, -5.600e-01, -2.780e+00,  6.000e-02,          4.000e-02, -2.740e+00],        [ 8.000e-01,  1.100e+00,  1.086e+01,  4.000e-02,  5.000e-02,          1.089e+01, -1.460e+00,  7.000e-02,  8.000e-02, -1.540e+00,         -3.300e+00,  1.400e-01,  1.000e-01, -3.460e+00, -3.500e-01,          2.600e-01,  2.000e-01, -5.500e-01, -2.980e+00,  7.000e-02,          7.000e-02, -2.930e+00],        [ 1.100e+00,  1.500e+00,  1.098e+01,  4.000e-02,  4.000e-02,          1.099e+01, -1.440e+00,  9.000e-02,  8.000e-02, -1.550e+00,         -3.620e+00,  2.200e-01,  1.400e-01, -3.840e+00, -7.700e-01,          1.900e-01,  1.600e-01, -8.600e-01, -3.180e+00,  8.000e-02,          9.000e-02, -3.120e+00],        [ 1.500e+00,  2.000e+00,  1.115e+01,  4.000e-02,  4.000e-02,          1.114e+01, -1.390e+00,  6.000e-02,  1.000e-01, -1.550e+00,         -3.700e+00,  2.100e-01,  2.100e-01, -4.050e+00, -1.010e+00,          4.100e-01,  2.500e-01, -1.100e+00, -3.770e+00,  2.400e-01,          6.000e-02, -3.560e+00],        [ 2.000e+00,  2.500e+00,  1.115e+01,  2.000e-02,  2.000e-02,          1.115e+01, -1.550e+00,  0.000e+00,  1.000e-02, -1.550e+00,         -3.830e+00,  3.000e-02,  2.000e-02, -3.840e+00,        nan,                nan,        nan,        nan,        nan,        nan,                nan,        nan],        [ 2.500e+00,  3.000e+00,  1.104e+01,  2.000e-02,  2.000e-02,          1.105e+01, -1.700e+00,  0.000e+00,  1.000e-02, -1.700e+00,         -3.930e+00,  3.000e-02,  2.000e-02, -3.940e+00,        nan,                nan,        nan,        nan,        nan,        nan,                nan,        nan],        [ 3.000e+00,  3.500e+00,  1.104e+01,  2.000e-02,  2.000e-02,          1.105e+01, -1.690e+00,  1.000e-02,  1.000e-02, -1.700e+00,         -4.070e+00,  3.000e-02,  3.000e-02, -4.090e+00,        nan,                nan,        nan,        nan,        nan,        nan,                nan,        nan],        [ 3.500e+00,  4.500e+00,  1.087e+01,  5.000e-02,  6.000e-02,          1.093e+01, -2.010e+00,  6.000e-02,  3.000e-02, -2.050e+00,         -4.480e+00,  1.200e-01,  7.000e-02, -4.570e+00,        nan,                nan,        nan,        nan,        nan,        nan,                nan,        nan],        [ 4.500e+00,  5.500e+00,  1.068e+01,  2.400e-01,  1.800e-01,          1.095e+01, -2.140e+00,  1.000e-01,  4.000e-02, -2.200e+00,         -4.990e+00,  4.900e-01,  2.600e-01, -5.460e+00,        nan,                nan,        nan,        nan,        nan,        nan,                nan,        nan],        [ 5.500e+00,  6.500e+00,  1.103e+01,  1.200e-01,  1.600e-01,          1.120e+01, -2.050e+00,  1.000e-01,  1.600e-01, -2.200e+00,         -5.750e+00,  3.200e-01,  1.500e-01, -6.090e+00,        nan,                nan,        nan,        nan,        nan,        nan,                nan,        nan]])}

Digitized Tables A.1–A.3 of Zalesky et al. (2025).

Keys are 'total', 'star_forming', and 'quiescent'. Each value is a numpy array of shape (n_zbins, 22). Use ZALESKY2025_COLUMNS to map column names to indices. For quiescent at z > 0.8 the single Schechter component occupies the alpha2/log10_phi2 columns (alpha1/log10_phi1 are NaN).

sum_stat.lf_smf.zalesky25.ZALESKY2025_COLUMNS: dict[str, int] = {'alpha1_ehi': 7, 'alpha1_elo': 8, 'alpha1_map': 9, 'alpha1_med': 6, 'alpha2_ehi': 15, 'alpha2_elo': 16, 'alpha2_map': 17, 'alpha2_med': 14, 'log10_mstar_ehi': 3, 'log10_mstar_elo': 4, 'log10_mstar_map': 5, 'log10_mstar_med': 2, 'log10_phi1_ehi': 11, 'log10_phi1_elo': 12, 'log10_phi1_map': 13, 'log10_phi1_med': 10, 'log10_phi2_ehi': 19, 'log10_phi2_elo': 20, 'log10_phi2_map': 21, 'log10_phi2_med': 18, 'z_hi': 1, 'z_lo': 0}

Column name → column index in the ZALESKY2025 parameter arrays.

sum_stat.lf_smf.zalesky25.ZALESKY2025_TABLE1_COLUMNS: dict[str, int] = {'log10_mstar_lim': 3, 'n_gal': 4, 'volume_1e6_Mpc3': 2, 'z_hi': 1, 'z_lo': 0}

Column name → column index in ZALESKY2025_TABLE1.

sum_stat.lf_smf.zalesky25.convolve_smf_eddington(phi_fn, log10_mstar, z, sigma_edd=0.6, tau_c=0.05, n_kernel=201, kernel_range=3.0)[source]

Forward-model: convolve intrinsic SMF with the Eddington bias kernel.

Computes the observed (Eddington-broadened) SMF via:

φ_obs(m) = ∫ φ_true(m − δm) D(δm, z) dδm

using a uniform grid over δm ∈ [−kernel_range, +kernel_range].

Parameters:
  • phi_fn (callable) – Intrinsic SMF: phi_fn(log10_mstar) jnp.ndarray. Must accept a 1-D JAX array and return φ [Mpc^-3 dex^-1].

  • log10_mstar (jnp.ndarray, shape (N,)) – log10(M / M_sun) grid at which to evaluate φ_obs.

  • z (float) – Effective redshift (for Lorentzian width τ_Edd = τ_c (1+z)).

  • sigma_edd (float) – Eddington kernel Gaussian width [dex]. Default 0.6.

  • tau_c (float) – Eddington kernel Lorentzian width parameter [dex]. Default 0.05.

  • n_kernel (int) – Number of quadrature points in δm. Default 201.

  • kernel_range (float) – Half-width of δm integration range [dex]. Default 3.0 (±5σ_Edd).

Returns:

phi_obs (jnp.ndarray, shape (N,)) – Observed SMF [Mpc^-3 dex^-1].

Parameters:
Return type:

Array

sum_stat.lf_smf.zalesky25.double_schechter_mass(log10_mstar, log10_mstar_char, log10_phi1, alpha1, log10_phi2, alpha2)[source]

Double Schechter SMF with shared characteristic mass.

Evaluates (Zalesky et al. 2025 Eq. 10):

φ(m) = ln(10) exp(−x) [Φ1* x^{α1+1} + Φ2* x^{α2+1}]

where x = 10^{m − m*}.

Parameters:
  • log10_mstar (jnp.ndarray) – log10(M / M_sun) at which to evaluate φ.

  • log10_mstar_char (float) – log10(M* / M_sun) — shared characteristic stellar mass.

  • log10_phi1 (float) – log10(Φ1* / [Mpc^-3 dex^-1]).

  • alpha1 (float) – Slope of the first component.

  • log10_phi2 (float) – log10(Φ2* / [Mpc^-3 dex^-1]).

  • alpha2 (float) – Slope of the second component.

Returns:

phi (jnp.ndarray) – φ(log10 M) [Mpc^-3 dex^-1], same shape as log10_mstar.

Parameters:
Return type:

Array

References

Zalesky et al. (2025), arXiv:2504.17867, Eq. (10).

sum_stat.lf_smf.zalesky25.eddington_kernel(delta_m, z, sigma_edd=0.6, tau_c=0.05)[source]

Eddington bias convolution kernel.

Product of a Gaussian (photometric scatter) and a Lorentzian (redshift uncertainty) as defined in Zalesky et al. (2025) Eq. (11):

D(δm, z) = exp(−δm² / 2σ²_Edd) × [τ_Edd / (2π)] / [(τ_Edd/2)² + δm²]

where τ_Edd = τ_c (1 + z). The kernel is unnormalised; the overall normalisation is absorbed by Φ* during fitting.

Parameters:
  • delta_m (jnp.ndarray) – Mass offset δm = m_obs − m_true [dex].

  • z (float) – Redshift used to compute τ_Edd = τ_c (1 + z).

  • sigma_edd (float) – Gaussian standard deviation [dex]. Default 0.6.

  • tau_c (float) – Lorentzian width parameter [dex]. Default 0.05.

Returns:

kernel (jnp.ndarray) – Unnormalised kernel values, same shape as delta_m.

Parameters:
Return type:

Array

References

Zalesky et al. (2025), arXiv:2504.17867, Eq. (11).

sum_stat.lf_smf.zalesky25.schechter_mass(log10_mstar, log10_phi_star, log10_mstar_char, alpha)[source]

Single Schechter SMF in log10-mass (per-dex) units.

Evaluates (Zalesky et al. 2025 Eq. 9):

φ(m) = ln(10) Φ* 10^{(α+1)(m−m*)} exp(−10^{m−m*})
Parameters:
  • log10_mstar (jnp.ndarray) – log10(M / M_sun) at which to evaluate φ.

  • log10_phi_star (float) – log10(Φ* / [Mpc^-3 dex^-1]).

  • log10_mstar_char (float) – log10(M* / M_sun) — characteristic stellar mass.

  • alpha (float) – Faint-end slope.

Returns:

phi (jnp.ndarray) – φ(log10 M) [Mpc^-3 dex^-1], same shape as log10_mstar.

Parameters:
  • log10_mstar (Array)

  • log10_phi_star (float)

  • log10_mstar_char (float)

  • alpha (float)

Return type:

Array

References

Schechter (1976), ApJ 203, 297. Zalesky et al. (2025), arXiv:2504.17867, Eq. (9).

sum_stat.lf_smf.zalesky25.zalesky2025_smf(log10_mstar, z_bin, population='total', use_map=False)[source]

Evaluate the Zalesky et al. (2025) best-fit SMF for a redshift bin.

Looks up the Schechter parameters from Tables A.1–A.3 and evaluates the appropriate single or double Schechter model via schechter_mass() or double_schechter_mass().

Parameters:
  • log10_mstar (array-like) – log10(M / M_sun) values at which to evaluate φ.

  • z_bin (int) – Zero-based index into the redshift bins for the chosen population. See ZALESKY2025 for the bin ordering (Table A.1–A.3).

  • population ({‘total’, ‘star_forming’, ‘quiescent’}) – Galaxy population.

  • use_map (bool) – If True use MAP (maximum a posteriori) values; otherwise median.

Returns:

phi (jnp.ndarray) – φ(log10 M) [Mpc^-3 dex^-1].

Parameters:
Return type:

Array

Examples

Evaluate the total SMF in the 0.2 < z ≤ 0.5 bin:

>>> import numpy as np
>>> log_m = np.linspace(9.0, 12.5, 200)
>>> phi = zalesky2025_smf(log_m, z_bin=0, population='total')

Ilbert et al. (2013) galaxy stellar mass function: model and digitized data.

Implements the double Schechter stellar mass function (Eq. 2) and provides the best-fit parameters digitized from Table 2 of Ilbert et al. (2013), covering the full, quiescent, and star-forming galaxy populations over 0.2 < z < 4.

Reference

Ilbert, O. et al. 2013, A&A, 556, A55. DOI: 10.1051/0004-6361/201321100

Cosmology used in the paper

Ωm = 0.3, ΩΛ = 0.7, H0 = 70 km/s/Mpc, Chabrier (2003) IMF.

sum_stat.lf_smf.ilbert2013.ILBERT2013: dict[str, ndarray] = {'full': array([[ 2.000e-01,  5.000e-01,  7.930e+00,  1.088e+01,  1.000e-01,          1.000e-01,  1.680e-03,  6.100e-04,  6.100e-04, -6.900e-01,          4.000e-01,  3.600e-01,  7.700e-04,  4.000e-04,  5.300e-04,         -1.420e+00,  7.000e-02,  1.400e-01,  8.308e+00,  8.000e-02,          9.500e-02],        [ 5.000e-01,  8.000e-01,  8.700e+00,  1.103e+01,  8.000e-02,          1.000e-01,  1.220e-03,  3.100e-04,  3.900e-04, -1.000e+00,          3.100e-01,  3.100e-01,  1.600e-04,  3.200e-04,  3.200e-04,         -1.640e+00,  2.000e-01,  5.000e-01,  8.226e+00,  6.500e-02,          7.300e-02],        [ 8.000e-01,  1.100e+00,  9.130e+00,  1.087e+01,  6.000e-02,          6.000e-02,  2.030e-03,  2.700e-04,  3.200e-04, -5.200e-01,          3.500e-01,  2.700e-01,  2.900e-04,  3.000e-04,  3.000e-04,         -1.620e+00,  1.900e-01,  3.200e-01,  8.251e+00,  6.900e-02,          7.300e-02],        [ 1.100e+00,  1.500e+00,  9.420e+00,  1.071e+01,  8.000e-02,          8.000e-02,  1.350e-03,  3.400e-04,  3.500e-04, -8.000e-02,          5.500e-01,  5.200e-01,  6.700e-04,  4.100e-04,  4.400e-04,         -1.460e+00,  1.600e-01,  2.900e-01,  8.086e+00,  6.900e-02,          7.100e-02],        [ 1.500e+00,  2.000e+00,  9.670e+00,  1.074e+01,  7.000e-02,          6.000e-02,  8.800e-04,  1.000e-04,  1.200e-04, -2.400e-01,          2.700e-01,  2.800e-01,  3.300e-04,  6.000e-05,  7.000e-05,         -1.600e+00,        nan,        nan,  7.909e+00,  9.000e-02,          7.200e-02],        [ 2.000e+00,  2.500e+00,  1.004e+01,  1.074e+01,  7.000e-02,          7.000e-02,  6.200e-04,  7.000e-05,  7.000e-05, -2.200e-01,          2.900e-01,  2.900e-01,  1.500e-04,  4.000e-05,  4.000e-05,         -1.600e+00,        nan,        nan,  7.682e+00,  1.100e-01,          8.100e-02],        [ 2.500e+00,  3.000e+00,  1.024e+01,  1.076e+01,  1.600e-01,          1.500e-01,  2.600e-04,  5.000e-05,  8.000e-05, -1.500e-01,          8.600e-01,  6.800e-01,  1.400e-04,  1.100e-04,  6.000e-05,         -1.600e+00,        nan,        nan,  7.489e+00,  2.300e-01,          1.230e-01],        [ 3.000e+00,  4.000e+00,  1.027e+01,  1.074e+01,  4.400e-01,          2.000e-01,  3.000e-05,  2.000e-05,  2.000e-05,  9.500e-01,          1.050e+00,  1.210e+00,  9.000e-05,  7.000e-05,  7.000e-05,         -1.600e+00,        nan,        nan,  7.120e+00,  2.340e-01,          1.680e-01]]), 'quiescent': array([[ 2.000e-01,  5.000e-01,  8.240e+00,  1.091e+01,  7.000e-02,          8.000e-02,  1.270e-03,  2.100e-04,  1.900e-04, -6.800e-01,          2.200e-01,  1.300e-01,  3.000e-05,  7.000e-05,  7.000e-05,         -1.520e+00,  2.700e-01,  4.400e-01,  7.986e+00,  8.700e-02,          1.020e-01],        [ 5.000e-01,  8.000e-01,  8.960e+00,  1.093e+01,  4.000e-02,          4.000e-02,  1.110e-03,  1.000e-04,  9.000e-05, -4.600e-01,          5.000e-02,  5.000e-02,        nan,        nan,        nan,                nan,        nan,        nan,  7.920e+00,  5.400e-02,          5.800e-02],        [ 8.000e-01,  1.100e+00,  9.370e+00,  1.081e+01,  3.000e-02,          3.000e-02,  1.570e-03,  9.000e-05,  9.000e-05, -1.100e-01,          5.000e-02,  5.000e-02,        nan,        nan,        nan,                nan,        nan,        nan,  7.985e+00,  4.400e-02,          4.900e-02],        [ 1.100e+00,  1.500e+00,  9.600e+00,  1.072e+01,  3.000e-02,          3.000e-02,  7.000e-04,  3.000e-05,  3.000e-05,  4.000e-02,          6.000e-02,  6.000e-02,        nan,        nan,        nan,                nan,        nan,        nan,  7.576e+00,  4.100e-02,          4.600e-02],        [ 1.500e+00,  2.000e+00,  9.870e+00,  1.073e+01,  3.000e-02,          4.000e-02,  2.200e-04,  1.000e-05,  1.000e-05,  1.000e-01,          9.000e-02,  9.000e-02,        nan,        nan,        nan,                nan,        nan,        nan,  7.093e+00,  4.900e-02,          5.300e-02],        [ 2.000e+00,  2.500e+00,  1.011e+01,  1.059e+01,  6.000e-02,          6.000e-02,  1.000e-04,  1.000e-05,  1.000e-05,  8.800e-01,          2.300e-01,  2.100e-01,        nan,        nan,        nan,                nan,        nan,        nan,  6.834e+00,  7.600e-02,          8.400e-02],        [ 2.500e+00,  3.000e+00,  1.039e+01,  1.027e+01,  1.000e-01,          8.000e-02,  3.000e-06,  6.000e-06,  2.000e-06,  3.260e+00,          9.300e-01,  9.300e-01,        nan,        nan,        nan,                nan,        nan,        nan,  6.340e+00,  7.900e-02,          1.210e-01]]), 'star_forming': array([[ 2.000e-01,  5.000e-01,  7.860e+00,  1.060e+01,  1.600e-01,          1.100e-01,  1.160e-03,  3.100e-04,  4.100e-04,  1.700e-01,          5.700e-01,  6.500e-01,  1.080e-03,  2.900e-04,  3.100e-04,         -1.400e+00,  4.000e-02,  4.000e-02,  8.051e+00,  9.100e-02,          1.010e-01],        [ 5.000e-01,  8.000e-01,  8.640e+00,  1.062e+01,  1.700e-01,          1.000e-01,  7.700e-04,  2.200e-04,  3.000e-04,  3.000e-02,          5.800e-01,  7.900e-01,  8.400e-04,  2.800e-04,  3.500e-04,         -1.430e+00,  6.000e-02,  9.000e-02,  7.933e+00,  6.900e-02,          7.300e-02],        [ 8.000e-01,  1.100e+00,  9.040e+00,  1.080e+01,  1.100e-01,          1.200e-01,  5.000e-04,  3.300e-04,  3.100e-04, -6.700e-01,          7.500e-01,  6.700e-01,  4.800e-04,  4.100e-04,  4.100e-04,         -1.510e+00,  1.100e-01,  6.700e-01,  7.908e+00,  6.500e-02,          6.700e-02],        [ 1.100e+00,  1.500e+00,  9.290e+00,  1.067e+01,  1.100e-01,          9.000e-02,  5.300e-04,  2.300e-04,  1.800e-04,  1.100e-01,          6.100e-01,  7.800e-01,  8.700e-04,  2.900e-04,  4.000e-04,         -1.370e+00,  8.000e-02,  1.500e-01,  7.916e+00,  5.900e-02,          6.100e-02],        [ 1.500e+00,  2.000e+00,  9.650e+00,  1.066e+01,  7.000e-02,          6.000e-02,  7.500e-04,  8.000e-05,  1.000e-04, -8.000e-02,          2.800e-01,  3.100e-01,  3.900e-04,  7.000e-05,  7.000e-05,         -1.600e+00,        nan,        nan,  7.841e+00,  9.700e-02,          7.100e-02],        [ 2.000e+00,  2.500e+00,  1.001e+01,  1.073e+01,  8.000e-02,          8.000e-02,  5.000e-04,  7.000e-05,  7.000e-05, -3.300e-01,          3.300e-01,  3.300e-01,  1.500e-04,  5.000e-05,  5.000e-05,         -1.600e+00,        nan,        nan,  7.614e+00,  1.230e-01,          8.400e-02],        [ 2.500e+00,  3.000e+00,  1.020e+01,  1.090e+01,  2.000e-01,          2.100e-01,  1.500e-04,  8.000e-05,  8.000e-05, -6.200e-01,          1.040e+00,  8.400e-01,  1.100e-04,  7.000e-05,  7.000e-05,         -1.600e+00,        nan,        nan,  7.453e+00,  1.930e-01,          1.280e-01],        [ 3.000e+00,  4.000e+00,  1.026e+01,  1.074e+01,  2.900e-01,          1.700e-01,  2.000e-05,  1.000e-05,  1.000e-05,  1.310e+00,          8.700e-01,  8.700e-01,  1.000e-04,  6.000e-05,  4.000e-05,         -1.600e+00,        nan,        nan,  7.105e+00,  2.450e-01,          1.700e-01]])}

Digitized Table 2 of Ilbert et al. (2013).

Keys are 'full', 'quiescent', and 'star_forming'. Each value is a numpy array of shape (n_zbins, 21). Use ILBERT2013_COLUMNS to map column names to indices.

sum_stat.lf_smf.ilbert2013.ILBERT2013_COLUMNS: dict[str, int] = {'alpha1': 9, 'alpha1_err_hi': 10, 'alpha1_err_lo': 11, 'alpha2': 15, 'alpha2_err_hi': 16, 'alpha2_err_lo': 17, 'log_m_complete': 2, 'log_m_star': 3, 'log_m_star_err_hi': 4, 'log_m_star_err_lo': 5, 'log_rho_star': 18, 'log_rho_star_err_hi': 19, 'log_rho_star_err_lo': 20, 'phi1_star': 6, 'phi1_star_err_hi': 7, 'phi1_star_err_lo': 8, 'phi2_star': 12, 'phi2_star_err_hi': 13, 'phi2_star_err_lo': 14, 'z_hi': 1, 'z_lo': 0}

Column name → column index in the ILBERT2013 arrays.

sum_stat.lf_smf.ilbert2013.double_schechter(log10_mstar, log10_mstar_char, phi1_star, alpha1, phi2_star, alpha2)[source]

Double Schechter stellar mass function in log10-mass units.

Evaluates the double Schechter function of Ilbert et al. (2013) Eq. (2), converting to per-dex units:

φ(log10 M) = ln(10) exp(−x) [φ1* x^(α1+1) + φ2* x^(α2+1)]

where x = M / M* = 10^(log10_M − log10_M*). For a single Schechter function set phi2_star = 0.0.

Parameters:
  • log10_mstar (jnp.ndarray) – log10(M / M_sun) at which to evaluate φ.

  • log10_mstar_char (float) – log10(M* / M_sun) — characteristic stellar mass.

  • phi1_star (float) – φ1* [Mpc^-3] — normalisation of the first Schechter component.

  • alpha1 (float) – α1 — slope of the first Schechter component.

  • phi2_star (float) – φ2* [Mpc^-3] — normalisation of the second Schechter component. Set to 0.0 for a single Schechter function.

  • alpha2 (float) – α2 — slope of the second Schechter component. Ignored when phi2_star = 0.0.

Returns:

phi (jnp.ndarray) – φ(log10 M) [Mpc^-3 dex^-1], same shape as log10_mstar.

Parameters:
Return type:

Array

References

Ilbert et al. (2013), A&A 556, A55, Eq. (2).

sum_stat.lf_smf.ilbert2013.ilbert2013_smf(log10_mstar, z_bin, population='full')[source]

Evaluate the Ilbert et al. (2013) SMF for a given redshift bin.

Looks up the best-fit double Schechter parameters from Table 2 and evaluates the model via double_schechter().

Parameters:
  • log10_mstar (array-like) – log10(M / M_sun) values at which to evaluate φ.

  • z_bin (int) – Zero-based index into the redshift bins for the chosen population. See ILBERT2013 for the bin ordering.

  • population ({‘full’, ‘quiescent’, ‘star_forming’}) – Galaxy population.

Returns:

phi (jnp.ndarray) – φ(log10 M) [Mpc^-3 dex^-1].

Parameters:
Return type:

Array

Examples

Evaluate the full SMF in the 0.2 < z < 0.5 bin:

>>> import numpy as np
>>> log_m = np.linspace(9.0, 12.5, 200)
>>> phi = ilbert2013_smf(log_m, z_bin=0, population='full')