Пример #1
0
    def initialize_GUI(self):
        layout = QtGui.QGridLayout()
        self.electrodes = {}
        qBox = QtGui.QGroupBox('DAC Channels')

        subLayout = QtGui.QGridLayout()
        qBox.setLayout(subLayout)
        layout.addWidget(qBox, 0, 0)

        self.electrodeind = ElectrodeIndicator([-12, 12])
        multipole_names = ['Ey', 'Ez', 'Ex', 'M1', 'M2', 'M3', 'M4', 'M5']
        self.multipoles = []
        j = 0
        for i, multipole in enumerate(multipole_names):
            k = i
            if i >= 4:
                j = 1
                i = i - 4
            spinbox = QCustomSpinBox(multipole, (-100, 100))
            spinbox.setStepSize(0.001)
            spinbox.spinLevel.setDecimals(3)
            spinbox.spinLevel.setValue(self.init_multipoles[k])
            spinbox.spinLevel.valueChanged.connect(self.change_multipole)
            layout.addWidget(spinbox, 3 + j, i + 1, 1, 1)
            self.multipoles.append(spinbox)

        layout.addWidget(self.electrodeind, 0, 1, 1, 3)

        for key, channel in self.elec_dict.iteritems():
            electrode = Electrode(channel.dacChannelNumber,
                                  channel.octantNumber,
                                  channel.allowedVoltageRange[0],
                                  channel.allowedVoltageRange[1])
            self.electrodes[electrode.octant] = electrode
            subLayout.addWidget(electrode.spinBox)
            electrode.spinBox.spinLevel.valueChanged.connect(
                lambda value=electrode.spinBox.spinLevel.value(
                ), electrode=electrode: self.update_dac(value, electrode))

        self.change_multipole('dummy value')
        self.setLayout(layout)
Пример #2
0
    def initialize_GUI(self):
        layout = QtGui.QGridLayout()
        self.electrodes = {}
        qBox = QtGui.QGroupBox('DAC Channels')

        subLayout = QtGui.QGridLayout()
        qBox.setLayout(subLayout)
        layout.addWidget(qBox, 0, 0)

        self.electrodeind = ElectrodeIndicator([-12, 12])
        multipole_names = ['Ey', 'Ez', 'Ex', 'M1', 'M2', 'M3', 'M4', 'M5']
        self.multipoles = []
        j = 0
        for i, multipole in enumerate(multipole_names):
            k = i
            if i >= 4:
                j = 1
                i = i - 4
            spinbox = QCustomSpinBox(multipole, (-100, 100))
            spinbox.setStepSize(0.001)
            spinbox.spinLevel.setDecimals(3)
            spinbox.spinLevel.setValue(self.init_multipoles[k])
            spinbox.spinLevel.valueChanged.connect(self.change_multipole)
            layout.addWidget(spinbox, 3 + j, i + 1, 1, 1)
            self.multipoles.append(spinbox)

        layout.addWidget(self.electrodeind, 0, 1, 1, 3)

        for key, channel in self.elec_dict.iteritems():
            electrode = Electrode(channel.dacChannelNumber, channel.octantNumber,
                                  channel.allowedVoltageRange[0], channel.allowedVoltageRange[1])
            self.electrodes[electrode.octant] = electrode
            subLayout.addWidget(electrode.spinBox)
            electrode.spinBox.spinLevel.valueChanged.connect(lambda value=electrode.spinBox.spinLevel.value(),
                                                             electrode=electrode: self.update_dac(value, electrode))

        self.change_multipole('dummy value')
        self.setLayout(layout)
