Version history

2.0.0b1 (beta) (26 Apr 2026):
  • Restoration and stabilization of xrtGlow and xrtQook workflows after the major GUI refactor in 2.0.0b0.

  • Added visual beamline flow editor based on qtpynodeeditor.

  • Restored static-mode operation in xrtGlow and initialization from saved Glow configuration parameters.

  • Updated xrtGlow scene import/export.

  • Added selectable object support for geometric sources and dynamically adjustable number of rays (nrays) in xrtGlow.

  • Added figure-error definition by slope RMS.

  • Added EPICS PV initialization via {“oe:property”: “pv”} mapping.

  • Fixed beam local coordinate system transformation.

  • Fixed rendering issues including closed surfaces, hemispheric screens, rays inside multi-surface optical elements, and STL surface positioning.

  • Fixed dynamic slit blade configuration.

  • Improved overall stability.

  • API changes:
    • BeamLine.glow() now accepts mode=’dynamic’ or mode=’static’; the previous v2 argument is deprecated.

    • Energy-based auto-alignment for pitch and bragg now accepts unit strings (e.g. ‘8 keV’, ‘8000 eV’, or ‘auto’); the previous list-based syntax is deprecated.

2.0.0b0.post1 (beta) (11 Feb 2026):
  • Packaging update fixing package discovery and data file inclusion issues. No functional changes.

2.0.0b0 (beta) (6 Feb 2026):
  • First beta release of xrt 2.0 with major internal refactoring aimed at improving interactivity, performance, and flexibility.

  • Introduced dynamic object model allowing modification of optical elements, materials, figure errors, and plots without full reinitialization.

  • Optical elements and beams are now tracked by UUID.

  • Added JSON support alongside XML for import/export and execution of beamline definitions.

  • Added interactive GUI tools for inspecting optical elements, materials, figure errors, and plots with real-time updates.

  • Rendering migrated to modern shader-based OpenGL with significant performance improvements.

  • Visualization changed to interactive, segment-by-segment propagation and moved to a separate Python process, improving GUI responsiveness.

  • xrtGlow now works on macOS.

  • Improved figure error handling with dedicated classes and GUI controls.

  • Added EPICS integration for interactive control of beamline components via process variables (PVs).

  • Notes:
    • Importing beamlines from Python scripts may not work for complex logic.

    • Documentation for new workflows is still evolving.

    • EPICS control currently requires running xrtGlow with epicsPrefix.

1.6.2 (6 Feb 2026):
  • Enable wave propagation for two-side OEs (lenses).

  • Minor fixes in help pages of xrtQook.

  • HyperbolicMirrorParam enabled in xrtQook.

  • Fix wide angle approximation for edge radiation. Add example Infrared edge radiation.

1.6.1 (13 Nov 2024):
  • Minor bug fixes.

  • Enable custom materials in xrtQook.

  • Add hyperbolic (oes.HyperbolicMirrorParam) and hyperboloid (oes.HyperboloidCapillaryMirror) mirrors with focusing test scripts test_param_mirror.py and test_hyperboloid_tube_mirror.py.

  • Add an example for applying a slope error map to a parametric mirror examples/withRaycing/13_Warping/ExampleOfSlopeErrorMapToParametricMirror.py.

  • Major rebuild of the documentation on Read the Docs due to changed software requirements on readthedocs.io.

  • Add in-plane rotation to Crystal.get_amplitude_pytte().

  • Major update of Tests of Materials. Add Bent crystals: comparison tests for pyTTE backends.

