Download builder

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:

sahyadri_sims/halos/sahyadri/<cosmo>/r1/compressed/…

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.


download_sahyadri.sh 0 files

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.

Directory layout

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.


# base http://sahyadri.tifr.res.in/data/sahyadri_sims/ ├─ halos/sahyadri/<sim_cosmo>/r1/compressed/ │ ├─ out_<snap>_basic.fits.gz # snap = 0..100, no zero-padding │ ├─ out_<snap>_extended.fits.gz │ ├─ out_<snap>_vahc.fits.gz │ └─ out_<snap>_tens.fits.gz └─ sims/sahyadri/<sim_cosmo>/r1/compressed/ └─ subsample<x>/ # x in 1,3,5,9,10,12,15,20,25 (sum=100) ├─ comp_snapshot_<NNN>_subsample<x>_ids.h5 # NNN = 3-digit, zero-padded ├─ comp_snapshot_<NNN>_subsample<x>_positions.h5 └─ comp_snapshot_<NNN>_subsample<x>_velocities.h5

Available cosmologies sim_cosmo

sim_cosmoDefinition (relative to fiducial)
default2048Fiducial: Ωₘ=0.3138, nₛ=0.9649, h=0.6736, Aₛ=2.09×10⁻⁹, w=0, Ωₖ=0
var_As_m2048Aₛ → 0.90 × fiducial
var_As_p2048Aₛ → 1.10 × fiducial
var_Om_m2048Ωₘ → 0.95 × fiducial
var_Om_p2048Ωₘ → 1.05 × fiducial
var_h_m2048h → 0.95 × fiducial
var_h_p2048h → 1.05 × fiducial
var_ns_m2048nₛ → 0.95 × fiducial
var_ns_p2048nₛ → 1.05 × fiducial
var_w_m2048w_∥→ −0.5 discussion on this variable
var_w_p2048w_∥→ +0.5 discussion on this variable

File contents

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.


Halo catalogs FITS.gz · astropy

Basic catalog out_<snap>_basic.fits.gz 21 columns

Essential halo properties — masses, radii, positions, velocities, basic shapes.

ColumnTypeDescription
idi8Unique halo identifier
pidi8Parent halo ID (-1 if no parent, i.e., distinct halo)
Mvirf4Virial mass in M☉/h
Rvirf4Virial radius in kpc/h
rsf4Scale radius in kpc/h (NFW profile fitting)
vrmsf4Velocity dispersion in km/s
xf4Halo center x-coordinate in Mpc/h
yf4Halo center y-coordinate in Mpc/h
zf4Halo center z-coordinate in Mpc/h
vxf4Halo velocity x-component in km/s
vyf4Halo velocity y-component in km/s
vzf4Halo velocity z-component in km/s
Mvir_allf4Total mass including unbound particles in M☉/h
M200bf4Mass within radius where density = 200 × background density in M☉/h
M200cf4Mass within radius where density = 200 × critical density in M☉/h
M500cf4Mass within radius where density = 500 × critical density in M☉/h
M2500cf4Mass within radius where density = 2500 × critical density in M☉/h
T/|U|f4Ratio of kinetic to potential energy
Mpeakf4Maximum mass ever achieved by this halo in M☉/h
Vpeakf4Maximum circular velocity ever achieved in km/s
b1f4halo-by-halo bias as defined in arXiv:1706.09906 and arXiv:2001.08760
Extended catalog out_<snap>_extended.fits.gz 58 columns

Detailed evolution & morphology — merger-tree links, accretion history, spin, shapes.

ColumnTypeDescription
scalef4Scale factor a = 1/(1+z) at this snapshot
desc_scalef4Scale factor of descendant snapshot
desc_idf4ID of descendant halo
num_progf4Number of progenitor halos
upidi8ID of parent halo (if subhalo)
desc_pidf4Parent ID of descendant
phantomf4Phantom flag (interpolated halo)
sam_Mvirf4Virial mass from semi-analytic model
mmp?f4Most massive progenitor flag
scale_of_last_MMf4Scale factor of last major merger
vmaxf4Maximum circular velocity in km/s
Jxf4Angular momentum x-component
Jyf4Angular momentum y-component
Jzf4Angular momentum z-component
Spinf4Peebles spin parameter
Breadth_first_IDf4ID in breadth-first tree traversal
Depth_first_IDf4ID in depth-first tree traversal
Tree_root_IDf4Root ID of merger tree
Orig_halo_IDf4Original halo ID from simulation
Snap_idxf4Snapshot index
Next_coprogenitor_depthfirst_IDf4Next co-progenitor in depth-first order
Last_progenitor_depthfirst_IDf4Last progenitor in depth-first order
Last_mainleaf_depthfirst_IDf4Last main leaf in depth-first order
Tidal_Forcef4Tidal force strength
Tidal_IDf4ID of most significant tidal perturber
Rs_Klypinf4Scale radius using Klypin vmax method in kpc/h
Xofff4Center offset from bulk position
Vofff4Velocity offset from bulk velocity
Spin_Bullockf4Bullock spin parameter
b_to_af4Intermediate to major axis ratio
c_to_af4Minor to major axis ratio
A[x]f4Major axis direction x-component
A[y]f4Major axis direction y-component
A[z]f4Major axis direction z-component
M_pe_Behroozif4Pseudo-evolution mass (Behroozi method)
M_pe_Diemerf4Pseudo-evolution mass (Diemer method)
Halfmass_Radiusf4Radius containing half the halo mass
Maccf4Mass at accretion time
Vaccf4Vmax at accretion time
Halfmass_Scalef4Scale factor when half current mass was assembled
Acc_Rate_Instf4Instantaneous accretion rate
Acc_Rate_100Myrf4Accretion rate over 100 Myr
Acc_Rate_1*Tdynf4Accretion rate over 1 dynamical time
Acc_Rate_2*Tdynf4Accretion rate over 2 dynamical times
Acc_Rate_Mpeakf4Accretion rate when mass was at peak
Acc_Log_Vmax_Instf4Instantaneous log(Vmax) accretion rate
Acc_Log_Vmax_1*Tdynf4Log(Vmax) accretion rate over 1 Tdyn
Mpeak_Scalef4Scale factor when mass peaked
Acc_Scalef4Scale factor at accretion
First_Acc_Scalef4Scale factor of first accretion
First_Acc_Mvirf4Virial mass at first accretion
First_Acc_Vmaxf4Vmax at first accretion
Vmax@Mpeakf4Vmax when mass was at its peak
Tidal_Force_Tdynf4Tidal force over dynamical time
Log_Time_to_future_mergerf4Time until next major merger
Future_merger_MMP_IDf4ID of future merger partner
Spin_at_Mpeak_Scalef4Spin parameter when mass peaked
VAHC catalog out_<snap>_vahc.fits.gz 28 columns

