Tier-3 forecast: multi-wavelength maps, band LFs, z < 2, M* > 10⁹

The tier-2 study freed every parameter of the X-ray/tSZ/lensing forward model on a z < 1, M* > 10¹⁰ galaxy grid. The tier-3 study extends that design to the full multi-wavelength survey landscape of the coming decade:

When the same halo-model chain also predicts the radio and infrared sky, the UV/optical/NIR luminosity functions and the cosmic star-formation history — over 0 < z < 2 and down to M* = 10⁹ — what do the combined maps and counts teach us about cosmology and about every piece of the galaxy–halo connection?

Twelve SED-calibration parameters join the vector (102 in total, TIER3_EXTENSION); nothing else is fixed. All twelve feed only new observables, so the fiducial predictions of every tier-1/2 observable are bit-identical (the append-only house rule).

Reproduce with:

JAX_PLATFORMS=cpu python -m hod_mod.scripts.forecasts.run_tier3_forecast \
    --jobs 6
# fast end-to-end check (2x2 cells, tiny grids, ~4 min):
JAX_PLATFORMS=cpu python -m hod_mod.scripts.forecasts.run_tier3_forecast --smoke

The extended sample grid

  • Coarse exploratory grid: Δz = 0.2 shells over 0 < z < 2 × 0.2-dex volume-limited M* bins over 9.0 ≤ log10 M* ≤ 11.6 (130 cells), each split into star-forming and quiescent samples (260 cell blocks). The per-block caches are incremental, so the grid can be refined later without recomputation of unchanged blocks.

  • Mass-grid floor: cells integrate haloes from log10 M_h = 8.5 (the log10m_min ForwardModel argument; the tier-1/2 default of 10.0 is bit-identical) — M_h(M* = 10⁹) ≈ 2.4×10¹⁰ sits well inside the grid, and the (9.0, 9.2) bin abundance converges to <10⁻³ at n_m = 256.

  • Two-tier completeness: the wide spectroscopic survey (f_sky = 0.5) carries a stellar-mass limit log10 M*_lim(z) = 9.0 + 1.0·z (the magnitude-limited trend); cells below it fall back to a deep field (f_sky = 0.004, complete at 10⁹ at all z) with correspondingly larger noise, and cells complete in neither tier are not built (reported as skipped_cells). AGN clustering samples extend to z = 1.9 (agn_z_centers).

The twelve SED calibrations

Parameter

Fiducial

Prior

Meaning

l14_sfr

28.20

0.20

log10 L_ν(1.4 GHz)/SFR [erg s⁻¹ Hz⁻¹ / M_⊙ yr⁻¹], the radio–FIR calibration [Murphy2011]

alpha_syn

0.70

0.15

synchrotron spectral index; scales the SF and jet emission across the radio bands (FP cores stay flat)

lir_sfr

43.41

0.20

log10 L_IR/SFR (the Kennicutt–Murphy total-IR calibration [KennicuttEvans2012])

bir_color

0.0

0.5

dust-SED color tilt across the IR bands (inert at the 4.9 μm anchor)

ml_nir

33.20

0.30

log10 νL_ν(3.4 μm)/M* — the stellar M/L behind the NIR LF and the IR-map stellar continuum

ml_opt

33.10

0.30

log10 νL_ν(r)/M* of star-forming centrals

dopt_q

−0.20

0.30

quiescent r-band offset [dex] (the optical LF is the SF/Q mixture)

luv_norm

42.65

0.30

log10 νL_ν(1500 Å)/SFR including the mean attenuation

tau_uv_mslope

0.0

0.3

UV-attenuation slope versus log M* (tilts the UV LF)

lha_norm

41.27

0.20

log10 L_Hα/SFR ([Kennicutt1998]; the half LF is the exact oiilf kernel clone)

agn_bc_uv

−0.62

0.30

AGN bolometric correction to 1450 Å [Runnoe2012]

agn_bc_opt

−0.72

0.30

AGN bolometric correction to 4400 Å [Runnoe2012]

New observables

