From 122639a14ac3088e53e4d34fb926428111e1a673 Mon Sep 17 00:00:00 2001
From: sldesnoo-Delft <s.l.desnoo@tudelft.nl>
Date: Fri, 15 Jul 2022 12:11:22 +0200
Subject: [PATCH] Fixed digitizer configuring and get_channel_data after
 testing with mock

---
 pulse_lib/keysight/M3202A_uploader.py | 16 ++++++++++++----
 pulse_lib/tests/mock_m3102a.py        |  6 +++---
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/pulse_lib/keysight/M3202A_uploader.py b/pulse_lib/keysight/M3202A_uploader.py
index 37215c47..6f7ecdac 100644
--- a/pulse_lib/keysight/M3202A_uploader.py
+++ b/pulse_lib/keysight/M3202A_uploader.py
@@ -76,7 +76,7 @@ class M3202A_Uploader:
     def get_num_samples(self, acquisition_channel, t_measure, sample_rate):
         dig_ch = self.digitizer_channels[acquisition_channel]
         digitizer = self.digitizers[dig_ch.module_name]
-        return digitizer.get_points_per_cycle(t_measure, sample_rate)
+        return digitizer.get_samples_per_measurement(t_measure, sample_rate)
 
     def create_job(self, sequence, index, seq_id, n_rep, sample_rate, neutralize=True, alignment=None):
         # TODO @@@ implement alignment
@@ -174,7 +174,9 @@ class M3202A_Uploader:
             dig.set_active_channels(channel_nums)
 
         self.acq_description = AcqDescription(job.seq_id, job.index, channels,
-                                              job.acquisitions, enabled_channels)
+                                              job.acquisitions, enabled_channels,
+                                              job.n_rep,
+                                              job.acquisition_conf.average_repetitions)
 
 
     def __get_job(self, seq_id, index):
@@ -293,13 +295,17 @@ class M3202A_Uploader:
                 raw_ch = (raw_I + 1j * raw_Q) * np.exp(1j*channel.phase)
             else:
                 # this can be complex valued output with LO modulation or phase shift in digitizer (FPGA)
-                raw_ch = dig_data[dig_name][channel.in_ch[0]]
+                raw_ch = dig_data[dig_name][in_ch[0]]
 
             if not channel.iq_out:
                 raw_ch = raw_ch.real
 
             result[channel_name] = raw_ch
 
+        if not acq_desc.average_repetitions:
+            for key,value in result.items():
+                result[key] = value.reshape((acq_desc.n_rep, -1))
+
         return result
 
     def release_memory(self, seq_id=None, index=None):
@@ -344,7 +350,9 @@ class AcqDescription:
     index: List[int]
     channels: List[str]
     acquisitions: Dict[str, List[str]]
-    enabled_channels : Dict[str, List[int]]
+    enabled_channels: Dict[str, List[int]]
+    n_rep: int
+    average_repetitions: bool
 
 @dataclass
 class AwgQueueItem:
diff --git a/pulse_lib/tests/mock_m3102a.py b/pulse_lib/tests/mock_m3102a.py
index ba27e167..f66528f1 100644
--- a/pulse_lib/tests/mock_m3102a.py
+++ b/pulse_lib/tests/mock_m3102a.py
@@ -18,11 +18,11 @@ class MockM3102A(Instrument):
     def slot_number(self):
         return self._slot_number
 
-    def set_operation_mode(self, value):
+    def set_operating_mode(self, value):
         pass
 
     def set_active_channels(self, channel_list):
-        self.measure._active_channels = channel_list
+        self.measure._active_channels = set(channel_list)
 
     @property
     def active_channels(self):
@@ -58,7 +58,7 @@ class ChannelProperties:
 class ChannelData:
     def __init__(self):
         self._active_channels = set([1,2,3,4])
-        self._data = {i:[] for i in self._active_channels}
+        self._data = {i:None for i in self._active_channels}
         self._ch_properties = {i:ChannelProperties() for i in self._active_channels}
 
     def get_data(self):
-- 
GitLab