Value-added: tidal-tensor eigenvalues at fixed multiples of R₂₀₀b and fixed physical scales.

ColumnTypeDescription
haloIDi8Halo identifier matching other catalogs
lam1_R2R200bf41st eigenvalue of tidal tensor at 2×R200b
lam2_R2R200bf42nd eigenvalue of tidal tensor at 2×R200b
lam3_R2R200bf43rd eigenvalue of tidal tensor at 2×R200b
lam1_R4R200bf41st eigenvalue of tidal tensor at 4×R200b
lam2_R4R200bf42nd eigenvalue of tidal tensor at 4×R200b
lam3_R4R200bf43rd eigenvalue of tidal tensor at 4×R200b
lam1_R6R200bf41st eigenvalue of tidal tensor at 6×R200b
lam2_R6R200bf42nd eigenvalue of tidal tensor at 6×R200b
lam3_R6R200bf43rd eigenvalue of tidal tensor at 6×R200b
lam1_R8R200bf41st eigenvalue of tidal tensor at 8×R200b
lam2_R8R200bf42nd eigenvalue of tidal tensor at 8×R200b
lam3_R8R200bf43rd eigenvalue of tidal tensor at 8×R200b
lam1_R2Mpchf41st eigenvalue of tidal tensor at 2 Mpc/h
lam2_R2Mpchf42nd eigenvalue of tidal tensor at 2 Mpc/h
lam3_R2Mpchf43rd eigenvalue of tidal tensor at 2 Mpc/h
lam1_R3Mpchf41st eigenvalue of tidal tensor at 3 Mpc/h
lam2_R3Mpchf42nd eigenvalue of tidal tensor at 3 Mpc/h
lam3_R3Mpchf43rd eigenvalue of tidal tensor at 3 Mpc/h
lam1_R5Mpchf41st eigenvalue of tidal tensor at 5 Mpc/h
lam2_R5Mpchf42nd eigenvalue of tidal tensor at 5 Mpc/h
lam3_R5Mpchf43rd eigenvalue of tidal tensor at 5 Mpc/h
lamH1_R3Mpchf41st eigenvalue of density Hessian at 3 Mpc/h
lamH2_R3Mpchf42nd eigenvalue of density Hessian at 3 Mpc/h
lamH3_R3Mpchf43rd eigenvalue of density Hessian at 3 Mpc/h
lamH1_R5Mpchf41st eigenvalue of density Hessian at 5 Mpc/h
lamH2_R5Mpchf42nd eigenvalue of density Hessian at 5 Mpc/h
lamH3_R5Mpchf43rd eigenvalue of density Hessian at 5 Mpc/h
Tensor catalog out_<snap>_tens.fits.gz columns TBD

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.

Particle subsamples HDF5 · compressed

Particle IDs comp_snapshot_<NNN>_subsample<x>_ids.h5 compressed binary in HDF5

Unique particle identifiers. Stored with custom algorithmic compression (3–4×), so it must be read with the Sahyadri reader rather than plain h5py.

Positions comp_snapshot_<NNN>_subsample<x>_positions.h5 compressed binary in HDF5

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.

Velocities comp_snapshot_<NNN>_subsample<x>_velocities.h5 compressed binary in HDF5

Particle velocities (km/s). Stored with custom algorithmic compression (3–4×), so it must be read with the Sahyadri reader rather than plain h5py.

Reader functions

FITS catalogs read with standard tools. Particle files use compressed blocks and need the reader from the sahyadri-sandbox repository.


Halo catalogs — FITS

# 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

Particle subsamples — compressed HDF5

# 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)

Snapshot ↔ redshift ↔ scale factor

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


SnapshotScale factor aRedshift z