Пример #3
0
class dacclient(QtGui.QWidget):

    def __init__(self, reactor, parent=None):

        super(dacclient, self).__init__()
        self.setSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
        self.reactor = reactor
        self.connect()

    @inlineCallbacks
    def connect(self):

        from labrad.wrappers import connectAsync
        from labrad.units import WithUnit as U
        self.elec_dict = hc.elec_dict
        self.cxn = yield connectAsync(name="dac client")
        self.server = self.cxn.multipole_server
        self.dacserver = self.cxn.dac_ad660_server
        self.init_multipoles = yield self.server.get_multipoles()
        self.initialize_GUI()

    def initialize_GUI(self):
        layout = QtGui.QGridLayout()
        self.electrodes = {}
        qBox = QtGui.QGroupBox('DAC Channels')

        subLayout = QtGui.QGridLayout()
        qBox.setLayout(subLayout)
        layout.addWidget(qBox, 0, 0)

        self.electrodeind = ElectrodeIndicator([-12, 12])
        multipole_names = ['Ey', 'Ez', 'Ex', 'M1', 'M2', 'M3', 'M4', 'M5']
        self.multipoles = []
        j = 0
        for i, multipole in enumerate(multipole_names):
            k = i
            if i >= 4:
                j = 1
                i = i - 4
            spinbox = QCustomSpinBox(multipole, (-100, 100))
            spinbox.setStepSize(0.001)
            spinbox.spinLevel.setDecimals(3)
            spinbox.spinLevel.setValue(self.init_multipoles[k])
            spinbox.spinLevel.valueChanged.connect(self.change_multipole)
            layout.addWidget(spinbox, 3 + j, i + 1, 1, 1)
            self.multipoles.append(spinbox)

        layout.addWidget(self.electrodeind, 0, 1, 1, 3)

        for key, channel in self.elec_dict.iteritems():
            electrode = Electrode(channel.dacChannelNumber, channel.octantNumber,
                                  channel.allowedVoltageRange[0], channel.allowedVoltageRange[1])
            self.electrodes[electrode.octant] = electrode
            subLayout.addWidget(electrode.spinBox)
            electrode.spinBox.spinLevel.valueChanged.connect(lambda value=electrode.spinBox.spinLevel.value(),
                                                             electrode=electrode: self.update_dac(value, electrode))

        self.change_multipole('dummy value')
        self.setLayout(layout)

    @inlineCallbacks
    def change_multipole(self, value):
        self.start = time.time()
        Mvector = []
        for multipole in self.multipoles:
            Mvector.append(multipole.spinLevel.value())
        Evector = yield self.server.set_multipoles(Mvector)
        if len(Evector) == 8:
            for octant, voltage in enumerate(Evector):
                self.electrodes[octant + 1].spinBox.spinLevel.setValue(voltage)
                self.electrodeind.update_octant(octant + 1, voltage)

    @inlineCallbacks
    def update_dac(self, voltage, electrode):

        if len(str(electrode.dac)) == 1:
            dac = '0' + str(electrode.dac)
        else:
            dac = str(electrode.dac)
        yield self.dacserver.set_individual_analog_voltages([(dac, voltage)])
        self.electrodeind.update_octant(electrode.octant, voltage)

    def closeEvent(self, event):
        pass
Пример #4
0
class dacclient(QtGui.QWidget):
    def __init__(self, reactor, parent=None):

        super(dacclient, self).__init__()
        self.setSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
        self.reactor = reactor
        self.connect()

    @inlineCallbacks
    def connect(self):

        from labrad.wrappers import connectAsync
        from labrad.units import WithUnit as U
        self.elec_dict = hc.elec_dict
        self.cxn = yield connectAsync(name="dac client")
        self.server = self.cxn.multipole_server
        self.dacserver = self.cxn.dac_ad660_server
        self.init_multipoles = yield self.server.get_multipoles()
        self.initialize_GUI()

    def initialize_GUI(self):
        layout = QtGui.QGridLayout()
        self.electrodes = {}
        qBox = QtGui.QGroupBox('DAC Channels')

        subLayout = QtGui.QGridLayout()
        qBox.setLayout(subLayout)
        layout.addWidget(qBox, 0, 0)

        self.electrodeind = ElectrodeIndicator([-12, 12])
        multipole_names = ['Ey', 'Ez', 'Ex', 'M1', 'M2', 'M3', 'M4', 'M5']
        self.multipoles = []
        j = 0
        for i, multipole in enumerate(multipole_names):
            k = i
            if i >= 4:
                j = 1
                i = i - 4
            spinbox = QCustomSpinBox(multipole, (-100, 100))
            spinbox.setStepSize(0.001)
            spinbox.spinLevel.setDecimals(3)
            spinbox.spinLevel.setValue(self.init_multipoles[k])
            spinbox.spinLevel.valueChanged.connect(self.change_multipole)
            layout.addWidget(spinbox, 3 + j, i + 1, 1, 1)
            self.multipoles.append(spinbox)

        layout.addWidget(self.electrodeind, 0, 1, 1, 3)

        for key, channel in self.elec_dict.iteritems():
            electrode = Electrode(channel.dacChannelNumber,
                                  channel.octantNumber,
                                  channel.allowedVoltageRange[0],
                                  channel.allowedVoltageRange[1])
            self.electrodes[electrode.octant] = electrode
            subLayout.addWidget(electrode.spinBox)
            electrode.spinBox.spinLevel.valueChanged.connect(
                lambda value=electrode.spinBox.spinLevel.value(
                ), electrode=electrode: self.update_dac(value, electrode))

        self.change_multipole('dummy value')
        self.setLayout(layout)

    @inlineCallbacks
    def change_multipole(self, value):
        self.start = time.time()
        Mvector = []
        for multipole in self.multipoles:
            Mvector.append(multipole.spinLevel.value())
        Evector = yield self.server.set_multipoles(Mvector)
        if len(Evector) == 8:
            for octant, voltage in enumerate(Evector):
                self.electrodes[octant + 1].spinBox.spinLevel.setValue(voltage)
                self.electrodeind.update_octant(octant + 1, voltage)

    @inlineCallbacks
    def update_dac(self, voltage, electrode):

        if len(str(electrode.dac)) == 1:
            dac = '0' + str(electrode.dac)
        else:
            dac = str(electrode.dac)
        yield self.dacserver.set_individual_analog_voltages([(dac, voltage)])
        self.electrodeind.update_octant(electrode.octant, voltage)

    def closeEvent(self, event):
        pass
