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)
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)
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
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
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()