From f21e22bc159014e028837c4a7a25ae738baacaf8 Mon Sep 17 00:00:00 2001 From: Simon Heybrock Date: Wed, 5 Feb 2025 07:50:45 +0100 Subject: [PATCH] Fix position noise ignoring unit of sigma --- src/ess/reduce/live/raw.py | 5 ++++- tests/live/raw_test.py | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/ess/reduce/live/raw.py b/src/ess/reduce/live/raw.py index db13df66..e2c1cf5c 100644 --- a/src/ess/reduce/live/raw.py +++ b/src/ess/reduce/live/raw.py @@ -528,9 +528,12 @@ def position_noise_for_cylindrical_pixel( def gaussian_position_noise(sigma: PositionNoiseSigma) -> PositionNoise: + sigma = sigma.to(unit='m', copy=False) size = _noise_size position = sc.empty(sizes={'position': size}, unit='m', dtype=sc.DType.vector3) - position.values = np.random.default_rng().normal(0, sigma.value, size=(size, 3)) + position.values = np.random.default_rng(seed=1234).normal( + 0, sigma.value, size=(size, 3) + ) return PositionNoise(position) diff --git a/tests/live/raw_test.py b/tests/live/raw_test.py index c462f3b6..4046e266 100644 --- a/tests/live/raw_test.py +++ b/tests/live/raw_test.py @@ -7,6 +7,17 @@ from ess.reduce.live import raw +@pytest.mark.parametrize( + 'sigma', + [sc.scalar(0.01, unit='m'), sc.scalar(1.0, unit='cm'), sc.scalar(10.0, unit='mm')], +) +def test_gaussian_position_noise_is_sigma_unit_independent(sigma: sc.Variable) -> None: + sigma_m = sigma.to(unit='m') + reference = raw.gaussian_position_noise(sigma=sigma_m) + noise = raw.gaussian_position_noise(sigma=sigma) + assert sc.identical(noise, reference) + + def test_clear_counts_resets_counts_to_zero() -> None: detector_number = sc.array(dims=['pixel'], values=[1, 2, 3], unit=None) det = raw.Detector(detector_number)