Releases: silx-kit/pyFAI
Releases · silx-kit/pyFAI
2025.01: 31/01/2025
- Refactoring of the integrator classes:
- Azimuthal integrator moved to pyFAI.integrator.azimuthal
- Most common code into pyFAI.integrator.common (including a lot of deprecated stuff)
- New sub-module dedicated to fiber/surface diffraction (pyFAI.integrator.fiber)
- Engine loading is now in pyFAI.integrator.load_engines
- Those are all (still) sub-classes of each-other but it will change in the futrure where they will need to be promoted to transfer all the geometry and enable other's class feature. For example: ai.promote("FiberIntegrator") or ai.promote("GeometryRefinement") - Refactoring of the handling of the serialization of the pyFAI-integrate GUI and pyFAI.worker.Worker into a JSON file.
- Use a dataclass defined in pyFAI.io.integration_config.WorkerConfig to manage all parameters to configure the Worker
- New format version 5, enables the handling of sigma-clip & median filtering
- Provides better compatibility with Ewoks - Median filtering for 1D filtering:
- includes quantile average
- available in Python, Cython & OpenCL
- Performances charts for sigma-clip & median filter. - New FiberIntegrator class for grazing-incidence/fiber scattering data (former fiber/gi methods in a new API)
- FiberIntegrator located in pyFAI.integrator.fiber
- Usage tutorial in doc/source/usage/tutorial/FiberGrazingIncidence.ipynb or https://www.silx.org/doc/pyFAI/dev/usage/tutorial/FiberGrazingIncidence.html
- integrate2d_grazing_incidence method to display qIP - qOOP patterns. New API with minimum inputs
- integrate1d_grazing_incidence method to perform qIP or qOOP slices. New API with minimum inputs
- Corrected equations to handle incident_angle and tilt_angle parameters
- 8 possible sample_orientation (1-8), to rotate and flip the qIP-qOOP maps (or other units)
- integrate2d_polar to represent the polar angle (arctan(qOOP/qIP)) versus the q modulus
- integrate1d_polar to integrate the polar angle map (vertical or horizontal)
- integrate2d_exitangles to reshape the diffraction pattern into horizontal and vertical exit angles, with the origin in the sample horizon
- integrate1d_exitangles to perform an integration across one of the exit angles
- Faster calculation with numexpr package formulas - New MultiGeometryFiber in pyFAI.multi_geometry
- Analog to MultiGeometry class.
- Instead of taking a list of AzimuthalIntegrators, it takes a list of FiberIntegrators
- Access to integrate1d and integrate2d grazing_incidence/fiber methods
- New tutorial of usage in doc/source/usage/tutorial/MultiGeometry/MultiGeometryFiber.ipynb` - Tool to rebin 2d-result into 1d-result (pyFAI.containers.rebin1d)
- pyFAI-diffmap-view now displays the motor position in the the map.
- Change documentation template to pydata
- Several bug-fixes & better code coverage
- Supports python 3.9 to 3.13. The GIL-free version on python 3.13 is untested.
- Tested by the developers on Windows (amd64), linux (amd64, arm64 and ppc64le) and MacOS (amd64 and arm64). Thanks to Debian for extending this matrix.
- More than 500 commits, by Thomas Vincent, Loic Huder, Edgar Gutierrez Fernandez and Jérôme Kieffer
PyFAI-2024.09
What's Changed
- New tutorials:
- On flatfield calculation from several detector position (ID31)
- On discarded pixels when using sigma-clipping (ID15a)
- New feature in pilx: the tool to view diffraction map
- Fix/unfix curves
- Colors improved
- Motor position can ge registered and displayed along axis
- Other new feature:
- Expose orientation in calib2 (excluding Nexus-detectors)
- Extra comments in PONI-file like the calibration file
- Sigma-clipping in pure cython with hybrid error-model
- New calibrant (Lysozyme for MX) & integration into calib2
- Engineering notation when printing detector
- New JSON format for integration configuration (backward compatible)
- Import CrystFEL geom-file to generate a detector + geometry
- GIWAXS and sigma-clip impose no pixel splitting
- Sigma-clipping is possible from the GUI and via config files
- Peakfinding: discard peaks with masked pixels in the local region
- New detector: Jungfrau 1M (ID09)
- Bug fixed:
- Absorption kwarg was missing in sigma-clip
- Close HDF5 files ASAP (risk of hitting the max number of file open)
- Bug in medfilt (empty ensemble)
- Several bugs fixed in worker (heavily used by ewoks)
- Correct some tutorials for typos
- Orientation of interate2d results legacy vs ng
- Compatibility with Numpy2
- Compatibility with Eiger2+Lima2 multi-threshold files
- Compatibility with GCC14, discarded some deprecated code
- Validated with Python 3.8-3.12
New Contributors
- @pierrepaleo made their first contribution in #2207
- @mjdiff made their first contribution in #2239
- @jacobfilik made their first contribution in #2243
Full Changelog: v2024.05...v2024.09
pyFAI-2024.05
- Implemented unweighted average for 2D integration
- Integration engines now handle the boolean 'weighted_average' to switch to unweighted mean, similar to legacy methods
- Implementation of pilx (pyFAI-diffmap-view command): interactive viewer for pyFAI-diffmap files (thanks Loic Huder)
- Creation of a RingExtraction class based on multi-threading (thanks Emily Massahud)
- Flat-field and dark current corrections for pyFAI-calib2
- Tunable units and integration methods for fiber/grazing-incidence scattering
- Fix several bugs related to pyFAI-diffmap GUI/no-GUI options
- Compatibility with numpy2
- Fix numerical precision issue (spotted on MacOS/arm64)
- Build system moved from
bob
tocibuildwheels
- Windows wheels are build with openmp disabled (?)
pyFAI-2024.02
- Include grazing-incidence capabilities + tutorial (thanks Edgar)
- Fix segmentation-fault in calib2 application #2047 (thanks Thomas & Edgar)
- Use the dynamic mask to mask-out dead pixels in Eiger images in calib2
- Extend Poisson+azimuthal uncertainties to all Cython integrators (+ non regression tests)
- Support for Python 3.7-3.12 & requires silx v2
pyFAI-2024.01
- Possibility to define the detector orientation:
- It is the position of the origin of the detector at any of the 4 corner of the image
- Uses the EXIF nomenclature where pyFAI's (default) orientation is tagged 3
- Offers compatibility with calibration made by Diotas (where orientation=2 since images are flipped)
- Expose the feature in the calib2 GUI for custom detectors.
- Tutorial on the usage
- New sub-version of the PoniFile API (2.1) for this feature
- Expose the number of corners of a detector pixel (feature unused for now)
- Refactor pyFAI-benchmark tool with better looking reults (Thanks Edgar)
- Possibility to integrate in 2D with any second dimension unit:
- No more limited to the azimuthal angle chi
- Several new units have been added
- Offers the qx/qy integration as example
- Support for Detris Pilatus4 detector both with Si and CdTe sensors (thanks to Max Burian)
- Support XRDML formt (compatibility with MAUD software)
- Multigeometry gains a reset() method to free some memory with optimized garbage collection.
- Support pathlib when reading-PONI files
- Change in the build system:
- Drop of setup.py the build system based on distutils/numpy.distutils/setuptools
- Enforce the use of meson-python
- Move the sources of the code into src directory
- Support for Python 3.7-3.12 (requires silx v2 for 3.12) + Provide debian packages for debian12 but ubuntu 20.04 is too old and lack meson-python
- Facts and figures:
- 600+ commits; 120 pull-requests
*with the contribution of:
Edgar Gutierrez Fernandez
Jérôme Kieffer.
- 600+ commits; 120 pull-requests
pyFAI-2023.09
- Bug fix release over 2023.08
- Fix calibrant selection in calib2 (Thanks Valentin)
- Centralized control of Random Number Generator for tests, to make non-regression test more consistent for CI.
- Correct behaviour of dynamic mask (was causing systematic crashes)
- Correct spelling of several messages.
- Compatibility with matplotlib 3.7
- New application icon and launcher under linux
- Updated notebook (addresses API changes)
pyFAI-2023.08
- Minor release, mostly bug-fixes. 87 commits.
- fix malformed headers in 1D ASCII export
- Debian packaging without setup.py (at all)
- Fix cache invalidation issue for polarization in geometry
- More compact (+scrollable) calibrant widget in
Calib2
(Contribution from Valentin Valls) - Compatibility with PyQt6 and PySide6 bacckends (Contribution from malte-storm)
- Compatibility with elder Matplotlib (<3.2)
- Fix reproducibility issue with no-split sparse matrix multiplication (all 3)
- Lower memory consumption of hexagonal detector instantiation.
- Enforce the usage of the
detector_factory
.Detector(**config)
stops working.
v2023.05.0
- New detector: Jungfrau 8M used at SwissFEL
- new method in
Geometry
to guess the number of bin (and avoid oversampling) - new method in
AzimuthalIntegrator
to guess the polarization factor - CSC-integrators (1D + 2D) implemented in pure python using scipy.sparse
- Update documentation
- Minor correction (remove debugging)
- Packaging for debian12 using meson-python
pyFAI v2023.3
- Rework all 2D integrator to propagate variance, expose standard deviation and standard error of the mean.
- Support all version of python between 3.7 and 3.11
- Support Cython 3.0b1 (with performance degradation) in addition of cython 0.29.31+
pyFAI 2023.2
- Core:
sigma_clip_ng
is not the defaultsigma_clip
- expose documentation for
sigma_clip_legacy
in addition tosigma_clip_ng
Worker
can now usesigma_clip_legacy
in addition tosigma_clip_ng
,integrate1d
orintegrate2d
- New calibrant: Vanadinite (used in high-pressure, often as single crystal)
- GUI:
- Fix labels on axes for some rarely used units
- refactor IntegrationMethodDialog and share the IntegrationMethodTabs with pyFAI-calib2
- Test:
- silent some noisy test (OpenCL on windows)