Navigation Menu

Skip to content

Commit

Permalink
Saving calibration changes before merge with Ttl
Browse files Browse the repository at this point in the history
  • Loading branch information
dvincentwest committed Apr 11, 2017
2 parents ebc23c6 + fcc8e4a commit 1e5b888
Show file tree
Hide file tree
Showing 10 changed files with 381 additions and 57 deletions.
2 changes: 1 addition & 1 deletion qtapps/data_grabber.py
Expand Up @@ -43,4 +43,4 @@ def __init__(self, parent=None):
self.listWidget_measurements.ntwk_plot = self.ntwk_plot
self.listWidget_measurements.get_analyzer = self.vna_controller.get_analyzer

app = qt.single_widget_application(DataGrabber)
app = qt.single_widget_application(DataGrabber, appid="DataGrabber")
32 changes: 15 additions & 17 deletions qtapps/skrf_qtwidgets/calibration_widgets.py
Expand Up @@ -17,9 +17,9 @@ def __init__(self, parent=None):
self.verticalLayout_main = QtWidgets.QVBoxLayout(self)
self.verticalLayout_main.setContentsMargins(6, 6, 6, 6)

self.listWidget_measurements = networkListWidget.NetworkListWidget(self)
self.btn_measureMeasurement = self.listWidget_measurements.get_measure_button()
self.btn_loadMeasurement = self.listWidget_measurements.get_load_button()
self.listWidget_measurements = networkListWidget.NetworkListWidget()
self.btn_measureMeasurement = self.listWidget_measurements.get_measure_button_twoport()
self.btn_loadMeasurement = self.listWidget_measurements.get_load_button_twoport()
self.horizontalLayout_measurementButtons = QtWidgets.QHBoxLayout()
self.horizontalLayout_measurementButtons.addWidget(self.btn_loadMeasurement)
self.horizontalLayout_measurementButtons.addWidget(self.btn_measureMeasurement)
Expand Down Expand Up @@ -162,7 +162,7 @@ def __init__(self, parent=None):
self.listWidget_line = networkListWidget.NetworkListWidget(self)
self.listWidget_line.name_prefix = "line"
self.label_line = QtWidgets.QLabel("Line")
self.btn_measureLine = self.listWidget_line.get_measure_button()
self.btn_measureLine = self.listWidget_line.get_measure_button_twoport()
self.btn_loadLine = self.listWidget_line.get_load_button()
self.horizontalLayout_line = QtWidgets.QHBoxLayout()
self.horizontalLayout_line.addWidget(self.label_line)
Expand Down Expand Up @@ -401,7 +401,7 @@ def __init__(self, parent=None):
self.horizontalLayout_switchTerms.addWidget(self.btn_loadSwitchTerms)
self.verticalLayout_main.addLayout(self.horizontalLayout_switchTerms)

self.listWidget_thru = networkListWidget.NetworkListWidget(self)
self.listWidget_thru = networkListWidget.NetworkListWidget()
self.verticalLayout_main.addWidget(self.listWidget_thru)

self.reflect_help = widgets.qt.HelpIndicator(title="Reflect Standards Help", help_text="""<h2>Reflect Standards</h2>
Expand All @@ -425,7 +425,7 @@ def __init__(self, parent=None):
{"name": "refl_type", "type": "str", "default": "short", "combo_list": ["short", "open"]},
{"name": "offset", "type": "float", "default": 0.0, "units": "mm"}
]
self.listWidget_reflect = networkListWidget.ParameterizedNetworkListWidget(self, refl_parameters)
self.listWidget_reflect = networkListWidget.ParameterizedNetworkListWidget(item_parameters=refl_parameters)
self.listWidget_reflect.label_parameters = ["refl_type", "offset"]
self.verticalLayout_main.addWidget(self.listWidget_reflect)

Expand All @@ -436,12 +436,12 @@ def __init__(self, parent=None):
<p>Lines have a length in mm. &nbsp;This can be edited by double clicking the items in the list below.</p>""")

