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:
As usual, THOR greatly accelerates these workflows, synthesizing millions of absorption-line skewers in minutes on a single GPU:
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:
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.

