Skip to content

Commit 44b69cd

Browse files
committed
enable auto-dynmic mask
1 parent ca9b8ef commit 44b69cd

File tree

4 files changed

+32
-16
lines changed

4 files changed

+32
-16
lines changed

src/pyFAI/ext/CSR_common.pxi

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# Project: Azimuthal integration
44
# https://github.com/silx-kit/pyFAI
55
#
6-
# Copyright (C) 2015-2024 European Synchrotron Radiation Facility, Grenoble, France
6+
# Copyright (C) 2015-2025 European Synchrotron Radiation Facility, Grenoble, France
77
#
88
# Principal author: Jérôme Kieffer ([email protected])
99
#
@@ -29,7 +29,7 @@
2929

3030
__author__ = "Jérôme Kieffer"
3131
__contact__ = "[email protected]"
32-
__date__ = "05/12/2024"
32+
__date__ = "12/03/2025"
3333
__status__ = "stable"
3434
__license__ = "MIT"
3535

@@ -347,7 +347,7 @@ cdef class CsrIntegrator(object):
347347
bint do_azimuthal_variance = error_model is ErrorModel.AZIMUTHAL
348348
bint do_variance = error_model is not ErrorModel.NO
349349
assert weights.size == self.input_size, "weights size"
350-
empty = dummy if dummy is not None else self.empty
350+
empty = self.empty if dummy is None else dummy
351351
#Call the preprocessor ...
352352
preproc4 = preproc(weights.ravel(),
353353
dark=dark,

src/pyFAI/integrator/azimuthal.py

+21-5
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
__contact__ = "[email protected]"
3131
__license__ = "MIT"
3232
__copyright__ = "European Synchrotron Radiation Facility, Grenoble, France"
33-
__date__ = "19/02/2025"
33+
__date__ = "12/03/2025"
3434
__status__ = "stable"
3535
__docformat__ = 'restructuredtext'
3636

@@ -128,7 +128,12 @@ def integrate1d(self, data, npt, filename=None,
128128
method = self._normalize_method(method, dim=1, default=self.DEFAULT_METHOD_1D)
129129
assert method.dimension == 1
130130
unit = units.to_unit(unit)
131-
empty = numpy.float32(dummy) if dummy is not None else self._empty
131+
if dummy is None:
132+
dummy, delta_dummy = self.detector.get_dummies(data)
133+
empty = self._empty if dummy is None else dummy
134+
else:
135+
dummy = empty = numpy.float32(dummy)
136+
delta_dummy = None if delta_dummy is None else numpy.float32(delta_dummy)
132137
shape = data.shape
133138
pos0_scale = unit.scale
134139

@@ -605,7 +610,12 @@ def integrate_radial(self, data, npt, npt_rad=100,
605610
sum_normalization = res._sum_normalization.sum(axis=-1)
606611

607612
mask = numpy.where(count == 0)
608-
empty = numpy.float32(dummy) if dummy is not None else self._empty
613+
if dummy is None:
614+
dummy, delta_dummy = self.detector.get_dummies(data)
615+
empty = self._empty if dummy is None else dummy
616+
else:
617+
dummy = empty = numpy.float32(dummy)
618+
delta_dummy = None if delta_dummy is None else numpy.float32(delta_dummy)
609619
intensity = sum_signal / sum_normalization
610620
intensity[mask] = empty
611621

@@ -703,7 +713,13 @@ def integrate2d_ng(self, data, npt_rad, npt_azim=360,
703713
space = (radial_unit.space, azimuth_unit.space)
704714
pos0_scale = radial_unit.scale
705715
pos1_scale = azimuth_unit.scale
706-
empty = numpy.float32(dummy) if dummy is not None else self._empty
716+
if dummy is None:
717+
dummy, delta_dummy = self.detector.get_dummies(data)
718+
empty = self._empty if dummy is None else dummy
719+
else:
720+
dummy = empty = numpy.float32(dummy)
721+
delta_dummy = None if delta_dummy is None else numpy.float32(delta_dummy)
722+
707723
if mask is None:
708724
has_mask = "from detector"
709725
mask = self.mask
@@ -1103,7 +1119,7 @@ def integrate2d_ng(self, data, npt_rad, npt_azim=360,
11031119
dummy=dummy,
11041120
delta_dummy=delta_dummy,
11051121
normalization_factor=normalization_factor,
1106-
empty=self._empty,
1122+
empty=empty,
11071123
variance=variance,
11081124
dark_variance=None,
11091125
error_model=error_model,

src/pyFAI/test/test_csr.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -195,16 +195,16 @@ def test_2d_nosplit(self):
195195
result_nosplit = self.ai.integrate2d(self.data, self.N, unit="2th_deg", method=("no", "csr", "cython"))
196196
self.assertTrue(numpy.allclose(result_histo.radial, result_nosplit.radial), " 2Th are the same")
197197
self.assertTrue(numpy.allclose(result_histo.azimuthal, result_nosplit.azimuthal, atol=1e-5), " Chi are the same")
198-
if False:
199-
print(result_histo.method, result_histo.method_called)
200-
print(result_histo.sum_signal.min(), result_histo.sum_signal.max(), result_histo.sum_signal.mean(), result_histo.sum_signal.std())
201-
print(result_histo.sum_normalization.min(), result_histo.sum_normalization.max(), result_histo.sum_normalization.mean(), result_histo.sum_normalization.std())
202-
print(result_histo.intensity.min(), result_histo.intensity.max(), result_histo.intensity.mean(), result_histo.intensity.std())
203-
print(result_nosplit.intensity.min(), result_nosplit.intensity.max(), result_nosplit.intensity.mean(), result_nosplit.intensity.std())
204-
print(result_nosplit.intensity)
198+
# print("result_histo", result_histo.method, result_histo.method_called)
199+
# print("result_histo", result_histo.sum_signal.min(), result_histo.sum_signal.max(), result_histo.sum_signal.mean(), result_histo.sum_signal.std())
200+
# print("result_histo",result_histo.sum_normalization.min(), result_histo.sum_normalization.max(), result_histo.sum_normalization.mean(), result_histo.sum_normalization.std())
201+
# print("result_histo",result_histo.intensity.min(), result_histo.intensity.max(), result_histo.intensity.mean(), result_histo.intensity.std())
202+
# print("result_nosplit",result_nosplit.intensity.min(), result_nosplit.intensity.max(), result_nosplit.intensity.mean(), result_nosplit.intensity.std())
203+
# print("result_nosplit",result_nosplit.method)
205204
error = (result_histo.intensity - result_nosplit.intensity)
206205
logger.debug("ref: %s; obt: %s", result_histo.intensity.shape, result_nosplit.intensity.shape)
207206
logger.debug("error mean: %s, std: %s", error.mean(), error.std())
207+
208208
self.assertLess(error.mean(), 1e-3, "img are almost the same")
209209
self.assertLess(error.std(), 3, "img are almost the same")
210210

src/pyFAI/test/test_utils_mathutil.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ def test_quality_of_fit(self):
170170
cal = calibrant.get_calibrant("AgBh")
171171
cal.wavelength = ai.wavelength
172172
res = mathutil.quality_of_fit(img, ai, cal, rings=[0,1], npt_azim=36, npt_rad=100)
173-
self.assertLess(res, 0.3, "Fit of good quality")
173+
self.assertLess(res, 0.31, "Fit of good quality")
174174

175175
def test_nan_equal(self):
176176
nan_equal = mathutil.nan_equal

0 commit comments

Comments
 (0)