Exemplo n.º 1
0
 def process(self, events, display=True):
     if not display:
         return {'plot': None}
     conn = self['plot'].connections()
     if len(events) > 2000:
         events = events[:2000]
     color = self.ctrls['color'].color()
     
     ## don't keep items from last run; they may have been removed already.
     self.items = {}
     
     for c in conn:
         plot = c.node().getPlot()
         if plot is None:
             continue
         ## It's possible items were cleared out already; always rebuild.
         #if c in self.items:
             #item = self.items[c]
             #item.setXVals(events)  
         #else:
             #self.items[c] = graphicsItems.VTickGroup(events, view=plot, pen=color)
             #self.items[c].setYRange([0., 0.2], relative=True)
         #self.items[c] = graphicsItems.VTickGroup(events, view=plot, pen=color)
         self.items[c] = pg.VTickGroup(events, yrange=[0.9, 1.], pen=color)
         #self.items[c].setYRange([0., 0.2], relative=True)
         self.items[c].setZValue(1000)
     return {'plot': self.items}
Exemplo n.º 2
0
    def __init__(self, dev, taskRunner):
        DAQGenericTaskGui.__init__(
            self, dev, taskRunner, ownUi=False
        )  ## When initializing superclass, make sure it knows this class is creating the ui.

        self.ui = Ui_Form()
        self.ui.setupUi(self)
        self.stateGroup = pg.WidgetGroup(
            self)  ## create state group before DAQ creates its own interface
        self.ui.horizSplitter.setStretchFactor(0, 0)
        self.ui.horizSplitter.setStretchFactor(1, 1)

        DAQGenericTaskGui.createChannelWidgets(self, self.ui.ctrlSplitter,
                                               self.ui.plotSplitter)
        self.ui.plotSplitter.setStretchFactor(0, 10)
        self.ui.plotSplitter.setStretchFactor(1, 1)
        self.ui.plotSplitter.setStretchFactor(2, 1)

        ## plots should not be storing more than one trace at a time.
        for p in self.plots.values():
            p.plotItem.ctrl.maxTracesCheck.setChecked(True)
            p.plotItem.ctrl.maxTracesSpin.setValue(1)
            p.plotItem.ctrl.forgetTracesCheck.setChecked(True)

        conf = self.dev.camConfig

        tModes = self.dev.listParams('triggerMode')[0]
        for m in tModes:
            item = self.ui.triggerModeCombo.addItem(m)

        self.vLines = []
        if 'trigger' in self.plots:
            l = pg.InfiniteLine()
            self.vLines.append(l)
            self.plots['trigger'].addItem(l)
        if 'exposure' in self.plots:
            l = pg.InfiniteLine()
            self.vLines.append(l)
            self.plots['exposure'].addItem(l)

        self.frameTicks = pg.VTickGroup()
        self.frameTicks.setYRange([0.8, 1.0])

        self.ui.imageView.sigTimeChanged.connect(self.timeChanged)

        self.taskRunner.sigTaskPaused.connect(self.taskPaused)
Exemplo n.º 3
0
    def displayData(self, fh, plot, pen, evTime=None, eventFilter=None):
        """
        Display data for a single site in a plot--ephys trace, detected events
        Returns all items added to the plot.
        """
        pen = pg.mkPen(pen)

        items = []
        if isinstance(fh, six.string_types):
            fh = self.source()[fh]
        if fh.isDir():
            fh = self.dataModel.getClampFile(fh)

        ## plot all data, incl. events
        data = fh.read()['primary']
        data = fn.besselFilter(data, 4e3)
        pc = plot.plot(data, pen=pen, clear=False)
        items.append(pc)

        ## mark location of event if an event index was given
        if evTime is not None:
            #pos = float(index)/len(data)
            pos = evTime / data.xvals('Time')[-1]
            #print evTime, data.xvals('Time')[-1], pos
            #print index
            arrow = pg.CurveArrow(pc, pos=pos)
            plot.addItem(arrow)
            items.append(arrow)

        events = self.getEvents(fh)['events']

        if eventFilter is not None:
            events = eventFilter(events)

        ## draw ticks over all detected events
        if len(events) > 0:
            if 'fitTime' in events.dtype.names:
                times = events['fitTime']
                ticks = pg.VTickGroup(times, [0.9, 1.0], pen=pen)
                plot.addItem(ticks)
                items.append(ticks)
                #self.mapTicks.append(ticks)

            ## draw event fits
            evPen = pg.mkPen(pen)
            c = evPen.color()
            c.setAlpha(c.alpha() / 2)
            evPen.setColor(c)
            for ev in events:
                time = ev['fitTime']
                try:
                    fitLen = ev['fitDecayTau'] * ev['fitLengthOverDecay']
                except IndexError:
                    fitLen = ev['fitDecayTau'] * 4.
                x = np.linspace(time, time + fitLen, fitLen * 50e3)
                v = [
                    ev['fitAmplitude'], ev['fitTime'], ev['fitRiseTau'],
                    ev['fitDecayTau']
                ]
                y = fn.pspFunc(v, x, risePower=2.0) + data[np.argwhere(
                    data.xvals('Time') > time)[0] - 1]
                evc = plot.plot(x, y, pen=evPen)
                evc.setZValue(pc.zValue() - 100)

        return items