line_parameters = [{"name": "length", "type": "float", "default": 1.0, "units": "mm"}]
self.listWidget_line = networkListWidget.ParameterizedNetworkListWidget(self, line_parameters)
self.listWidget_line = networkListWidget.ParameterizedNetworkListWidget(item_parameters=line_parameters)
self.listWidget_line.label_parameters = ["length"]
self.listWidget_line.name_prefix = "line"
self.label_line = QtWidgets.QLabel("Line Standards")
self.btn_measureLine = self.listWidget_line.get_measure_button()
self.btn_loadLine = self.listWidget_line.get_load_button()
self.btn_measureLine = self.listWidget_line.get_measure_button_twoport()
self.btn_loadLine = self.listWidget_line.get_load_button_twoport()
self.horizontalLayout_line = QtWidgets.QHBoxLayout()
self.horizontalLayout_line.addWidget(self.line_help)
self.horizontalLayout_line.addWidget(self.label_line)
Expand All @@ -468,9 +468,9 @@ def __init__(self, parent=None):
# --- END UI SETUP --- #

self.btn_loadThru.clicked.connect(self.load_thru)
self.btn_loadReflect.clicked.connect(self.load_reflect)
self.btn_loadReflect.released.connect(self.load_reflect)
self.btn_loadSwitchTerms.clicked.connect(self.load_switch_terms)
self.btn_measureThru.clicked.connect(self.measure_thru)
self.btn_measureThru.released.connect(self.measure_thru)
self.btn_measureReflect.clicked.connect(self.measure_reflect)
self.btn_measureSwitchTerms.clicked.connect(self.measure_switch_terms)
self.btn_saveCalibration.clicked.connect(self.save_calibration)
Expand Down Expand Up @@ -575,15 +575,14 @@ def load_calibration(self):

n_reflects = len(cal.Grefls)
reflects = cal.measured[1:n_reflects+1]
refl_types = ["short" if rt == "-1" else "open" for rt in cal.Grefls]
refl_offset = [roff * 1000 for roff in cal.refl_offset]
refl_types = ["short" if rt == -1 else "open" for rt in cal.Grefls]
refl_offsets = [roff * 1000 for roff in cal.refl_offset]
self.listWidget_reflect.clear()
for reflect, offset, rtype in zip(reflects, refl_offset, refl_types):
for reflect, offset, rtype in zip(reflects, refl_offsets, refl_types):
self.listWidget_reflect.load_network(reflect, False, parameters={"refl_type": rtype, "offset": offset})

lines = cal.measured[1+n_reflects:]
line_lengths = [l * 1000 for l in cal.l[1:]]
n_lines = len(lines)
self.listWidget_line.clear()
for line, length in zip(lines, line_lengths):
self.listWidget_line.load_network(line, False, parameters={"length": length})
Expand All @@ -595,7 +594,7 @@ def load_calibration(self):

def measure_thru(self):
with self.get_analyzer() as nwa:
ntwk = nwa.get_twoport()
ntwk = nwa.get_twoport(**nwa.defaults_twoport)
self.listWidget_thru.load_named_ntwk(ntwk, self.THRU_ID)

def load_thru(self):
Expand All @@ -613,7 +612,6 @@ def load_reflect(self, nwa=None):
accepted = dialog.exec_()
if accepted:
if not dialog.reflect_2port.name:
# dialog.reflect_2port.name = self.listWidget_reflect.get_unique_name("reflect")
dialog.reflect_2port.name = "reflect" # unique name will be assigned in load_network
self.listWidget_reflect.load_network(dialog.reflect_2port)
finally:
Expand Down
39 changes: 32 additions & 7 deletions qtapps/skrf_qtwidgets/networkListWidget.py
Expand Up @@ -38,6 +38,7 @@ class NetworkListWidget(QtWidgets.QListWidget):
def __init__(self, name_prefix='meas', parent=None):
super(NetworkListWidget, self).__init__(parent)
self.name_prefix = name_prefix
print("prefix", self.name_prefix)
self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)

Expand Down Expand Up @@ -357,6 +358,9 @@ def load_networks(self, ntwks):
def load_from_files(self, caption="load touchstone file"):
self.load_networks(widgets.load_network_files(caption))

def load_from_files_twoport(self, caption="load touchstone files"):
self.load_networks(widgets.load_network_files(caption, filter="touchstone file (*.s2p)"))

