Changeset 420
- Timestamp:
- 08/20/09 01:01:14 (3 years ago)
- Files:
-
- 1 modified
-
branches/interval/src/signals/spikes.py (modified) (23 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/interval/src/signals/spikes.py
r419 r420 93 93 SpikeTrain 94 94 """ 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) 96 96 97 97 self.spike_times = self.interval.slice_times(numpy.array(spike_times, numpy.float32)) … … 245 245 34.2 246 246 """ 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) 248 248 249 249 rate_interval = rate_interval.intersect(self.interval) … … 378 378 """ 379 379 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) 381 381 382 382 if not raster_interval.is_equal(self.interval): … … 719 719 return F1/F0 720 720 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) : 722 722 if interval is not None: 723 723 # interval is fully defined by the user … … 727 727 interval_out = Interval(interval) 728 728 else: 729 if t_start == None and t_stop == None and self.interval :729 if t_start == None and t_stop == None and interval : 730 730 # absolutely no information provided on interval, but 731 731 # self has a well defined interval 732 interval_out = self.interval732 interval_out = interval 733 733 else : 734 734 # first analyse t_stop … … 784 784 ## Constructor and key methods to manipulate the SpikeList objects ## 785 785 ####################################################################### 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): 787 787 """ 788 788 Constructor of the SpikeList object … … 792 792 """ 793 793 #if t_start or t_stop: 794 795 self.interval = interval794 795 self.interval = extract_intervals_from_SpikeTrain_arguments(t_start, t_stop, interval) 796 796 self.dimensions = dims 797 797 self.spiketrains = {} … … 817 817 if id in id_list: 818 818 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 823 825 def id_list(self): 824 826 """ … … 842 844 return spklist 843 845 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) : 850 847 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) 862 889 else: 863 890 raise Exception("No SpikeTrains") 891 return interval_out 892 864 893 865 894 def __getitem__(self, id): … … 983 1012 spklists - could be a single SpikeList or a list of SpikeLists 984 1013 985 The concatenated SpikeLists must have similar (t_start, t_stop), and1014 The concatenated SpikeLists must have similar interval, and 986 1015 they can't shared similar cells. All their ids have to be different. 987 1016 … … 1027 1056 def complete(self, id_list): 1028 1057 """ 1029 Complete the SpikeList by adding Sempty SpikeTrain for all the ids present in1058 Complete the SpikeList by adding empty SpikeTrain for all the ids present in 1030 1059 ids that will not already be in the SpikeList 1031 1060 … … 1454 1483 1455 1484 1456 def mean_rate(self, interval=None):1485 def mean_rate(self, t_start=None, t_stop=None, interval=None): 1457 1486 """ 1458 1487 Return the mean firing rate averaged accross all SpikeTrains between t_start and t_stop. … … 1470 1499 mean_rates, mean_rate_std 1471 1500 """ 1501 interval = extract_intervals_from_SpikeList_arguments(t_start, t_stop, interval) 1502 1472 1503 return numpy.mean(self.mean_rates(interval)) 1473 1504 1474 1505 1475 def mean_rate_std(self, interval=None):1506 def mean_rate_std(self, t_start=None, t_stop=None, interval=None): 1476 1507 """ 1477 1508 Standard deviation of the firing rates accross all SpikeTrains … … 1490 1521 mean_rate, mean_rates 1491 1522 """ 1523 interval = extract_intervals_from_SpikeList_arguments(t_start, t_stop, interval) 1492 1524 return numpy.std(self.mean_rates(interval)) 1493 1525 1494 1526 1495 def mean_rates(self, interval=None):1527 def mean_rates(self, t_start=None, t_stop=None, interval=None): 1496 1528 """ 1497 1529 Returns a vector of the size of id_list giving the mean firing rate for each neuron … … 1505 1537 mean_rate, mean_rate_std 1506 1538 """ 1539 interval = extract_intervals_from_SpikeList_arguments(t_start, t_stop, interval) 1507 1540 rates = [] 1508 1541 for id in self.id_list(): … … 1700 1733 1701 1734 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={}): 1703 1736 """ 1704 1737 Generate a 2D map of the activity averaged between t_start and t_stop. … … 1730 1763 """ 1731 1764 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) 1736 1767 if not interval.is_equal(self.interval): 1737 1768 spklist = self.interval_slice(interval) … … 2024 2055 2025 2056 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={}): 2027 2058 """ 2028 2059 Generate a raster plot for the SpikeList in a subwindow of interest, … … 2052 2083 spk = self.id_slice(id_list) 2053 2084 2054 if interval is None: 2055 interval = spk.interval 2056 2085 interval = extract_intervals_from_SpikeTrain_arguments(t_start, t_stop, interval) 2057 2086 if not interval.is_equal(spk.interval): 2058 2087 spk = spk.interval_slice(interval) … … 2146 2175 2147 2176 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={}): 2149 2178 """ 2150 2179 Generate a movie of the activity between t_start and t_stop. … … 2180 2209 """ 2181 2210 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) 2186 2213 if not subplot or not HAVE_PYLAB: 2187 2214 print PYLAB_ERROR … … 2379 2406 ############################################################# 2380 2407 2381 def load_spikelist(user_file, id_list=None, interval=None, dims=None):2408 def load_spikelist(user_file, id_list=None, t_start=None, t_stop=None, interval=None, dims=None): 2382 2409 """ 2383 2410 Returns a SpikeList object from a file. If the file has been generated by PyNN, … … 2400 2427 The format of the file (text, pickle) will be inferred automatically 2401 2428 """ 2429 interval = extract_intervals_from_SpikeTrain_arguments(t_start, t_stop, interval) 2402 2430 spike_loader = DataHandler(user_file) 2403 2431 return spike_loader.load_spikes(id_list=id_list, interval=interval, dims=dims)
