Ejemplo n.º 1
0
    def powerCmdChanged(self):
        self.clearRawPlots()
        self.cache = {}
        rate = self.powerWidget.rate

        #### calculate, cache and display sequence waves for shutter/qSwitch/pCell
        params = {}
        ps = self.powerWidget.listSequence()
        for k in ps:
            params[k] = range(len(ps[k]))
        ## get power waveforms
        waves = []
        runSequence(
            lambda p: waves.append(self.powerWidget.getSingleWave(p)), params,
            list(params.keys(
            )))  ## appends waveforms for the entire parameter space to waves

        for w in waves:
            if w is not None:
                ## need to translate w into raw traces, plot them, and cache them (using id(w) as a key)
                rawWaves = self.getChannelCmds(w, rate)
                #rawWaves = self.dev.getChannelCmds({'powerWaveform':w}, rate) ## calculate raw waveforms for shutter/qSwitch/pCell from powerWaveform
                #self.cache[id(w)] = rawWaves ## cache the calculated waveforms
                self.plotRawCurves(
                    rawWaves, color=Qt.QColor(100, 100, 100)
                )  ## plot the raw waveform in it's appropriate plot in grey

        ## calculate (or pull from cache) and display single-mode wave in red
        single = self.powerWidget.getSingleWave()
        if single is not None:
            #rawSingle = self.cache.get(id(single), self.dev.getChannelCmds({'powerWaveform':single}, rate))
            rawSingle = self.getChannelCmds(single, rate)
            self.plotRawCurves(rawSingle, color=Qt.QColor(200, 100, 100))
Ejemplo n.º 2
0
    def updateWaves(self):
        if self._block_update:
            return

        self.clearCmdPlots()

        ## compute sequence waves
        params = {}
        ps = self.ui.waveGeneratorWidget.listSequences()
        for k in ps:
            params[k] = range(len(ps[k]))
        waves = []
        runSequence(lambda p: waves.append(self.getSingleWave(p)), params,
                    list(params.keys()))

        # Plot all waves but disable auto-range first to improve performance.
        autoRange = self.ui.bottomPlotWidget.getViewBox().autoRangeEnabled()
        self.ui.bottomPlotWidget.enableAutoRange(x=False, y=False)
        try:
            for w in waves:
                if w is not None:
                    self.plotCmdWave(w,
                                     color=Qt.QColor(100, 100, 100),
                                     replot=False)

            ## display single-mode wave in red
            single = self.getSingleWave()
            if single is not None:
                p = self.plotCmdWave(single, color=Qt.QColor(200, 100, 100))
                p.setZValue(1000)

        finally:
            # re-enable auto range if needed
            self.ui.bottomPlotWidget.enableAutoRange(x=autoRange[0],
                                                     y=autoRange[1])
Ejemplo n.º 3
0
    def updateDeviceList(self, task=None):
        """Update the device list to reflect only the devices that exist in the system or are referenced by the current task. Update the color and checkstate of each item as well."""
        devList = self.manager.listDevices()

        if task is not None:
            protList = list(task.devices.keys())
        elif self.currentTask is not None:
            protList = list(self.currentTask.devices.keys())
        else:
            protList = []

        ## Remove all devices that do not exist and are not referenced by the task
        rem = []
        for d in self.devListItems:
            if d not in devList and d not in protList:
                #print "    ", d
                self.ui.deviceList.takeItem(
                    self.ui.deviceList.row(self.devListItems[d]))
                rem.append(d)
        for d in rem:
            del self.devListItems[d]

        ## Add all devices that exist in the current system
        for d in devList:
            if d not in self.devListItems:
                self.devListItems[d] = Qt.QListWidgetItem(
                    d, self.ui.deviceList)
                #self.devListItems[d].setData(32, Qt.QVariant(d))
                self.devListItems[d].setData(32, d)
            self.devListItems[d].setForeground(Qt.QBrush(Qt.QColor(0, 0, 0)))

        ## Add all devices that are referenced by the task but do not exist
        for d in protList:
            if d not in self.devListItems:
                self.devListItems[d] = Qt.QListWidgetItem(
                    d, self.ui.deviceList)
                self.devListItems[d].setForeground(
                    Qt.QBrush(Qt.QColor(150, 0, 0)))

        ## Make sure flags and checkState are correct for all items
        for d in self.devListItems:
            self.devListItems[d].setFlags(Qt.Qt.ItemIsSelectable
                                          | Qt.Qt.ItemIsEnabled
                                          | Qt.Qt.ItemIsUserCheckable)
            if d in protList:
                self.devListItems[d].setCheckState(Qt.Qt.Checked)
            else:
                self.devListItems[d].setCheckState(Qt.Qt.Unchecked)
Ejemplo n.º 4
0
    def __init__(self,
                 handle,
                 checkState=None,
                 allowMove=True,
                 allowRename=True):
        Qt.QTreeWidgetItem.__init__(self, [handle.shortName()])
        self.handle = handle
        self.childrenLoaded = False

        if self.handle.isDir():
            self.setExpanded(False)
            self.setChildIndicatorPolicy(Qt.QTreeWidgetItem.ShowIndicator)
            self.setFlags(Qt.Qt.ItemIsSelectable | Qt.Qt.ItemIsDropEnabled
                          | Qt.Qt.ItemIsEnabled)
            self.setForeground(0, Qt.QBrush(Qt.QColor(0, 0, 150)))
        else:
            self.setFlags(Qt.Qt.ItemIsSelectable | Qt.Qt.ItemIsEnabled)

        if allowMove:
            self.setFlag(Qt.Qt.ItemIsDragEnabled)
        if allowRename:
            self.setFlag(Qt.Qt.ItemIsEditable)

        if checkState is not None:
            self.setFlag(Qt.Qt.ItemIsUserCheckable)
            if checkState:
                self.setCheckState(0, Qt.Qt.Checked)
            else:
                self.setCheckState(0, Qt.Qt.Unchecked)
        self.expandState = False
        self.handle.sigChanged.connect(self.handleChanged)
        self.updateBoldState()
Ejemplo n.º 5
0
    def plotCmdWave(self, data, color=Qt.QColor(100, 100, 100), replot=True):
        if data is None:
            return
        plot = self.ui.bottomPlotWidget.plot(data, x=self.timeVals)
        plot.setPen(Qt.QPen(color))

        return plot
Ejemplo n.º 6
0
 def updateCurrentDirItem(self):
     """Color the currentDir item, expand, and scroll-to"""
     #print "UpdateCurrentDirItem"
     item = self.item(self.currentDir)
     item.setBackground(0, Qt.QBrush(Qt.QColor(250, 100, 100)))
     item.setExpanded(True)
     self.scrollToItem(item)
     self.selectionChanged()
