Changeset 409

Show
Ignore:
Timestamp:
07/16/09 14:19:41 (3 years ago)
Author:
pierre
Message:

More and more intervals fixes, addition of a nex wrapper to read .nex files. should be slightly reorganized and commented

Location:
branches/interval
Files:
3 added
5 modified

Legend:

Unmodified
Added
Removed
  • branches/interval/setup.py

    r400 r409  
    1111                'NeuroTools.tisean', 
    1212                'NeuroTools.spike2', 
     13                'NeuroTools.nex', 
    1314                'NeuroTools.signals', 
    1415                'NeuroTools.spike2.sonpy', 
  • branches/interval/src/__init__.py

    r400 r409  
    3535""" 
    3636 
    37 __all__ = ['analysis', 'parameters', 'plotting', 'signals', 'stgen', 'io', 'datastore', 'utilities', 'spike2', 'random', 'optimize', 'tisean'] 
     37__all__ = ['analysis', 'parameters', 'plotting', 'signals', 'stgen', 'io', 'datastore', 'utilities', 'spike2', 'random', 'optimize', 'tisean', 'nex'] 
    3838__version__ = "0.1.0 (Asynchronous Astrocyte)" 
    3939 
  • branches/interval/src/signals/intervals.py

    r408 r409  
    145145        self.interval_data += shift 
    146146 
    147  
    148  
    149  
    150  
    151  
    152  
    153  
    154  
    155  
    156  
    157  
    158  
    159  
    160  
    161  
    162     def offset(self, start=None, end=None) : 
    163         """ 
    164         Modifies globally the intervals by offsetting the start and end of the stimulation.  
    165          
    166         The start and/or stop arguments should be tuples (limit, offset) where limit 
    167         defines the reference limit (0 : start, 1: end) from where the new value is 
    168         defined by adding the offset value to the current start/end.           
    169         """ 
    170         n_intervals = len(list(self.interval_data)) 
    171         new_iv = zeros((n_intervals,2)) 
    172         if start is None : 
    173             for i in range(n_intervals) : 
    174                 new_iv[i,0] = self.interval_data[i][0] 
    175         else : 
    176             if start[0] == 0 : 
    177                 for i in range(n_intervals) : 
    178                     new_iv[i,0] = self.interval_data[i][0] + start[1] 
    179             if start[0] == 1 : 
    180                 for i in range(n_intervals) : 
    181                     new_iv[i,0] = self.interval_data[i][1] + start[1] 
    182          
    183         if end is None : 
    184             for i in range(n_intervals) : 
    185                 new_iv[i,1] = self.interval_data[i][1] 
    186         else : 
    187             if end[0] == 0 : 
    188                 for i in range(n_intervals) : 
    189                     new_iv[i,1] = self.interval_data[i][0] + end[1] 
    190             if end[0] == 1 : 
    191                 for i in range(n_intervals) : 
    192                     new_iv[i,1] = self.interval_data[i][1] + end[1] 
    193  
    194         self.interval_data = interval(*list(new_iv)) 
    195  
    196147    def total_duration(self) : 
    197148        """ 
     
    203154        return tot_duration 
    204155 
    205  
    206156    def slice_times(self, times): 
    207157        spikes_selector = numpy.zeros(len(times), dtype=numpy.bool) 
     
    212162            spikes_selector = (times >= self.t_start()) & (times <= self.t_stop()) 
    213163        return numpy.extract(spikes_selector, times) 
     164 
     165    def idx_slice_times(self, times): 
     166        spikes_selector = numpy.zeros(len(times), dtype=numpy.bool) 
     167        if HAVE_INTERVAL: 
     168            for itv in self.interval_data : 
     169                spikes_selector = spikes_selector + (times > itv[0])*(times <= itv[1]) 
     170        else: 
     171            spikes_selector = (times >= self.t_start()) & (times <= self.t_stop()) 
     172        return spikes_selector 
    214173 
    215174    def is_equal(self, itv) : 
  • branches/interval/src/signals/spikes.py

    r408 r409  
    390390            interval = self.interval 
    391391         
    392         spikes  = interval.slice_times(self.spike_times) 
     392        if not interval.is_equal(self.interval): 
     393            spikes  = interval.slice_times(self.spike_times) 
     394        else: 
     395            spikes = self 
     396 
    393397        subplot = get_display(display) 
    394398        if not subplot or not HAVE_PYLAB: 
     
    607611        t_max_l  = numpy.floor(t_max/time_bin) 
    608612        result   = numpy.zeros((t_min_l+t_max_l), numpy.float32) 
    609         t_start  = numpy.floor(self.t_start/time_bin) 
    610         t_stop   = numpy.floor(self.t_stop/time_bin) 
    611613        for ev in events: 
    612            ev = numpy.floor(ev/time_bin) 
    613            if ((ev - t_min_l )> t_start) and (ev + t_max_l ) < t_stop: 
     614           itv = Interval((ev-t_min,ev+t_max)) 
     615           ev  = numpy.floor(ev/time_bin) 
     616           if itv.intersect(self.interval).total_duration() == (t_max+t_min): 
    614617               count  += 1 
    615618               result += spk_hist[(ev-t_min_l):ev+t_max_l] 
     
    14321435            mean_rates, mean_rate_std 
    14331436        """ 
    1434         return numpy.mean(self.mean_rates(t_start, t_stop)) 
     1437        return numpy.mean(self.mean_rates(interval)) 
    14351438 
    14361439 
     
    16621665 
    16631666     
    1664     def activity_map(self, t_start=None, t_stop=None, float_positions=None, display=False, kwargs={}): 
     1667    def activity_map(self, interval=None, float_positions=None, display=False, kwargs={}): 
    16651668        """ 
    16661669        Generate a 2D map of the activity averaged between t_start and t_stop. 
     
    16931696        subplot = get_display(display) 
    16941697         
    1695         if t_start == None:  
    1696             t_start = self.t_start 
    1697         if t_stop  == None:  
    1698             t_stop  = self.t_stop 
    1699         if t_start != self.t_start or t_stop != self.t_stop: 
    1700             spklist = self.time_slice(t_start, t_stop) 
     1698        if interval is None: 
     1699            interval = self.interval 
     1700         
     1701        if not interval.is_equal(self.interval): 
     1702            spklist = self.interval_slice(interval) 
    17011703        else: 
    17021704            spklist = self 
     
    17171719                pylab.draw() 
    17181720        elif isinstance(float_positions, numpy.ndarray): 
    1719             if not len(spklist.id_list()) == len(float_positions[0]): 
     1721            if not len(spklist.id_list()) == len(fspike2loat_positions[0]): 
    17201722                raise Exception("Error, the number of flotting positions does not match the number of cells in the SpikeList") 
    17211723            rates = spklist.mean_rates() 
     
    18441846            raise Exception("The two SpikeList must have common time axis !") 
    18451847         
    1846         num_bins     = int(numpy.round((self.t_stop-self.t_start)/time_bin)+1) 
     1848        num_bins     = int(numpy.round((self.interval.t_stop()-self.interval.t_start())/time_bin)+1) 
    18471849        mat_neur1    = numpy.zeros((num_bins,N),int) 
    18481850        mat_neur2    = numpy.zeros((num_bins,N),int) 
     
    18561858        for idx in xrange(len(cells_id)): 
    18571859            ids2[numpy.where(ids2 == cells_id[idx])[0]] = idx 
    1858         times1  = numpy.array(((times1 - self.t_start)/time_bin),int) 
    1859         times2  = numpy.array(((times2 - self.t_start)/time_bin),int) 
     1860        times1  = numpy.array(((times1 - self.interval.t_start())/time_bin),int) 
     1861        times2  = numpy.array(((times2 - self.interval.t_stop())/time_bin),int) 
    18601862        mat_neur1[times1,ids1] = 1 
    18611863        mat_neur2[times2,ids2] = 1 
     
    18801882                xlabel  = "Time (ms)" 
    18811883                ylabel  = "Normalized CC" 
    1882                 subplot.plot(xaxis+self.t_start, cc_time, **kwargs) 
     1884                subplot.plot(xaxis+self.interval.t_start(), cc_time, **kwargs) 
    18831885                set_labels(subplot, xlabel, ylabel) 
    18841886                pylab.draw() 
     
    19781980        if not isinstance(spikelist, SpikeList): 
    19791981            raise Exception("Error, argument should be a SpikeList object") 
    1980         if not spikelist.time_parameters() == self.time_parameters(): 
    1981             raise Exception("Error, both SpikeLists should share common t_start, t_stop") 
     1982        if not spikelist.interval.is_equal(self.interval): 
     1983            raise Exception("Error, both SpikeLists should share common intervals") 
    19821984        frate_1 = self.firing_rate(time_bin, average=True) 
    19831985        frate_2 = spikelist.firing_rate(time_bin, average=True) 
     
    20252027        else: 
    20262028            ids, spike_times = spk.convert(format="[ids, times]") 
    2027             idx = numpy.where((spike_times >= t_start) & (spike_times <= t_stop))[0] 
    20282029            if len(spike_times) > 0: 
    20292030                subplot.plot(spike_times, ids, ',', **kwargs) 
     
    20772078        t_max_l  = numpy.floor(t_max/time_bin) 
    20782079        result   = numpy.zeros((len(self), t_min_l+t_max_l), numpy.float32) 
    2079         t_start  = numpy.floor(self.t_start/time_bin) 
    2080         t_stop   = numpy.floor(self.t_stop/time_bin) 
    20812080        for ev in events: 
    2082            ev = numpy.floor(ev/time_bin) 
    2083            if ((ev - t_min_l )> t_start) and (ev + t_max_l ) < t_stop: 
     2081           itv = Interval((ev-t_min,ev+t_max)) 
     2082           ev  = numpy.floor(ev/time_bin) 
     2083           if itv.intersect(self.interval).total_duration() == (t_max+t_min): 
    20842084               count  += 1 
    20852085               result += spk_hist[:,(ev-t_min_l):ev+t_max_l] 
     
    21112111 
    21122112 
    2113     def activity_movie(self, time_bin=10, t_start=None, t_stop=None, float_positions=None, output="animation.mpg", bounds=(0,5), fps=10, display=True, kwargs={}): 
     2113    def activity_movie(self, time_bin=10, interval=None, float_positions=None, output="animation.mpg", bounds=(0,5), fps=10, display=True, kwargs={}): 
    21142114        """ 
    21152115        Generate a movie of the activity between t_start and t_stop. 
     
    21452145        """ 
    21462146        subplot = get_display(display) 
    2147         if t_start is None: t_start = self.t_start 
    2148         if t_stop is None:  t_stop  = self.t_stop 
     2147         
     2148        if interval is None: 
     2149            interval = self.interval 
     2150 
    21492151        if not subplot or not HAVE_PYLAB: 
    21502152            print PYLAB_ERROR 
     
    21582160            idx       = 0 
    21592161            manager   = pylab.get_current_fig_manager() 
    2160             if t_start != self.t_start or t_stop != self.t_stop: 
    2161                 spk   = self.time_slice(t_start, t_stop) 
     2162            if not interval.is_equal(self.interval): 
     2163                spk   = self.interval_slice(interval) 
    21622164            else: 
    21632165                spk   = self 
     2166            t_start, t_stop = self.interval.time_parameters() 
    21642167            time, pos = spk.convert("times, ids") 
    21652168            # We sort the spikes to allow faster process later 
     
    23412344############################################################# 
    23422345 
    2343 def load_spikelist(user_file, id_list=None, t_start=None, t_stop=None, dims=None): 
     2346def load_spikelist(user_file, id_list=None, interval=None, dims=None): 
    23442347    """ 
    23452348    Returns a SpikeList object from a file. If the file has been generated by PyNN,  
     
    23632366    """ 
    23642367    spike_loader = DataHandler(user_file) 
    2365     return spike_loader.load_spikes(id_list=id_list, t_start=t_start, t_stop=t_stop, dims=dims) 
     2368    return spike_loader.load_spikes(id_list=id_list, interval=interval, dims=dims) 
    23662369 
    23672370 
  • branches/interval/test/test_spikes.py

    r395 r409  
    3636    def testCreateSpikeTrain(self): 
    3737        spk = spikes.SpikeTrain(numpy.arange(0,110,10)) 
    38         assert (spk.t_start == 0) and (spk.t_stop == 100) 
     38        t_start, t_stop = spk.time_parameters() 
     39        assert (t_start == 0) and (t_stop == 100) 
    3940        self.assert_( arrays_are_equal(spk.spike_times, numpy.arange(0,110,10)) ) 
    4041     
    4142    def testCreateSpikeTrainFromList(self): 
    4243        spk = spikes.SpikeTrain(range(0,110,10)) 
    43         assert (spk.t_start == 0) and (spk.t_stop == 100) 
     44        t_start, t_stop = spk.time_parameters() 
     45        assert (t_start == 0) and (t_stop == 100) 
    4446        self.assert_( arrays_are_equal(spk.spike_times, numpy.arange(0,110,10)) ) 
    4547     
    4648    def testCreateSpikeTrainFull(self): 
    47         spk = spikes.SpikeTrain(numpy.arange(0,110,10), 0, 100) 
    48         assert (spk.t_start == 0) and (spk.t_stop == 100) 
     49        spk = spikes.SpikeTrain(numpy.arange(0,110,10), (0, 100)) 
     50        t_start, t_stop = spk.time_parameters() 
     51        assert (t_start == 0) and (t_stop == 100) 
    4952     
    5053    def testCreateWithTStartOnly(self):