Changeset 422 for branches

Show
Ignore:
Timestamp:
08/24/09 23:20:02 (3 years ago)
Author:
lestebanez
Message:

spikes : debuging : reduce the unit test FAILURE from 6 to 4. Modified the init of SpikeList to ensure
that even IDs with zero spikes are kept in the SpikeList (to complie with unit test TestMerge?)

Location:
branches/interval/src/signals
Files:
2 modified

Legend:

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

    r417 r422  
    4040        for item in sub_intervals: 
    4141            assert (len(item) == 2), "Intervals must be a list of tuple (t_start, t_stop) !" 
    42             assert item[1] > item[0], "Intervals must have tuple with t_start < t_stop !" 
     42            assert item[1] >= item[0], "Intervals must have tuple with t_start < t_stop !" 
    4343     
    4444    def __str__(self): 
  • branches/interval/src/signals/spikes.py

    r421 r422  
    9393            SpikeTrain 
    9494        """ 
    95         self.interval = self.extract_intervals_from_SpikeTrain_arguments(t_start, t_stop, interval) 
    96          
    97         self.spike_times = self.interval.slice_times(numpy.array(spike_times, numpy.float32)) 
     95        self.spike_times = spike_times 
     96        self.interval = self.extract_intervals_from_SpikeTrain_arguments(t_start, t_stop, interval)         
     97        self.spike_times = self.interval.slice_times(numpy.array(self.spike_times, numpy.float32)) 
    9898 
    9999        # We sort the spike_times. May be slowe, but required for 
     
    110110        else:  
    111111            if t_start == None and t_stop == None : 
    112                 if self.interval : 
    113                     # absolutely no information provided on interval argument, nor t_start or t_stop, but 
    114                     # self has a well defined interval 
    115                     interval_out = self.interval 
    116                 else : 
    117                     try: 
    118                         t_start = min(self.spike_times) 
    119                     except Exception: 
    120                         print "Error in guessing t_start (first spike), spikes may be empty !" 
    121                         t_start = 0 
    122                     try: 
    123                         t_stop  = max(self.spike_times) 
    124                     except Exception: 
    125                         print "Error in guessing t_stop (last spike), spikes may be empty !" 
    126                         t_stop = t_start+0.1 
    127                     interval_out = Interval([[t_start, t_stop]]) 
     112                try: 
     113                    t_start = min(self.spike_times) 
     114                except Exception: 
     115                    print "Error in guessing t_start (first spike), spikes may be empty !" 
     116                    t_start = 0 
     117                try: 
     118                    t_stop  = max(self.spike_times) 
     119                except Exception: 
     120                    print "Error in guessing t_stop (last spike), spikes may be empty !" 
     121                    t_stop = t_start+0.1 
     122                interval_out = Interval([[t_start, t_stop]]) 
    128123            else : 
    129124                if t_start == None : 
     
    152147        return str(self.spike_times) 
    153148 
    154     def __format__(self): 
    155         return 'hella' 
    156  
    157149    def __len__(self): 
    158150        return len(self.spike_times) 
     
    803795        #if t_start or t_stop: 
    804796 
    805         self.interval = extract_intervals_from_SpikeTrain_arguments(t_start, t_stop, interval) 
    806797        self.dimensions  = dims 
    807798        self.spiketrains = {} 
     
    823814            break_points = numpy.concatenate(([0], break_points)) 
    824815            break_points = numpy.concatenate((break_points, [N])) 
     816 
     817            # even if a spikeTrain is empty, add ID to the cell list 
     818            for id in id_list: 
     819                self.spiketrains[id] = SpikeTrain([]) 
     820            # if there are spikes corresponding to an ID, add it 
    825821            for idx in xrange(len(break_points)-1): 
    826822                id = spikes[break_points[idx], 0] 
    827823                if id in id_list: 
    828                     self.spiketrains[id] = SpikeTrain(spikes[break_points[idx]:break_points[idx+1], 1], interval=self.interval) 
    829  
     824                    self.spiketrains[id] = SpikeTrain(spikes[break_points[idx]:break_points[idx+1], 1]) 
     825        self.interval = self.extract_intervals_from_SpikeList_arguments(t_start, t_stop, interval) 
    830826        if len(self) > 0: 
    831827            for id in self.spiketrains.keys(): 
    832                 self.spiketrains[id].interval.intersect(SpikeList_interval) 
     828                self.spiketrains[id].interval = self.interval 
    833829 
    834830         
     
    849845        Return a copy of the SpikeList object 
    850846        """ 
     847 
    851848        spklist = SpikeList([], [], self.interval, self.dimensions) 
    852849        for id in self.id_list(): 
    853             spklist.append(id, self.spiketrains[id]) 
     850            spklist.append(float(id), self.spiketrains[float(id)]) 
    854851        return spklist 
    855852 
    856     def extract_intervals_from_SpikeList_arguments(self, t_start=None, t_stop=None, interval=None) : 
    857         if len(self) > 0: 
    858             if interval is not None: 
    859                 # interval is fully defined by the user 
    860                 if interval.__class__.__name__ == 'Interval' : 
    861                     interval_out = interval 
    862                 else : 
    863                     interval_out = Interval(interval)  
    864             else:  
    865                 if t_start == None and t_stop == None : 
    866                     if self.interval : 
    867                         # absolutely no information provided on interval argument, nor t_start or t_stop, but 
    868                         # self has a well defined interval 
    869                         interval_out = self.interval 
    870                     else : 
    871                         try: 
    872                             start_times = numpy.array([self.spiketrains[idx].interval.t_start() for idx in self.id_list()], numpy.float32) 
    873                             t_start = numpy.min(start_times) 
    874                             logging.debug("Warning, t_start is infered from the data : %f" %t_start) 
    875                         except Exception: 
    876                             print "Error in guessing t_start (first spike), spikes may be empty !" 
    877                             t_start = 0 
    878                         try: 
    879                             stop_times = numpy.array([self.spiketrains[idx].interval.t_stop() for idx in self.id_list()], numpy.float32) 
    880                             t_stop  = numpy.max(stop_times) 
    881                             logging.debug("Warning, t_stop  is infered from the data : %f" %t_stop)      
    882                         except Exception: 
    883                             t_stop = t_start + 0.1 
    884                             print "Error in guessing t_stop (last spike), spikes may be empty !" 
    885                         interval_out = Interval([[t_start, t_stop]]) 
    886                 else : 
    887                     if t_start == None : 
    888                         try: 
    889                             start_times = numpy.array([self.spiketrains[idx].interval.t_start() for idx in self.id_list()], numpy.float32) 
    890                             t_start = numpy.min(start_times) 
    891                             logging.debug("Warning, t_start is infered from the data : %f" %t_start) 
    892                         except Exception: 
    893                             print "Error in guessing t_stop (last spike), spikes may be empty !" 
    894                             t_start = 0 
    895                         interval_out = Interval([[t_start, t_stop]]) 
    896                     if t_stop == None : 
    897                         if t_start.__class__.__name__ == 'float' or t_start.__class__.__name__ == 'int' : 
    898                             try: 
    899                                 stop_times = numpy.array([self.spiketrains[idx].interval.t_stop() for idx in self.id_list()], numpy.float32) 
    900                                 t_stop  = numpy.max(stop_times) 
    901                                 logging.debug("Warning, t_stop  is infered from the data : %f" %t_stop)  
    902                             except Exception: 
    903                                 print "Error in guessing t_stop (last spike), spikes may be empty !" 
    904                                 t_stop = t_start+0.1 
    905                             interval_out = Interval([[t_start, t_stop]])  
    906                         else : 
    907                             if t_start.__class__.__name__ == 'Interval' : 
    908                                 interval_out = t_start 
    909                             else : 
    910                                 interval_out = Interval(t_start) 
    911         else: 
    912             raise Exception("No SpikeTrains") 
    913         return interval_out 
    914  
    915  
    916     def extract_intervals_from_SpikeTrain_arguments(self, t_start=None, t_stop=None, interval=None) : 
     853    def extract_intervals_from_SpikeList_arguments(self, t_start, t_stop, interval) : 
    917854        if interval is not None: 
    918855            # interval is fully defined by the user 
     
    923860        else:  
    924861            if t_start == None and t_stop == None : 
    925                 if self.interval : 
    926                     # absolutely no information provided on interval argument, nor t_start or t_stop, but 
    927                     # self has a well defined interval 
    928                     interval_out = self.interval 
    929                 else : 
    930                     try: 
    931                         t_start = min(self.spike_times) 
    932                     except Exception: 
    933                         print "Error in guessing t_start (first spike), spikes may be empty !" 
    934                         t_start = 0 
    935                     try: 
    936                         t_stop  = max(self.spike_times) 
    937                     except Exception: 
    938                         print "Error in guessing t_stop (last spike), spikes may be empty !" 
    939                         t_stop = t_start+0.1 
    940                     interval_out = Interval([[t_start, t_stop]]) 
     862                try: 
     863                    start_times = numpy.array([self.spiketrains[idx].interval.t_start() for idx in self.id_list()], numpy.float32) 
     864                    t_start = numpy.min(start_times) 
     865                    logging.debug("Warning, t_start is infered from the data : %f" %t_start) 
     866                except Exception: 
     867                    print "Error in guessing t_start (first spike), spikes may be empty !" 
     868                    t_start = 0 
     869                try: 
     870                    stop_times = numpy.array([self.spiketrains[idx].interval.t_stop() for idx in self.id_list()], numpy.float32) 
     871                    t_stop  = numpy.max(stop_times) 
     872                    logging.debug("Warning, t_stop  is infered from the data : %f" %t_stop)      
     873                except Exception: 
     874                    t_stop = t_start + 0.1 
     875                    print "Error in guessing t_stop (last spike), spikes may be empty !" 
     876                interval_out = Interval([[t_start, t_stop]]) 
    941877            else : 
    942878                if t_start == None : 
    943879                    try: 
    944                         t_stop  = max(self.spike_times) 
     880                        start_times = numpy.array([self.spiketrains[idx].interval.t_start() for idx in self.id_list()], numpy.float32) 
     881                        t_start = numpy.min(start_times) 
     882                        logging.debug("Warning, t_start is infered from the data : %f" %t_start) 
    945883                    except Exception: 
    946884                        print "Error in guessing t_stop (last spike), spikes may be empty !" 
    947                         t_stop = t_start+0.1 
     885                        t_start = 0 
    948886                    interval_out = Interval([[t_start, t_stop]]) 
    949887                if t_stop == None : 
    950888                    if t_start.__class__.__name__ == 'float' or t_start.__class__.__name__ == 'int' : 
    951889                        try: 
    952                             t_stop  = max(self.spike_times) 
     890                            stop_times = numpy.array([self.spiketrains[idx].interval.t_stop() for idx in self.id_list()], numpy.float32) 
     891                            t_stop  = numpy.max(stop_times) 
     892                            logging.debug("Warning, t_stop  is infered from the data : %f" %t_stop)      
    953893                        except Exception: 
    954894                            print "Error in guessing t_stop (last spike), spikes may be empty !" 
     
    11181058        for id, spiketrain in spikelist.spiketrains.items(): 
    11191059            if id in self.id_list(): 
    1120                 self.spiketrains[id].merge(spiketrain, relative) 
     1060                self.spiketrains[id].merge(spiketrain) 
    11211061            else: 
    11221062                if relative: