ATLAS · CERN · 3D Visualisation

CGV-WEB

Calorimeter Geometry Viewer Web

CGV-WEB renders CERN ATLAS calorimeter collision events in real-time 3D, colour-coding each detector cell by energy deposit. Built on Rust/WebAssembly, Three.js, and backed by ROOT data pipelines, it is NIPSCERN's most technically ambitious project — led by Chrysthofer Arthur — and is being integrated into the ATLAS Control Room at CERN.

Rust / WebAssembly Three.js JavaScript ROOT ATLAS TileCal · LAr · HEC Open Source Active
ATLAS Control Room Integration — CERN
CGV-WEB is being integrated into the ATLAS Control Room at CERN, where it will appear on the main display screen used by researchers monitoring live particle collisions in the LHC. This milestone represents NIPSCERN's most direct contribution to the operational infrastructure of a major LHC detector, placing work produced at UFJF on the walls of one of the world's most advanced physics facilities.
Live Preview

ATLAS Calorimeter — Interactive Preview

Interactive 3D rendering of the ATLAS calorimeter. Each coloured cell represents energy deposited by particles in a collision event.

A browser-native engine for ATLAS calorimetry

CGV Web is a zero-install, browser-native event display for the ATLAS calorimeter system. It loads the real detector geometry exported from the ATLAS GeoModel database and draws on top of it the quantities shifters and analysers care about during a run: energy deposits per cell, topological clusters, reconstructed inner-detector tracks, and the associated kinematic summary.

The viewer runs entirely in WebGL2 via Three.js. Cell identifiers are decoded by a Rust-compiled-to-WebAssembly module, so mapping a 32-bit caloId to (subDet, side, sampling, η-bin, φ-bin) costs a few microseconds and never blocks the main thread. The geometry payload CaloGeometry.glb.gz (~45 MB compressed) is fetched once and cached by the browser service worker; subsequent loads are sub-second.

Geometry is produced off-line by a custom ROOT → glTF pipeline. A Node.js build script (setup/root2scene.mjs) reads CaloGeometry.root from the GeoModel export, compiles it to glTF-binary, strips and quantises unused attributes (setup/optimize_glb.mjs), and gzip-compresses the final .glb.gz shipped to clients. At runtime the page never touches ROOT or ATHENA — any modern browser with WebGL2 is enough.

Stack overview

LayerTechnologyRole
RendererThree.js · WebGL2Scene, camera, cell meshes, tracks and cluster outlines
ID decoderRust → WebAssemblyDecodes compact 32-bit ATLAS cell IDs into (subDet, side, sampling, η, φ)
Geometry sourceATLAS GeoModel → ROOT → glTFOff-line build; runtime loads the ~45 MB .glb.gz
Event dataJiveXML (.xml / .xml.gz)Produced by ATHENA's JiveXML algorithm; served by ATLANTIS in Live mode
Build pipelineNode.js scripts · wasm-packCompiles geometry and Rust parser; one-shot via build.bat on Windows

Lineage — from CGV to CGV Web

CGV Web is the direct successor of the original CGV (Calorimeter Geometry Viewer), developed by Prof. Dr. Luciano Manhães de Andrade Filho as part of his doctoral thesis. The original CGV was built in JSROOT, ran on Linux in the ATLAS Control Room during the early days of the LHC in 2008, and served as the reference calorimeter-geometry event display for shifters of that era.

In 2026 the project was rebuilt from scratch at NIPSCERN as a modern web application: a WebGL2 renderer, WASM-based JiveXML parser, live-feed ingestion, an entirely new UI with cinema mode, slicer, guided tour and multi-language support — and many more capabilities beyond what the original tool offered. CGV Web inherits the spirit of the original CGV while targeting a browser-first, Run 3 / Run 4 workflow.

Developed at NIPSCERN, Universidade Federal de Juiz de Fora, in partnership with the ATLAS Experiment at CERN. Scientific advisor: Prof. Dr. Luciano Manhães de Andrade Filho Lattes. Lead developer: Chrysthofer Arthur Amaro Afonso Lattes (undergraduate research). JiveXML feed: ATHENA / ATLANTIS.

What you see inside the detector

The scene is a faithful reconstruction of the real ATLAS calorimeter geometry. Cell meshes come from the ATLAS GeoModel database, exported via a custom ROOT → glTF pipeline, repacked as a single CaloGeometry.glb.gz payload and preloaded at first paint. Active cells and ATLAS-Ghost envelopes share the same glTF file and are toggled independently at runtime, so the wire-up cost is paid once.

Active sub-detectors

Sub-detectorRegionη rangeCells (approx.)Panel
TileCal LBLong barrel0 – 1.0~2,900TILE
TileCal EB±Extended barrel0.8 – 1.7~2,400TILE
LAr EMBEM barrel0 – 1.475~109,000LAr
LAr EMEC±EM end-cap1.375 – 3.2~63,000LAr
HECHadronic end-cap1.5 – 3.2~5,600HEC
FCAL 1 / 2 / 3Forward3.1 – 4.9~3,500FCAL

