← All updates

25 Oct 2026 · release

Dioptrin 0.6.1: faster diffraction integration.

Dioptrin 0.6.1 is available. I have compared its Python file-processing throughput with pyFAI and a CPU-tuned azint build on two detector datasets, at one thread and eight workers.

fps means frames per second: the number of complete detector images processed each second. Higher fps means higher processing throughput.

File loading and integration

Every task opens and decodes its TIFF and integrates the image. Error estimation is off in the main chart. This matches the usual intensity-only calculation in Dioptas. Each library is shown with one thread and eight Python frame workers, with one integration thread per worker. Hatched bars show one thread; solid bars show eight workers.

The operating-system file cache is warm; calibration setup is measured separately. These are library file-processing rates. Dioptas currently uses its own image readers and passes arrays to the integration backend, so its full application throughput can differ. Acquisition, screen drawing and output-file writing are excluded.

File loading and integration without error estimation: pyFAI, tuned azint and Dioptrin 0.6.1 at one thread and eight workers on both detectors.

At eight workers, Dioptrin achieved 3.4–3.7× the pyFAI throughput and 1.6–1.9× the tuned azint throughput for file loading and integration without Poisson error estimation on these two datasets. These factors compare equal worker counts.

The whiskers show the range of two fresh-process timing trials. Each detector has its own scale, starting at zero; that scale is kept the same in both file-processing charts.

With Poisson error estimation

The second chart repeats the same file-loading and integration workload, with Poisson estimation enabled for every library. It uses the same images, builds, corrections, masks and worker settings as the main chart.

File loading and integration with Poisson error estimation: pyFAI, tuned azint and Dioptrin 0.6.1 at one thread and eight workers on both detectors.

At eight workers, Dioptrin achieved 3.2–3.6× the pyFAI throughput and 1.9–2.5× the tuned azint throughput for file loading and integration with Poisson error estimation on these two datasets. These factors compare equal worker counts.

Poisson estimation adds a counting uncertainty alongside each integrated intensity, useful for weighted fitting and error-bearing exports. It is optional for routine viewing and off by default in Dioptas. Read the Dioptas integration guide for what the estimate means, when to enable it and how to export it.

The whiskers on these speed charts show timing variation between runs, rather than counting uncertainty in a diffraction pattern.

With error estimation off, increasing from one to eight Python frame workers raised Dioptrin’s file-loading-plus-integration throughput by 6.2–6.4×, or 78–80% of ideal linear scaling on these two datasets. Four workers achieved 3.5–3.6× the one-thread rate. Workers process different images concurrently: these are batch-throughput gains, rather than the latency of one image.

The complete benchmark includes all worker counts, setup time, memory, integration-only controls, numerical checks and the MatFRAIA/pyFAI references. These are measurements of the published Dioptrin 0.6.1 build.

See the Dioptrin software page for capabilities and installation. Dioptrin requires a license; please contact me if you would like to use it in Dioptas, Python scripts or a beamline workflow.