Skip to main content

Learned mass-conserving deprojection of galaxy images -> 3D stellar density, rotation curve, potential.

Project description

Disk Galaxy Deprojection

This repository builds a baseline-plus-residual probabilistic benchmark for deprojecting barred-galaxy stellar mass structure from S4G-like images.

For project background, current Milestone 2b status, and continuation guidance, start with docs/reports/2026-06-10-project-handoff.md.

Deprojecting a galaxy image — the dgdp package

dgdp turns a galaxy image into its deprojected 3-D stellar-mass distribution, rotation curve, and (optionally) gravitational potential, using a bundled pretrained model — no training data or GPU required.

Install

pip install git+https://github.com/lucyundead/disk-galaxy-deprojection

Core install is light (numpy, astropy, matplotlib) and ships the ~1 MB model. Retraining the model additionally needs the TNG table and the [train] extra (pip install '.[train]').

Quickstart

Python:

from dgdp import deproject
r = deproject("galaxy.fits", distance_mpc=15.2, inclination_deg=30, pa_onsky_deg=153,
              ml=1.0, stellar_mass=6e10)
r.density_3d              # (nR, nphi, nz) cylindrical stellar-mass cube [Msun]
r.v_circ([1, 2, 5, 10])   # rotation curve at those radii [km/s]
r.rms_z([1, 5, 10])       # vertical thickness RMS|z|(R) [kpc]
r.edge_on, r.face_on      # 2-D renderings
r.save("out/")            # density.npz + rotation_curve.csv + deprojection.png

CLI:

dgdp-deproject galaxy.fits --distance-mpc 15.2 --inclination-deg 30 --pa-onsky-deg 153 \
    --ml 1.0 --stellar-mass 6e10 -o out/

Geometry & M/L

  • Geometry: give pix_arcsec + pa_pix_deg (+ center) to bypass WCS (e.g. an S4G cutout), or let a FITS WCS supply the pixel scale and convert an on-sky pa_onsky_deg.
  • The deprojected shape is M/L-independent; M/L only sets the v_c amplitude. Fix the absolute scale with either (a) stellar_mass (total M*, M/L already folded in), (b) luminosity × ml, or (c) zeropoint + band_solar_mag + distance to calibrate the image to a luminosity. With none of these the outputs use a relative scale.

Potential (optional)

r.potential(R, z) and dgdp-deproject --potential return the AGAMA CylSpline potential Φ(R,z). AGAMA is not pip-installable — build it from source (https://github.com/GalacticDynamics-Oxford/Agama) and put it on PYTHONPATH; everything else works without it.

Method

The in-plane surface density is anchored geometrically from the image; a learned fixed-dictionary sech² vertical profile q_m(z;R) — trained on 185 TNG50 barred galaxies × 198 projections — supplies the thickness, mass-conserving by construction. See docs/reports/2026-06-30-mixture-qm-fixed-dictionary.md.

Milestone 1 predicts posterior residuals for physical summaries:

  • radial stellar mass profile
  • radial surface-density profile
  • vertical scale-height summary
  • bar thickness summary
  • bar amplitude summary
  • central concentration summary

Start with:

python -m pytest -q
python scripts/build_synthetic_benchmark.py --config configs/milestone1.synthetic.toml
python scripts/train_summary_residual_mdn.py --data outputs/milestone1_synthetic/residual_table.npz
python scripts/evaluate_summary_residual.py --run-dir outputs/milestone1_synthetic

Synthetic Milestone 1 Benchmark

Run the synthetic benchmark:

python scripts/build_synthetic_benchmark.py --config configs/milestone1.synthetic.toml
python scripts/train_summary_residual_mdn.py --data outputs/milestone1_synthetic/residual_table.npz --output-dir outputs/milestone1_synthetic
python scripts/evaluate_summary_residual.py --run-dir outputs/milestone1_synthetic

The benchmark writes:

  • outputs/milestone1_synthetic/manifest.csv
  • outputs/milestone1_synthetic/residual_table.npz
  • outputs/milestone1_synthetic/summary_residual_mdn.pt
  • outputs/milestone1_synthetic/normalization.npz
  • outputs/milestone1_synthetic/metrics.json

Milestone 2 Cluster TNG50 Ingestion

Milestone 2 runs TNG-facing work on the remote cluster through the existing HPC wrapper at /home/lucyundead/codex/hpc-agent/hpc.

python scripts/cluster_dgdp.py sync
python scripts/cluster_dgdp.py check-env
python scripts/cluster_dgdp.py reproduce-milestone1
python scripts/cluster_dgdp.py run-tng50
python scripts/cluster_dgdp.py run-tng50-density
python scripts/cluster_dgdp.py fetch-tng50

The cluster workflow keeps full TNG50 snapshots remote and fetches only compact artifacts under outputs/tng50_milestone2/. If local rsync is unavailable, the project CLI falls back to archive transfer through the HPC wrapper and does not delete remote files.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

disk_galaxy_deprojection-0.2.0.tar.gz (475.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

disk_galaxy_deprojection-0.2.0-py3-none-any.whl (445.8 kB view details)

Uploaded Python 3

File details

Details for the file disk_galaxy_deprojection-0.2.0.tar.gz.

File metadata

  • Download URL: disk_galaxy_deprojection-0.2.0.tar.gz
  • Upload date:
  • Size: 475.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for disk_galaxy_deprojection-0.2.0.tar.gz
Algorithm Hash digest
SHA256 0d1fd96c9e94b125714ac446c5f171fa605c8377014b8560110e54673f50e583
MD5 d715fe090fe4357c10672c5127ea5d0b
BLAKE2b-256 cf8e32f9c4041deb8b73b6b2080092f19783b9f8bbcc0e0f03af946253caa63f

See more details on using hashes here.

File details

Details for the file disk_galaxy_deprojection-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for disk_galaxy_deprojection-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 be9311ff233f2240267fb2d4463b87f44d594598e822c5e2c32f74d5192047d5
MD5 c08e3bf7ac217f721823140046c3eb20
BLAKE2b-256 73a560ea953aaef2246ffce3f21088a83ed158d0142eab5bebc46b3df12976a7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page