def save_selected_items(self):
items = self.selectedItems()
if len(items) == 1:
Expand Down Expand Up @@ -400,20 +404,35 @@ def measure_ntwk(self):
dialog = widgets.MeasurementDialog(nwa)
dialog.measurements_available.connect(self.load_networks)
dialog.exec_()
# meas = nwa.measure_twoport_ntwk()
# meas.name = self.name_prefix # unique name processed in load_network
# self.load_network(meas)

def measure_twoport(self, **kwargs):
with self.get_analyzer() as nwa:
params = nwa.defaults_twoport.copy()
params.update(kwargs) # override any of the defaults with arguments passed in here
meas = nwa.get_twoport(**params)
meas.name = self.name_prefix # unique name processed in load_network
self.load_network(meas)

def get_load_button(self, label="Load"):
button = QtWidgets.QPushButton(label)
button.released.connect(self.load_from_files)
return button

def get_load_button_twoport(self, label="Load"):
button = QtWidgets.QPushButton(label)
button.released.connect(self.load_from_files_twoport)
return button

def get_measure_button(self, label="Measure"):
button = QtWidgets.QPushButton(label)
button.released.connect(self.measure_ntwk)
return button

def get_measure_button_twoport(self, label="Measure"):
button = QtWidgets.QPushButton(label)
button.released.connect(self.measure_twoport)
return button

def get_save_selected_button(self, label="Save Selected"):
button = QtWidgets.QPushButton(label)
button.clicked.connect(self.save_selected_items)
Expand All @@ -424,12 +443,18 @@ def get_save_all_button(self, label="Save All"):
button.clicked.connect(self.save_all_measurements)
return button

def get_input_buttons(self, labels=("Load", "Measure")):
def get_input_buttons(self, labels=("Load", "Measure"), button_types="general"):
widget = QtWidgets.QWidget()
horizontal_layout = QtWidgets.QHBoxLayout(widget)
horizontal_layout.setContentsMargins(0, 2, 0, 2)
load_button = self.get_load_button(labels[0])
measurement_button = self.get_measure_button(labels[1])
if button_types == "twoport":
load_button = self.get_load_button_twoport(labels[0])
measurement_button = self.get_measure_button_twoport(labels[1])
elif button_types == "general":
load_button = self.get_load_button(labels[0])
measurement_button = self.get_measure_button(labels[1])
else:
raise TypeError("unrecognized request type for input buttons")
horizontal_layout.addWidget(load_button)
horizontal_layout.addWidget(measurement_button)
return widget
Expand All @@ -446,7 +471,7 @@ def get_save_buttons(self, labels=("Save Selected", "Save All")):


