Code and paper for "The observable dependence of correlated selection bias in JWST
high-redshift galaxies: a model-independent cross-depth measurement" (draft in
paper/xdc.pdf).
Survey depth is an exclusion restriction — a variable that changes detection but not the true property. This lets us measure, model-independently, how correlated selection bias propagates into every SED-inferred galaxy property, by comparing the same JADES galaxies imaged (degraded) to two depths and refitting the SED at each depth. The bias is strongly observable-dependent: for stellar mass it is small and negative (the high-$z$ mass function is buffered, not inflated), near the limit galaxies are biased younger/bluer/dust-poorer/higher-sSFR, and the sign of the mass bias flips at the Balmer break so it depends on the survey's selection band.
paper/— LaTeX source (xdc.tex,xdc.bib), the two committed figures, and the built PDFcode/— analysis scripts andrequirements.txtresults/— small*.npzoutputs of the analysis, committed so the figures rebuild without datadata/— where to obtain the public JADES catalogue (seedata/README.md;*.fitsare gitignored)
One command rebuilds the figures from the committed results and compiles the PDF — no data download and no SED-fitting install needed:
./reproduce.sh # -> paper/xdc.pdf (needs only LaTeX + numpy/scipy/matplotlib)
./reproduce.sh all # rerun the full eazy analysis first (needs the JADES catalogue + eazy)Override the interpreter with PYTHON=/path/to/python ./reproduce.sh (e.g. a conda env with eazy).
The paper targets RAS Techniques and Instruments (RASTI); its class files (rasti.cls,
rasti.bst) are bundled in paper/. The figures and their input results/*.npz are committed, so
the paper builds with no data and no SED-fitting install:
cd paper && pdflatex xdc && bibtex xdc && pdflatex xdc && pdflatex xdcTo regenerate the figures from the committed results:
python3 code/make_figures.py # reads results/*.npz -> paper/figs/*.pdfRequires Python ≥ 3.10 and eazy for the SED refitting:
pip install -r code/requirements.txt
python3 -c "import eazy; eazy.fetch_eazy_photoz()" # one-time: fetch templates + filter curvesThe real-data runners take the JADES catalogue path as their first argument (download instructions
in data/README.md). Each writes a one-line summary; set XDC_SAVE=<file>.npz
to persist the arrays the figures use. The estimator validation needs no data.
Every number and figure is regenerated by one script:
| Paper item | Script | Data |
|---|---|---|
| §2–3 matched-overlap estimator: null test + confounds, on mocks | test_crossdepth_nulltest.py |
— |
| §4.1 two-depth stellar-mass bias (net |
run_jades_mass_crossdepth.py |
JADES |
| §4.2 response spectrum across SED quantities (Table 1) | run_jades_response_spectrum.py |
JADES |
| §4.3 mass-bias vs selection-band rest wavelength; Balmer-break flip (Fig. 2) |
run_jades_band_response.py (FSPS + XDC_TEMPL=…/tweak_spline.param) |
JADES |
| §4.4 UV-flux boost, the positive-sign contrast ( |
run_jades_crossdepth.py |
JADES |
| Figures 1–2 |
make_figures.py (from results/*.npz) |
— |
| Table 2 (forecast) | analytic |
— |
Example — regenerate the committed results:
CAT=data/jades_dr5_gds_phot.fits
XDC_SAVE=results/mass_matched.npz python3 code/run_jades_mass_crossdepth.py $CAT
XDC_SAVE=results/spectrum.npz python3 code/run_jades_response_spectrum.py $CAT
XDC_SAVE=results/band_qsf.npz python3 code/run_jades_band_response.py $CAT
EZ=$(python3 -c "import os,eazy;print(os.path.join(os.path.dirname(eazy.__file__),'data','eazy-photoz','templates'))")
XDC_TEMPL=$EZ/spline_templates_v2/tweak_spline.param XDC_SAVE=results/band_spline.npz \
python3 code/run_jades_band_response.py $CATThe runners are seeded, so reruns reproduce the committed numbers.
Archived on Zenodo: doi:10.5281/zenodo.21400942 (concept DOI — always resolves to the latest version).
Metadata for citation managers is in CITATION.cff.
Code is under the MIT License (see LICENSE). The manuscript text and figures in
paper/ (xdc.tex, xdc.pdf, figs/) are under CC-BY-4.0 (see paper/LICENSE).
The bundled RASTI class files (rasti.cls, rasti.bst) are OUP/RAS property, redistributed only
to allow the manuscript to compile.