1.6.0 (17 Jul 2023):
1.5.0 (8 Sep 2022):
1.4.0 (22 Sep 2021):
  • Major update for the undulator sources module:

  • Custom synchrotron sources calculation extended for non-periodic cases, including bending magnets.

  • Multiple performance optimizations, Gauss-Legendre grid replaced with Clenshaw-Curtis.

  • Extended functionality to estimate and visualize convergence.

  • Added pure NumPy implementation for near field model and custom magnetic structures.

  • Added setters and getters, doing reset() is no longer required after post-init update of parameters.

  • Added asymmetric angular limits.

  • Angular limits get automatically extended to account for divergence/emittance, important if used with the slits/apertures matching angular acceptance.

  • Enable closed surfaces in xrtGlow.

  • Bug fixes.

1.3.5 (19 Nov 2020):
  • Bug fixes.

  • Variable d-spacing in crystals given by a user method; thanks to H. Gretarsson (DESY) for testing.

1.3.4 (21 May 2020):
  • Bug fixes and minor updates.

  • Several user stories made us insert warnings in the code and explanations in the docs about the proper usage of mesh-based methods of xrt Undulator.

  • Added custom orientation to apertures.

  • Added undulator source size from FT of the back propagated angular distribution (following Coïsson [Coïsson]). The description to come in a paper about coherence properties.

1.3.3 (11 Mar 2019):
  • Added mosaic crystals. (thank you to B. Kozioziemski (LLNL) for deep testing)

  • Added Polygonal Apertures.

  • Bug fixes and minor updates.

1.3.2 (7 Jun 2018):
  • Bug fixes and minor updates.

1.3.1 (24 May 2018):
1.3.0 (25 Mar 2018):
  • Addition of xrtGlow – a 3D beamline viewer.

  • Almost all old examples can now be viewed in xrtGlow as well, just select a proper value for the switch showIn3D. Those example scripts having a generator for making scans can also save a movie – a series of grabbed 3D views, as e.g. in here.

  • The documentation has moved to Read the Docs. It loads much faster and builds automatically from GitHub xrt sources.

  • Added ‘Chantler total’ (see Material) to the list of absorption tables. This table also adds inelastic scattering channels to the photoelectric absorption cross-section (thanks to B. Kozioziemski (LLNL) for discovering the need).

  • Added modelling of interdiffusion/roughness interface to Multilayer. Added Coated material – a derivative class from Multilayer with a single reflective layer on a substrate.

  • A new module coherence that has functions for 1D and 2D analysis of coherence and functions for 1D plotting of degree of coherence and 2D plotting of eigen modes. Reworked analysis of coherence in SoftiMAX at MAX IV example.

  • Added electron energy spread dependence to the linear and angular sizes of undulator source. See the formulation and an application example.

  • Added tests of optical elements which currently have a test for asymmetric crystal optics (phase space volume conservation) and a test with backscattering at highly asymmetric crystals (comparison with experiment).

  • Speed tests include wave propagation on CPU and GPU nodes.

  • Numerous updates.

1.2.4 (3 May 2017):
  • Reworked and extended Speed tests.

  • Minor bug fixes and updates.

1.2.3 (19 Mar 2017):
  • Minor bug fixes.

1.2.2 (17 Mar 2017):
  • Numerous minor bug fixes and updates.

1.2.1 (19 Sep 2016):
  • Added SRW to some comparisons of synchrotron sources. See here.

  • As the major browsers stop supporting flash animations, we have rebuilt all our animations on the documentation pages. The images are now animated in JavaScript and feature on spot zooming by mouse click (not in IE though). The total size of the images has become smaller at better image quality and bidirectional animations (doubled number of frames).

  • xrtQook works now with Qt versions up to 5.7.

  • Minor bug fixes and updates.

1.2.0 (09 Jul 2016):
  • We’ve created a repository on GitHub.

  • Added custom field undulator, see an example.

  • Improved and optimized formulas of undulator source, resulting in correct behaviour at high energies, see here.

  • Prepared for singular optics (vortex beams): added GaussianBeam and LaguerreGaussianBeam as geometric sources. We have used them for testing our Kirchhoff integration. The tests demonstrate identical images in analytical and numerically diffracted fields, see here.

  • Modified CRLs to get loops over the lenses internally by multiple_refract method. The number of lenses can also be calculated internally given energy, material and focal distance.

  • Several minor bug fixes and updates.

