1.6 KiB
Algorithms for data analysis
Azimuthal integration
2D azimuthal integration is implemented with a histogram-based algorithm, without split pixels. Solid angle and polarization corrections are available.
Spot finding
Spot finding is implemented with multiple thresholds, rejecting spots based on:
- signal-to-noise ration of 31x31 pixel rectangle around the spot,
- pixel intensity,
- spot resolution,
- number of pixels.
Finding strong pixels is currently implemented on CPU and FPGA. Combining strong pixels into spots is done with a Connected-component labeling (CCL) algorithm by Arthur Hennequin and coworkers, developed for CERN high-energy physics applications.
Indexing
Two indexing algorithms are implemented:
- Fast feedback indexer: Algorithm developed by Hans-Christian Stadler (PSI), based on TORO method; requires providing approximate unit cell; implemented on GPUs
- FFT indexing: implementation on classical M. Rossmann's FFT algorithm; doesn't require known unit cell; implemented on both GPUs (with CuFFT) and CPUs (with FFTW)
Both algorithms share the same refinement routine with the least trimmed squares procedure, see TORO papers for details.
Geometry refinement
Geometry refinement is done with the non-linear least squares procedure. Refinement optimizes crystal lattice and beam center in a single run. Solution is implemented with Google Ceres solver, running on CPU. For higher symmetry space groups, refinement can impose constraints on the equality of cell lengths and angles.
Bragg integration
Integration is implemented with pure summation (no profile fitting), using a 3-circle method from CrystFEL.