Halo clustering — xi_hh, xi_hh_smallr, r_ab¶
xi_hh — full-scale halo–halo correlation (derived)¶
ξ_hh(r | M₁, M₂) for differential mass-bin pairs, over the full xi_mm
support. A derived property combining xi_mm, b_cum, xi_hh_smallr, and
r_ab.
import numpy as np
res = reg.predict("xi_hh", "LCDM", 0.25, [0.31, 0.677, 0.967, 0.83]) # default 0.1-dex bins
res = reg.predict("xi_hh", "LCDM", 0.25, theta,
edges=np.array([13.0, 13.3, 13.6]), # your bin edges (log10M)
r=np.geomspace(3, 90, 40), # custom radii (optional)
route="auto") # auto | exact | bbar
res["xi_hh"] # (Nbin, Nbin, Nr)
res["r"] # radii (Mpc/h)
res["bin_edges"] # the mass-bin edges used
res["b_bin"] # per-bin <b>
res["validity"] # per-gravity acceptance-test evidence — READ IT
Routes¶
exact(default viaauto) — exact count-weighted mixed-difference, validated over r ∈ [2.2, 100] Mpc/h. Small-r pairs have NaN inside the halo-exclusion wedge — that is physics, not a bug.bbar— pure factorization ⟨b⟩⟨b⟩ξ_mm, only good for r ∈ [20, 70] Mpc/h.
Limits¶
- Bin edges above log₁₀M = 14 use the Tinker-extended b with D = 1.
- Requested r outside the
xi_mmsupport [2.04, 124.8] Mpc/h raises.
Accuracy (binned radial convention, 2026-07): full-scale ξ_hh design-sweep
band medians 1.1–2.1 % to 60 Mpc/h (ΛCDM) and 1.1–2.2 % (f(R)),
with median |χ| ≤ 1.0 in every band — at the five-box measurement floor;
noise-floor-limited beyond. Pass r_edges= to predict("xi_hh", ...) for
binned values comparable to pair-count measurements (point values at
arithmetic bin centres carry a coherent 1–2 % small-r offset against
binned data — a binning inconsistency, not an emulator error). The f(R)
fiducials are calibration points of this chain (χ_rms 4.3/3.8 vs their
100-box SEM, floors 1.2/2.7); see the DOCUMENTATION §8b campaign notes.
xi_hh_smallr — small-r departure emulator (trained)¶
The trained threshold-level small-scale departure surface (the "D-surface")
that xi_hh uses below the factorization window. The f(R) emulator carries a
coefficient-scale-relative GP jitter floor (jitter_floor_frac = 0.05) that
regularises under-fit high PCA modes — small-r ξ_hh reconstruction bands ≈ 6 %
better. Not usually called directly.
Target choice (tested — don't re-explore)¶
The emulated target is D = ξ_AB / [b(>M₁) b(>M₂) ξ_mm] — the departure
with the clustering amplitude divided out once. A 2026-07 target-choice
study (smallr_reduced_target_test.py, smallr_sqrtd_gate.slurm) confirmed
this is optimal:
- Dividing out more bias (
D/(b·b),(D−1)/(b·b)) is 43 %–2.3× worse — it re-injects the mass/cosmology dynamic range D was built to remove. - Compressing the surface (
log D,√D,√(ξ_hh/ξ_mm)) lowers the D-surface column error (√D by ~5 % for f(R)) but the gain washes out in the composed binned ξ_hh — the end-to-end reconstruction gate is unchanged within noise, because the departure is a subdominant term in the total error budget (ξ_mm, HMF, mixed-difference, sim noise dominate). Not adopted.
Lesson: the composed reconstruction bands decide, not the D-surface metrics.
r_ab — halo–matter cross-correlation coefficient (trained)¶
rab = reg.predict("r_ab", "LCDM", 0.25, [0.31, 0.677, 0.967, 0.83]) # (1, 30, 30)
art = reg.load("r_ab", "LCDM", 0.25)
art.thresholds # both matrix axes (log10M thresholds)
- Output:
(1, 30, 30)threshold-pair matrix on theb_cumgrid. - Used as a stochasticity / validity guard for
b_diffandxi_hh.
Redshift¶
All three registered at z = 0.25 only.