diff --git a/csaxs_bec/devices/aerotech/README.md b/csaxs_bec/devices/aerotech/README.md index 49442d2c..a82c9e0e 100644 --- a/csaxs_bec/devices/aerotech/README.md +++ b/csaxs_bec/devices/aerotech/README.md @@ -164,8 +164,8 @@ dev.pandatrig.wait_lines_done(n_lines=1, timeout=5) dev.pandatrig.line_status() # triggers, lines, pulses, dropped since arm() ``` -`wait_lines_done` fails on timeout, on a wrong number of lines or gates and on ignored -edges. +`wait_lines_done` fails on timeout and on a wrong number of lines or gates; ignored edges +(during a running line, e.g. encoder noise at the PSO window entry) are only logged. PandA FPGA 4.1 PULSE block: an ENABLE edge, a parameter write or a dropped trigger often makes it replay the previous pulse train without a trigger. The device keeps the PULSE diff --git a/csaxs_bec/devices/panda_box/panda_line_trigger.py b/csaxs_bec/devices/panda_box/panda_line_trigger.py index e4336836..456e1d55 100644 --- a/csaxs_bec/devices/panda_box/panda_line_trigger.py +++ b/csaxs_bec/devices/panda_box/panda_line_trigger.py @@ -348,9 +348,10 @@ class PandaLineTrigger(Device): def wait_lines_done(self, n_lines: int, timeout: float, poll: float = 0.02) -> dict: """ - Wait until n_lines lines were triggered and all their pulses sent. Fails on timeout, - on more lines or pulses than expected and on ignored trigger edges (edge during a - running line). + Wait until n_lines lines were triggered and all their pulses sent. Fails on timeout + and on more lines or pulses than expected. Ignored trigger edges (edge during a + running line, e.g. encoder noise at the PSO window entry; the DDG ignores them too) + are only logged. """ n_pulses = self._pulse_params["n_pulses"] if self._pulse_params else 0 start = time.time() @@ -378,7 +379,7 @@ class PandaLineTrigger(Device): f" got {status['lines']} with {status['pulses']}." ) if status["triggers"] != status["lines"]: - raise PandaLineTriggerError( + logger.warning( f"{self.name}: {status['triggers'] - status['lines']} trigger edge(s) ignored" f" (edge while a line was running or while not armed): {status}." ) diff --git a/tests/tests_devices/test_panda_line_trigger.py b/tests/tests_devices/test_panda_line_trigger.py index 4a9dfb53..8f10d717 100644 --- a/tests/tests_devices/test_panda_line_trigger.py +++ b/tests/tests_devices/test_panda_line_trigger.py @@ -120,19 +120,19 @@ def test_one_shot_accepts_one_edge(trigger): trigger.software_trigger() assert trigger.wait_lines_done(1, timeout=1)["armed"] is False trigger.software_trigger() - with pytest.raises(PandaLineTriggerError, match="1 trigger edge"): - trigger.wait_lines_done(1, timeout=1) + status = trigger.wait_lines_done(1, timeout=1) + assert status["triggers"] == 2 and status["lines"] == 1 -def test_edge_during_line_is_reported(trigger): +def test_edge_during_line_is_ignored(trigger): trigger.configure_line(5, exp_time=0.01) trigger.arm() trigger.software_trigger() trigger.panda.busy = True trigger.software_trigger() trigger.panda.busy = False - with pytest.raises(PandaLineTriggerError, match="ignored"): - trigger.wait_lines_done(1, timeout=1) + status = trigger.wait_lines_done(1, timeout=1) + assert status["triggers"] == 2 and status["lines"] == 1 and status["pulses"] == 5 def test_arm_needs_configure(trigger):