Summary
Applied cuts (e.g. η < 0.5 on Tracks) are silently lost on every event
switch. The new event renders all objects visible, ignoring active filters.
The same bug affects Save/Load State — cut values are never serialized.
Root Cause
buildEventDataFromJSON() destroys and recreates all 3D objects on every
event switch:
this.graphicsLibrary.clearEventData(); // all objects destroyed
this.configuration.eventDataLoader.buildEventData(...); // recreated, all visible=true
No code path re-applies active cuts after rebuild. The Cut objects
(storing minValue, maxValue) live only in Angular component local state
— never stored by any manager, never queried after buildEventData().
StateManager.getStateAsJSON() serializes only camera position and clipping
angles — zero cut data. Confirmed: searching the entire codebase for
storedCuts, activeCuts, cutValues returns no results.
Reproduction
- ATLAS demo → Tracks_ → Cut Options → set η max to 0.5
- Observe tracks reduce to central region only
- Switch to next event
- All tracks reappear — cut silently lost
Live Screenshots
BEFORE (η < 0.5 applied, tracks filtered):
AFTER (next event loaded, all tracks back, cut ignored):
Impact
Every physicist browsing events with active filters must manually
re-apply cuts after every event switch. Affects ATLAS, LHCb, FCC,
Belle II, TrackML — all use the same code path.
Proposed Fix
- After
buildEventData() completes, re-apply active cuts by calling
collectionFilter() for each collection with active cuts
- Add
toJSON()/fromJSON() to the Cut class and include cut state
in StateManager.getStateAsJSON()
Files
cut.model.ts — Cut class (no serialization)
scene-manager.ts:290 — collectionFilter()
event-display.ts:168 — buildEventDataFromJSON()
state-manager.ts:82 — getStateAsJSON()
Summary
Applied cuts (e.g. η < 0.5 on Tracks) are silently lost on every event
switch. The new event renders all objects visible, ignoring active filters.
The same bug affects Save/Load State — cut values are never serialized.
Root Cause
buildEventDataFromJSON()destroys and recreates all 3D objects on everyevent switch:
No code path re-applies active cuts after rebuild. The
Cutobjects(storing
minValue,maxValue) live only in Angular component local state— never stored by any manager, never queried after
buildEventData().StateManager.getStateAsJSON()serializes only camera position and clippingangles — zero cut data. Confirmed: searching the entire codebase for
storedCuts,activeCuts,cutValuesreturns no results.Reproduction
Live Screenshots
BEFORE (η < 0.5 applied, tracks filtered):
AFTER (next event loaded, all tracks back, cut ignored):
Impact
Every physicist browsing events with active filters must manually
re-apply cuts after every event switch. Affects ATLAS, LHCb, FCC,
Belle II, TrackML — all use the same code path.
Proposed Fix
buildEventData()completes, re-apply active cuts by callingcollectionFilter()for each collection with active cutstoJSON()/fromJSON()to theCutclass and include cut statein
StateManager.getStateAsJSON()Files
cut.model.ts— Cut class (no serialization)scene-manager.ts:290—collectionFilter()event-display.ts:168—buildEventDataFromJSON()state-manager.ts:82—getStateAsJSON()