class ParameterizedNetworkListWidget(NetworkListWidget):
def __init__(self, name_prefix=None, item_parameters=(), parent=None):
def __init__(self, name_prefix="meas", item_parameters=(), parent=None):
"""
initialize a parameterized version of the NetworkListWidget
Expand Down
63 changes: 51 additions & 12 deletions qtapps/skrf_qtwidgets/widgets.py
Expand Up @@ -224,7 +224,7 @@ def __init__(self, analyzer=None, parent=None):
self.ok.setEnabled(False)

def measure_switch(self):
self.forward, self.reverse = self.analyzer.get_switch_terms()
self.forward, self.reverse = self.analyzer.get_switch_terms(**self.analyzer.defaults_twoport)
self.evaluate()

def load_forward_switch(self):
Expand Down Expand Up @@ -392,8 +392,8 @@ def __init__(self, parent=None):
self.verticalLayout = QtWidgets.QVBoxLayout(self) # primary widget layout
self.verticalLayout.setContentsMargins(0, 0, 0, 0) # normally this will be embedded in another application

self.checkBox_TriggerNew = QtWidgets.QCheckBox("Trigger New", self)
self.checkBox_TriggerNew.setLayoutDirection(QtCore.Qt.RightToLeft)
self.checkBox_SweepNew = QtWidgets.QCheckBox("Sweep New", self)
self.checkBox_SweepNew.setLayoutDirection(QtCore.Qt.RightToLeft)
self.label_ports = QtWidgets.QLabel("ports 1,2:")
self.spinBox_port1 = QtWidgets.QSpinBox(self)
self.spinBox_port2 = QtWidgets.QSpinBox(self)
Expand Down Expand Up @@ -429,7 +429,7 @@ def __init__(self, parent=None):
self.row2.addWidget(self.label_channel)
self.row2.addWidget(self.spinBox_channel)
self.row2.addWidget(qt.QVLine())
self.row2.addWidget(self.checkBox_TriggerNew)
self.row2.addWidget(self.checkBox_SweepNew)
self.row2.addWidget(qt.QVLine())
self.row2.addWidget(self.label_ports)
self.row2.addWidget(self.spinBox_port1)
Expand All @@ -441,30 +441,69 @@ def __init__(self, parent=None):
self.verticalLayout.addLayout(self.row1)
self.verticalLayout.addLayout(self.row2)

self.comboBox_analyzer.currentIndexChanged.connect(self.set_analyzer_default_address)
self.comboBox_analyzer.currentIndexChanged.connect(self.update_selected_analyzer)
for key, val in analyzers.items():
self.comboBox_analyzer.addItem(key)
# --- End Setup UI Elements --- #

self.btn_controlVna.clicked.connect(self.control_vna)
self.btn_controlVna.setEnabled(False)

def setEnabled(self, enabled):
super(VnaSelector, self).setEnabled(enabled)
self.enableStateToggled.emit(enabled)

def set_analyzer_default_address(self):
self.lineEdit_visaString.setText(analyzers[self.comboBox_analyzer.currentText()].DEFAULT_VISA_ADDRESS)
def update_selected_analyzer(self):
cls = analyzers[self.comboBox_analyzer.currentText()]
self.lineEdit_visaString.setText(cls.DEFAULT_VISA_ADDRESS)
self.spinBox_port2.setMaximum(cls.NPORTS)
self.spinBox_channel.setMaximum(cls.NCHANNELS)

def get_analyzer(self):
return analyzers[self.comboBox_analyzer.currentText()](self.lineEdit_visaString.text())
nwa = analyzers[self.comboBox_analyzer.currentText()](self.lineEdit_visaString.text())
nwa.set_defaults(port1=self.port1, port2=self.port2, sweep=self.sweep_new, channel=self.channel)
return nwa

@property
def port1(self):
return self.spinBox_port1.value()

@port1.setter
def port1(self, val):
self.spinBox_port1.setValue(val)

@property
def port2(self):
return self.spinBox_port2.value()

@port2.setter
def port2(self, val):
self.spinBox_port2.setValue(val)

@property
def sweep_new(self):
return self.checkBox_SweepNew.isChecked()

@sweep_new.setter
def sweep_new(self, val):
self.checkBox_SweepNew.setChecked(val)

@property
def channel(self):
return self.spinBox_channel.value()

@channel.setter
def channel(self, val):
self.spinBox_channel.setValue(val)

def control_vna(self):
qt.warnMissingFeature()
with self.get_analyzer() as vna:
VnaControllerDialog(vna).exec_()


class ReflectDialog(QtWidgets.QDialog):
def __init__(self, analyzer=None, parent=None):
def __init__(self, analyzer=None, parent=None, **kwargs):
super(ReflectDialog, self).__init__(parent)

self.setWindowTitle("Measure Reflect Standards")
Expand Down Expand Up @@ -528,15 +567,15 @@ def __init__(self, analyzer=None, parent=None):
self.btn_loadPort2.clicked.connect(self.load_s22)

def measure_s11(self):
self.s11 = self.analyzer.get_oneport(port=1)
self.s11 = self.analyzer.get_oneport(port=self.port1)
self.evaluate()

def measure_s22(self):
self.s22 = self.analyzer.get_oneport(port=2)
self.s22 = self.analyzer.get_oneport(port=self.port2)
self.evaluate()

def measure_both(self):
self.reflect_2port = self.analyzer.get_twoport()
self.reflect_2port = self.analyzer.get_twoport(**self.analyzer.defaults_twoport)
self.evaluate()

def load_s11(self):
Expand Down
1 change: 1 addition & 0 deletions readthedocs-environment.yml
Expand Up @@ -19,4 +19,5 @@ dependencies:
- xlrd
- pip:
- python-ivi
- PyVisa
- git+https://github.com/arsenovic/nbsphinx.git@master

0 comments on commit 1e5b888

Please sign in to comment.