Ejemplo n.º 7
0
    def handleResult(self, result, params):
        if self.stateGroup.state()['displayCheck']:
            if self.clearBeforeNextPlot:
                self.clearPlots()
                self.clearBeforeNextPlot = False

            plot = self.plot.plot(y=result.view(numpy.ndarray),
                                  x=result.xvals('Time'),
                                  pen=Qt.QPen(Qt.QColor(200, 200, 200)),
                                  params=params)
Ejemplo n.º 8
0
 def addSpot(self, pos, size):
     """Add a circle to the image"""
     s2 = size/2.0
     s = Qt.QGraphicsEllipseItem(0, 0, 1, 1)
     s.scale(size, size)
     s.setPos(pos[0]-s2, pos[1]-s2)
     s.setPen(Qt.QPen(Qt.QColor(100, 255, 100, 70)))
     self.ui.view.addItem(s)
     s.setZValue(100)
     self.spots.append(s)
Ejemplo n.º 9
0
 def taskStarted(self, params):
     ## Draw green trace for current command waveform
     if self.currentCmdPlot is not None:
         self.ui.bottomPlotWidget.removeItem(self.currentCmdPlot)
     params = dict([(p[1], params[p]) for p in params
                    if p[0] == self.dev.name()])
     cur = self.getSingleWave(params)
     if cur is not None:
         self.currentCmdPlot = self.plotCmdWave(cur,
                                                color=Qt.QColor(
                                                    100, 200, 100))
         self.currentCmdPlot.setZValue(1001)
Ejemplo n.º 10
0
    def taskStarted(self, params):
        ## Draw green trace for current command waveform
        if not self.stateGroup.state()['displayCheck']:
            return
        if self.currentPlot is not None:
            self.plot.removeItem(self.currentPlot)

        cur = self.getSingleWave(params)
        if cur is not None:
            self.currentPlot = self.plotCurve(cur,
                                              color=Qt.QColor(100, 200, 100))
            self.currentPlot.setZValue(100)
Ejemplo n.º 11
0
 def plotRawCurves(self, data, color=Qt.QColor(100, 100, 100)):
     if 'shutter' in data:
         self.shutterPlot.plot(y=data['shutter'],
                               x=self.powerWidget.timeVals,
                               pen=Qt.QPen(color))
     if 'qSwitch' in data:
         self.qSwitchPlot.plot(y=data['qSwitch'],
                               x=self.powerWidget.timeVals,
                               pen=Qt.QPen(color))
     if 'pCell' in data:
         self.pCellPlot.plot(y=data['pCell'],
                             x=self.powerWidget.timeVals,
                             pen=Qt.QPen(color))
Ejemplo n.º 12
0
 def getColor(self, args):
     arg = str(self.argCombo.currentText())
     if arg not in args:
         raise Exception(
             'Cannot generate color; value "%s" is not present in this data.'
             % arg)
     val = args[arg]
     if val is None:
         return Qt.QColor(100, 100, 100, 255)
         #raise Exception('Cannot generate color; value "%s" is empty (None).' % arg)
     mn = self.minSpin.value()
     mx = self.maxSpin.value()
     norm = np.clip((val - mn) / (mx - mn), 0.0, 1.0)
     return self.gradient.getColor(norm)
Ejemplo n.º 13
0
    def updateWaves(self):
        if self._block_update:
            return
        if not self.ui.functionCheck.isChecked():
            self.plot.clear()
            return

        self.clearPlots()

        ## display sequence waves
        params = {}
        ps = self.ui.waveGeneratorWidget.listSequences()
        for k in ps:
            params[k] = range(len(ps[k]))
        waves = []
        runSequence(
            lambda p: waves.append(self.getSingleWave(p)), params,
            list(params.keys(
            )))  ## appends waveforms for the entire parameter space to waves

        autoRange = self.plot.getViewBox().autoRangeEnabled()
        self.plot.enableAutoRange(x=False, y=False)
        try:
            for w in waves:
                if w is not None:
                    # self.ui.functionCheck.setChecked(True)
                    self.plotCurve(w, color=Qt.QColor(100, 100, 100))

            ## display single-mode wave in red
            single = self.getSingleWave()
            if single is not None:
                # self.ui.functionCheck.setChecked(True)
                self.plotCurve(single, color=Qt.QColor(200, 100, 100))
        finally:
            self.plot.enableAutoRange(x=autoRange[0], y=autoRange[1])

        self.sigDataChanged.emit(self)
Ejemplo n.º 14
0
    def setCurrentDir(self, d):
        #print "set current %s -> %s" % (self.currentDir, d)
        ## uncolor previous current item
        if self.currentDir in self.items:
            item = self.items[self.currentDir]
            item.setBackground(0, Qt.QBrush(Qt.QColor(255, 255, 255)))
            #print "  - uncolor item ", item, self.handle(item)

        self.currentDir = d
        if d is self.baseDir:
            return

        self.expandTo(d)

        if d in self.items:
            self.updateCurrentDirItem()
Ejemplo n.º 15
0
 def getColor(self, args):
     color = np.array([0., 0., 0., 0.])
     for item in self.items:
         c = item.getColor(args)
         c = np.array([c.red(), c.green(),
                       c.blue(), c.alpha()],
                      dtype=float) / 255.
         op = item.getOp()
         if op == '+':
             color += c
         elif op == '*':
             color *= c
         color = np.clip(color, 0, 1.)
         #print color, c
     color = np.clip(color * 255, 0, 255).astype(int)
     return Qt.QColor(*color)
Ejemplo n.º 16
0
 def getTargetList(self):  ## should probably do some caching here.
     items = self.activeItems()
     locations = []
     occArea = Qt.QPainterPath()
     for i in items:
         if isinstance(i, TargetOcclusion):
             occArea |= i.mapToView(i.shape())
         
     for i in items:
         pts = i.listPoints()
         for j in range(len(pts)):
             p = pts[j]
             point = Qt.QPointF(p[0], p[1])
             if occArea.contains(point):
                 i.setTargetPen(j, Qt.QPen(Qt.QColor(0,0,0,160)))
             else:
                 locations.append(p)
                 i.setTargetPen(j, None)
     return locations
