From 238ecb5ff84b55f028b75df32fccdc3685609d69 Mon Sep 17 00:00:00 2001 From: appel_c Date: Fri, 8 Mar 2024 16:15:13 +0100 Subject: [PATCH] fix: fix type conversion for SimCamera uniform noise --- ophyd_devices/sim/sim_data.py | 1 + tests/test_simulation.py | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/ophyd_devices/sim/sim_data.py b/ophyd_devices/sim/sim_data.py index 932d2ca..187498f 100644 --- a/ophyd_devices/sim/sim_data.py +++ b/ophyd_devices/sim/sim_data.py @@ -691,6 +691,7 @@ class SimulatedDataCamera(SimulatedDataBase): return v if noise == NoiseType.UNIFORM: v += np.random.uniform(-noise_multiplier, noise_multiplier, v.shape) + v[v <= 0] = 0 return v if noise == NoiseType.NONE: return v diff --git a/tests/test_simulation.py b/tests/test_simulation.py index 004551e..407afa4 100644 --- a/tests/test_simulation.py +++ b/tests/test_simulation.py @@ -68,12 +68,23 @@ def test_camera__init__(camera): assert isinstance(camera, BECDevice) -def test_camera_readback(camera): +@pytest.mark.parametrize("amplitude, noise_multiplier", [(0, 1), (100, 10), (1000, 50)]) +def test_camera_readback(camera, amplitude, noise_multiplier): """Test the readback method of SimMonitor.""" for model_name in camera.sim.sim_get_models(): camera.sim.sim_select_model(model_name) - assert camera.image.read()[camera.image.name]["value"].shape == camera.SHAPE - assert isinstance(camera.image.read()[camera.image.name]["value"][0, 0], camera.BIT_DEPTH) + camera.sim.sim_params = {"noise_multiplier": noise_multiplier} + camera.sim.sim_params = {"amplitude": amplitude} + camera.sim.sim_params = {"noise": "poisson"} + assert camera.image.get().shape == camera.SHAPE + assert isinstance(camera.image.get()[0, 0], camera.BIT_DEPTH) + camera.sim.sim_params = {"noise": "uniform"} + camera.sim.sim_params = {"hot_pixel_coords": []} + camera.sim.sim_params = {"hot_pixel_values": []} + camera.sim.sim_params = {"hot_pixel_types": []} + assert camera.image.get().shape == camera.SHAPE + assert isinstance(camera.image.get()[0, 0], camera.BIT_DEPTH) + assert (camera.image.get() <= (amplitude + noise_multiplier + 1)).all() def test_positioner__init__(positioner):