Skip to content

Commit 62b9836

Browse files
authored
Merge pull request #2470 from silx-kit/2025.03
branch for the 2025.03 release
2 parents a75d0d1 + c88f47e commit 62b9836

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+2885
-3040
lines changed

README.rst

+2-3
Original file line numberDiff line numberDiff line change
@@ -171,13 +171,12 @@ Getting help
171171
A mailing-list, [email protected], is available to get help on the program and how to use it.
172172
One needs to subscribe by sending an email to [email protected] with a subject "subscribe pyfai".
173173

174-
175174
Maintainers
176175
-----------
177176

178177
* Jérôme Kieffer (ESRF)
179178
* Edgar Gutierrez Fernandez (ESRF)
180-
* Maciej Jankowski (ESRF)
179+
* Loïc Huder (ESRF)
181180

182181
Contributors
183182
------------
@@ -189,12 +188,12 @@ Contributors
189188
* Aurore Deschildre (Formerly ESRF)
190189
* Giannis Ashiotis (Formerly ESRF)
191190
* Zubair Nawaz (Formerly Sesame)
192-
* Loïc Huder (ESRF)
193191
* Jon Wright (ESRF)
194192
* Amund Hov (Formerly ESRF)
195193
* Dodogerstlin @github
196194
* Gunthard Benecke (Desy)
197195
* Gero Flucke (Desy)
196+
* Maciej Jankowski (ESRF)
198197

199198
Indirect contributors (ideas...)
200199
--------------------------------

doc/source/changelog.rst

+23-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,32 @@
11
:Author: Jérôme Kieffer
2-
:Date: 30/01/2025
2+
:Date: 13/03/2025
33
:Keywords: changelog
44

55
Change-log of versions
66
======================
77

8+
2025.03 14/03/2025
9+
------------------
10+
11+
- Bug fix version (Thanks to Fred Picca/Debian for testing on many architectures)
12+
- Use automatically dynamic mask for Dectris detector data
13+
14+
* Automatically recognizes and masks out bad pixel
15+
* `dummy` and `delta_dummy` values are already known from the manufacturer
16+
* empty bins are no more marked with the `dummy` value (which can be very large for Eiger) but with the `empty` value which is fully under control of the user, 0.0 by default.
17+
18+
- Improve the plot generated by the benchmarking tool (Thanks to Jon)
19+
- `MultiGeometry` allows the mixing of different kind of detectors (Thanks ThomasK)
20+
- `WorkerConfig` dataclass, many fixes at several places, Ewoks compatibility.
21+
- `Diffmap` compatiblity with binned images
22+
- `Pilx` uses now the dynamic mask to hide hot/defective pixels
23+
- Improvement of the `fake_calibration_image` to provide both `Imin` and `Imax`
24+
- New Lambda 9M detector
25+
- Improved support of FiberIntegrator for using the correct fiber units and key parameters
26+
- Supports python 3.9 to 3.13. The GIL-free version on python 3.13 is untested.
27+
- Tested by the developers on Windows (amd64), linux (amd64, arm64 and ppc64le) and MacOS (amd64 and arm64).
28+
- A dozen of Pull-requests by Thomas Kluyver, Loic Huder, Edgar Gutierrez-Fernandez and Jérôme Kieffer
29+
830
2025.01 31/01/2025
931
------------------
1032

doc/source/coverage.rst

+41-41
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Test coverage report for pyFAI
22
==============================
33

4-
Measured on *pyFAI* version 2025.1.0-beta0, 30/01/2025
4+
Measured on *pyFAI* version 2025.3.0, 13/03/2025
55