Ejemplo n.º 17
0
    def evaluateTrace(self, data):
        bstart = self.state['clampBaseStartSpin']
        bstop = self.state['clampBaseStopSpin']
        tstart = self.state['clampTestStartSpin']
        tstop = self.state['clampTestStopSpin']
        base = data['Time':bstart:bstop].view(ndarray)
        test = data['Time':tstart:tstop].view(ndarray)
        if len(test) == 0:
            raise Exception(
                "Uncaging analysis: No clamp data to evaluate. Check start/stop values?"
            )
        time = data.xvals('Time')
        dt = time[1] - time[0]
        med = np.median(base)
        std = base.std()
        testDetrend = test - med
        testBlur = scipy.ndimage.gaussian_filter(testDetrend, (1e-3 / dt))

        # Compute size of positive / negative peaks
        mx = testDetrend.max()
        mn = testDetrend.min()
        results = {
            'maxPeak': mx,
            'minPeak': mn,
            'maxZScore': mx / std,
            'minZScore': mn / std,
        }

        # do spike detection
        thresh = self.state['spikeThresholdSpin']
        if self.state['spikeThresholdAbsRadio'] is False:
            thresh += med
        if thresh > med:
            mask = test > thresh
        else:
            mask = test < thresh

        spikes = np.argwhere(np.diff(mask.astype(np.int8)) == 1)
        results['nSpikes'] = len(spikes)
        # generate spot color from analysis
        color = self.ui().ui.colorMapper.map(results)

        return Qt.QColor(*color[0])
Ejemplo n.º 18
0
def addROI():
    global rois, img, images, plots, cTimes, plotVBox
    c = intColor(len(rois))
    roi = RectROI([0, 0], [5, 5], translateSnap=True, scaleSnap=True)
    roi.setPen(Qt.QPen(c))
    rois.append(roi)
    images[0].addItem(roi)
    p = PlotWidget(None, name='ROI-%03d' % len(rois))
    #p.ui.btnHorizScale.setChecked(True)
    p.addCurve(
        ROIPlotItem(roi,
                    img,
                    images[0].imageItem,
                    axes=(1, 2),
                    xVals=cTimes,
                    color=c))
    p.setSizePolicy(
        Qt.QSizePolicy(Qt.QSizePolicy.MinimumExpanding,
                       Qt.QSizePolicy.MinimumExpanding))
    p.setMinimumSize(100, 100)
    plotVBox.addWidget(p)

    p.line = Qt.QGraphicsLineItem(0, 1e100, 0, -1e100)
    p.addItem(p.line)
    p.line.setPen(Qt.QPen(Qt.QColor(200, 200, 0)))
    Qt.QObject.connect(
        images[0].cw, Qt.SIGNAL('timeChanged'),
        lambda i, t: p.line.setLine(cTimes[i], 1e100, cTimes[i], -1e100))
    #Qt.QObject.connect(images[0].cw, Qt.SIGNAL('timeChanged'), p.scene.invalidate)
    ## improves performance
    #images[0].ui.timeSlider.setTracking(False)

    Qt.QObject.connect(p, Qt.SIGNAL('closed'),
                       lambda: images[0].removeItem(roi))

    #for pp in plots:
    #p.view.lockXRange(pp.view)
    #pp.view.lockXRange(p.view)
    plots.append(p)
