Skip to content

xrt 2.0.0b0 — Beta release

Pre-release
Pre-release

Choose a tag to compare

@yxrmz yxrmz released this 06 Feb 16:11
· 73 commits to new_glow since this release

This is the first beta release of the upcoming xrt 2.0

Version 2.0 introduces major internal refactoring aimed at improving interactivity, performance, and flexibility of simulations and visualization. The focus of this release is enabling dynamic modification of beamline components without full reinitialization and significantly improving interactive workflows in xrtQook and xrtGlow.

⚠️ This is a pre-release intended for testing and feedback. APIs and behavior may still change before the final release.

✨ Major changes

1. Dynamic object model and workflow improvements - The internal architecture has been refactored to support dynamic modification of objects across the framework:

  • Optical elements, materials, figure errors, and plots now support dynamic property updates without requiring complete reinitialization.
  • Generated beams are stored in a dictionary internally linked to optical elements.
  • Optical elements and beams are addressed by UUID, simplifying renaming and object tracking.
  • Propagation and visualization can now be executed directly from XML or JSON templates.
  • Beamlines can be imported into Qook directly from Python scripts (may fail for complex runtime logic or custom processing steps).

2. Figure errors and surface modeling - Figure error handling has been significantly improved:

  • Added dedicated classes and methods for intuitive application of Figure Errors.
  • GUI controls for Figure Errors added to Qook.
  • Figure errors can now be modified interactively thanks to the new dynamic object model.

3. Visualization and rendering performance - Rendering and visualization have been substantially modernized:

  • Rendering migrated from legacy OpenGL to modern shader-based OpenGL.
  • Significant performance improvements when rendering optical elements and modifying scene contents interactively.
  • 3D geometry for optical elements is now generated at creation or modification time instead of every frame.
  • Visualization propagation changed from pre-generated full propagation to interactive, segment-by-segment tracing.
  • Visualization propagation moved from the Qt thread to a separate Python process, eliminating heavy calculations on the GUI CPU core.
  • xrtGlow now works on macOS.

4. Interactive inspection and debugging tools - New tools have been added for inspecting live beamline state:

  • Widgets for inspecting live instances of optical elements, materials, figure errors, and plots.
  • Real-time tracing and visualization of applied changes.
  • Elements can be selected directly in the 3D scene or from QTree widgets in Qook and Glow.

5. Data formats and interoperability

  • Added JSON as an import and export format alongside XML.
  • Beamline definitions can now be executed directly from template files.

6. EPICS integration - Support for EPICS has been added, enabling interactive control of beamline components through EPICS Process Variables (PVs):

  • Beamline components can now be controlled interactively via EPICS PVs.
  • Control is possible using standard EPICS command-line tools as well as EPICS-enabled GUIs such as Phoebus or EDM.
  • Dynamic object updates allow changes applied through EPICS to be reflected immediately in propagation and visualization.

🧪 Testing focus

Feedback is particularly welcome on:

  • Dynamic modification of optical elements and figure errors
  • GUI responsiveness and rendering performance
  • Visualization propagation behavior
  • Compatibility with existing beamline scripts and workflows
  • Import of existing beamlines into Qook
  • macOS testing of xrtGlow

⚠️ Notes

  • Importing beamlines from Python scripts may not work for complex runtime logic.
  • Documentation for new workflows is still being updated.
  • For now EPICS controls are only enabled in xrtGlow session, run xrtGlow with epicsPrefix argument. For example:
    myBeamline.glow(v2=True, epicsPrefix="TESTBL:")

📦 Installation

pip install xrt[all] --pre

or download the wheel from the release assets and install from file:
pip install --pre xrt[all] --find-links path-to-wheel/