66
.. csv-table:: Test suite coverage
77
:header: "Name", "Stmts", "Exec", "Cover"
@@ -11,25 +11,25 @@ Measured on *pyFAI* version 2025.1.0-beta0, 30/01/2025
1111
"average.py", "516", "361", "70.0 %"
1212
"azimuthalIntegrator.py", "11", "11", "100.0 %"
1313
"blob_detection.py", "502", "191", "38.0 %"
14-
"calibrant.py", "508", "377", "74.2 %"
14+
"calibrant.py", "513", "382", "74.5 %"
1515
"containers.py", "504", "457", "90.7 %"
1616
"control_points.py", "360", "136", "37.8 %"
17-
"diffmap.py", "512", "213", "41.6 %"
17+
"diffmap.py", "515", "214", "41.6 %"
1818
"directories.py", "21", "16", "76.2 %"
19-
"distortion.py", "605", "386", "63.8 %"
19+
"distortion.py", "605", "387", "64.0 %"
2020
"geometryRefinement.py", "571", "293", "51.3 %"
2121
"goniometer.py", "566", "340", "60.1 %"
2222
"grid.py", "38", "15", "39.5 %"
2323
"load_integrators.py", "11", "11", "100.0 %"
24-
"massif.py", "240", "199", "82.9 %"
25-
"method_registry.py", "353", "288", "81.6 %"
24+
"massif.py", "240", "196", "81.7 %"
25+
"method_registry.py", "353", "299", "84.7 %"
2626
"multi_geometry.py", "371", "164", "44.2 %"
2727
"parallax.py", "249", "211", "84.7 %"
2828
"ring_extraction.py", "119", "111", "93.3 %"
2929
"spline.py", "427", "252", "59.0 %"
30-
"units.py", "372", "350", "94.1 %"
31-
"version.py", "63", "51", "81.0 %"
32-
"worker.py", "445", "298", "67.0 %"
30+
"units.py", "382", "358", "93.7 %"
31+
"version.py", "63", "46", "73.0 %"
32+
"worker.py", "487", "336", "69.0 %"
3333
"app/__init__.py", "7", "7", "100.0 %"
3434
"app/average.py", "175", "34", "19.4 %"
3535
"app/benchmark.py", "63", "18", "28.6 %"
@@ -41,18 +41,18 @@ Measured on *pyFAI* version 2025.1.0-beta0, 30/01/2025
4141
"app/diff_tomo.py", "108", "24", "22.2 %"
4242
"app/drawmask.py", "106", "33", "31.1 %"
4343
"app/eiger_mask.py", "58", "23", "39.7 %"
44-
"app/integrate.py", "507", "378", "74.6 %"
44+
"app/integrate.py", "525", "395", "75.2 %"
4545
"app/mx_calibrate.py", "26", "16", "61.5 %"
4646
"app/peakfinder.py", "290", "55", "19.0 %"
4747
"app/pilx.py", "27", "14", "51.9 %"
4848
"app/recalib.py", "27", "16", "59.3 %"
4949
"app/saxs.py", "86", "24", "27.9 %"
5050
"app/sparsify.py", "285", "56", "19.6 %"
5151
"app/waxs.py", "98", "25", "25.5 %"
52-
"benchmark/__init__.py", "626", "86", "13.7 %"
52+
"benchmark/__init__.py", "632", "86", "13.6 %"
5353
"detectors/__init__.py", "24", "24", "100.0 %"
5454
"detectors/_adsc.py", "76", "76", "100.0 %"
55-
"detectors/_common.py", "875", "637", "72.8 %"
55+
"detectors/_common.py", "888", "647", "72.9 %"
5656
"detectors/_dectris.py", "420", "302", "71.9 %"
5757
"detectors/_esrf.py", "97", "83", "85.6 %"
5858
"detectors/_hexagonal.py", "73", "70", "95.9 %"
@@ -61,27 +61,27 @@ Measured on *pyFAI* version 2025.1.0-beta0, 30/01/2025
6161
"detectors/_others.py", "133", "120", "90.2 %"
6262
"detectors/_psi.py", "197", "120", "60.9 %"
6363
"detectors/_rayonix.py", "264", "226", "85.6 %"
64-
"detectors/_xspectrum.py", "51", "48", "94.1 %"
64+
"detectors/_xspectrum.py", "61", "53", "86.9 %"
6565
"detectors/orientation.py", "36", "36", "100.0 %"
6666
"engines/CSC_engine.py", "211", "140", "66.4 %"
6767
"engines/CSR_engine.py", "250", "244", "97.6 %"
6868
"engines/__init__.py", "19", "19", "100.0 %"
69-
"engines/histogram_engine.py", "94", "87", "92.6 %"
69+
"engines/histogram_engine.py", "94", "88", "93.6 %"
7070
"engines/preproc.py", "114", "93", "81.6 %"
7171
"ext/__init__.py", "3", "3", "100.0 %"
7272
"geometry/__init__.py", "9", "9", "100.0 %"
73-
"geometry/core.py", "1247", "1028", "82.4 %"
73+
"geometry/core.py", "1268", "1046", "82.5 %"
7474
"geometry/crystfel.py", "162", "148", "91.4 %"
7575
"geometry/cxi.py", "1", "1", "100.0 %"
7676
"geometry/fit2d.py", "114", "103", "90.4 %"
7777
"geometry/imaged11.py", "116", "101", "87.1 %"
78-
"gui/ApplicationContext.py", "107", "52", "48.6 %"
78+
"gui/ApplicationContext.py", "107", "50", "46.7 %"
7979
"gui/CalibrationContext.py", "224", "130", "58.0 %"
8080
"gui/CalibrationWindow.py", "192", "169", "88.0 %"
81-
"gui/IntegrationDialog.py", "205", "55", "26.8 %"
81+
"gui/IntegrationDialog.py", "207", "56", "27.1 %"
8282
"gui/__init__.py", "4", "4", "100.0 %"
8383
"gui/cli_calibration.py", "1599", "104", "6.5 %"
84-
"gui/diffmap_widget.py", "462", "74", "16.0 %"
84+
"gui/diffmap_widget.py", "461", "74", "16.1 %"
8585
"gui/matplotlib.py", "34", "27", "79.4 %"
8686
"gui/mpl_calib.py", "244", "40", "16.4 %"
8787
"gui/mpl_calib_qt.py", "49", "21", "42.9 %"
@@ -129,28 +129,28 @@ Measured on *pyFAI* version 2025.1.0-beta0, 30/01/2025
129129
"gui/model/PreProcessedImageModel.py", "55", "46", "83.6 %"
130130
"gui/model/__init__.py", "4", "4", "100.0 %"
131131
"gui/pilx/HorizontalRangeROI.py", "17", "13", "76.5 %"
132-
"gui/pilx/MainWindow.py", "274", "46", "16.8 %"
132+
"gui/pilx/MainWindow.py", "285", "49", "17.2 %"
133133
"gui/pilx/__init__.py", "0", "0", "0.0 %"
134134
"gui/pilx/models.py", "10", "10", "100.0 %"
135135
"gui/pilx/point.py", "20", "7", "35.0 %"
136-
"gui/pilx/utils.py", "63", "24", "38.1 %"
136+
"gui/pilx/utils.py", "75", "26", "34.7 %"
137137
"gui/pilx/widgets/ClearPointsAction.py", "17", "13", "76.5 %"
138138
"gui/pilx/widgets/DiffractionImagePlotWidget.py", "44", "20", "45.5 %"
139139
"gui/pilx/widgets/ImagePlotWidget.py", "69", "29", "42.0 %"
140140
"gui/pilx/widgets/IntegratedPatternPlotWidget.py", "97", "30", "30.9 %"
141141
"gui/pilx/widgets/MapPlotContextMenu.py", "50", "22", "44.0 %"
142-
"gui/pilx/widgets/MapPlotWidget.py", "148", "39", "26.4 %"
142+
"gui/pilx/widgets/MapPlotWidget.py", "149", "39", "26.2 %"
143143
"gui/pilx/widgets/OpenAxisDatasetAction.py", "30", "16", "53.3 %"
144144
"gui/pilx/widgets/RoiModeAction.py", "25", "15", "60.0 %"
145145
"gui/pilx/widgets/RoiRangeWidget.py", "51", "19", "37.3 %"
146146
"gui/pilx/widgets/TitleWidget.py", "13", "10", "76.9 %"
147147
"gui/pilx/widgets/__init__.py", "0", "0", "0.0 %"
148148
"gui/tasks/AbstractCalibrationTask.py", "79", "72", "91.1 %"
149149
"gui/tasks/ExperimentTask.py", "344", "251", "73.0 %"
150-
"gui/tasks/GeometryTask.py", "814", "376", "46.2 %"
151-
"gui/tasks/IntegrationTask.py", "845", "304", "36.0 %"
150+
"gui/tasks/GeometryTask.py", "814", "382", "46.9 %"
151+
"gui/tasks/IntegrationTask.py", "831", "304", "36.6 %"
152152
"gui/tasks/MaskTask.py", "221", "148", "67.0 %"
153-
"gui/tasks/PeakPickingTask.py", "1361", "588", "43.2 %"
153+
"gui/tasks/PeakPickingTask.py", "1361", "592", "43.5 %"
154154
"gui/tasks/__init__.py", "4", "4", "100.0 %"
155155
"gui/test/__init__.py", "51", "34", "66.7 %"
156156
"gui/utils/FilterBuilder.py", "44", "14", "31.8 %"
@@ -189,7 +189,7 @@ Measured on *pyFAI* version 2025.1.0-beta0, 30/01/2025
189189
"gui/widgets/QuantityLabel.py", "132", "80", "60.6 %"
190190
"gui/widgets/UnitLabel.py", "69", "35", "50.7 %"
191191
"gui/widgets/UnitSelector.py", "84", "81", "96.4 %"
192-
"gui/widgets/WorkerConfigurator.py", "476", "313", "65.8 %"
192+
"gui/widgets/WorkerConfigurator.py", "467", "305", "65.3 %"
193193
"gui/widgets/__init__.py", "4", "4", "100.0 %"
194194
"gui/widgets/model/AllDetectorItemModel.py", "65", "62", "95.4 %"
195195
"gui/widgets/model/CalibrantFilterProxyModel.py", "34", "23", "67.6 %"
@@ -199,26 +199,26 @@ Measured on *pyFAI* version 2025.1.0-beta0, 30/01/2025
199199
"gui/widgets/test/TestQuantityEdit.py", "71", "69", "97.2 %"
200200
"gui/widgets/test/__init__.py", "16", "14", "87.5 %"
201201
"integrator/__init__.py", "9", "9", "100.0 %"
202-
"integrator/azimuthal.py", "1214", "956", "78.7 %"
203-
"integrator/common.py", "757", "359", "47.4 %"
204-
"integrator/fiber.py", "183", "176", "96.2 %"
202+
"integrator/azimuthal.py", "1222", "962", "78.7 %"
203+
"integrator/common.py", "758", "360", "47.5 %"
204+
"integrator/fiber.py", "230", "190", "82.6 %"
205205
"integrator/load_engines.py", "166", "121", "72.9 %"
206-
"io/__init__.py", "568", "371", "65.3 %"
206+
"io/__init__.py", "575", "375", "65.2 %"
207207
"io/_json.py", "15", "12", "80.0 %"
208208
"io/image.py", "32", "27", "84.4 %"
209-
"io/integration_config.py", "420", "346", "82.4 %"
210-
"io/nexus.py", "437", "373", "85.4 %"
211-
"io/ponifile.py", "205", "177", "86.3 %"
209+
"io/integration_config.py", "470", "391", "83.2 %"
210+
"io/nexus.py", "448", "380", "84.8 %"
211+
"io/ponifile.py", "216", "177", "81.9 %"
212212
"io/sparse_frame.py", "153", "24", "15.7 %"
213213
"io/spots.py", "212", "139", "65.6 %"
214214
"io/xrdml.py", "77", "76", "98.7 %"
215215
"opencl/OCLFullSplit.py", "199", "24", "12.1 %"
216-
"opencl/__init__.py", "50", "42", "84.0 %"
217-
"opencl/azim_csr.py", "708", "498", "70.3 %"
218-
"opencl/azim_hist.py", "477", "344", "72.1 %"
219-
"opencl/azim_lut.py", "333", "251", "75.4 %"
216+
"opencl/__init__.py", "50", "34", "68.0 %"
217+
"opencl/azim_csr.py", "708", "496", "70.1 %"
218+
"opencl/azim_hist.py", "477", "340", "71.3 %"
219+
"opencl/azim_lut.py", "333", "247", "74.2 %"
220220
"opencl/ocl_hist_pixelsplit.py", "223", "27", "12.1 %"
221-
"opencl/peak_finder.py", "472", "370", "78.4 %"
221+
"opencl/peak_finder.py", "472", "366", "77.5 %"
222222
"opencl/preproc.py", "226", "174", "77.0 %"
223223
"opencl/sort.py", "282", "223", "79.1 %"
224224
"opencl/test/__init__.py", "27", "27", "100.0 %"
@@ -231,16 +231,16 @@ Measured on *pyFAI* version 2025.1.0-beta0, 30/01/2025
231231
"utils/__init__.py", "129", "75", "58.1 %"
232232
"utils/bayes.py", "100", "67", "67.0 %"
233233
"utils/callback.py", "14", "11", "78.6 %"
234-
"utils/decorators.py", "72", "70", "97.2 %"
234+
"utils/decorators.py", "72", "71", "98.6 %"
235235
"utils/ellipse.py", "82", "79", "96.3 %"
236236
"utils/grid.py", "87", "64", "73.6 %"
237237
"utils/header_utils.py", "74", "59", "79.7 %"
238238
"utils/logging_utils.py", "50", "48", "96.0 %"
239239
"utils/mask_utils.py", "73", "41", "56.2 %"
240-
"utils/mathutil.py", "508", "357", "70.3 %"
240+
"utils/mathutil.py", "512", "361", "70.5 %"
241241
"utils/multiprocessing.py", "18", "13", "72.2 %"
242242
"utils/orderedset.py", "54", "13", "24.1 %"
243243
"utils/shell.py", "55", "46", "83.6 %"
244-
"utils/stringutil.py", "89", "81", "91.0 %"
244+
"utils/stringutil.py", "89", "77", "86.5 %"
245245

246-
"pyFAI total", "40536", "22731", "56.1 %"
246+
"pyFAI total", "40805", "22900", "56.1 %"

doc/source/usage/cookbook/calibration_with_jupyter.ipynb

+66-57
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)