From 0196b2ac4ce522f62efd663a380b1a5eb1f4db0e Mon Sep 17 00:00:00 2001
From: Sander de Snoo <59472150+sldesnoo-Delft@users.noreply.github.com>
Date: Sun, 20 Nov 2022 16:21:26 +0100
Subject: [PATCH] Fixed inversion of measurement result when zero_on_high =
 True

---
 pulse_lib/acquisition/measurement_converter.py      | 2 +-
 pulse_lib/segments/utility/measurement_converter.py | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/pulse_lib/acquisition/measurement_converter.py b/pulse_lib/acquisition/measurement_converter.py
index 3d2b34e8..51c176bf 100644
--- a/pulse_lib/acquisition/measurement_converter.py
+++ b/pulse_lib/acquisition/measurement_converter.py
@@ -316,7 +316,7 @@ class MeasurementConverter:
                     continue
                 result = self._raw[i] > m.threshold
                 if m.zero_on_high:
-                    result = ~result
+                    result = result ^ 1
                 result = result.astype(int)
             elif isinstance(m, measurement_expression):
                 result = m.expression.evaluate(last_result)
diff --git a/pulse_lib/segments/utility/measurement_converter.py b/pulse_lib/segments/utility/measurement_converter.py
index 164717e3..7d37f974 100644
--- a/pulse_lib/segments/utility/measurement_converter.py
+++ b/pulse_lib/segments/utility/measurement_converter.py
@@ -201,7 +201,8 @@ class measurement_converter:
                 channel_name = m.acquisition_channel
                 result = self._channel_raw[channel_name][m.index] > m.threshold
                 if m.zero_on_high:
-                    result = not result
+                    # flip bit 0
+                    result = result ^ 1
                 result = result.astype(int)
             elif isinstance(m, measurement_expression):
                 result = m.expression.evaluate(last_result)
-- 
GitLab