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)  
示例#2
0
    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)
示例#3
0
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()