Ejemplo n.º 1
0
    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('')
Ejemplo n.º 2
0
    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()