def makeGUI(self): self.Nelectrodes = Nelectrodes self.electrodes = [QtGui.QLCDNumber() for i in range(self.Nelectrodes)] for i in range(self.Nelectrodes): self.electrodes[i].setNumDigits(5) layout = QtGui.QGridLayout() """ adding ion slider """ self.slider = QtGui.QSlider(QtCore.Qt.Vertical) self.slider.setTickPosition(2) self.slider.setRange(0, 48) self.slider.setTickInterval(2) self.posDisplay = QCustomSpinBoxION((-2000, 2000)) smaBox = QtGui.QGroupBox('SMA Out') smaLayout = QtGui.QGridLayout() smaBox.setLayout(smaLayout) elecBox = QtGui.QGroupBox('Electrode Voltages') elecLayout = QtGui.QGridLayout() elecBox.setLayout(elecLayout) layout.addWidget(smaBox, 0, 0) layout.addWidget(elecBox, 0, 1) for j in range(5): smaLayout.addWidget(QtGui.QLabel(str(j+1)),j,0) smaLayout.addWidget(self.electrodes[j],j,1) for j in range(5, 16): elecLayout.addWidget(QtGui.QLabel(str(j-4)),16 - j,0) elecLayout.addWidget(self.electrodes[j],16 - j,1) elecLayout.setColumnStretch(1, 1) for j in range(16, 27): elecLayout.addWidget(QtGui.QLabel(str(j-4)),27 - j,4) elecLayout.addWidget(self.electrodes[j],27 - j,5) elecLayout.setColumnStretch(5, 1) elecLayout.addWidget(QtGui.QLabel('CNT'), 12, 2) elecLayout.addWidget(self.electrodes[Nelectrodes-1], 12, 3) elecLayout.addWidget(self.posDisplay, 0, 3) elecLayout.addWidget(self.slider, 4, 3, 7, 1) elecLayout.setColumnStretch(3, 1) self.slider.sliderReleased.connect(self.sliderChanged) self.posDisplay.onNewValues.connect(self.posChanged) self.setLayout(layout)
def makeGUI(self): self.Nelectrodes = Nelectrodes self.electrodes = [QtGui.QLCDNumber() for i in range(self.Nelectrodes)] for i in range(self.Nelectrodes): self.electrodes[i].setNumDigits(5) layout = QtGui.QGridLayout() """ adding ion slider """ self.slider = QtGui.QSlider(QtCore.Qt.Vertical) self.slider.setTickPosition(2) self.slider.setRange(0, 48) self.slider.setTickInterval(2) self.posDisplay = QCustomSpinBoxION((-2000, 2000)) elecBox = QtGui.QGroupBox("Electrode Voltages") elecLayout = QtGui.QGridLayout() elecBox.setLayout(elecLayout) layout.addWidget(elecBox, 0, 0) for j in range(1, 12): elecLayout.addWidget(QtGui.QLabel(str(j)), 12 - j, 0) elecLayout.addWidget(self.electrodes[j - 1], 12 - j, 1) elecLayout.setColumnStretch(1, 1) for j in range(12, 23): elecLayout.addWidget(QtGui.QLabel(str(j)), 23 - j, 4) elecLayout.addWidget(self.electrodes[j - 1], 23 - j, 5) elecLayout.setColumnStretch(5, 1) elecLayout.addWidget(QtGui.QLabel("CNT"), 12, 2) elecLayout.addWidget(self.electrodes[Centernumber], 12, 3) elecLayout.addWidget(self.posDisplay, 0, 3) elecLayout.addWidget(self.slider, 4, 3, 7, 1) elecLayout.setColumnStretch(3, 1) self.slider.sliderReleased.connect(self.sliderChanged) self.posDisplay.onNewValues.connect(self.posChanged) self.setLayout(layout)
class CHANNEL_MONITOR(QtGui.QWidget): def __init__(self, reactor, parent=None): super(CHANNEL_MONITOR, self).__init__(parent) self.reactor = reactor self.ionInfo = {} self.makeGUI() self.connect() def makeGUI(self): self.Nelectrodes = Nelectrodes self.electrodes = [QtGui.QLCDNumber() for i in range(self.Nelectrodes)] for i in range(self.Nelectrodes): self.electrodes[i].setNumDigits(5) layout = QtGui.QGridLayout() """ adding ion slider """ self.slider = QtGui.QSlider(QtCore.Qt.Vertical) self.slider.setTickPosition(2) self.slider.setRange(0, 48) self.slider.setTickInterval(2) self.posDisplay = QCustomSpinBoxION((-2000, 2000)) elecBox = QtGui.QGroupBox("Electrode Voltages") elecLayout = QtGui.QGridLayout() elecBox.setLayout(elecLayout) layout.addWidget(elecBox, 0, 0) for j in range(1, 12): elecLayout.addWidget(QtGui.QLabel(str(j)), 12 - j, 0) elecLayout.addWidget(self.electrodes[j - 1], 12 - j, 1) elecLayout.setColumnStretch(1, 1) for j in range(12, 23): elecLayout.addWidget(QtGui.QLabel(str(j)), 23 - j, 4) elecLayout.addWidget(self.electrodes[j - 1], 23 - j, 5) elecLayout.setColumnStretch(5, 1) elecLayout.addWidget(QtGui.QLabel("CNT"), 12, 2) elecLayout.addWidget(self.electrodes[Centernumber], 12, 3) elecLayout.addWidget(self.posDisplay, 0, 3) elecLayout.addWidget(self.slider, 4, 3, 7, 1) elecLayout.setColumnStretch(3, 1) self.slider.sliderReleased.connect(self.sliderChanged) self.posDisplay.onNewValues.connect(self.posChanged) self.setLayout(layout) @inlineCallbacks def connect(self): from labrad.wrappers import connectAsync from labrad.types import Error self.cxn = yield connectAsync() self.dacserver = yield self.cxn.pulser yield self.setupListeners() yield self.followSignal(0, 0) @inlineCallbacks def setupListeners(self): yield self.dacserver.signal__ports_updated(SIGNALID2) yield self.dacserver.addListener(listener=self.followSignal, source=None, ID=SIGNALID2) @inlineCallbacks def followSignal(self, x, s): av = yield self.dacserver.get_analog_voltages() for (e, v) in zip(self.electrodes, av): e.display(float(v)) for (i, v) in zip(range(self.Nelectrodes), av): if math.fabs(v) > 40: self.electrodes[i].setStyleSheet("QWidget {background-color: orange }") self.electrodes[i].setAutoFillBackground(True) if math.fabs(v) < 40: self.electrodes[i].setStyleSheet("QWidget {background-color: }") self.electrodes[i].setAutoFillBackground(False) self.slider.blockSignals(True) self.posDisplay.blockSignals(True) self.iI = yield self.dacserver.return_ion_info() for (label, value) in self.iI: self.ionInfo[label] = value # print self.ionInfo.items() self.slider.setRange(0, 2 * len(self.ionInfo["ionRange"])) self.slider.setTickInterval(2) # self.slider.setValue(ionInfo[0] / 5.) self.posDisplay.setValueNoSignal(self.ionInfo["ionRange"][int(self.ionInfo["positionIndex"] / 10)]) self.slider.blockSignals(False) self.posDisplay.blockSignals(False) @inlineCallbacks def shuttle(self): self.posDisplay.spinLevel.setStyleSheet("QWidget {background-color: yellow}") self.posDisplay.spinLevel.setAutoFillBackground(True) yield self.dacserver.shuttle_ion(self.slider.value() * 5) yield self.followSignal(0, 0) self.posDisplay.spinLevel.setStyleSheet("QWidget {background-color: }") self.posDisplay.spinLevel.setAutoFillBackground(False) def sliderChanged(self): self.posDisplay.blockSignals(True) self.posDisplay.spinLevel.setValue(self.ionInfo["ionRange"][self.slider.value() / 2]) self.posDisplay.blockSignals(False) self.shuttle() def posChanged(self): val = min((abs(self.posDisplay.spinLevel.value() - i), i) for i in self.ionInfo["ionRange"])[1] for i, v in enumerate(self.ionInfo["ionRange"]): if v == val: ind = i self.slider.blockSignals(True) self.posDisplay.blockSignals(True) self.posDisplay.spinLevel.setValue(val) self.slider.setValue(ind * 2) self.slider.blockSignals(False) self.posDisplay.blockSignals(False) self.shuttle() def nothing(self): return def closeEvent(self, x): self.reactor.stop()