Pick a product family, cosmologies, file contents, and snapshots. The terminal
on the right builds the full URL list and a ready-to-run wget script as you go.
By default the script recreates the server's directory layout on your machine, so the
cosmology stays in the path and files from different cosmologies or snapshots never overwrite
one another:
Untick mirror server dirs (at the bottom of the terminal) to drop everything into a single folder instead.
When your selection is ready, click Download .sh to save
download_sahyadri.sh, move it to wherever you want the data, and run
bash download_sahyadri.sh. Files download one at a time; for a long list,
consider running it in the background (e.g. with screen). If it's
interrupted, just rerun it — already-downloaded files are skipped and it picks up
where it left off.
Availability — some products are still being staged
Halo catalogs are not yet available for var_As_p2048,
var_w_m2048 and var_w_p2048; we expect to release them in the
coming weeks. Particle subsamples are currently available only for
default2048, var_Om_m2048 and var_Om_p2048, with the
remaining cosmologies to follow over the coming months. In the meantime, the download
builder may generate URLs for files that are not yet on the server.
Only the 1% subsample is currently public; larger fractions are available on request.
Prefer a worked example? A short Jupyter notebook shows how to load a particle subsample and halo catalog and produce visualisation — no local setup needed if you run it in Colab.
Everything lives under the base URL
http://sahyadri.tifr.res.in/data/sahyadri_sims/. The first split is
halos/ (Rockstar catalogs) vs sims/ (particle data).
Orange tokens are placeholders.
| sim_cosmo | Definition (relative to fiducial) |
|---|---|
| default2048 | Fiducial: Ωₘ=0.3138, nₛ=0.9649, h=0.6736, Aₛ=2.09×10⁻⁹, w=0, Ωₖ=0 |
| var_As_m2048 | Aₛ → 0.90 × fiducial |
| var_As_p2048 | Aₛ → 1.10 × fiducial |
| var_Om_m2048 | Ωₘ → 0.95 × fiducial |
| var_Om_p2048 | Ωₘ → 1.05 × fiducial |
| var_h_m2048 | h → 0.95 × fiducial |
| var_h_p2048 | h → 1.05 × fiducial |
| var_ns_m2048 | nₛ → 0.95 × fiducial |
| var_ns_p2048 | nₛ → 1.05 × fiducial |
| var_w_m2048 | w_∥→ −0.5 discussion on this variable |
| var_w_p2048 | w_∥→ +0.5 discussion on this variable |
Halo catalogs are gzip-compressed FITS binary tables (one row per halo, matched by
id/haloID across files). Particle files are algorithmically compressed
and require the Sahyadri reader. Expand a file to see its fields.
out_<snap>_basic.fits.gz
Essential halo properties — masses, radii, positions, velocities, basic shapes.
| Column | Type | Description |
|---|---|---|
| id | i8 | Unique halo identifier |
| pid | i8 | Parent halo ID (-1 if no parent, i.e., distinct halo) |
| Mvir | f4 | Virial mass in M☉/h |
| Rvir | f4 | Virial radius in kpc/h |
| rs | f4 | Scale radius in kpc/h (NFW profile fitting) |
| vrms | f4 | Velocity dispersion in km/s |
| x | f4 | Halo center x-coordinate in Mpc/h |
| y | f4 | Halo center y-coordinate in Mpc/h |
| z | f4 | Halo center z-coordinate in Mpc/h |
| vx | f4 | Halo velocity x-component in km/s |
| vy | f4 | Halo velocity y-component in km/s |
| vz | f4 | Halo velocity z-component in km/s |
| Mvir_all | f4 | Total mass including unbound particles in M☉/h |
| M200b | f4 | Mass within radius where density = 200 × background density in M☉/h |
| M200c | f4 | Mass within radius where density = 200 × critical density in M☉/h |
| M500c | f4 | Mass within radius where density = 500 × critical density in M☉/h |
| M2500c | f4 | Mass within radius where density = 2500 × critical density in M☉/h |
| T/|U| | f4 | Ratio of kinetic to potential energy |
| Mpeak | f4 | Maximum mass ever achieved by this halo in M☉/h |
| Vpeak | f4 | Maximum circular velocity ever achieved in km/s |
| b1 | f4 | halo-by-halo bias as defined in arXiv:1706.09906 and arXiv:2001.08760 |
out_<snap>_extended.fits.gz
Detailed evolution & morphology — merger-tree links, accretion history, spin, shapes.
| Column | Type | Description |
|---|---|---|
| scale | f4 | Scale factor a = 1/(1+z) at this snapshot |
| desc_scale | f4 | Scale factor of descendant snapshot |
| desc_id | f4 | ID of descendant halo |
| num_prog | f4 | Number of progenitor halos |
| upid | i8 | ID of parent halo (if subhalo) |
| desc_pid | f4 | Parent ID of descendant |
| phantom | f4 | Phantom flag (interpolated halo) |
| sam_Mvir | f4 | Virial mass from semi-analytic model |
| mmp? | f4 | Most massive progenitor flag |
| scale_of_last_MM | f4 | Scale factor of last major merger |
| vmax | f4 | Maximum circular velocity in km/s |
| Jx | f4 | Angular momentum x-component |
| Jy | f4 | Angular momentum y-component |
| Jz | f4 | Angular momentum z-component |
| Spin | f4 | Peebles spin parameter |
| Breadth_first_ID | f4 | ID in breadth-first tree traversal |
| Depth_first_ID | f4 | ID in depth-first tree traversal |
| Tree_root_ID | f4 | Root ID of merger tree |
| Orig_halo_ID | f4 | Original halo ID from simulation |
| Snap_idx | f4 | Snapshot index |
| Next_coprogenitor_depthfirst_ID | f4 | Next co-progenitor in depth-first order |
| Last_progenitor_depthfirst_ID | f4 | Last progenitor in depth-first order |
| Last_mainleaf_depthfirst_ID | f4 | Last main leaf in depth-first order |
| Tidal_Force | f4 | Tidal force strength |
| Tidal_ID | f4 | ID of most significant tidal perturber |
| Rs_Klypin | f4 | Scale radius using Klypin vmax method in kpc/h |
| Xoff | f4 | Center offset from bulk position |
| Voff | f4 | Velocity offset from bulk velocity |
| Spin_Bullock | f4 | Bullock spin parameter |
| b_to_a | f4 | Intermediate to major axis ratio |
| c_to_a | f4 | Minor to major axis ratio |
| A[x] | f4 | Major axis direction x-component |
| A[y] | f4 | Major axis direction y-component |
| A[z] | f4 | Major axis direction z-component |
| M_pe_Behroozi | f4 | Pseudo-evolution mass (Behroozi method) |
| M_pe_Diemer | f4 | Pseudo-evolution mass (Diemer method) |
| Halfmass_Radius | f4 | Radius containing half the halo mass |
| Macc | f4 | Mass at accretion time |
| Vacc | f4 | Vmax at accretion time |
| Halfmass_Scale | f4 | Scale factor when half current mass was assembled |
| Acc_Rate_Inst | f4 | Instantaneous accretion rate |
| Acc_Rate_100Myr | f4 | Accretion rate over 100 Myr |
| Acc_Rate_1*Tdyn | f4 | Accretion rate over 1 dynamical time |
| Acc_Rate_2*Tdyn | f4 | Accretion rate over 2 dynamical times |
| Acc_Rate_Mpeak | f4 | Accretion rate when mass was at peak |
| Acc_Log_Vmax_Inst | f4 | Instantaneous log(Vmax) accretion rate |
| Acc_Log_Vmax_1*Tdyn | f4 | Log(Vmax) accretion rate over 1 Tdyn |
| Mpeak_Scale | f4 | Scale factor when mass peaked |
| Acc_Scale | f4 | Scale factor at accretion |
| First_Acc_Scale | f4 | Scale factor of first accretion |
| First_Acc_Mvir | f4 | Virial mass at first accretion |
| First_Acc_Vmax | f4 | Vmax at first accretion |
| Vmax@Mpeak | f4 | Vmax when mass was at its peak |
| Tidal_Force_Tdyn | f4 | Tidal force over dynamical time |
| Log_Time_to_future_merger | f4 | Time until next major merger |
| Future_merger_MMP_ID | f4 | ID of future merger partner |
| Spin_at_Mpeak_Scale | f4 | Spin parameter when mass peaked |
out_<snap>_vahc.fits.gz
Value-added: tidal-tensor eigenvalues at fixed multiples of R₂₀₀b and fixed physical scales.
| Column | Type | Description |
|---|---|---|
| haloID | i8 | Halo identifier matching other catalogs |
| lam1_R2R200b | f4 | 1st eigenvalue of tidal tensor at 2×R200b |
| lam2_R2R200b | f4 | 2nd eigenvalue of tidal tensor at 2×R200b |
| lam3_R2R200b | f4 | 3rd eigenvalue of tidal tensor at 2×R200b |
| lam1_R4R200b | f4 | 1st eigenvalue of tidal tensor at 4×R200b |
| lam2_R4R200b | f4 | 2nd eigenvalue of tidal tensor at 4×R200b |
| lam3_R4R200b | f4 | 3rd eigenvalue of tidal tensor at 4×R200b |
| lam1_R6R200b | f4 | 1st eigenvalue of tidal tensor at 6×R200b |
| lam2_R6R200b | f4 | 2nd eigenvalue of tidal tensor at 6×R200b |
| lam3_R6R200b | f4 | 3rd eigenvalue of tidal tensor at 6×R200b |
| lam1_R8R200b | f4 | 1st eigenvalue of tidal tensor at 8×R200b |
| lam2_R8R200b | f4 | 2nd eigenvalue of tidal tensor at 8×R200b |
| lam3_R8R200b | f4 | 3rd eigenvalue of tidal tensor at 8×R200b |
| lam1_R2Mpch | f4 | 1st eigenvalue of tidal tensor at 2 Mpc/h |
| lam2_R2Mpch | f4 | 2nd eigenvalue of tidal tensor at 2 Mpc/h |
| lam3_R2Mpch | f4 | 3rd eigenvalue of tidal tensor at 2 Mpc/h |
| lam1_R3Mpch | f4 | 1st eigenvalue of tidal tensor at 3 Mpc/h |
| lam2_R3Mpch | f4 | 2nd eigenvalue of tidal tensor at 3 Mpc/h |
| lam3_R3Mpch | f4 | 3rd eigenvalue of tidal tensor at 3 Mpc/h |
| lam1_R5Mpch | f4 | 1st eigenvalue of tidal tensor at 5 Mpc/h |
| lam2_R5Mpch | f4 | 2nd eigenvalue of tidal tensor at 5 Mpc/h |
| lam3_R5Mpch | f4 | 3rd eigenvalue of tidal tensor at 5 Mpc/h |
| lamH1_R3Mpch | f4 | 1st eigenvalue of density Hessian at 3 Mpc/h |
| lamH2_R3Mpch | f4 | 2nd eigenvalue of density Hessian at 3 Mpc/h |
| lamH3_R3Mpch | f4 | 3rd eigenvalue of density Hessian at 3 Mpc/h |
| lamH1_R5Mpch | f4 | 1st eigenvalue of density Hessian at 5 Mpc/h |
| lamH2_R5Mpch | f4 | 2nd eigenvalue of density Hessian at 5 Mpc/h |
| lamH3_R5Mpch | f4 | 3rd eigenvalue of density Hessian at 5 Mpc/h |
out_<snap>_tens.fits.gz
Value-added: full 3×3 tidal tensor at several smoothing scales. Column documentation pending.
Column-level documentation for this file is not yet available in the README. The file is downloadable above; field definitions will be added here.
comp_snapshot_<NNN>_subsample<x>_ids.h5
Unique particle identifiers. Stored with custom algorithmic compression (3–4×), so it must be
read with the Sahyadri reader rather than plain h5py.
comp_snapshot_<NNN>_subsample<x>_positions.h5
Comoving particle positions (Mpc/h). Stored with custom algorithmic compression (3–4×), so it must be
read with the Sahyadri reader rather than plain h5py.
comp_snapshot_<NNN>_subsample<x>_velocities.h5
Particle velocities (km/s). Stored with custom algorithmic compression (3–4×), so it must be
read with the Sahyadri reader rather than plain h5py.
FITS catalogs read with standard tools. Particle files use compressed blocks and need the reader from the sahyadri-sandbox repository.
# pip install astropy from astropy.table import Table def load_halo_catalog(filename): """Load a Sahyadri halo catalog (basic / extended / vahc / tens). Works directly on the .fits.gz file; returns an astropy Table.""" return Table.read(filename) # HDU 1, binary table t = load_halo_catalog("out_100_basic.fits.gz") print(t.colnames, len(t)) mvir = t["Mvir"] # columns by name
# git clone https://github.com/a-paranjape/sahyadri-sandbox.git # then make its readers importable (add the repo to PYTHONPATH) import numpy as np from readers import SnapshotReader def load_particles(sim_stem, snap, subsamples=[1], real=1, blocks=("ids","pos","vel","potential")): """sim_stem e.g. 'sims/sahyadri/default2048/'. Returns a dict of arrays.""" sr = SnapshotReader(sim_stem=sim_stem, real=real, snap=snap, read_header=True, use_compressed=True) return {b: sr.read_block(b, subsamples=subsamples) for b in blocks} data = load_particles("sims/sahyadri/default2048/", snap=100, subsamples=[1]) for k, v in data.items(): print(k, v.shape)
101 snapshots, 0–100. Snapshot 100 is z = 0 (a = 1). Redshift is computed as z = 1/a − 1. You can download the outputs100.txt file which list the scale factor of the 100 snapshot, the first row entry corresponds to snapshot=0
| Snapshot | Scale factor a | Redshift z |
|---|