Particle Event Display
An event-display bench for collision events. The plate ships a schematic collider barrel so there is something to orbit, click, slice and measure against before any of your data arrives: five nested cylinders on the beam axis in real metres — beam pipe at 0.03 m, tracker at 1.2 m, ECAL at 1.8 m, HCAL at 2.9 m, muon system at 7.4 m, all 22 m long — drawn as low-opacity wireframe so tracks read straight through them. Barrels only, and deliberately not any one experiment's numbers, so it reads as 'a detector' whether you work on ATLAS, CMS, LHCb or Belle II; the gap between 2.9 m and 7.4 m is where a solenoid and its return yoke would sit. Load an event as reconstructed tracks through `tracks` — thick constant-width polylines rather than one-pixel ones, with per-track colour, width and label, an optional scalar `value` for pT or energy to colour them by, and a `meta` object of kinematics that shows up in the Properties panel when you click the track. Energy deposits go in through `pointcloud` (one RGB triple per hit, so you choose the energy-to-colour mapping), and a handful of labelled jet or cluster boxes through `boxes`. Step through events with the transport in the toolbar: it drives the shared `playback` frame clock, and `tracks`, `pointcloud` and `boxes` all listen for `playback:frame`, so one clock moves the whole event at once. Slice the barrel open with X/Y/Z section planes and drag their sliders at the foot of the screen. Measure opening angles between tracks with the Angle tool — there is a dedicated Opening-angle button beside the Measure split-tool, and readings are in metres to three decimals because the fixture is drawn at real scale. Drop world-anchored review pins with one-click screenshot capture, sketch freehand markup over the viewport, pin sticky notes, and save named camera views for the transverse and longitudinal projections. Drag and drop your own detector geometry (GLB/glTF, OBJ, STL, PLY, 3MF, STEP, IGES) or a hit cloud (PCD, XYZ, PTS) onto the canvas. LIMITS, STATED RATHER THAN DISCOVERED. The jet/cluster boxes are wireframe edge overlays with depth testing off and one canvas-texture label each, drawn on top of everything — right for a dozen annotated jets, wrong for a calorimeter: this is not a cell renderer and will not survive thousands of boxes. Hits are a single point-cloud object, so clicking one selects the cloud rather than the individual hit, and only one cloud exists at a time. A dropped PCD/XYZ file becomes static geometry through the importer, not a frame-aware cloud — for hits that move with the event transport, push them through `pointcloud` instead. The pT colour legend ships switched off, because a gradient over an empty scene is a meaningless 0-to-1 ramp; switch it on from the toolbar once an event is loaded and it mirrors the range and colormap `tracks` actually used. The invariant-mass histogram is the same: an empty titled panel, hidden until you toggle it, and binned from a raw numeric array rather than from a table, because this plate carries no dataframe. Its brushing is programmatic — `graph2d` registers no pointer handlers, so a cut is an action you send, not a rectangle you drag, and the `graph2d:selection` event it emits has no listener yet, so a brush cannot drive the 3D view. For CSV-driven spectra, cut scans, occupancy maps and classifier metrics, use the Particle Analysis plate. There is no frame slider in the toolbar either, because a toolbar input can only pass `{name, value}` while `playback.seek` reads `frame`; use the step buttons, or add a legend slider bound to `playback.seek` with `paramKey: 'frame'` from Studio, which is also where particle-type layers become legend entries. Extends Default 3D for the whole baseline review toolset — region selection, markup, sticky notes, coordinate markers, saved views, object tree — minus its ground grid, because a collider has no floor.
Supported file formats: GLB, GLTF, OBJ, STL, PLY, 3MF, STEP, STP, IGES, IGS, PCD, XYZ, PTS