From 78c01de6d5f12e8385373ca2b99b555e460668c2 Mon Sep 17 00:00:00 2001 From: jaknapper Date: Fri, 15 May 2026 14:39:53 +0100 Subject: [PATCH 1/2] Sharpness monitor accepting 0 as None --- src/openflexure_microscope_server/things/autofocus.py | 4 ++-- tests/unit_tests/test_autofocus.py | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/openflexure_microscope_server/things/autofocus.py b/src/openflexure_microscope_server/things/autofocus.py index bd2d807f..ddfb76bb 100644 --- a/src/openflexure_microscope_server/things/autofocus.py +++ b/src/openflexure_microscope_server/things/autofocus.py @@ -274,7 +274,7 @@ class JPEGSharpnessMonitor: dependency as required by the underlying class. :param method: The sharpness metric used when evaluating autofocus. :param record: Bitmask of sharpness metrics to record while monitoring. - If ``None``, only the metric specified by ``method`` is recorded. + If ``None`` or 0, only the metric specified by ``method`` is recorded. :raises ValueError: If ``method`` is not included in ``record``. :raises ValueError: If ``SharpnessMethod.FOCUS_FOM`` is requested but @@ -283,7 +283,7 @@ class JPEGSharpnessMonitor: self.camera = camera self.stage = stage self.method = method - self.record = method if record is None else record + self.record = method if record is None or record == 0 else record if not self.method & self.record: raise ValueError( diff --git a/tests/unit_tests/test_autofocus.py b/tests/unit_tests/test_autofocus.py index 3401f2d4..0880712b 100644 --- a/tests/unit_tests/test_autofocus.py +++ b/tests/unit_tests/test_autofocus.py @@ -129,6 +129,17 @@ def test_record_defaults_to_method(mock_stage, mock_camera): assert monitor.record == SharpnessMethod.FOCUS_FOM +def test_zero_record_defaults_to_method(mock_stage, mock_camera): + """If record=0, only the selected method is recorded.""" + monitor = JPEGSharpnessMonitor( + mock_stage, + mock_camera, + method=SharpnessMethod.FOCUS_FOM, + record=0, + ) + + assert monitor.record == SharpnessMethod.FOCUS_FOM + def test_record_must_include_selected_method(mock_stage, mock_camera): """The selected autofocus metric must also be recorded.""" From a278b700ef05409e35b098606b28b9a1042d7935 Mon Sep 17 00:00:00 2001 From: jaknapper Date: Fri, 15 May 2026 15:45:04 +0100 Subject: [PATCH 2/2] Change check for record --- src/openflexure_microscope_server/things/autofocus.py | 2 +- tests/unit_tests/test_autofocus.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/openflexure_microscope_server/things/autofocus.py b/src/openflexure_microscope_server/things/autofocus.py index ddfb76bb..43cc3e2b 100644 --- a/src/openflexure_microscope_server/things/autofocus.py +++ b/src/openflexure_microscope_server/things/autofocus.py @@ -283,7 +283,7 @@ class JPEGSharpnessMonitor: self.camera = camera self.stage = stage self.method = method - self.record = method if record is None or record == 0 else record + self.record = record if record else method if not self.method & self.record: raise ValueError( diff --git a/tests/unit_tests/test_autofocus.py b/tests/unit_tests/test_autofocus.py index 0880712b..c568872b 100644 --- a/tests/unit_tests/test_autofocus.py +++ b/tests/unit_tests/test_autofocus.py @@ -129,6 +129,7 @@ def test_record_defaults_to_method(mock_stage, mock_camera): assert monitor.record == SharpnessMethod.FOCUS_FOM + def test_zero_record_defaults_to_method(mock_stage, mock_camera): """If record=0, only the selected method is recorded.""" monitor = JPEGSharpnessMonitor(