Skip to content

TNG-Cluster

TNG-Cluster is 352 cluster zoom simulations at TNG300-1 resolution, reconstructed into a single volume. Data format details are on the TNG-Cluster wiki.

File Structure

Unlike regular TNG boxes, TNG-Cluster stores each zoom halo's particles in dedicated chunk files:

  • Snapshots (704 files per snapshot): For zoom halo index i:
    • snap_ZZZ.i.hdf5 — particles inside FoF halos
    • snap_ZZZ.(i+352).hdf5 — particles outside FoF halos ("outer fuzz")
  • Group catalogs (352 files): fof_subhalo_tab_ZZZ.i.hdf5 contains the catalog for zoom halo i

Do not load all files

Loading all 704 chunk files would mix overlapping low-resolution background particles from all 352 zooms. Always use file_ids to select a specific zoom halo.

FeXXV Emission (Cloudy MCRT)

A complete config for FeXXV (6.7 keV, 1.85 Å) emission from a TNG-Cluster halo, using Cloudy tables to compute emissivities. Example shown is for zoom halo i=0.

Key knobs: pbc: false (cutout, non-periodic), ghost_thickness: 0.1 (Voronoi boundary layer in box units, sufficient for typical halo cutouts), mesh_cache_mode: "auto" (caches the Voronoi mesh to disk). listsource emits one photon source per cell with emissivity above lum_threshold; luminosities use THOR's internal unit of 10⁴² erg/s.

Full configuration
tng_cluster_fexv.yaml
dataset_type: 'pointcloud_voronoi'
driver_type: 'mcrtsimulation'
device: "cpu-openmp"

pointcloud_voronoi:
  hilbert_bits: 8
  mesh_cache_mode: "auto"
  construction:
    ghost_thickness: 0.1
  loader: "gadget"
  cloudy:
    enabled: true
    emission_table_path: "/path/to/grid_emissivities_lg.hdf5"
    ion_table_path: "/path/to/grid_ions_lg_c23.hdf5"
    redshift_interp: true
    interpolation_order: 1
  gadget:
    path: "/path/to/TNG-Cluster/output/snapdir_099"
    catalog_path: "/path/to/TNG-Cluster/output/groups_099"
    file_ids: [0, 352]       # zoom halo i=0: chunks 0 and 352
    # Positions, Temperature, and Velocities are added automatically.
    # Density is resolved as a dependency of the Cloudy emission field.
    fields:
      - "cloudyemission_Fe25 1.85040A_times_volume"
    zoom_target:
      hid: 0                  # most massive halo in this zoom's catalog
      rvir: 2                 # cutout radius as multiple of virial radius

mcrtsimulation:
  pbc: false                  # cutout, not periodic
  hubble_flow: 70.0          # km/s/Mpc
  redshift: 0.0
  max_step: 0.01
  max_dlambda: 10.0
  outputpath: ./output
  overwrite: true
  linename: FeXXV
  xcrit: 0
  nphotons_max: 500000
  nphotons_step_max: 500000
  use_peeling: true
  populate:
    Emissivity: "cloudyemission_Fe25 1.85040A_times_volume"
  peeling:
    dist_max: 0.5
    tau_max: 100.0
  emissionmodel:
    mode: "listsource"
    listsource:
      lum_threshold: 1e-15
      nphotons_per_source_min: 1
      nphotons_per_source_max: 10
      nphotons_per_unit_lum: 10
      loader: emissivity

File Selection

To process zoom halo i, set file_ids to load only that halo's two snapshot chunks:

gadget:
  file_ids: [22, 374]       # zoom halo i=22: chunks i and i+352

How file_ids works

For zoom halo index i (the GroupOrigHaloID from the parent box): chunk i holds particles inside FoF halos, chunk i+352 holds the "outer fuzz". file_ids: [i] is usually enough; include i+352 only if you need outer-fuzz particles. The catalog reader receives the same file_ids and silently skips out-of-range IDs (the catalog has 352 files), correctly loading file i.

With file_ids restricted to a single zoom, the catalog contains only that zoom's halos, so hid: 0 (most massive FoF group) selects the primary zoom target.

See Also