diff --git a/tests/tests_devices/test_std_daq_live_processing.py b/tests/tests_devices/test_std_daq_live_processing.py index 6bf4745..991066e 100644 --- a/tests/tests_devices/test_std_daq_live_processing.py +++ b/tests/tests_devices/test_std_daq_live_processing.py @@ -148,3 +148,25 @@ def test_std_daq_live_processing_apply_flat_dark_correction_with_dark(std_daq_li assert isinstance(corrected_image, np.ndarray) assert corrected_image.shape == (100, 100) assert np.all(corrected_image >= 0), "Corrected image should not have negative values" + + +def test_std_daq_live_processing_apply_flat_correction_zero_division(std_daq_live_processing): + + # Create a mock image + image = np.random.rand(100, 100) * 1000 + 10 # Scale to simulate a realistic image + + # Set flat reference with epsilon values + flat = np.ones((100, 100)) * 2 + std_daq_live_processing.references["flat_(100, 100)"] = flat + + # Set dark reference to ones + dark = np.ones((100, 100)) * 2 + + std_daq_live_processing.references["dark_(100, 100)"] = dark + + # Apply flat correction + corrected_image = std_daq_live_processing.apply_flat_dark_correction(image) + assert isinstance(corrected_image, np.ndarray) + assert corrected_image.shape == (100, 100) + assert np.all(corrected_image >= 0), "Corrected image should not have negative values" + assert np.any(corrected_image < np.inf), "Corrected image should not have infinite values" diff --git a/tomcat_bec/devices/std_daq/std_daq_live_processing.py b/tomcat_bec/devices/std_daq/std_daq_live_processing.py index 852277a..c5d252a 100644 --- a/tomcat_bec/devices/std_daq/std_daq_live_processing.py +++ b/tomcat_bec/devices/std_daq/std_daq_live_processing.py @@ -121,7 +121,10 @@ class StdDaqLiveProcessing: corrected_data = data - dark return corrected_data - corrected_data = (data - dark) / (flat - dark) + # Ensure that the division does not lead to division by zero + corrected_data = np.divide( + data - dark, flat - dark, out=np.zeros_like(data), where=(flat - dark) != 0 + ) return corrected_data @typechecked