Skip to content

Project note · July 10, 2026

July 2026 Update: Absorption Lines and Tracers

There are two major analysis operators in THOR widening its applicability: you can now create mock absorption-line spectra, and analyze simulations along custom, even curved, trajectories.

Absorption sightlines

The new sightline operator turns a ray through the box into a mock absorption-line spectrum. THOR keeps track of every gas cell the ray crosses and builds up the optical depth τ(λ) cell by cell. Gas moving toward the observer absorbs on the blue side of the line, receding gas on the red side, and each cell's temperature sets how broad its line comes out. The spectrum you get is a velocity-space picture of the gas the ray went through.

The sightline-absorption cookbook shows the whole pipeline in action, starting from the raw per-cell dump and ending at a mock observed spectrum with a QSO continuum, an instrument line-spread function, and photon noise, checking against Trident along the way. Metal lines work just the same: any ion with a Cloudy-tabulated density can be integrated, and several at once. Here is a single sightline through the circumgalactic medium of a galaxy, seen in three ions at the same time:

A single sightline through the AGORA z = 4 GIZMO CGM, in three ions. The panel is the halo's total-hydrogen column density (N_H projection along +x); the marker is one off-centre sightline through the CGM (impact parameter b ≈ 12 kpc), and the inset shows that sightline's transmitted flux e^−τ in three stacked panels — O VI, C IV and Si IV (±500 km/s about each line) — the same gas seen in three ions, each with its own kinematic structure. A single sightline through the AGORA z = 4 GIZMO CGM, in three ions. The panel is the halo's total-hydrogen column density (N_H projection along +x); the marker is one off-centre sightline through the CGM (impact parameter b ≈ 12 kpc), and the inset shows that sightline's transmitted flux e^−τ in three stacked panels — O VI, C IV and Si IV (±500 km/s about each line) — the same gas seen in three ions, each with its own kinematic structure.

As usual, THOR greatly accelerates these workflows, synthesizing millions of absorption-line skewers in minutes on a single GPU:

HI Lyα sightline benchmark, sightlines-per-second throughput: THOR on GPU and CPU versus Trident HI Lyα sightline benchmark, sightlines-per-second throughput: THOR on GPU and CPU versus Trident

The absorption-lines comparison has the full benchmark setup and the accuracy cross-check.

Tracing properties along rays

The tracer operator looks at rays from the other side: not what an observer would see through them, but what they encounter along the way. It logs any field you ask for along the trajectory, and you decide how the path gets recorded. Cut it at every cell, or only when some closing rule fires, and store per-segment statistics such as lengths and means.

The trajectories themselves are up to you as well. Rays do not have to be straight anymore: the tracer can re-aim a ray at every cell crossing, for instance to follow the local magnetic or velocity field, so the ray becomes a field line. That is how we measure magnetic coherence lengths. Close a segment whenever the field direction has turned by more than a threshold, and the segment lengths are the coherence lengths, each carrying the mean of any field along its coherent stretch. Here is what that looks like in a TNG50 volume:

Field-aligned rays tracing the magnetic field of the TNG50-4 box (periodic), colored by the local field strength |B|. At the end, straight stretches fade out and each trajectory keeps only its most tangled contiguous stretch.

The new coherence-length cookbook goes through the full analysis, from straight versus field-aligned rays and velocity versus magnetic field to pooled statistics from random ray sources.

Also in this release

Plenty more landed since April. The biggest change under the hood: ray tracing can now run distributed across MPI ranks, and Voronoi construction moved onto the device. Mock observations gained multi-observer peeling on HEALPix grids. And the Apptainer images are now a single multi-vendor build (CUDA, ROCm, CPU) with MPI enabled out of the box.

Next up: load balancing for the distributed backend, deeper write-ups of the absorption pipeline, and expanded Python bindings for interactive analysis.