Radio/IR intensity maps (radio_map_bands = 0.95, 1.4, 3.0 GHz — SKA-like [Bacon2018]; ir_map_bands = 3.4, 4.9, 12 μm — WISE/SPHEREx-like [Wright2010] [Dore2014]). The per-halo central νL_ν fields combine

  • SF synchrotron: \(10^{\mathrm{l14\_sfr}}\,\nu_{1.4}\, \langle\mathrm{SFR}\rangle(M)\,(\nu/1.4)^{1-\alpha_{\rm syn}}\) with the ⟨SFR⟩(M) lognormal mean built from the main sequence, the SHMR and the ZM16 quenched fraction (the _oiilf width algebra);

  • fundamental-plane cores (the _rlf FP moments, flat spectrum) and radio-loud jets (5 GHz anchored, alpha_syn-scaled);

  • IR dust (∝ SFR, color-tilted), stellar continuum (∝ M*·Υ_NIR) and the AGN torus (the _ilf chain — no f_abs: IR is obscuration-robust).

Observables: cl_gR/cl_gI per cell (galaxy × map, band-major), cl_RR/cl_II (band autos), cl_aR/cl_aI (AGN × map, L_X-bin × band) and cl_ag (AGN × galaxy) per shell. Exact gates: the SF-only band ratio is \((\nu/1.4)^{1-\alpha_{\rm syn}}\) to machine precision; ∂ln C^{gR}/∂l14_sfr = ln 10 (cross) and 2 ln 10 (auto); alpha_syn is exactly inert at the 1.4 GHz anchor.

Galaxy band LFs + AGN UV/opt LFs (per shell, via one _lf_lognormal kernel): uvlf (SF, attenuation-tilted), optlf (SF/Q mixture — collapses exactly to a single lognormal at dopt_q = 0), nirlf (all centrals, pure SHMR probe), half (≡ oiilf at matched normalisation), and the type-1 AGN LFs qlf_uv/qlf_opt = the _ilf kernel × (1 − f_abs) — completing the cross-band obscuration system (UV/opt ∝ 1−f_abs, IR ∝ 1, soft X-ray = the N_H transmission mixture; ∂Φ/∂f_abs = −Φ/(1−f_abs) exactly).

SFRD(z): a per-shell wide-M* (10⁹–10¹²) sfrd block — the Madau–Dickinson measurement [MadauDickinson2014] at 12 % per shell.

The four extras:

  • cl_yy — tSZ auto-spectrum (the pressure field squared; ∂ln C_yy/∂P₀ = 2/P₀ exactly);

  • cl_HIHI — 21 cm auto-power (the HI field squared; ∝ M₀² exactly);

  • ncl — X-ray cluster counts above max(L_lim(z), 10⁴²) erg/s through the free L_X–M relation with a fixed 0.25 dex selection scatter: the classic dn/dz probe, cosmology through dn/dM;

  • ds_agn — AGN galaxy–galaxy lensing ΔΣ per L_X bin (the central-AGN tracer against the baryon-split matter field), directly weighing the L_X-selected host haloes.

Survey noise

Physical where the tier-2 machinery applies (pair counts, shape noise, CXB photon statistics, Poisson LFs with L_lim(z) completeness flags); the radio and IR maps use the calibrated effective (rn, an) recipe (SKASurvey, IRMapSurvey — the tSZ / 21 cm IM precedent; a physical T_sys/confusion model is the documented upgrade). Band LFs get BandLFSurvey footprints with νL_ν flux limits; the AGN crosses build their Knox noise from the fiducial AGN auto (cl_aa_fiducial) plus shot noise.

Parallel execution

--jobs N fills the per-block Jacobian cache with N spawned workers (precompute_blocks()): each worker rebuilds the forecast from its resolved constructor spec, computes blocks into atomic tempfiles, and the parent assembles serially from the cache. The parallel == serial invariant is byte-exact (tested in a fresh interpreter; the workers inherit the parent’s x64 mode through the JAX_ENABLE_X64 environment variable so that module-level constants are built in the right precision).

