Skip to content
Snippets Groups Projects
Commit 2d723ed5 authored by TUD278427's avatar TUD278427
Browse files

Add RF settings to param viewer, init syntax changed a bit now, sorry

parent 5fd2a07e
No related branches found
No related tags found
No related merge requests found
# -*- coding: utf-8 -*-
from core_tools.GUI.param_viewer.param_viewer_GUI_window import Ui_MainWindow
from PyQt5 import QtCore, QtGui, QtWidgets
from functools import partial
from qcodes import Station
import numpy as np
from dataclasses import dataclass
@dataclass
class gate_data_obj:
gate_parameter : any
class param_data_obj:
param_parameter : any
gui_input_param : any
division : any
class param_viewer(QtWidgets.QMainWindow, Ui_MainWindow):
"""docstring for virt_gate_matrix_GUI"""
def __init__(self, gates_object):
def __init__(self, station, gates_object = None):
if type(station) is not Station:
raise Exception('Syntax changed, to support RF_settings now supply station')
self.real_gates = list()
self.virtual_gates = list()
self.gates_object = gates_object
self.rf_settings = list()
self.station = station
if gates_object:
self.gates_object = gates_object
else:
try:
self.gates_object = self.station.gates
except:
raise ValueError('Default guess for gates object wrong, please supply manually')
self._step_size = 1 #mV
instance_ready = True
......@@ -29,22 +41,29 @@ class param_viewer(QtWidgets.QMainWindow, Ui_MainWindow):
super(QtWidgets.QMainWindow, self).__init__()
self.setupUi(self)
# add RF parameters
for src_name in self.gates_object.hardware.RF_source_names:
inst = getattr(station, src_name)
for RFpar in self.gates_object.hardware.RF_params:
param = getattr(inst, RFpar)
self._add_RFset(param)
# add real gates
for gate_name in gates_object.hardware.dac_gate_map.keys():
param = getattr(gates_object, gate_name)
for gate_name in self.gates_object.hardware.dac_gate_map.keys():
param = getattr(self.gates_object, gate_name)
self._add_gate(param, False)
# add virtual gates
for virt_gate_set in gates_object.hardware.virtual_gates:
for virt_gate_set in self.gates_object.hardware.virtual_gates:
for gate_name in virt_gate_set.virtual_gate_names:
param = getattr(gates_object, gate_name)
param = getattr(self.gates_object, gate_name)
self._add_gate(param, True)
self.step_size.valueChanged.connect(partial(self._update_step, self.step_size.value))
self._finish_gates_GUI()
self.timer = QtCore.QTimer()
self.timer.timeout.connect(partial(self._update_gates))
self.timer.timeout.connect(partial(self._update_parameters))
self.timer.start(500)
self.show()
......@@ -63,6 +82,54 @@ class param_viewer(QtWidgets.QMainWindow, Ui_MainWindow):
self.step_size.setValue(value)
def _add_RFset(self, parameter):
'''
add a new gate.
Args:
parameter (QCoDeS parameter object) : parameter to add.
virtual (bool) : True in case this is a virtual gate.
'''
i = len(self.rf_settings)
layout = self.layout_RF
name = parameter.full_name
unit = parameter.unit
step_size = 0.5
division = 1
if parameter.name[0:10] == 'frequency':
division = 1e6
step_size = 0.1
unit = f'M{unit}'
_translate = QtCore.QCoreApplication.translate
set_name = QtWidgets.QLabel(self.RFsettings)
set_name.setObjectName(name)
set_name.setMinimumSize(QtCore.QSize(100, 0))
set_name.setText(_translate("MainWindow", name))
layout.addWidget(set_name, i, 0, 1, 1)
set_input = QtWidgets.QDoubleSpinBox(self.RFsettings)
set_input.setObjectName(name + "_input")
set_input.setMinimumSize(QtCore.QSize(100, 0))
# TODO collect boundaries out of the harware
set_input.setRange(-1e9,1e9)
set_input.valueChanged.connect(partial(self._set_set, parameter, set_input.value,division))
set_input.setKeyboardTracking(False)
set_input.setSingleStep(step_size)
layout.addWidget(set_input, i, 1, 1, 1)
set_unit = QtWidgets.QLabel(self.RFsettings)
set_unit.setObjectName(name + "_unit")
set_unit.setText(_translate("MainWindow", unit))
layout.addWidget(set_unit, i, 2, 1, 1)
self.rf_settings.append(param_data_obj(parameter, set_input, division))
def _add_gate(self, parameter, virtual):
'''
add a new gate.
......@@ -93,6 +160,7 @@ class param_viewer(QtWidgets.QMainWindow, Ui_MainWindow):
voltage_input = QtWidgets.QDoubleSpinBox(self.virtualgates)
voltage_input.setObjectName( name + "_input")
voltage_input.setMinimumSize(QtCore.QSize(100, 0))
# TODO collect boundaries out of the harware
voltage_input.setRange(-4000,4000.0)
voltage_input.valueChanged.connect(partial(self._set_gate, parameter, voltage_input.value))
......@@ -104,15 +172,22 @@ class param_viewer(QtWidgets.QMainWindow, Ui_MainWindow):
gate_unit.setText(_translate("MainWindow", unit))
layout.addWidget(gate_unit, i, 2, 1, 1)
if virtual == False:
self.real_gates.append(gate_data_obj(parameter, voltage_input))
self.real_gates.append(param_data_obj(parameter, voltage_input, 1))
else:
self.virtual_gates.append(gate_data_obj(parameter, voltage_input))
self.virtual_gates.append(param_data_obj(parameter, voltage_input, 1))
def _set_gate(self, gate, value):
# TODO add support if out of range.
gate.set(value())
def _set_set(self, setting, value, division):
# TODO add support if out of range.
setting.set(value()*division)
self.gates_object.hardware.RF_settings[setting.full_name] = value()*division
self.gates_object.hardware.sync_data()
def _finish_gates_GUI(self):
# MAKE THIS INTO A FOR LOOP
i = len(self.real_gates) + 1
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
......@@ -128,24 +203,34 @@ class param_viewer(QtWidgets.QMainWindow, Ui_MainWindow):
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.layout_virtual.addItem(spacerItem1, 0, 3, 1, 1)
i = len(self.rf_settings) + 1
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.layout_RF.addItem(spacerItem, i, 0, 1, 1)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.layout_RF.addItem(spacerItem1, 0, 3, 1, 1)
def _update_gates(self):
def _update_parameters(self):
'''
updates the values of all the gates in the parameterviewer periodically
'''
idx = self.tab_menu.currentIndex()
if idx == 0:
gates = self.real_gates
params = self.real_gates
elif idx == 1:
gates = self.virtual_gates
params = self.virtual_gates
elif idx == 2:
params = self.rf_settings
else:
return
for gate in gates:
for param in params:
# do not update when a user clicks on it.
if not gate.gui_input_param.hasFocus():
gate.gui_input_param.setValue(gate.gate_parameter())
if not param.gui_input_param.hasFocus():
param.gui_input_param.setValue(param.param_parameter()/param.division)
......
......@@ -2,14 +2,12 @@
# Form implementation generated from reading ui file 'param_viewer_GUI_window.ui'
#
# Created by: PyQt5 UI code generator 5.13.1
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
......@@ -28,7 +26,7 @@ class Ui_MainWindow(object):
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setObjectName("scrollArea")
self.scrollAreaWidgetContents = QtWidgets.QWidget()
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 758, 491))
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 756, 495))
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
self.gridLayout_6 = QtWidgets.QGridLayout(self.scrollAreaWidgetContents)
self.gridLayout_6.setObjectName("gridLayout_6")
......@@ -46,6 +44,15 @@ class Ui_MainWindow(object):
self.layout_virtual.setObjectName("layout_virtual")
self.gridLayout_5.addLayout(self.layout_virtual, 0, 0, 1, 1)
self.tab_menu.addTab(self.virtualgates, "")
self.RFsettings = QtWidgets.QWidget()
self.RFsettings.setObjectName("RFsettings")
self.layoutWidget = QtWidgets.QWidget(self.RFsettings)
self.layoutWidget.setGeometry(QtCore.QRect(10, 10, 761, 501))
self.layoutWidget.setObjectName("layoutWidget")
self.layout_RF = QtWidgets.QGridLayout(self.layoutWidget)
self.layout_RF.setContentsMargins(0, 0, 0, 0)
self.layout_RF.setObjectName("layout_RF")
self.tab_menu.addTab(self.RFsettings, "")
self.settings = QtWidgets.QWidget()
self.settings.setObjectName("settings")
self.gridLayout_3 = QtWidgets.QGridLayout(self.settings)
......@@ -80,7 +87,7 @@ class Ui_MainWindow(object):
self.gridLayout.addWidget(self.tab_menu, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 20))
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
......@@ -96,16 +103,8 @@ class Ui_MainWindow(object):
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.tab_menu.setTabText(self.tab_menu.indexOf(self.realgates), _translate("MainWindow", "Normal gates"))
self.tab_menu.setTabText(self.tab_menu.indexOf(self.virtualgates), _translate("MainWindow", "Virtual Gates"))
self.tab_menu.setTabText(self.tab_menu.indexOf(self.RFsettings), _translate("MainWindow", "RF Settings"))
self.label.setText(_translate("MainWindow", "Voltage step"))
self.label_2.setText(_translate("MainWindow", "mV"))
self.tab_menu.setTabText(self.tab_menu.indexOf(self.settings), _translate("MainWindow", "Settings"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
......@@ -35,8 +35,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>758</width>
<height>491</height>
<width>756</width>
<height>495</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_6">
......@@ -59,6 +59,22 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="RFsettings">
<attribute name="title">
<string>RF Settings</string>
</attribute>
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>761</width>
<height>501</height>
</rect>
</property>
<layout class="QGridLayout" name="layout_RF"/>
</widget>
</widget>
<widget class="QWidget" name="settings">
<attribute name="title">
<string>Settings</string>
......@@ -154,7 +170,7 @@
<x>0</x>
<y>0</y>
<width>800</width>
<height>20</height>
<height>21</height>
</rect>
</property>
</widget>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment