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):
Enable calculations of elastically deformed crystals on GPUs. Based on PyTTE code [PyTTE1] [PyTTE2]. Used both in ray tracing and xrtBentXtal GUI – a GUI for comparative GPU-based bent crystal calculations.
Add predefined material classes in three categories: crystals, compounds and elemental. Several crystal classes also include elastic constants needed to calculate bent crystal reflectivity.
All OpenCL tasks can be run on a remote GPU server.
Extend the examples of 1D- and 2D-bent crystal analyzers with elastically deformed crystal reflectivity.
Add docs on sampling strategies of syncrotron sources. Add an example Undulator radiation through rectangular aperture that illustrates various sampling methods.
Add user classes of optical elements to xrtQook.
Add an example Orbital Angular Momentum of helical undulator radiation.
Use python properties in OEs, screens, apertures etc. to transparently set object attributes.
Bug fixes.
- 1.5.0 (8 Sep 2022):
Propagation of individual source modes, as waves, hybrid waves (partially as rays and then as waves) and only rays. See Coherent mode decomposition and propagation.
Multilayercan now be used in transmission. See the mathematical description, a few comparative test curves and the test scripttests/test_multilayer_transmission.py.Add elliptical Gaussian beam, see here.
Ray-tracing of mosaic crystals in reflected and transmitted geometry. See the test script
tests/test_mosaic_xtal_thin.py.Minor bug fixes.
- 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):
Added Hermite-gaussian beam to the tests of wave propagation.
Added degree of transverse coherence to analysis methods of coherence signatures.
Minor bug fixes and updates.
- 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. AddedCoatedmaterial – a derivative class fromMultilayerwith a single reflective layer on a substrate.A new module
coherencethat 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_refractmethod. 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):
A new analysis method for the quantification of degree of coherence based on PCA. It is equivalent to the modal analysis but is much cheaper.
Examples of usage of xrt as a library for x-ray calculations.
Multilayercan now be not only laterally graded but also depth graded, see a reflectivity curve.
- 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):
xrt can now calculate wave diffraction via Kirchhoff integral. The present usage scenarios include diffraction at the last optical element.
Added examples for diffraction from mirror, slit, double slit, grating and FZP.
Diffraction efficiency of gratings and FZPs can now be calculated via wave diffraction. See the comparison with REFLEC curves.
Gratings and FZPs in ray tracing regime can now accept externally calculated efficiency weights per diffraction order, see
Material.BlazedGratinghas been added.Multilayers are now possible. See the mathematical description in
Multilayer, a reflectivity curve and a ray-tracing example of a scanning double multilayer monochromator.A new example of von Hamos spectrometer in circular and elliptical shapes.
The example of Montel mirror has been revised: we have added a gap, user-selectable mirror shape and the local footprints colored by the number of reflections.
Export of plot attributes to Matlab has been added, see the parameter persistentName.
- 0.9.5 (Dec 2014):
HemisphericScreenhas 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):
CrystalFromCellis 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:
materialscreated for getting properties of elements, materials and crystal optics- 0.5:
raycingimplemented with material- and polarization- dependent reflectivity- 0.4:
Own ray-tracing backend (
raycing) implemented without intensity (reflectivity) and without synchrotron sources
