def postUiInit(self): ## Automatically locate all read/writable widgets and group them together for easy ## save/restore operations self.stateGroup = WidgetGroup(self) self.stateGroup.addWidget(self.plot, name='plot') self.displayCheckChanged() self.ui.displayCheck.stateChanged.connect(self.displayCheckChanged) if 'units' in self.config: self.setUnits(self.config['units']) else: self.setUnits('')
def __init__(self, dm, config): clampName = config['clampDev'] QtGui.QMainWindow.__init__(self) self.setWindowTitle(clampName) self.startTime = None self.redrawCommand = 1 self.analysisItems = { 'inputResistance': u'Ω', 'accessResistance': u'Ω', 'capacitance': 'F', 'restingPotential': 'V', 'restingCurrent': 'A', 'fitError': '' } self.params = { 'mode': 'vc', 'rate': config.get('sampleRate', 100000), 'downsample': config.get('downsample', 3), 'cycleTime': .2, 'recordTime': 0.1, 'delayTime': 0.03, 'pulseTime': 0.05, 'icPulse': -30e-12, 'vcPulse': -10e-3, 'icHolding': 0, 'vcHolding': -65e-3, 'icHoldingEnabled': False, 'icPulseEnabled': True, 'vcHoldingEnabled': False, 'vcPulseEnabled': True, 'drawFit': True, 'average': 1, } self.paramLock = Mutex(QtCore.QMutex.Recursive) self.manager = dm self.clampName = clampName self.thread = PatchThread(self) self.cw = QtGui.QWidget() self.setCentralWidget(self.cw) self.ui = Ui_Form() self.ui.setupUi(self.cw) #self.logBtn = LogButton("Log") #self.statusBar().addPermanentWidget(self.logBtn) self.setStatusBar(StatusBar()) self.stateFile = os.path.join('modules', self.clampName + '_ui.cfg') uiState = Manager.getManager().readConfigFile(self.stateFile) if 'geometry' in uiState: geom = QtCore.QRect(*uiState['geometry']) self.setGeometry(geom) if 'window' in uiState: ws = QtCore.QByteArray.fromPercentEncoding(uiState['window']) self.restoreState(ws) self.ui.splitter_2.setSizes([self.width() / 4, self.width() * 3. / 4.]) self.ui.splitter.setStretchFactor(0, 30) self.ui.splitter.setStretchFactor(1, 10) self.plots = {} for k in self.analysisItems: p = PlotWidget() p.setLabel('left', text=k, units=self.analysisItems[k]) self.ui.plotLayout.addWidget(p) self.plots[k] = p irp = self.plots['inputResistance'] irp.setLogMode(y=True, x=False) irp.setYRange(6, 11) self.ui.icPulseSpin.setOpts(dec=True, step=1, minStep=1e-12, bounds=[None, None], siPrefix=True, suffix='A') self.ui.vcPulseSpin.setOpts(dec=True, step=1, minStep=1e-3, bounds=[None, None], siPrefix=True, suffix='V') self.ui.icHoldSpin.setOpts(dec=True, step=1, minStep=1e-12, bounds=[None, None], siPrefix=True, suffix='A') self.ui.vcHoldSpin.setOpts(dec=True, step=1, minStep=1e-3, bounds=[None, None], siPrefix=True, suffix='V') self.ui.cycleTimeSpin.setOpts(dec=True, step=1, minStep=1e-6, bounds=[0, None], siPrefix=True, suffix='s') self.ui.pulseTimeSpin.setOpts(dec=True, step=1, minStep=1e-6, bounds=[0, 1.], siPrefix=True, suffix='s') self.ui.delayTimeSpin.setOpts(dec=True, step=1, minStep=1e-6, bounds=[0, 1.], siPrefix=True, suffix='s') self.stateGroup = WidgetGroup([ (self.ui.icPulseSpin, 'icPulse'), (self.ui.vcPulseSpin, 'vcPulse'), (self.ui.icHoldSpin, 'icHolding'), (self.ui.vcHoldSpin, 'vcHolding'), (self.ui.icPulseCheck, 'icPulseEnabled'), (self.ui.vcPulseCheck, 'vcPulseEnabled'), (self.ui.icHoldCheck, 'icHoldingEnabled'), (self.ui.vcHoldCheck, 'vcHoldingEnabled'), (self.ui.cycleTimeSpin, 'cycleTime'), (self.ui.pulseTimeSpin, 'pulseTime'), (self.ui.delayTimeSpin, 'delayTime'), (self.ui.drawFitCheck, 'drawFit'), (self.ui.averageSpin, 'average'), ]) self.stateGroup.setState(self.params) self.ui.patchPlot.setLabel('left', text='Primary', units='A') self.patchCurve = self.ui.patchPlot.plot( pen=QtGui.QPen(QtGui.QColor(200, 200, 200))) self.patchFitCurve = self.ui.patchPlot.plot( pen=QtGui.QPen(QtGui.QColor(0, 100, 200))) self.ui.commandPlot.setLabel('left', text='Command', units='V') self.commandCurve = self.ui.commandPlot.plot( pen=QtGui.QPen(QtGui.QColor(200, 200, 200))) self.ui.startBtn.clicked.connect(self.startClicked) self.ui.recordBtn.clicked.connect(self.recordClicked) self.ui.bathModeBtn.clicked.connect(self.bathMode) self.ui.patchModeBtn.clicked.connect(self.patchMode) self.ui.cellModeBtn.clicked.connect(self.cellMode) self.ui.monitorModeBtn.clicked.connect(self.monitorMode) self.ui.resetBtn.clicked.connect(self.resetClicked) self.thread.finished.connect(self.threadStopped) self.thread.sigNewFrame.connect(self.handleNewFrame) self.ui.vcModeRadio.toggled.connect(self.updateParams) self.stateGroup.sigChanged.connect(self.updateParams) ## Configure analysis plots, curves, and data arrays self.analysisCurves = {} self.analysisData = {'time': []} for n in self.analysisItems: w = getattr(self.ui, n + 'Check') w.clicked.connect(self.showPlots) p = self.plots[n] self.analysisCurves[n] = p.plot( pen=QtGui.QPen(QtGui.QColor(200, 200, 200))) for suf in ['', 'Std']: self.analysisData[n + suf] = [] self.showPlots() self.updateParams() self.show() self.bathMode()