Ejemplo n.º 19
0
    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.resize(384, 410)
        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Minimum,
                                    Qt.QSizePolicy.Minimum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(Form.sizePolicy().hasHeightForWidth())
        Form.setSizePolicy(sizePolicy)
        Form.setMaximumSize(Qt.QSize(384, 410))
        font = Qt.QFont()
        font.setFamily(_fromUtf8("Arial"))
        font.setPointSize(12)
        Form.setFont(font)
        self.gridLayout = Qt.QGridLayout(Form)
        self.gridLayout.setMargin(0)
        self.gridLayout.setHorizontalSpacing(10)
        self.gridLayout.setVerticalSpacing(0)
        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
        self.groupBox = Qt.QGroupBox(Form)
        self.groupBox.setMaximumSize(Qt.QSize(392, 410))
        font = Qt.QFont()
        font.setFamily(_fromUtf8("Lucida Grande"))
        font.setPointSize(13)
        self.groupBox.setFont(font)
        self.groupBox.setAlignment(Qt.Qt.AlignCenter)
        self.groupBox.setFlat(True)
        self.groupBox.setObjectName(_fromUtf8("groupBox"))
        self.groupBox_3 = Qt.QGroupBox(self.groupBox)
        self.groupBox_3.setGeometry(Qt.QRect(15, 20, 171, 371))
        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Preferred,
                                    Qt.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.groupBox_3.sizePolicy().hasHeightForWidth())
        self.groupBox_3.setSizePolicy(sizePolicy)
        palette = Qt.QPalette()
        brush = Qt.QBrush(Qt.QColor(99, 99, 99))
        brush.setStyle(Qt.Qt.SolidPattern)
        palette.setBrush(Qt.QPalette.Active, Qt.QPalette.Shadow, brush)
        brush = Qt.QBrush(Qt.QColor(99, 99, 99))
        brush.setStyle(Qt.Qt.SolidPattern)
        palette.setBrush(Qt.QPalette.Inactive, Qt.QPalette.Shadow, brush)
        brush = Qt.QBrush(Qt.QColor(99, 99, 99))
        brush.setStyle(Qt.Qt.SolidPattern)
        palette.setBrush(Qt.QPalette.Disabled, Qt.QPalette.Shadow, brush)
        self.groupBox_3.setPalette(palette)
        self.groupBox_3.setObjectName(_fromUtf8("groupBox_3"))
        self.layoutWidget = Qt.QWidget(self.groupBox_3)
        self.layoutWidget.setGeometry(Qt.QRect(10, 240, 146, 26))
        self.layoutWidget.setObjectName(_fromUtf8("layoutWidget"))
        self.horizontalLayout_10 = Qt.QHBoxLayout(self.layoutWidget)
        self.horizontalLayout_10.setMargin(9)
        self.horizontalLayout_10.setSpacing(6)
        self.horizontalLayout_10.setObjectName(
            _fromUtf8("horizontalLayout_10"))
        self.label_6 = Qt.QLabel(self.layoutWidget)
        self.label_6.setObjectName(_fromUtf8("label_6"))
        self.horizontalLayout_10.addWidget(self.label_6)
        self.ImagePhys_ROIKernel = Qt.QComboBox(self.layoutWidget)
        self.ImagePhys_ROIKernel.setMaximumSize(Qt.QSize(75, 16777215))
        self.ImagePhys_ROIKernel.setToolTip(_fromUtf8(""))
        self.ImagePhys_ROIKernel.setLayoutDirection(Qt.Qt.LeftToRight)
        self.ImagePhys_ROIKernel.setStyleSheet(
            _fromUtf8("<align = \'right\'>"))
        self.ImagePhys_ROIKernel.setMaxVisibleItems(1)
        self.ImagePhys_ROIKernel.setMaxCount(10)
        self.ImagePhys_ROIKernel.setSizeAdjustPolicy(
            Qt.QComboBox.AdjustToMinimumContentsLength)
        self.ImagePhys_ROIKernel.setFrame(False)
        self.ImagePhys_ROIKernel.setModelColumn(0)
        self.ImagePhys_ROIKernel.setObjectName(
            _fromUtf8("ImagePhys_ROIKernel"))
        self.ImagePhys_ROIKernel.addItem(_fromUtf8(""))
        self.ImagePhys_ROIKernel.addItem(_fromUtf8(""))
        self.ImagePhys_ROIKernel.addItem(_fromUtf8(""))
        self.ImagePhys_ROIKernel.addItem(_fromUtf8(""))
        self.ImagePhys_ROIKernel.addItem(_fromUtf8(""))
        self.ImagePhys_ROIKernel.addItem(_fromUtf8(""))
        self.horizontalLayout_10.addWidget(self.ImagePhys_ROIKernel)
        self.layoutWidget1 = Qt.QWidget(self.groupBox_3)
        self.layoutWidget1.setGeometry(Qt.QRect(5, 215, 156, 25))
        self.layoutWidget1.setObjectName(_fromUtf8("layoutWidget1"))
        self.horizontalLayout_14 = Qt.QHBoxLayout(self.layoutWidget1)
        self.horizontalLayout_14.setMargin(9)
        self.horizontalLayout_14.setSpacing(6)
        self.horizontalLayout_14.setObjectName(
            _fromUtf8("horizontalLayout_14"))
        self.ImagePhys_StdRB = Qt.QRadioButton(self.layoutWidget1)
        self.ImagePhys_StdRB.setObjectName(_fromUtf8("ImagePhys_StdRB"))
        self.horizontalLayout_14.addWidget(self.ImagePhys_StdRB)
        self.ImagePhys_FFTRB = Qt.QRadioButton(self.layoutWidget1)
        self.ImagePhys_FFTRB.setChecked(True)
        self.ImagePhys_FFTRB.setObjectName(_fromUtf8("ImagePhys_FFTRB"))
        self.horizontalLayout_14.addWidget(self.ImagePhys_FFTRB)
        self.layoutWidget2 = Qt.QWidget(self.groupBox_3)
        self.layoutWidget2.setGeometry(Qt.QRect(10, 270, 146, 100))
        self.layoutWidget2.setObjectName(_fromUtf8("layoutWidget2"))
        self.verticalLayout_2 = Qt.QVBoxLayout(self.layoutWidget2)
        self.verticalLayout_2.setMargin(9)
        self.verticalLayout_2.setSpacing(6)
        self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))
        self.ImagePhys_RecalculateROIs = Qt.QPushButton(self.layoutWidget2)
        self.ImagePhys_RecalculateROIs.setObjectName(
            _fromUtf8("ImagePhys_RecalculateROIs"))
        self.verticalLayout_2.addWidget(self.ImagePhys_RecalculateROIs)
        self.ImagePhys_RetrieveROI = Qt.QPushButton(self.layoutWidget2)
        self.ImagePhys_RetrieveROI.setObjectName(
            _fromUtf8("ImagePhys_RetrieveROI"))
        self.verticalLayout_2.addWidget(self.ImagePhys_RetrieveROI)
        self.ImagePhys_SaveROI = Qt.QPushButton(self.layoutWidget2)
        self.ImagePhys_SaveROI.setObjectName(_fromUtf8("ImagePhys_SaveROI"))
        self.verticalLayout_2.addWidget(self.ImagePhys_SaveROI)
        self.widget = Qt.QWidget(self.groupBox_3)
        self.widget.setGeometry(Qt.QRect(5, 20, 161, 136))
        self.widget.setObjectName(_fromUtf8("widget"))
        self.gridLayout_2 = Qt.QGridLayout(self.widget)
        self.gridLayout_2.setMargin(9)
        self.gridLayout_2.setSpacing(6)
        self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2"))
        self.ImagePhys_addRoi = Qt.QPushButton(self.widget)
        self.ImagePhys_addRoi.setObjectName(_fromUtf8("ImagePhys_addRoi"))
        self.gridLayout_2.addWidget(self.ImagePhys_addRoi, 0, 0, 1, 1)
        self.ImagePhys_clearRoi = Qt.QPushButton(self.widget)
        self.ImagePhys_clearRoi.setObjectName(_fromUtf8("ImagePhys_clearRoi"))
        self.gridLayout_2.addWidget(self.ImagePhys_clearRoi, 1, 0, 1, 1)
        self.ImagePhys_findROIs = Qt.QPushButton(self.widget)
        self.ImagePhys_findROIs.setObjectName(_fromUtf8("ImagePhys_findROIs"))
        self.gridLayout_2.addWidget(self.ImagePhys_findROIs, 2, 0, 1, 1)
        self.horizontalLayout_3 = Qt.QHBoxLayout()
        self.horizontalLayout_3.setMargin(9)
        self.horizontalLayout_3.setSpacing(6)
        self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3"))
        self.label_13 = Qt.QLabel(self.widget)
        self.label_13.setObjectName(_fromUtf8("label_13"))
        self.horizontalLayout_3.addWidget(self.label_13)
        self.ImagePhys_ROISize = Qt.QSpinBox(self.widget)
        self.ImagePhys_ROISize.setMinimum(1)
        self.ImagePhys_ROISize.setMaximum(25)
        self.ImagePhys_ROISize.setProperty("value", 2)
        self.ImagePhys_ROISize.setObjectName(_fromUtf8("ImagePhys_ROISize"))
        self.horizontalLayout_3.addWidget(self.ImagePhys_ROISize)
        self.gridLayout_2.addLayout(self.horizontalLayout_3, 3, 0, 1, 1)
        self.widget1 = Qt.QWidget(self.groupBox_3)
        self.widget1.setGeometry(Qt.QRect(5, 160, 161, 53))
        self.widget1.setObjectName(_fromUtf8("widget1"))
        self.horizontalLayout_4 = Qt.QHBoxLayout(self.widget1)
        self.horizontalLayout_4.setMargin(9)
        self.horizontalLayout_4.setSpacing(6)
        self.horizontalLayout_4.setObjectName(_fromUtf8("horizontalLayout_4"))
        self.verticalLayout = Qt.QVBoxLayout()
        self.verticalLayout.setMargin(9)
        self.verticalLayout.setSpacing(6)
        self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
        self.label_11 = Qt.QLabel(self.widget1)
        self.label_11.setAlignment(Qt.Qt.AlignCenter)
        self.label_11.setObjectName(_fromUtf8("label_11"))
        self.verticalLayout.addWidget(self.label_11)
        self.ImagePhys_ROIThrLow = Qt.QDoubleSpinBox(self.widget1)
        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Minimum,
                                    Qt.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.ImagePhys_ROIThrLow.sizePolicy().hasHeightForWidth())
        self.ImagePhys_ROIThrLow.setSizePolicy(sizePolicy)
        self.ImagePhys_ROIThrLow.setAlignment(Qt.Qt.AlignRight
                                              | Qt.Qt.AlignTrailing
                                              | Qt.Qt.AlignVCenter)
        self.ImagePhys_ROIThrLow.setMinimum(0.01)
        self.ImagePhys_ROIThrLow.setMaximum(1.0)
        self.ImagePhys_ROIThrLow.setSingleStep(0.1)
        self.ImagePhys_ROIThrLow.setProperty("value", 0.2)
        self.ImagePhys_ROIThrLow.setObjectName(
            _fromUtf8("ImagePhys_ROIThrLow"))
        self.verticalLayout.addWidget(self.ImagePhys_ROIThrLow)
        self.horizontalLayout_4.addLayout(self.verticalLayout)
        self.verticalLayout_3 = Qt.QVBoxLayout()
        self.verticalLayout_3.setMargin(9)
        self.verticalLayout_3.setSpacing(6)
        self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3"))
        self.label_12 = Qt.QLabel(self.widget1)
        self.label_12.setAlignment(Qt.Qt.AlignCenter)
        self.label_12.setObjectName(_fromUtf8("label_12"))
        self.verticalLayout_3.addWidget(self.label_12)
        self.ImagePhys_ROIThrHigh = Qt.QDoubleSpinBox(self.widget1)
        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Minimum,
                                    Qt.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.ImagePhys_ROIThrHigh.sizePolicy().hasHeightForWidth())
        self.ImagePhys_ROIThrHigh.setSizePolicy(sizePolicy)
        self.ImagePhys_ROIThrHigh.setAlignment(Qt.Qt.AlignRight
                                               | Qt.Qt.AlignTrailing
                                               | Qt.Qt.AlignVCenter)
        self.ImagePhys_ROIThrHigh.setMinimum(0.1)
        self.ImagePhys_ROIThrHigh.setMaximum(1.0)
        self.ImagePhys_ROIThrHigh.setSingleStep(0.1)
        self.ImagePhys_ROIThrHigh.setProperty("value", 1.0)
        self.ImagePhys_ROIThrHigh.setObjectName(
            _fromUtf8("ImagePhys_ROIThrHigh"))
        self.verticalLayout_3.addWidget(self.ImagePhys_ROIThrHigh)
        self.horizontalLayout_4.addLayout(self.verticalLayout_3)
        self.groupBox_2 = Qt.QGroupBox(self.groupBox)
        self.groupBox_2.setGeometry(Qt.QRect(205, 20, 156, 191))
        self.groupBox_2.setMinimumSize(Qt.QSize(120, 190))
        self.groupBox_2.setObjectName(_fromUtf8("groupBox_2"))
        self.ImagePhys_RegisterStack = Qt.QPushButton(self.groupBox_2)
        self.ImagePhys_RegisterStack.setGeometry(Qt.QRect(0, 15, 151, 29))
        self.ImagePhys_RegisterStack.setObjectName(
            _fromUtf8("ImagePhys_RegisterStack"))
        self.layoutWidget3 = Qt.QWidget(self.groupBox_2)
        self.layoutWidget3.setGeometry(Qt.QRect(0, 40, 141, 32))
        self.layoutWidget3.setObjectName(_fromUtf8("layoutWidget3"))
        self.horizontalLayout_6 = Qt.QHBoxLayout(self.layoutWidget3)
        self.horizontalLayout_6.setMargin(9)
        self.horizontalLayout_6.setSpacing(6)
        self.horizontalLayout_6.setObjectName(_fromUtf8("horizontalLayout_6"))
        self.ImagePhys_UnBleach = Qt.QPushButton(self.layoutWidget3)
        self.ImagePhys_UnBleach.setCheckable(True)
        self.ImagePhys_UnBleach.setObjectName(_fromUtf8("ImagePhys_UnBleach"))
        self.horizontalLayout_6.addWidget(self.ImagePhys_UnBleach)
        self.ImagePhys_BleachInfo = Qt.QLabel(self.layoutWidget3)
        self.ImagePhys_BleachInfo.setFrameShape(Qt.QFrame.StyledPanel)
        self.ImagePhys_BleachInfo.setFrameShadow(Qt.QFrame.Sunken)
        self.ImagePhys_BleachInfo.setAlignment(Qt.Qt.AlignCenter)
        self.ImagePhys_BleachInfo.setObjectName(
            _fromUtf8("ImagePhys_BleachInfo"))
        self.horizontalLayout_6.addWidget(self.ImagePhys_BleachInfo)
        self.ImagePhys_SpecCalc = Qt.QPushButton(self.groupBox_2)
        self.ImagePhys_SpecCalc.setGeometry(Qt.QRect(0, 70, 151, 30))
        self.ImagePhys_SpecCalc.setObjectName(_fromUtf8("ImagePhys_SpecCalc"))
        self.layoutWidget4 = Qt.QWidget(self.groupBox_2)
        self.layoutWidget4.setGeometry(Qt.QRect(0, 95, 146, 27))
        self.layoutWidget4.setObjectName(_fromUtf8("layoutWidget4"))
        self.horizontalLayout = Qt.QHBoxLayout(self.layoutWidget4)
        self.horizontalLayout.setMargin(9)
        self.horizontalLayout.setSpacing(6)
        self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
        self.label_7 = Qt.QLabel(self.layoutWidget4)
        self.label_7.setObjectName(_fromUtf8("label_7"))
        self.horizontalLayout.addWidget(self.label_7)
        self.ImagePhys_SpecHPF = Qt.QDoubleSpinBox(self.layoutWidget4)
        self.ImagePhys_SpecHPF.setAlignment(Qt.Qt.AlignRight
                                            | Qt.Qt.AlignTrailing
                                            | Qt.Qt.AlignVCenter)
        self.ImagePhys_SpecHPF.setProperty("value", 1.0)
        self.ImagePhys_SpecHPF.setObjectName(_fromUtf8("ImagePhys_SpecHPF"))
        self.horizontalLayout.addWidget(self.ImagePhys_SpecHPF)
        self.layoutWidget5 = Qt.QWidget(self.groupBox_2)
        self.layoutWidget5.setGeometry(Qt.QRect(0, 125, 146, 27))
        self.layoutWidget5.setObjectName(_fromUtf8("layoutWidget5"))
        self.horizontalLayout_11 = Qt.QHBoxLayout(self.layoutWidget5)
        self.horizontalLayout_11.setMargin(9)
        self.horizontalLayout_11.setSpacing(6)
        self.horizontalLayout_11.setObjectName(
            _fromUtf8("horizontalLayout_11"))
        self.label_8 = Qt.QLabel(self.layoutWidget5)
        self.label_8.setObjectName(_fromUtf8("label_8"))
        self.horizontalLayout_11.addWidget(self.label_8)
        self.ImagePhys_SpecLPF = Qt.QDoubleSpinBox(self.layoutWidget5)
        self.ImagePhys_SpecLPF.setAlignment(Qt.Qt.AlignRight
                                            | Qt.Qt.AlignTrailing
                                            | Qt.Qt.AlignVCenter)
        self.ImagePhys_SpecLPF.setProperty("value", 10.0)
        self.ImagePhys_SpecLPF.setObjectName(_fromUtf8("ImagePhys_SpecLPF"))
        self.horizontalLayout_11.addWidget(self.ImagePhys_SpecLPF)
        self.layoutWidget6 = Qt.QWidget(self.groupBox_2)
        self.layoutWidget6.setGeometry(Qt.QRect(1, 155, 149, 27))
        self.layoutWidget6.setObjectName(_fromUtf8("layoutWidget6"))
        self.horizontalLayout_12 = Qt.QHBoxLayout(self.layoutWidget6)
        self.horizontalLayout_12.setMargin(9)
        self.horizontalLayout_12.setSpacing(6)
        self.horizontalLayout_12.setObjectName(
            _fromUtf8("horizontalLayout_12"))
        self.label_10 = Qt.QLabel(self.layoutWidget6)
        self.label_10.setObjectName(_fromUtf8("label_10"))
        self.horizontalLayout_12.addWidget(self.label_10)
        self.ImagePhys_FFTSmooth = Qt.QSpinBox(self.layoutWidget6)
        self.ImagePhys_FFTSmooth.setAlignment(Qt.Qt.AlignRight
                                              | Qt.Qt.AlignTrailing
                                              | Qt.Qt.AlignVCenter)
        self.ImagePhys_FFTSmooth.setMaximum(16)
        self.ImagePhys_FFTSmooth.setObjectName(
            _fromUtf8("ImagePhys_FFTSmooth"))
        self.horizontalLayout_12.addWidget(self.ImagePhys_FFTSmooth)
        self.groupBox_6 = Qt.QGroupBox(self.groupBox)
        self.groupBox_6.setGeometry(Qt.QRect(205, 220, 161, 161))
        self.groupBox_6.setObjectName(_fromUtf8("groupBox_6"))
        self.layoutWidget7 = Qt.QWidget(self.groupBox_6)
        self.layoutWidget7.setGeometry(Qt.QRect(5, 51, 152, 31))
        self.layoutWidget7.setObjectName(_fromUtf8("layoutWidget7"))
        self.horizontalLayout_7 = Qt.QHBoxLayout(self.layoutWidget7)
        self.horizontalLayout_7.setMargin(9)
        self.horizontalLayout_7.setSpacing(6)
        self.horizontalLayout_7.setObjectName(_fromUtf8("horizontalLayout_7"))
        self.label_3 = Qt.QLabel(self.layoutWidget7)
        self.label_3.setObjectName(_fromUtf8("label_3"))
        self.horizontalLayout_7.addWidget(self.label_3)
        self.ImagePhys_BaseEnd = Qt.QDoubleSpinBox(self.layoutWidget7)
        self.ImagePhys_BaseEnd.setAlignment(Qt.Qt.AlignRight
                                            | Qt.Qt.AlignTrailing
                                            | Qt.Qt.AlignVCenter)
        self.ImagePhys_BaseEnd.setMinimum(-5000.0)
        self.ImagePhys_BaseEnd.setMaximum(50000.0)
        self.ImagePhys_BaseEnd.setObjectName(_fromUtf8("ImagePhys_BaseEnd"))
        self.horizontalLayout_7.addWidget(self.ImagePhys_BaseEnd)
        self.layoutWidget8 = Qt.QWidget(self.groupBox_6)
        self.layoutWidget8.setGeometry(Qt.QRect(5, 20, 152, 27))
        self.layoutWidget8.setObjectName(_fromUtf8("layoutWidget8"))
        self.horizontalLayout_2 = Qt.QHBoxLayout(self.layoutWidget8)
        self.horizontalLayout_2.setMargin(9)
        self.horizontalLayout_2.setSpacing(6)
        self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2"))
        self.label = Qt.QLabel(self.layoutWidget8)
        self.label.setObjectName(_fromUtf8("label"))
        self.horizontalLayout_2.addWidget(self.label)
        self.ImagePhys_BaseStart = Qt.QDoubleSpinBox(self.layoutWidget8)
        self.ImagePhys_BaseStart.setAlignment(Qt.Qt.AlignRight
                                              | Qt.Qt.AlignTrailing
                                              | Qt.Qt.AlignVCenter)
        self.ImagePhys_BaseStart.setMinimum(-5000.0)
        self.ImagePhys_BaseStart.setMaximum(50000.0)
        self.ImagePhys_BaseStart.setObjectName(
            _fromUtf8("ImagePhys_BaseStart"))
        self.horizontalLayout_2.addWidget(self.ImagePhys_BaseStart)
        self.layoutWidget9 = Qt.QWidget(self.groupBox_6)
        self.layoutWidget9.setGeometry(Qt.QRect(5, 85, 151, 32))
        self.layoutWidget9.setObjectName(_fromUtf8("layoutWidget9"))
        self.horizontalLayout_8 = Qt.QHBoxLayout(self.layoutWidget9)
        self.horizontalLayout_8.setMargin(9)
        self.horizontalLayout_8.setSpacing(6)
        self.horizontalLayout_8.setObjectName(_fromUtf8("horizontalLayout_8"))
        self.ImagePhys_CorrTool_LPF = Qt.QCheckBox(self.layoutWidget9)
        self.ImagePhys_CorrTool_LPF.setEnabled(True)
        self.ImagePhys_CorrTool_LPF.setLayoutDirection(Qt.Qt.RightToLeft)
        self.ImagePhys_CorrTool_LPF.setObjectName(
            _fromUtf8("ImagePhys_CorrTool_LPF"))
        self.horizontalLayout_8.addWidget(self.ImagePhys_CorrTool_LPF)
        self.ImagePhys_ImgLPF = Qt.QDoubleSpinBox(self.layoutWidget9)
        self.ImagePhys_ImgLPF.setAlignment(Qt.Qt.AlignRight
                                           | Qt.Qt.AlignTrailing
                                           | Qt.Qt.AlignVCenter)
        self.ImagePhys_ImgLPF.setDecimals(2)
        self.ImagePhys_ImgLPF.setMinimum(0.1)
        self.ImagePhys_ImgLPF.setMaximum(5000.0)
        self.ImagePhys_ImgLPF.setSingleStep(1.0)
        self.ImagePhys_ImgLPF.setProperty("value", 20.0)
        self.ImagePhys_ImgLPF.setObjectName(_fromUtf8("ImagePhys_ImgLPF"))
        self.horizontalLayout_8.addWidget(self.ImagePhys_ImgLPF)
        self.layoutWidget10 = Qt.QWidget(self.groupBox_6)
        self.layoutWidget10.setGeometry(Qt.QRect(5, 120, 151, 32))
        self.layoutWidget10.setObjectName(_fromUtf8("layoutWidget10"))
        self.horizontalLayout_9 = Qt.QHBoxLayout(self.layoutWidget10)
        self.horizontalLayout_9.setMargin(9)
        self.horizontalLayout_9.setSpacing(6)
        self.horizontalLayout_9.setObjectName(_fromUtf8("horizontalLayout_9"))
        self.ImagePhys_CorrTool_HPF = Qt.QCheckBox(self.layoutWidget10)
        self.ImagePhys_CorrTool_HPF.setLayoutDirection(Qt.Qt.RightToLeft)
        self.ImagePhys_CorrTool_HPF.setObjectName(
            _fromUtf8("ImagePhys_CorrTool_HPF"))
        self.horizontalLayout_9.addWidget(self.ImagePhys_CorrTool_HPF)
        self.ImagePhys_ImgHPF = Qt.QDoubleSpinBox(self.layoutWidget10)
        self.ImagePhys_ImgHPF.setAlignment(Qt.Qt.AlignRight
                                           | Qt.Qt.AlignTrailing
                                           | Qt.Qt.AlignVCenter)
        self.ImagePhys_ImgHPF.setSuffix(_fromUtf8(""))
        self.ImagePhys_ImgHPF.setDecimals(3)
        self.ImagePhys_ImgHPF.setMinimum(0.001)
        self.ImagePhys_ImgHPF.setMaximum(10.0)
        self.ImagePhys_ImgHPF.setSingleStep(0.2)
        self.ImagePhys_ImgHPF.setProperty("value", 0.2)
        self.ImagePhys_ImgHPF.setObjectName(_fromUtf8("ImagePhys_ImgHPF"))
        self.horizontalLayout_9.addWidget(self.ImagePhys_ImgHPF)
        self.gridLayout.addWidget(self.groupBox, 0, 0, 1, 1)

        self.retranslateUi(Form)
        self.ImagePhys_ROIKernel.setCurrentIndex(1)
        Qt.QMetaObject.connectSlotsByName(Form)
