From 1673c8371357c2b421273296666b928fcd1d137d Mon Sep 17 00:00:00 2001
From: TUD278427 <TUD278427@tudelft.net>
Date: Tue, 16 Jun 2020 15:37:01 +0200
Subject: [PATCH] add RF support to param viewer

---
 core_tools/drivers/harware.py | 45 ++++++++++++++++++++++++++++++++---
 1 file changed, 42 insertions(+), 3 deletions(-)

diff --git a/core_tools/drivers/harware.py b/core_tools/drivers/harware.py
index ccf9cf90..edacd690 100644
--- a/core_tools/drivers/harware.py
+++ b/core_tools/drivers/harware.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 from dataclasses import dataclass
 import qcodes as qc
 import numpy as np
@@ -110,16 +111,32 @@ class harware_parent(qc.Instrument):
         self.sync = shelve.open(sample_name, flag='c', writeback=True)
         self.dac_gate_map = dict()
         self.boundaries = dict()
+        self.RF_source_names = []
+        self.RF_params = ['frequency_stepsize', 'frequency', 'power']
+        self._RF_settings = dict()
+        
         # set this one in the GUI.
         self._AWG_to_dac_conversion = dict()
         if 'AWG2DAC' in list(self.sync.keys()):
             self._AWG_to_dac_conversion = self.sync['AWG2DAC']
+                
         self._virtual_gates = virtual_gates_mgr(self.sync)
 
     @property
     def virtual_gates(self):
         return self._virtual_gates
     
+    @property
+    def RF_settings(self):
+        return self._RF_settings
+    
+    @RF_settings.setter
+    def RF_settings(self, RF_settings):
+        if self._RF_settings.keys() == RF_settings.keys():
+            RF_settings = self._RF_settings
+        else:
+            self._RF_settings = RF_settings
+    
     @property
     def AWG_to_dac_conversion(self):
         return self._AWG_to_dac_conversion
@@ -131,15 +148,37 @@ class harware_parent(qc.Instrument):
         else:
             self._AWG_to_dac_conversion = AWG_to_dac_ratio
 
+    def setup_RF_settings(self, sources):
+        #TODO: If a module is added, the settings of the previous module are discarded
+        RF_generated, qc_params = self.gen_RF_settings(sources)
+        if 'RFsettings' in list(self.sync.keys()) and self.sync['RFsettings'].keys() == RF_generated.keys():
+            self.RF_settings = self.sync['RFsettings']
+            for (param,val) in zip(qc_params,self.RF_settings.values()):
+                param(val)
+        else:
+            self.RF_settings = self.gen_RF_settings(sources = sources)
+    
+    def gen_RF_settings(self, sources):
+        RF_settings = dict()
+        qc_params = []
+        for src in sources:
+            name = src.name
+            self.RF_source_names.append(name)
+            for param in self.RF_params:
+                qc_param = getattr(src,param)
+                RF_settings[f'{name}_{param}'] = qc_param()
+                qc_params.append(qc_param)
+        return RF_settings,qc_params
+
     def sync_data(self):
         for item in self.virtual_gates:
             self.sync[item.name] = item
-            self.sync['AWG2DAC'] = self._AWG_to_dac_conversion
+        self.sync['AWG2DAC'] = self._AWG_to_dac_conversion
+        self.sync['RFsettings'] = self._RF_settings
         self.sync.sync()
         
     def snapshot_base(self, update: bool=False,
-                  params_to_skip_update: Sequence[str]=None):
-        
+                  params_to_skip_update: Sequence[str]=None):        
         vg_snap = {}
         for vg in self.virtual_gates:
             vg_mat = np.reshape(np.frombuffer(vg.virtual_gate_matrix, dtype=float),np.shape(vg.virtual_gate_matrix))
-- 
GitLab