Пример #5
0
class dacclient(QtGui.QWidget):

    def __init__(self, reactor, parent=None):

        super(dacclient, self).__init__()
        self.setSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
        self.reactor = reactor
        self.connect()

    @inlineCallbacks
    def connect(self):

        from labrad.wrappers import connectAsync
        from labrad.units import WithUnit as U
        self.config = dac_8718_config()
        self.minval = self.config.minval
        self.maxval = self.config.maxval
        self.U = U
        self.cxn = yield connectAsync(name="dac8718 client")
        self.server = self.cxn.multipole_server
        self.dacserver = self.cxn.dac8718
        self.init_multipoles = yield self.server.get_multipoles()
        self.initialize_GUI()

    def initialize_GUI(self):
        layout = QtGui.QGridLayout()
        self.electrodes = {}
        qBox = QtGui.QGroupBox('DAC Channels')

        subLayout = QtGui.QGridLayout()
        qBox.setLayout(subLayout)
        layout.addWidget(qBox, 0, 0)

        self.electrodeind = ElectrodeIndicator([-12, 12])
        multipole_names = ['Ex', 'Ey', 'Ez', 'M1', 'M2', 'M3', 'M4', 'M5']
        self.multipoles = []
        j = 0
        for i, multipole in enumerate(multipole_names):
            k = i
            if i >= 4:
                j = 1
                i = i - 4
            spinbox = QCustomSpinBox(multipole, (-100, 100))
            spinbox.setStepSize(0.001)
            spinbox.spinLevel.setDecimals(3)
            spinbox.spinLevel.setValue(self.init_multipoles[k])
            spinbox.spinLevel.valueChanged.connect(self.change_multipole)
            layout.addWidget(spinbox, 3 + j, i + 1, 1, 1)
            self.multipoles.append(spinbox)

        layout.addWidget(self.electrodeind, 0, 1, 1, 3)

        for channel in self.config.channels:
            electrode = Electrode(channel.dac, channel.octant,
                                  self.minval, self.maxval)
            self.electrodes[electrode.octant] = electrode
            subLayout.addWidget(electrode.spinBox)
            electrode.spinBox.spinLevel.valueChanged.connect(lambda value=electrode.spinBox.spinLevel.value(),
                                                             electrode=electrode: self.update_dac(value, electrode))

        self.change_multipole('dummy value')
        self.setLayout(layout)

    @inlineCallbacks
    def change_multipole(self, value):
        Mvector = []
        for multipole in self.multipoles:
            Mvector.append(multipole.spinLevel.value())
        Evector = yield self.server.set_multipoles(Mvector)
        if len(Evector) == 8:
            for octant, voltage in enumerate(Evector):
                self.electrodes[octant + 1].spinBox.spinLevel.setValue(voltage)
                self.electrodeind.update_octant(octant + 1, voltage)

    def volt_to_bit(self, volt):
        m = (2**16 - 1)/(self.maxval - self.minval)
        b = -1 * self.minval * m
        bit = int(m*volt + b)
        return bit

    @inlineCallbacks
    def update_dac(self, voltage, electrode):

        bit = self.volt_to_bit(voltage)
        yield self.dacserver.dacoutput(electrode.dac, bit)
        self.electrodeind.update_octant(electrode.octant, voltage)

    def closeEvent(self, event):
        self.server.save_multipoles_to_registry()