PyNX stands for Python tools for Nano-structures Crystallography. It is a python library with the following main modules:
This module aims to help computing scattering (X-ray or neutrons) for atomic structures, especially if they are distorted or disordered.
The library uses GPU computing (although parallel CPU computing is also available as a fall-back), with the following platforms:
Using GPU computing, PyNX provides fast parallel computation of scattering from large assemblies of atoms (>>1000 atoms) and 1D, 2D or 3D coordinates (>>1000) in reciprocal space.
Typical computing speeds on GPUs more than 10^11 reflections.atoms/s on nVidia cards (3.5x10^11 on 2xTitan, 2x10^11 on a GTX 690, 5x10^10 on a GTX295, 2.5x10^10 on a GTX465), more than 2 orders of magnitude faster than on a CPU.
Note that the main interest of pynx.gpu is the ability to compute scattering from any assembly of atoms (not regularly-spaced) to any set of points in reciprocal space. While a FFT will always be faster, it is much more restrictive since the FFT imposes a strict relation between the sampling in real (atomic positions) and reciprocal (hkl coordinates) space.
If you use PyNX for scientific work, please consider including a citation:
The PyNX library is distributed with a CeCILL-B license (an open-source license similar to the FreeBSD one).
This module allows to propagate 2D wavefield using either:
All calculations can either be done using CPU or GPU (OpenCL)
Note that this module is in heavy development (2016/05)
This modules allows the simulation and analysis of ptychography experiments, with the following features: