Changeset 401 for trunk

Show
Ignore:
Timestamp:
06/16/09 16:45:16 (3 years ago)
Author:
pierre
Message:

Fix a bug in psth, do some improvement on the interval.py file

Location:
trunk/src
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/io.py

    r400 r401  
    160160        try: 
    161161            import TableIO 
    162             data = TableIO.readTableAsArray(self.filename, skipchar) 
     162            data = numpy.fliplr(TableIO.readTableAsArray(self.filename, skipchar)) 
    163163        except ImportError: 
    164164            myfile = open(self.filename, "r", DEFAULT_BUFFER_SIZE) 
  • trunk/src/signals/intervals.py

    r393 r401  
    11from NeuroTools import check_dependency 
    22 
    3 if check_dependency('interval'): 
     3HAVE_INTERVAL = check_dependency('interval') 
     4 
     5if HAVE_INTERVAL: 
    46    from interval import *  
    57 
     
    2527 
    2628        """ 
    27         self.start_times = start_times 
    28         self.end_times   = end_times 
    29         # write the intervals to an interval object (pyinterval) 
    30         if len(start_times) != len(end_times) : 
    31             raise Exception("There sould be an equal number of starts and stops") 
    32         self.interval_data = interval(*numpy.transpose(numpy.array([start_times,end_times]))) 
    33          
     29        if HAVE_INTERVAL: 
     30            self.start_times = start_times 
     31            self.end_times   = end_times 
     32            # write the intervals to an interval object (pyinterval) 
     33            test = isinstance(start_times, int) or isinstance(start_times, float) 
     34            if test: 
     35                start_times = [start_times] 
     36            test = isinstance(end_times, int) or isinstance(end_times, float) 
     37            if test: 
     38                end_times = [end_times] 
     39            if len(start_times) != len(end_times) : 
     40                raise Exception("There sould be an equal number of starts and stops") 
     41            self.interval_data = interval(*numpy.transpose(numpy.array([start_times,end_times]))) 
     42        else: 
     43            test = isinstance(start_times, int) or isinstance(start_times, float) 
     44            assert test, "Interval package not present, start_times should be a number !" 
     45            test = isinstance(end_times, int) or isinstance(end_times, float) 
     46            assert test, "Interval package not present, end_times should be a number !" 
     47            self.start_times = start_times 
     48            self.end_times   = end_times 
     49 
    3450    def intersect(self, itv) : 
    3551        self.interval_data = self.interval_data & itv.interval_data 
     
    5672        bounds = self.interval_data.extrema 
    5773        return (bounds[0][0],bounds[-1][0]) 
     74     
     75    def t_start(self): 
     76        if HAVE_INTERVAL: 
     77            return self.interval_data.extrema[0][0] 
     78        else: 
     79            return self.start_times[0] 
     80     
     81    def t_stop(self): 
     82        if HAVE_INTERVAL: 
     83            return self.interval_data.extrema[-1][0] 
     84        else: 
     85            return self.end_times[0] 
    5886     
    5987    def copy(self): 
     
    106134        return tot_duration 
    107135 
     136 
     137    def slice_times(self, times): 
     138        spikes_selector = numpy.zeros(len(times), dtype=numpy.bool) 
     139        if HAVE_INTERVAL: 
     140            for itv in self.interval_data : 
     141                spikes_selector = spikes_selector + (times > itv[0])*(times <= itv[1]) 
     142        else: 
     143            spikes_selector = (times >= self.t_start()) & (times <= self.t_stop()) 
     144        return numpy.extract(spikes_selector, times) 
     145 
     146 
     147 
    108148#def build_psth(spiketrain, eventtrain, before_Dt, after_Dt, intervals=None): 
    109149    #"""          
  • trunk/src/signals/spikes.py

    r397 r401  
    401401        return axis 
    402402 
    403     def raster_plot(self, t_start=None, t_stop=None, display=True, kwargs={}): 
     403    def raster_plot(self, t_start=None, t_stop=None, interval=None, display=True, kwargs={}): 
    404404        """ 
    405405        Generate a raster plot with the SpikeTrain in a subwindow of interest, 
     
    422422        if t_start is None: t_start = self.t_start 
    423423        if t_stop is None:  t_stop = self.t_stop 
    424         spikes = numpy.extract((self.spike_times >= t_start) & (self.spike_times <= t_stop), self.spike_times) 
     424         
     425        if interval is None: 
     426            interval = Interval(t_start, t_stop) 
     427         
     428        spikes  = interval.slice_times(self.spike_times) 
    425429        subplot = get_display(display) 
    426430        if not subplot or not HAVE_PYLAB: 
     
    488492                100 
    489493        """ 
    490         spikes_selector = numpy.zeros(len(self.spike_times), dtype=numpy.bool) 
     494        times           = interval.slice_times(self.spike_times) 
    491495        t_start, t_stop = interval.time_parameters() 
    492         for itv in interval.interval_data : 
    493             spikes_selector = spikes_selector + (self.spike_times > itv[0])*(self.spike_times <= itv[1])    
    494         return SpikeTrain(numpy.extract(spikes_selector, self.spike_times), t_start, t_stop) 
     496        return SpikeTrain(times, t_start, t_stop) 
     497         
    495498 
    496499    def time_histogram(self, time_bin=10, normalized=True): 
     
    20072010        t_min_l  = numpy.floor(t_min/time_bin) 
    20082011        t_max_l  = numpy.floor(t_max/time_bin) 
     2012        t_start  = numpy.floor(self.t_start/time_bin) 
     2013        t_stop   = numpy.floor(self.t_stop/time_bin) 
    20092014        for ev in events: 
    2010            ev = int((ev-self.t_start)/time_bin) 
    2011            if (ev > self.t_start + t_min_l) and ev < self.t_stop-t_max_l: 
     2015           ev = int((ev-t_start)/time_bin) 
     2016           if ((ev -t_min_l )> t_start) and (ev +t_max_l ) < t_stop: 
    20122017               count  += 1 
    20132018               result += spk_hist[:,(ev-t_min_l):ev+t_max_l]