Changeset 420

Show
Ignore:
Timestamp:
08/20/09 01:01:14 (3 years ago)
Author:
lestebanez
Message:

spikes.py : finished to implement the trick for Interval/t_start-t_stop compatibility... This code doesn't yet compile...

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/interval/src/signals/spikes.py

    r419 r420  
    9393            SpikeTrain 
    9494        """ 
    95         self.interval = extract_intervals_from_function_arguments(t_start, t_stop, interval) 
     95        self.interval = extract_intervals_from_SpikeTrain_arguments(t_start, t_stop, interval) 
    9696         
    9797        self.spike_times = self.interval.slice_times(numpy.array(spike_times, numpy.float32)) 
     
    245245                34.2 
    246246        """ 
    247         rate_interval = extract_intervals_from_function_arguments(t_start, t_stop, interval) 
     247        rate_interval = extract_intervals_from_SpikeTrain_arguments(t_start, t_stop, interval) 
    248248 
    249249        rate_interval = rate_interval.intersect(self.interval) 
     
    378378        """ 
    379379         
    380         raster_interval = extract_intervals_from_function_arguments(t_start, t_stop, interval) 
     380        raster_interval = extract_intervals_from_SpikeTrain_arguments(t_start, t_stop, interval) 
    381381 
    382382        if not raster_interval.is_equal(self.interval): 
     
    719719        return F1/F0 
    720720 
    721     def extract_intervals_from_function_arguments(self, t_start=None, t_stop=None, interval=None) : 
     721    def extract_intervals_from_SpikeTrain_arguments(self, t_start=None, t_stop=None, interval=None) : 
    722722        if interval is not None: 
    723723            # interval is fully defined by the user 
     
    727727                interval_out = Interval(interval)  
    728728        else:  
    729             if t_start == None and t_stop == None and self.interval : 
     729            if t_start == None and t_stop == None and interval : 
    730730                # absolutely no information provided on interval, but 
    731731                # self has a well defined interval 
    732                 interval_out = self.interval 
     732                interval_out = interval 
    733733            else : 
    734734                # first analyse t_stop 
     
    784784    ## Constructor and key methods to manipulate the SpikeList objects   ## 
    785785    ####################################################################### 
    786     def __init__(self, spikes, id_list, interval=None, dims=None): 
     786    def __init__(self, spikes, id_list, t_start=None, t_stop=None, interval=None, dims=None): 
    787787        """ 
    788788        Constructor of the SpikeList object 
     
    792792        """ 
    793793        #if t_start or t_stop: 
    794              
    795         self.interval    = interval 
     794 
     795        self.interval = extract_intervals_from_SpikeTrain_arguments(t_start, t_stop, interval) 
    796796        self.dimensions  = dims 
    797797        self.spiketrains = {} 
     
    817817                if id in id_list: 
    818818                    self.spiketrains[id] = SpikeTrain(spikes[break_points[idx]:break_points[idx+1], 1], interval=self.interval) 
    819          
    820         if len(self) > 0 and (self.interval is None): 
    821             self.__calc_startstop() 
    822  
     819 
     820        if len(self) > 0: 
     821            for id in self.spiketrains.keys(): 
     822                self.spiketrains[id].interval.intersect(SpikeList_interval) 
     823 
     824         
    823825    def id_list(self): 
    824826        """  
     
    842844        return spklist 
    843845 
    844     def __calc_startstop(self): 
    845         """ 
    846         t_start and t_stop are shared for all neurons, so we take min and max values respectively. 
    847         TO DO : check the t_start and t_stop parameters for a SpikeList. Is it commun to 
    848         all the spikeTrains within the spikelist or each spikelistes do need its own. 
    849         """ 
     846    def extract_intervals_from_SpikeList_arguments(self, t_start=None, t_stop=None, interval=None) : 
    850847        if len(self) > 0: 
    851             if self.interval is None: 
    852                 start_times = numpy.array([self.spiketrains[idx].interval.t_start() for idx in self.id_list()], numpy.float32) 
    853                 t_start = numpy.min(start_times) 
    854                 logging.debug("Warning, t_start is infered from the data : %f" %t_start) 
    855  
    856                 stop_times = numpy.array([self.spiketrains[idx].interval.t_stop() for idx in self.id_list()], numpy.float32) 
    857                 t_stop  = numpy.max(stop_times) 
    858                 logging.debug("Warning, t_stop  is infered from the data : %f" %t_stop) 
    859  
    860                 for id in self.spiketrains.keys(): 
    861                     self.spiketrains[id].interval = Interval((t_start, t_stop)) 
     848            if interval is not None: 
     849                # interval is fully defined by the user 
     850                if interval.__class__.__name__ == 'Interval' : 
     851                    interval_out = interval 
     852                else : 
     853                    interval_out = Interval(interval)  
     854            else:  
     855                if t_start == None and t_stop == None and interval : 
     856                    # absolutely no information provided on interval, but 
     857                    # self has a well defined interval 
     858                    interval_out = interval 
     859                else : 
     860                    # first analyse t_stop 
     861                    if t_stop == None : 
     862                        try: 
     863                            stop_times = numpy.array([self.spiketrains[idx].interval.t_stop() for idx in self.id_list()], numpy.float32) 
     864                            t_stop  = numpy.max(stop_times) 
     865                            logging.debug("Warning, t_stop  is infered from the data : %f" %t_stop) 
     866                        except Exception: 
     867                            print "Error in guessing t_stop (last spike), spikes may be empty !" 
     868                            t_stop = 0.1 
     869                     
     870                    # then analyse t_start (ovewrite t_stop if t_start is actually an interval) 
     871                    if t_start == None :  # no t_start 
     872                        try: 
     873                            start_times = numpy.array([self.spiketrains[idx].interval.t_start() for idx in self.id_list()], numpy.float32) 
     874                            t_start = numpy.min(start_times) 
     875                            logging.debug("Warning, t_start is infered from the data : %f" %t_start) 
     876                        except Exception: 
     877                            print "Error in guessing t_start (first spike), spikes may be empty !" 
     878                            t_start = 0 
     879                        interval_out = Interval([[t_start, t_stop]]) 
     880                    else : 
     881                        if t_start.__class__.__name == 'float' or t_start.__class__.__name == 'int' : 
     882                            # migrate the t_start/t_stop notation to an Interval  
     883                            interval_out = Interval([[t_start, t_stop]])  
     884                        else : 
     885                            if t_start.__class__.__name__ == 'Interval' : 
     886                                interval_out = interval 
     887                            else : 
     888                                interval_out = Interval(interval) 
    862889        else: 
    863890            raise Exception("No SpikeTrains") 
     891        return interval_out 
     892 
    864893 
    865894    def __getitem__(self, id): 
     
    9831012            spklists - could be a single SpikeList or a list of SpikeLists 
    9841013         
    985         The concatenated SpikeLists must have similar (t_start, t_stop), and 
     1014        The concatenated SpikeLists must have similar interval, and 
    9861015        they can't shared similar cells. All their ids have to be different. 
    9871016         
     
    10271056    def complete(self, id_list): 
    10281057        """ 
    1029         Complete the SpikeList by adding Sempty SpikeTrain for all the ids present in 
     1058        Complete the SpikeList by adding empty SpikeTrain for all the ids present in 
    10301059        ids that will not already be in the SpikeList 
    10311060         
     
    14541483             
    14551484 
    1456     def mean_rate(self, interval=None): 
     1485    def mean_rate(self, t_start=None, t_stop=None, interval=None): 
    14571486        """ 
    14581487        Return the mean firing rate averaged accross all SpikeTrains between t_start and t_stop. 
     
    14701499            mean_rates, mean_rate_std 
    14711500        """ 
     1501        interval = extract_intervals_from_SpikeList_arguments(t_start, t_stop, interval) 
     1502 
    14721503        return numpy.mean(self.mean_rates(interval)) 
    14731504 
    14741505 
    1475     def mean_rate_std(self, interval=None): 
     1506    def mean_rate_std(self, t_start=None, t_stop=None, interval=None): 
    14761507        """ 
    14771508        Standard deviation of the firing rates accross all SpikeTrains  
     
    14901521            mean_rate, mean_rates 
    14911522        """ 
     1523        interval = extract_intervals_from_SpikeList_arguments(t_start, t_stop, interval) 
    14921524        return numpy.std(self.mean_rates(interval)) 
    14931525 
    14941526 
    1495     def mean_rates(self, interval=None): 
     1527    def mean_rates(self, t_start=None, t_stop=None, interval=None): 
    14961528        """  
    14971529        Returns a vector of the size of id_list giving the mean firing rate for each neuron 
     
    15051537            mean_rate, mean_rate_std 
    15061538        """ 
     1539        interval = extract_intervals_from_SpikeList_arguments(t_start, t_stop, interval) 
    15071540        rates = [] 
    15081541        for id in self.id_list(): 
     
    17001733 
    17011734     
    1702     def activity_map(self, interval=None, float_positions=None, display=False, kwargs={}): 
     1735    def activity_map(self, t_start=None, t_stop=None, interval=None, float_positions=None, display=False, kwargs={}): 
    17031736        """ 
    17041737        Generate a 2D map of the activity averaged between t_start and t_stop. 
     
    17301763        """ 
    17311764        subplot = get_display(display) 
    1732          
    1733         if interval is None: 
    1734             interval = self.interval 
    1735          
     1765 
     1766        interval = extract_intervals_from_SpikeTrain_arguments(t_start, t_stop, interval)         
    17361767        if not interval.is_equal(self.interval): 
    17371768            spklist = self.interval_slice(interval) 
     
    20242055 
    20252056 
    2026     def raster_plot(self, id_list=None, interval=None, display=True, kwargs={}): 
     2057    def raster_plot(self, id_list=None, t_start=None, t_stop=None, interval=None, display=True, kwargs={}): 
    20272058        """ 
    20282059        Generate a raster plot for the SpikeList in a subwindow of interest, 
     
    20522083            spk = self.id_slice(id_list) 
    20532084 
    2054         if interval is None: 
    2055             interval = spk.interval 
    2056  
     2085        interval = extract_intervals_from_SpikeTrain_arguments(t_start, t_stop, interval)    
    20572086        if not interval.is_equal(spk.interval): 
    20582087            spk = spk.interval_slice(interval) 
     
    21462175 
    21472176 
    2148     def activity_movie(self, time_bin=10, interval=None, float_positions=None, output="animation.mpg", bounds=(0,5), fps=10, display=True, kwargs={}): 
     2177    def activity_movie(self, time_bin=10, t_start=None, t_stop=None, interval=None, float_positions=None, output="animation.mpg", bounds=(0,5), fps=10, display=True, kwargs={}): 
    21492178        """ 
    21502179        Generate a movie of the activity between t_start and t_stop. 
     
    21802209        """ 
    21812210        subplot = get_display(display) 
    2182          
    2183         if interval is None: 
    2184             interval = self.interval 
    2185  
     2211 
     2212        interval = extract_intervals_from_SpikeTrain_arguments(t_start, t_stop, interval)    
    21862213        if not subplot or not HAVE_PYLAB: 
    21872214            print PYLAB_ERROR 
     
    23792406############################################################# 
    23802407 
    2381 def load_spikelist(user_file, id_list=None, interval=None, dims=None): 
     2408def load_spikelist(user_file, id_list=None, t_start=None, t_stop=None, interval=None, dims=None): 
    23822409    """ 
    23832410    Returns a SpikeList object from a file. If the file has been generated by PyNN,  
     
    24002427    The format of the file (text, pickle) will be inferred automatically 
    24012428    """ 
     2429    interval = extract_intervals_from_SpikeTrain_arguments(t_start, t_stop, interval)    
    24022430    spike_loader = DataHandler(user_file) 
    24032431    return spike_loader.load_spikes(id_list=id_list, interval=interval, dims=dims)