Skip to content

Releases: silx-kit/pyFAI

2025.01: 31/01/2025

31 Jan 12:19
@kif kif
v2025.01
Compare
Choose a tag to compare
  • 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

13 Sep 07:54
@kif kif
v2024.09
1e815a2
Compare
Choose a tag to compare

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

Full Changelog: v2024.05...v2024.09

pyFAI-2024.05

21 May 17:04
@kif kif
v2024.05
dfce87a
Compare
Choose a tag to compare
  • 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 to cibuildwheels
    • Windows wheels are build with openmp disabled (?)

pyFAI-2024.02

01 Feb 16:43
@kif kif
v2024.02
Compare
Choose a tag to compare
  • 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

18 Jan 11:08
@kif kif
v2024.01
2938119
Compare
Choose a tag to compare
  • 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.

pyFAI-2023.09

08 Sep 15:13
@kif kif
v2023.09
Compare
Choose a tag to compare
  • 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

30 Aug 14:02
@kif kif
v2023.08
Compare
Choose a tag to compare
  • 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

16 May 15:22
@kif kif
v2023.05.0
Compare
Choose a tag to compare
  • 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

17 Mar 18:08
@kif kif
v2023.3
Compare
Choose a tag to compare
  • 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

27 Feb 14:06
@kif kif
v2023.2
Compare
Choose a tag to compare
  • Core:
    • sigma_clip_ng is not the default sigma_clip
    • expose documentation for sigma_clip_legacy in addition to sigma_clip_ng
    • Worker can now use sigma_clip_legacy in addition to sigma_clip_ng, integrate1d or integrate2d
    • 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)