Ejemplo n.º 20
0
 def plotCurve(self, data, color=Qt.QColor(100, 100, 100), replot=True):
     plot = self.plot.plot(y=data, x=self.timeVals, pen=Qt.QPen(color))
     return plot
Ejemplo n.º 21
0
    def __init__(self, dev, taskRunner):
        TaskGui.__init__(self, dev, taskRunner)
        self.ui = Ui_Form()
        self.ui.setupUi(self)
        dm = getManager()
        self.targets = None
        self.items = {}
        self.haveCalibration = True   ## whether there is a calibration for the current combination of laser/optics
        self.currentOpticState = None
        self.currentCamMod = None
        self.displaySize = {}  ## maps (laser,opticState) : display size
                               ## since this setting is remembered for each objective.
        
        # Make sure DQ appears in this task
        daqName = dev.getDaqName()
        taskRunner.getDevice(daqName)
        
        ## Populate module/device lists, auto-select based on device defaults 
        self.defCam = None
        if 'defaultCamera' in self.dev.config:
            self.defCam = self.dev.config['defaultCamera']
        defLaser = None
        if 'defaultLaser' in self.dev.config:
            defLaser = self.dev.config['defaultLaser']
            
        daqDev = dev.getDaqName()
        self.daqUI = taskRunner.getDevice(daqDev)

        self.ui.cameraCombo.setTypes(['cameraModule'])
        self.ui.laserCombo.setTypes(['laser'])
        
        self.positionCtrlGroup = PositionCtrlGroup()
        self.positionCtrlGroup.sigAddNewRequested.connect(self.addPositionCtrl)
        self.ui.itemTree.setParameters(self.positionCtrlGroup, showTop=False)
        self.positionCtrlGroup.sigChildRemoved.connect(self.positionCtrlRemoved)
        self.ui.spotSequenceGroup.setCollapsed(True)
        self.ui.spotDisplayGroup.setCollapsed(True)
        
        self.scanProgram = ScanProgram()
        self.scanProgram.setDevices(scanner=self.dev)
        self.ui.programTree.setParameters(self.scanProgram.ctrlParameter(), showTop=False)

        ## Set up SpinBoxes
        self.ui.minTimeSpin.setOpts(dec=True, step=1, minStep=1e-3, siPrefix=True, suffix='s', bounds=[0, 50])
        self.ui.minDistSpin.setOpts(dec=True, step=1, minStep=1e-6, siPrefix=True, suffix='m', bounds=[0, 10e-3])
        self.ui.sizeSpin.setOpts(dec=True, step=1, minStep=1e-6, siPrefix=True, suffix='m', bounds=[1e-9, 1e-3])
        ## Create state group for saving/restoring state
        self.stateGroup = pg.WidgetGroup([
            (self.ui.cameraCombo,),
            (self.ui.laserCombo,),
            (self.ui.minTimeSpin, 'minTime'),
            (self.ui.minDistSpin, 'minDist'),
            (self.ui.simulateShutterCheck, 'simulateShutter'),
            (self.ui.sizeSpin, 'spotSize'),
            (self.ui.enablePosCtrlCheck, 'enablePosCtrl'),
            (self.ui.enableScanProgCheck, 'enableScanProg'),
        ])
        self.stateGroup.setState({'minTime': 10, 'minDist': 500e-6, 'sizeSpin':100e-6})
        self.tdPlot = self.ui.tdPlotWidget.plotItem
        self.tdPlot.setLabel('bottom', text="Distance", units='m')
        self.tdPlot.setLabel('left', text="Wait time", units='s')

        self.ui.scanProgramSplitter.setSizes([600, 100])
        self.ui.programTimeline.setDownsampling(True)
        ## Note we use lambda functions for all these clicks to strip out the arg sent with the signal
        
        self.ui.showPosCtrlCheck.toggled.connect(self.showPosCtrls)
        self.ui.cameraCombo.currentIndexChanged.connect(self.camModChanged)
        self.ui.laserCombo.currentIndexChanged.connect(self.laserDevChanged)
        self.ui.sizeFromCalibrationRadio.toggled.connect(self.updateSpotSizes)
        self.ui.sizeSpin.valueChanged.connect(self.sizeSpinEdited)
        self.ui.minTimeSpin.valueChanged.connect(self.sequenceChanged)
        self.ui.minDistSpin.valueChanged.connect(self.sequenceChanged)
        self.ui.recomputeBtn.clicked.connect(self.recomputeClicked)
        self.ui.loadConfigBtn.clicked.connect(self.loadConfiguration)
        self.ui.previewBtn.toggled.connect(self.previewProgram)
        self.ui.enablePosCtrlCheck.toggled.connect(self.enablePosCtrlToggled)
        self.ui.enableScanProgCheck.toggled.connect(self.enableScanProgToggled)
        self.ui.showLastSpotCheck.toggled.connect(self.showLastSpotToggled)
        self.ui.programPreviewSlider.valueChanged.connect(self.previewRateChanged)
        
        self.dev.sigGlobalSubdeviceChanged.connect(self.opticStateChanged)
        
        self.testTarget = TargetPoint(name="Test", ptSize=100e-6)
        self.testTarget.setPen(Qt.QPen(Qt.QColor(255, 200, 200)))
        self.spotMarker = TargetPoint(name="Last", ptSize=100e-6, movable=False)
        self.spotMarker.setPen(pg.mkPen(color=(255,255,255), width = 2))

        self.spotMarker.hide()
        self.laserDevChanged()  # also updates spot sizes
        self.camModChanged()
        self.updateTDPlot()
            
        #self.ui.simulateShutterCheck.setChecked(False)
        if 'offVoltage' not in self.dev.config: ## we don't have a voltage for virtual shuttering
            self.ui.simulateShutterCheck.setChecked(False)
            self.ui.simulateShutterCheck.setEnabled(False)

        self.daqChanged(self.daqUI.currentState())
        self.daqUI.sigChanged.connect(self.daqChanged)
