Exemplo n.º 1
0
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')
Exemplo n.º 2
0
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')
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
Exemplo n.º 4
0
Arquivo: Scan.py Projeto: ablot/acq4
 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