Minimal, shareable weak-lensing mass-mapping starter repository.
scripts/— runnable command-line scriptsdownload_kappatng_runs.pyprepare_kappatng_subset.pygenerate_shear_from_kappa.pyplot_bundle_outputs.pyprepare_noise_mask_sizes.py
operators.py,noise_mask.py— core NumPy operators and noise/mask helpersdata/— reference assets and example outputsnotebooks/simple_forward_model_demo.ipynb— short end-to-end notebook demo
data/kappa_subset_lp001_runs001-010_wlmmuq_384.npz
kappa.shape = (10, 384, 384)data/shear_subset_lp001_runs001-010_wlmmuq_384.npzdata/kappa_subset_lp001_runs001-010_wlmmuq_256.npzdata/shear_subset_lp001_runs001-010_wlmmuq_256.npzdata/cosmos_noise_mask_384.npzdata/cosmos_noise_mask_256.npz- Plot set in
data/plots/
- Python 3.10+
numpyh5pymatplotlib(for plotting)
Run from repository root:
# 1) Download source runs (example: 10 runs from LP001)
python scripts/download_kappatng_runs.py \
--dataset fullphys \
--lp-index 1 \
--start-run 1 \
--n-runs 10 \
--output-root data/kappaTNG_fullphys
# 2) Build kappa subset (wlmmuq-like redshift combination: z01..z40)
python scripts/prepare_kappatng_subset.py \
--ktng-dir data/kappaTNG_fullphys \
--lp-index 1 \
--start-run 1 \
--n-maps 10 \
--redshift-mode wlmmuq \
--crop-size 384 \
--remove-mean \
-o data/kappa_subset_lp001_runs001-010_wlmmuq_384.npz
# 3) Generate noisy/masked shear maps
python scripts/generate_shear_from_kappa.py \
--kappa-file data/kappa_subset_lp001_runs001-010_wlmmuq_384.npz \
--seed 42 \
-o data/shear_subset_lp001_runs001-010_wlmmuq_384.npz
# 4) Plot diagnostics
python scripts/plot_bundle_outputs.py \
--kappa-file data/kappa_subset_lp001_runs001-010_wlmmuq_384.npz \
--shear-file data/shear_subset_lp001_runs001-010_wlmmuq_384.npz \
--output-dir data/plots \
--max-maps 10To generate more than 10 maps, increase both --n-runs and --n-maps.
# Ensure 256 mask/noise asset exists (already included in this repo)
python scripts/prepare_noise_mask_sizes.py \
--input-file data/cosmos_noise_mask_384.npz \
--sizes 256 \
--output-dir data
# Build 256 subset
python scripts/prepare_kappatng_subset.py \
--ktng-dir data/kappaTNG_fullphys \
--lp-index 1 \
--start-run 1 \
--n-maps 10 \
--redshift-mode wlmmuq \
--crop-size 256 \
--remove-mean \
-o data/kappa_subset_lp001_runs001-010_wlmmuq_256.npz
# Generate 256 shear subset
python scripts/generate_shear_from_kappa.py \
--kappa-file data/kappa_subset_lp001_runs001-010_wlmmuq_256.npz \
--seed 42 \
-o data/shear_subset_lp001_runs001-010_wlmmuq_256.npzNoise is added as complex Gaussian per pixel:
std_noise is spatially varying and derived from COSMOS galaxy catalog statistics. In the original COSMOS construction:
with sums over galaxies in each pixel. This is effectively galaxy-density / weight dependent.
kappa_true— float32,(n_maps, nx, ny)gamma_clean— complex64,(n_maps, nx, ny)gamma_noisy— complex64,(n_maps, nx, ny)noise— complex64,(n_maps, nx, ny)kappa_ks_e,kappa_ks_b— float32,(n_maps, nx, ny)std_noise— float32,(nx, ny)mask— bool,(nx, ny)extent— optional float32,(4,)
Open:
notebooks/simple_forward_model_demo.ipynb
It demonstrates loading kappa maps, converting to shear, adding COSMOS mask/noise, and plotting results.