Ejemplo n.º 22
0
 def paintEvent(self, event):
     p = Qt.QPainter(self)
     brush = Qt.QBrush(Qt.QColor(0, 0, 0))
     p.fillRect(self.rect(), brush)
     p.end()
Ejemplo n.º 23
0
    def recalculate(self, allFrames=False):
        if len(self.frames) < 1:
            return
        #print "recalc", allFrames
        #print self.state
        ## calculate image
        if allFrames:
            ## Clear out old displays
            #self.img = None
            for (i, p, s) in self.items:
                s = i.scene()
                if s is not None:
                    s.removeItem(i)
            self.items = []

            ## Compute for all frames
            frames = self.frames
        else:
            frames = self.frames[-1:]

        #if self.state['displayImageCheck'] and frames[0]['cam'] is not None:
        #if self.img is None:
        #self.img = zeros(frames[0]['cam'].shape + (4,), dtype=float32)

        for f in frames:
            (r, g, b) = self.evaluateTrace(f['clamp'])

            #if self.state['displayImageCheck'] and f['cam'] is not None and self.img is not None and f['cam'].shape == self.img.shape:
            #alpha = gaussian_filter((f['cam'] - f['cam'].min()), (5, 5))
            #tol = self.state['spotToleranceSpin']
            #alpha = clip(alpha-tol, 0, 2**32)
            #alpha *= 256. / alpha.max()
            #newImg = empty(frames[0]['cam'].shape + (4,), dtype=uint16)
            #newImg[..., 0] = b * alpha
            #newImg[..., 1] = g * alpha
            #newImg[..., 2] = r * alpha
            #newImg[..., 3] = alpha

            #self.img = clip(self.img + (newImg.astype(uint16)), 0, 255)
            #else:
            alpha = self.state['alphaSlider']
            spot = Qt.QGraphicsEllipseItem(Qt.QRectF(-0.5, -0.5, 1, 1))
            spot.setBrush(
                Qt.QBrush(Qt.QColor(r * 255, g * 255, b * 255, alpha)))
            spot.setPen(Qt.QPen(Qt.Qt.NoPen))
            p = f['scanner']['position']
            s = f['scanner']['spotSize']
            self.items.append([spot, p, [s, s]])

        self.hide()  ## Make sure only correct items are displayed
        self.show()

        #if self.state['displayImageCheck']:
        #self.updateImage()

        ## update location of image
        #info = frames[-1]['camInfo'][-1]
        #s = info['pixelSize']
        #p = info['imagePosition']
        #self.items[0][1] = p
        #self.items[0][2] = s

        ## Set correct scene
        #cModName = str(self.ui().ui.cameraModCombo.currentText())
        #camMod = self.ui().man.getModule(cModName)
        camMod = self.ui().ui.cameraModCombo.getSelectedObj()
        scene = camMod.ui.view.scene()
        for i in self.items:
            (item, p, s) = i
            if item.scene() is not scene:
                camMod.ui.addItem(item, p, s, self.z)
Ejemplo n.º 24
0
    def __init__(self, dm, config):
        clampName = config['clampDev']
        Qt.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(Qt.QMutex.Recursive)

        self.manager = dm
        self.clampName = clampName
        self.thread = PatchThread(self)
        self.cw = Qt.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 = Qt.QRect(*uiState['geometry'])
            self.setGeometry(geom)
        if 'window' in uiState:
            ws = Qt.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=Qt.QPen(Qt.QColor(200, 200, 200)))
        self.patchFitCurve = self.ui.patchPlot.plot(pen=Qt.QPen(Qt.QColor(0, 100, 200)))
        self.ui.commandPlot.setLabel('left', text='Command', units='V')
        self.commandCurve = self.ui.commandPlot.plot(pen=Qt.QPen(Qt.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=Qt.QPen(Qt.QColor(200, 200, 200)))
            for suf in ['', 'Std']:
                self.analysisData[n+suf] = []
        self.showPlots()
        self.updateParams()
        self.show()
        self.bathMode()