1.1.0 (26 Mar 2016):
  • xrtQook – a GUI for creating scripts. Tested with Python 2 and 3, PyQt4, PyQt5 and PySide, Windows and Linux.

  • The examples have been restructured such that the creation of plots and scan generators has moved into module-level functions. With this structure, the examples are better readable.

  • Re-written startup routines for running OpenCL codes.

  • Improved alignment of highly asymmetric crystals.

  • Several minor bug fixes and updates.

  • The documentation has switched to MathJax from pngmath (nicer view of mathematical formulas).

1.0.2 (21 Jan 2016):
1.0.1 (07 Jan 2016):
  • Bug fixes.

1.0.0 (05 Jan 2016):
  • xrt can now calculate sequential wave propagation. Added example for a complete beamline comparing pure ray tracing, rays+wave combination and pure wave propagation.

  • Added analysis of correlation functions as means of quantifying coherence properties.

  • Added example for using mirrors with a figure error defined as a tabulation or a function.

  • xrt can now run in both Python branches: 2 and 3, without translation.

  • The usage of pyopencl is extended to include multiple simultaneous platforms/devices.

  • Physical constants are unified in a single module physconsts.

0.9.99 (12 Apr 2015):
0.9.5 (Dec 2014):
  • HemisphericScreen has been added.

  • Extra angles for OE misalignments.

  • The constructor of apertures has changed! It now has center field, as many other objects. Before, it had x and y. This change requires small modifications in old application scripts.

  • Example of von Hamos spectrometer and comparison with Rowland circle based spectrometers.

  • Minor bug fixes.

0.9.4 (13 Jun 2014):
  • Near field calculations of undulators.

  • Search for intersections of rays with surface done with OpenCL.

  • Rotations of optical elements have been revised. Now, the sequence of pitch, roll and yaw can be re-defined by the user, which can be convenient when rotations are more than one.

  • Minor bug fixes.

0.9.3 (23 Apr 2014):
  • CrystalFromCell is added. Now, crystals of “any” structure can be ray-traced, not only of fcc and diamond-like structures, as was before.

  • Minor bug fixes.

0.9.2 (03 Apr 2014):
  • The code is prepared for fully automatic 2to3 conversion.

  • Undulator can now have a tapered gap.

  • Undulator can now be calculated on GPU.

  • Natural source size of undulator radiation is now \(\sigma_R = \sqrt{2\lambda L}/(2\pi)\), as by Walker, by Ellaume and by Tanaka and Kitamura; the value by Kim (the orange booklet) is \(2\sqrt{2}\) times smaller.

0.9.1 (08 Jan 2014):
  • Minor bug fixes in OEs and examples.

0.9.0 (03 Jan 2014):
  • Internal implementation of synchrotron sources. Roman Chernikov as co-author of xrt.

  • Minor new features and minor bug fixes.

  • Example of bent tapered polycapillary.

0.8.1 (12 Sep 2013):
  • Bug fixes.

0.8.0:
  • Synchrotron sources (external),

  • Absolute flux units,

  • Coloring by power,

  • Power density isolines,

  • Gratings,

  • FZPs,

  • Bragg-Fresnel optics,

  • Multiple reflections,

  • Non-sequential optics.

0.7:
  • Several examples are generated on refractive and crystal optics: single- and double- crystal monochromators in Bragg and Laue geometries, bent and ground-bent crystal analyzers in Bragg and Laue geometries with optionally diced crystals, compound refractive lenses, plane and bent quarter-wave plates in Bragg and Laue geometries.

0.6:

materials created for getting properties of elements, materials and crystal optics

0.5:

raycing implemented with material- and polarization- dependent reflectivity

0.4:

Own ray-tracing backend (raycing) implemented without intensity (reflectivity) and without synchrotron sources