Two operational lessons from the production run:

  • Worker memory: a long-lived worker accumulates JAX compilation caches for every distinct block shape it processes (several GB within a handful of blocks) — eight persistent workers OOM-killed a 64 GB host. max_tasks_per_child (default 4) therefore recycles each worker, bounding its RSS near the single-block peak for the cost of one forecast rebuild (~seconds) per cycle; the byte-identity is unchanged.

  • The per-block cache is incremental and atomic, so an interrupted run (OOM, reboot, Ctrl-C) resumes exactly where it stopped — only missing blocks are recomputed.

Production configuration and results

The production run frees all 102 parameters (only the retired log10DC pinned) over the full block set:

  • 292 blocks: 260 SF/Q-split (z, M*) cells (13 M* bins × 10 shells × 2 populations; no cells skipped — the deep tier reaches 10⁹ at all z), 10 shells (X-ray/radio/IR/[OII] LFs, map autos, AGN crosses, tSZ + 21 cm autos, cluster counts), the global lensing block, 10 AGN clustering + lensing blocks (z = 0.1…1.9) and 10 wide-M* SFRD blocks, plus the local HIMF block;

  • six X-ray bands, three radio + three IR map bands, five tomographic shear bins; scale cuts r_min = 0.1, 0.5, 2.5 Mpc/h;

  • command: JAX_PLATFORMS=cpu python -m hod_mod.scripts.forecasts.run_tier3_forecast --jobs 6.

SUMMARY, npz products, the per-sector information gains and the tier3_forecast__* figure suite are written to $HOD_MOD_RESULTS/tier3_forecast/ (2026-07-04 run: 59 779 rows, no skipped cells).

Headline numbers at \(r_\mathrm{min} = 0.1\,h^{-1}\) Mpc:

Parameter

All 102 free

Astrophysics pinned

Degradation

\(\Omega_\mathrm{m}\)

\(5.89\times10^{-5}\)

\(3.68\times10^{-5}\)

×1.6

\(\sigma_8\)

\(7.95\times10^{-5}\)

\(5.72\times10^{-5}\)

×1.4

\(w_0\)

\(7.33\times10^{-4}\)

\(4.60\times10^{-4}\)

×1.6

\(w_a\)

\(3.39\times10^{-3}\)

\(2.12\times10^{-3}\)

×1.6

Two structural conclusions:

  • The multi-wavelength data self-calibrate the astrophysics. Relative to the 90-parameter tier-2 production (Tier-2 forecast: nothing fixed (90 parameters): \(\sigma(\Omega_\mathrm{m}) = 1.82\times10^{-4}\), \(\sigma(\sigma_8) = 2.93\times10^{-4}\)), the tier-3 combination is ×3.1 / ×3.7 tighter while freeing 12 more parameters, and the free-vs-pinned degradation collapses from ×2.3 to ×1.6. Even \(h\) and \(n_s\) become data-dominated (\(5.5\times10^{-5}\), \(7.0\times10^{-5}\) — two orders of magnitude inside their Planck/BBN priors).

  • The maps and band LFs do the heavy lifting. The cumulative attribution runs \(\sigma(\Omega_\mathrm{m}): 2.34 \to 1.61 \to 0.98 \to 0.60 \times 10^{-4}\) for galaxy grid + lensing → +X-ray/tSZ → +radio/IR maps+band LFs, with the tSZ/HI autos, cluster counts and AGN lensing adding percent-level refinements. The radio/IR intensity maps and the UV/opt/NIR luminosity functions — tier-3’s new probes — deliver the two largest single gains.

Caveats recorded with the run: 247 rows sit below the survey completeness limits (σ = ∞, dominated by high-z faint LF bins); and at this Fisher dynamic range (59k rows) the prior-scaled eigenvalue floor of the pseudo-inverse sweeps up the prior-bounded directions — \(\Sigma m_\nu\) (and the agn sector’s information-gain determinant at the two finer scale cuts) report as unconstrained/NaN where the 90-parameter run still resolved them. The principled fix (floor eigenvalues at unity in prior-scaled space instead of dropping them) is noted for the tier-4 analysis.

Verification

tests/test_forecast_tier3.py gates every feature with an exact identity (band ratios, chain rules, kernel clones, mixture additivity, shift invariance, mass-grid convergence, two-tier completeness assignment, parallel == serial, cache round-trip), and the tier-2 regression suites run unchanged through the new extension hooks.