def plotClicked(plt, pts): pt = pts[0] #(id, fn, time) = pt.data #[['SourceFile', 'ProtocolSequenceDir', 'fitTime']] #fh = db.getDir('ProtocolSequence', id)[fn] fh = pt.data()['SourceFile'] id = pt.data()['ProtocolSequenceDir'] time = pt.data()['fitTime'] data = fh.read()['Channel':'primary'] data = fn.besselFilter(data, 8e3) p = pw2.plot(data, clear=True) pos = time / data.xvals('Time')[-1] arrow = pg.CurveArrow(p, pos=pos) xr = pw2.viewRect().left(), pw2.viewRect().right() if time < xr[0] or time > xr[1]: w = xr[1]-xr[0] pw2.setXRange(time-w/5., time+4*w/5., padding=0) fitLen = pt.data()['fitDecayTau']*pt.data()['fitLengthOverDecay'] x = np.linspace(time, time+fitLen, fitLen * 50e3) v = [pt.data()['fitAmplitude'], pt.data()['fitTime'], pt.data()['fitRiseTau'], pt.data()['fitDecayTau']] y = fn.pspFunc(v, x, risePower=2.0) + data[np.argwhere(data.xvals('Time')>time)[0]-1] pw2.plot(x, y, pen='b')
def plotClicked(plt, pts): pt = pts[0] #(id, fn, time) = pt.data #[['SourceFile', 'ProtocolSequenceDir', 'fitTime']] #fh = db.getDir('ProtocolSequence', id)[fn] fh = pt.data()['SourceFile'] id = pt.data()['ProtocolSequenceDir'] time = pt.data()['fitTime'] data = fh.read()['Channel':'primary'] data = fn.besselFilter(data, 8e3) p = pw2.plot(data, clear=True) pos = time / data.xvals('Time')[-1] arrow = pg.CurveArrow(p, pos=pos) xr = pw2.viewRect().left(), pw2.viewRect().right() if time < xr[0] or time > xr[1]: w = xr[1] - xr[0] pw2.setXRange(time - w / 5., time + 4 * w / 5., padding=0) fitLen = pt.data()['fitDecayTau'] * pt.data()['fitLengthOverDecay'] x = np.linspace(time, time + fitLen, fitLen * 50e3) v = [ pt.data()['fitAmplitude'], pt.data()['fitTime'], pt.data()['fitRiseTau'], pt.data()['fitDecayTau'] ] y = fn.pspFunc( v, x, risePower=2.0) + data[np.argwhere(data.xvals('Time') > time)[0] - 1] pw2.plot(x, y, pen='b')
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
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, basestring): 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