By default only cells with a hit (E ≥ min_threshold) are drawn. To visualise the bare geometry of a sub-detector even where the current event carries no deposit, enable All cells with the V key — empty cells are then painted with the coldest colour of their sub-detector palette.

ATLAS Ghost envelopes

"Ghosts" are the inactive support, cryostat and structural volumes. CGV Web renders them as semi-transparent grey shells so that shifters can see where the beam axis and the sub-detector boundaries sit without occluding the event itself. The current build exposes the Ghost as a single on/off control tied to the TileCal outer shell: the Ghost toolbar button (or G) toggles the whole ATLAS-Ghost envelope bundle as one unit. When any ghost is visible, a dashed φ-segmentation grid is drawn on top of the Tile envelopes to mark the 64 × 11.25° module boundaries.

Colour convention

Sub-detector / objectAccentHex
TileCalorange#c87c18
LAr EMgreen#27b568
HECcyan#66e0f6
FCALcopper#b87333
Tracksyellow#ffea00
Clustersred#ff4400

Active cells use a per-sub-detector cold-to-hot gradient between their minimum-palette accent (low E) and a bright saturated shade (high E). Track lines are thin and solid; cluster outlines are dashed. Inactive ghost envelopes are a shared semi-transparent grey, rendered at 15% opacity so they never compete with the active data.

Three ways to feed the viewer

Events enter CGV Web through three independent pathways, selected in the mode bar at the top of the left panel. Only one mode is active at a time; switching modes stops the previous ingestion without discarding the scene, so you can hop between Live and a local file without losing the camera state or threshold configuration.

Live — ATLAS Live long-poll

Live mode long-polls the ATLAS Live service hosted by the ATLANTIS project. It is the default mode in the Control Room deployment and typically delivers an event every few seconds during a run. The CGV Web left panel mirrors exactly the event list served by atlas-live.cern.ch. A green pulsing dot marks an active feed, amber warns that the last event is older than 60 s, red signals an unreachable endpoint. The / controls pause and resume polling; Space toggles the same state from the keyboard.

Local — Browser-based JiveXML parsing

Local mode parses JiveXML entirely in the browser — files never leave the machine, no upload, no server round-trip, no telemetry. Select Folder walks a directory recursively and adds every .xml entry to the event list (File System Access API on Chromium, webkitdirectory fallback on Firefox and Safari); Upload XML opens a single file. Multi-event XMLs are expanded into their constituent events, and a carousel bar offers 2 s / 5 s / 10 s / 30 s auto-advance. Drag-and-drop of .xml or .xml.gz onto the 3D canvas is equivalent to Upload XML.

Samples — Curated bundled events

A curated set of events shipped in default_xml/ is listed at start-up — useful for demos, shifter training, and for regression-testing a new build without touching production data. Each row shows a short description together with the run / event number; the list is populated from default_xml/index.json, bundled with the deployment.

Accepted file formats

FormatSourceStatus
JiveXML .xmlATHENA JiveXML / ATLANTISsupported
JiveXML .xml.gzgzipped JiveXMLsupported (auto-decompressed)
.rootxAOD / D3PDnot supported — convert via ATHENA first
.jsoncustom formatsnot supported
.xml.zstZstandard-compressed JiveXMLnot supported

The interface in three regions

The CGV Web interface is organised into three functional regions placed around the 3D canvas: a retractable left panel for data ingestion, a retractable right panel for energy threshold sliders, and a bottom toolbar for scene controls and output. Transient widgets — cell tooltip, collision HUD, dialogs and popovers — appear contextually on top of the canvas. Every control is keyboard-reachable.

Left panel — data source

Three exclusive modes at the top (Live, Local, Samples) reveal the corresponding list or picker. A status bar reports the current pipeline stage (request, recognise, download, acquire, load) and a session-wide request counter. Once an event is loaded, a collision footer condenses run number, event number, luminosity block, timestamp and JiveXML producer version into a compact strip; hovering promotes it to a full per-field tooltip. The panel is pinnable via a pin icon at top-right and auto-opens on edge-hover when the Auto-open sidebar on hover preference is enabled.

Right panel — energy thresholds

Stacked per-sub-detector tabs with a vertical slider each. The Cluster tab is pinned at the top as an always-visible fixed pane; TILE, LAr, FCAL, HEC and Track are sibling tabs below. Each slider exposes a gradient track from 0 to the current ceiling, a max read-out driven by the 97th-percentile of the current event (P97 auto-scaling), and a numeric input accepting typed values with unit suffixes — 200 MeV, 1.5 GeV, 2e3. The Cluster tab adds a Cluster Threshold on/off switch that bypasses the cluster filter when disengaged.

Bottom toolbar — scene & output

