Skip to content

v4.0.0

Choose a tag to compare

@EdwardMoyse EdwardMoyse released this 06 Jun 05:43
· 8 commits to main since this release

4.0.0 (2026-06-06)

It has been a long time since the last release, and this is a big one. There have been very significant performance and UI improvements, bugfixes, a migration to Angular 20 finally, and lots and lots of new features. Details below, but we hope you enjoy Phoenix v4.0.0

New Features

  • Angular 20 upgrade — migrated from Angular 19 to Angular 20 using the new application builder, with full compatibility fixes for tests and tooling (#806, #906)
  • Eta-phi energy map panel — new visualization panel showing energy distributions in eta/phi space (#876)
  • Event dataset browser — new browser panel with physics-aware filtering for navigating event datasets (#868)
  • Track kinematics panel — new panel displaying track kinematic variables with config-driven column selection, accessible from the More Information menu (#848)
  • EventAutoloader — live event streaming from directories or remote endpoints (#857)
  • Notification service — new NotificationService with four severity levels (info, success, warning, error) (#895)
  • Cut state serialization — cut configuration is now serialized to JSON and restored via Load State (#882)
  • Configurable UI components — UI menu items are now configurable via UIMenuConfig (#814)
  • EffectsState enum — new EffectsState enum and setHoverColor() for cleaner effects management (#889)
  • URL deep linking — full view state (camera, selections, cuts) shareable via URL (#804)
  • PHYSLITE ROOT file loader — new loader for ATLAS Open Data PHYSLITE ROOT files (#836)
  • Tiled screenshot rendering — screenshots can now be rendered at very large resolutions via tiling (#738)
  • Screenshot mode consolidated — screenshot mode merged into the Make Picture menu
  • Per-collection track extension to radius — tracks can now be extended to a configurable radius per collection (#757)
  • Per-track line widthTracksMesh now supports per-track configurable line widths (#748)
  • More Information menu — new top-level menu item consolidating info panels and related tools (#916)
  • URL event loading with auto-refresh — events can be loaded from URLs with automatic refresh
  • NgZone animation loop isolation — animation loop moved outside Angular's NgZone for improved rendering performance (#877)
  • Multi-object selection — overhauled selection system supporting simultaneous selection of multiple objects (#721)
  • EDM4hep loader improvements:
    • Support for new-style links (to/from) (#719)
    • Track hits split by PDG of associated particle (#716)
    • Tracker hits separated by quality flags (#716)
    • MCParticle added across all schema types
    • Reduced passes through event data to a single pass
  • New LHCb geometry — updated to dd4hep format and 2025 detector geometry (#727)
  • GLTF menu hierarchy — fixed support for collection hierarchy in the Phoenix menu when loading from GLTF files (#725)
  • Jet origin — jet collections now carry origin information (#709)

Bug Fixes

  • Fixed WebGL crash when rendering large numbers of CaloCells — now uses InstancedMesh (#849)
  • Fixed event icon colour not updating when switching between light and dark themes (#905)
  • Fixed collection cuts being lost on event switch (#872)
  • Fixed JSON parse errors in IO options dialog now showing user-facing feedback (#879)
  • Fixed duplicate three.js instance bundled alongside jsroot (#817)
  • Fixed JiveXML crash on missing XML tags during vertex parsing (#780)
  • Fixed labels appearing during animations before event objects are fully loaded (#741)
  • Fixed RendererManager.removeControls() renamed to removeRenderer() (#853)
  • Fixed renderer swap operating on class state rather than local parameters (#811)
  • Fixed tween.js upgraded to v25 with explicit group management to prevent animation conflicts (#813)
  • Fixed screenshot stretch/crop aspect ratio handling
  • Fixed FileReader error handling in IO options dialog (#767)
  • Fixed collection-info table display (#706)
  • Fixed substr() calls replaced with substring() to remove deprecated API usage (#810)
  • Fixed EDM4hep JSON loader imports and loading of event data files (#715)
  • Fixed distinct icons for collections info panel vs other panels (#870)
  • Fixed accessibility: added descriptive alt text to images (#765)
  • Fixed multiple WebGL and GPU memory leaks (#782, #783, #785, #786, #787, #788, #846):
    • Dispose intermediate geometries after GLTF merge
    • Dispose renderers and revoke blob URLs on cleanup
    • Clear selections and GPU resources on event switch
    • Prevent selection outline accumulation across events
  • Fixed event listener accumulation on repeated init() calls (#778, #781)
  • Fixed cycle-events interval not cleared on component destroy (#771)
  • Fixed Jest and Cypress TypeScript type isolation (#736)
  • Replaced cypress-plugin-snapshots with @frsource/cypress-plugin-visual-regression-diff (#734)
  • Various CI/Docker build and deployment fixes (#737, #860, #871)

Contributors

Many, many thanks to all the contributors, new and old.