Pin toggles for the side panels (Sidebar, Energy), a Layers popover to switch TILE / LAr / HEC / FCAL independently, a single-unit ATLAS Ghost toggle, show/hide for Tracks and Clusters, a Cell info (hover tooltip) switch, the Beam axis indicator, a scene-Background colour picker, the cylindrical-wedge Slicer gizmo, an All cells reveal, Reset view, Cinema mode, the Screenshot resolution picker, Settings, and a Language cycle (EN / FR / PT / NO).

Cell tooltip

Displayed on hover whenever Cell info is enabled. The tooltip reports the compact ATLAS-ID (sub-detector, side, sampling, η-bin, φ-bin), the cell's η/φ coordinates and the deposited energy. Units auto-scale between MeV and GeV so the read-out stays readable across four orders of magnitude. A thin outline is drawn around the hovered cell; both tooltip and outline are suppressed during screenshot capture unless explicitly pinned.

Slicer — cylindrical wedge

The slicer carves a z-aligned cylindrical wedge out of the scene, hiding every cell whose centre falls inside the cut volume — useful to peek at a shower core when outer layers occlude it. Activate with Shift+S. A screen-Y drag on the 3D handle sweeps the wedge angle θ from 0 to 2π; a screen-X drag scales the cylinder height (default 3 m, max 20 m) symmetrically around the anchor; right-click + drag translates the whole cut volume along z. Culling respects every other filter (sub-detector toggles, energy thresholds, clusters, All cells), and the gizmo is hidden automatically during screenshot capture.

Cinema & guided tour

C hides all non-essential UI and slowly rotates the camera around the detector. Only the Exit Cinema pill and the collision HUD remain visible, so the frame is suitable for presentation capture. With Guided tour in cinema enabled in Settings, the auto-rotation is replaced by a scripted fly-through: a wide establishing shot, a face-on approach along +z, a glide through the central bore, a face-on exit through −z, and an outer arc back to the start — a single continuous motion. Any canvas click (without drag) exits cinema.

Screenshot output

P or the camera toolbar button opens the resolution picker. The scene re-renders at the chosen resolution with the UI hidden — slicer gizmo, beam-axis cones and cursor crosshair are suppressed during capture; pinned tooltips are composited back in. Available resolutions depend on form factor: mobile and tablet cap at 2K; desktop and laptop go up to 10K (10 240 × 5 760). A transparent background toggle saves the PNG with an alpha channel; a collision info overlay toggle composites event metadata (timestamp, run, event, lumi block, version) into the top-left corner. Captured files are named CGVWEB_{W}x{H}_{YYYY-MM-DDTHH-MM-SS}.png.

Preferences persist in localStorage under the cgv-* prefix — button hints, auto-open sidebar on hover, guided-tour mode, scene background, and interface language. The first visit auto-detects the browser's navigator.language.

Keyboard shortcuts

All shortcuts are single-press (except where Shift is noted). Typing into a text field suppresses the hotkeys until focus leaves the field; Ctrl, Cmd and Alt combinations are reserved for the browser.

Camera
Mouse dragOrbit camera
ScrollZoom
Right-dragPan
RReset to default isometric
1 / 2 / 3Top / side / isometric presets
Panels
MPin / unpin left (sidebar) panel
EPin / unpin right (energy) panel
GATLAS Ghost envelopes popover
SSettings panel
?Shortcuts cheat-sheet (in Settings)
EscClose topmost overlay / exit cinema
Scene toggles
TToggle TILE
L / AToggle LAr (EMB + EMEC)
HToggle HEC
FToggle FCAL
JToggle reconstructed tracks
KToggle topological clusters
Shift+KToggle cluster-ET threshold switch
IToggle cell tooltip & outline
BToggle beam-axis indicator
VToggle All cells
Shift+BScene-background colour picker
Shift+SCylindrical-wedge slicer
CCinema mode
Data source & output
← / →Previous / next event
SpacePause / resume live polling
PScreenshot — resolution picker
/Focus event-list search

Status & roadmap

CGV Web is being prepared to serve as the official CERN event-display tool for the ATLAS experiment during Run 4. The current code base is the candidate build for that role: the geometry, parser, live-feed ingestion and UI are feature-ready and are being validated against Run 3 Control Room operations ahead of the Run 4 integration window.

The tool works today on Run 3 data and is optimised for the Run 3 workflow of the ATLAS Control Room: open the page, see the most recent event rotating in, filter by sub-detector or energy threshold, and grab a publication-quality screenshot in one click. No install, no ROOT, no Athena — any modern browser with WebGL2 is enough.

For Run 4 (scheduled to start around 2030), CGV Web is planned to become the official CERN ATLAS calorimeter-geometry event-display tool, integrated directly into the ATLAS Control Room as the reference shifter-facing visualiser for calorimeter data.

Try CGV-WEB

Load the full application — connect to the ATLAS Live feed, open a JiveXML event, or pick a bundled sample, and explore the calorimeter geometry cell by cell.

Open Full CGV App View on GitHub