Changeset 427
- Timestamp:
- 08/25/09 14:31:39 (3 years ago)
- Location:
- branches/interval
- Files:
-
- 4 modified
-
src/io.py (modified) (1 diff)
-
src/signals/intervals.py (modified) (1 diff)
-
src/signals/spikes.py (modified) (32 diffs)
-
test/test_spikes.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/interval/src/io.py
r401 r427 195 195 p = self.__check_params(params) 196 196 from NeuroTools.signals import spikes 197 return spikes.SpikeList(self.get_data(), p['id_list'], p['t_start'], p['t_stop'],p['dims'])197 return spikes.SpikeList(self.get_data(), p['id_list'], t_start=p['t_start'], t_stop=p['t_stop'], dims=p['dims']) 198 198 199 199 def read_analogs(self, type, params): -
branches/interval/src/signals/intervals.py
r422 r427 102 102 Return a copy of the SpikeTrain object 103 103 """ 104 return Interval(self.s tart_times, self.end_times, self.t_start, self.t_stop)104 return Interval(self.sub_intervals) 105 105 106 106 def offset_start(self, shift, from_stop=False, colapse=False) : -
branches/interval/src/signals/spikes.py
r426 r427 25 25 """ 26 26 27 import os, re, numpy 28 import copy 29 import logging 27 import os, re, numpy, copy, logging 30 28 from NeuroTools import check_dependency, check_numpy_version, analysis 31 29 from NeuroTools.io import * … … 97 95 raise ValueError("spikes time stamps should be *positive* *numbers*") 98 96 99 self.interval = self. extract_intervals_from_SpikeTrain_arguments(t_start, t_stop, interval)100 self. update_t_start_and_t_stop()97 self.interval = self.create_intervals(t_start, t_stop, interval) 98 self.init_times() 101 99 102 100 if not (self.t_start >= 0) and (self.t_stop >= 0) : … … 110 108 111 109 112 def extract_intervals_from_SpikeTrain_arguments(self, t_start=None, t_stop=None, interval=None) :110 def create_intervals(self, t_start=None, t_stop=None, interval=None) : 113 111 if interval is not None: 114 112 # interval is fully defined by the user 115 if interval.__class__.__name__ == 'Interval':116 interval_out = interval 113 if type(interval) == Interval: 114 interval_out = interval.copy() 117 115 else : 118 116 interval_out = Interval(interval) 119 else: 120 if t_start == None and t_stop ==None :117 else: 118 if t_start is None and t_stop is None : 121 119 try: 122 120 t_start = numpy.min(self.spike_times) 123 121 except Exception: 124 print " Error in guessing t_start (first spike), spikes may be empty !"122 print "SpikeList error in guessing t_start (first spike), spikes may be empty !" 125 123 t_start = 0 126 124 try: 127 125 t_stop = numpy.max(self.spike_times) 128 126 except Exception: 129 print " Error in guessing t_stop (last spike), spikes may be empty !"127 print "SpikeList error in guessing t_stop (last spike), spikes may be empty !" 130 128 t_stop = t_start+0.1 131 129 interval_out = Interval([[t_start, t_stop]]) 132 else : 133 if t_start == None : 130 elif t_start is None and t_stop is not None: 131 try: 132 t_start = numpy.min(self.spike_times) 133 except Exception: 134 print "SpikeList error in guessing t_start (first spike), spikes may be empty !" 135 t_start = 0 136 interval_out = Interval([[t_start, t_stop]]) 137 elif t_start is not None and t_stop is not None: 138 interval_out = Interval([[t_start, t_stop]]) 139 elif t_start is not None and t_stop is None: 140 if type(t_start) == float or type(t_start) == int: 134 141 try: 135 t_st art = numpy.min(self.spike_times)142 t_stop = numpy.max(self.spike_times) 136 143 except Exception: 137 print "Error in guessing t_stop (last spike), spikes may be empty !" 138 t_start = 0 139 interval_out = Interval([[t_start, t_stop]]) 140 if t_stop == None : 141 if t_start.__class__.__name__ == 'float' or t_start.__class__.__name__ == 'int' : 142 try: 143 t_stop = numpy.max(self.spike_times) 144 except Exception: 145 print "Error in guessing t_stop (last spike), spikes may be empty !" 146 t_stop = t_start+0.1 147 interval_out = Interval([[t_start, t_stop]]) 148 else : 149 if t_start.__class__.__name__ == 'Interval' : 150 interval_out = t_start 151 else : 152 interval_out = Interval(t_start) 153 if not (t_start == None or t_stop == None) : 154 interval_out = Interval([[t_start, t_stop]]) 144 print "SpikeList error in guessing t_stop (last spike), spikes may be empty !" 145 t_stop = t_start+0.1 146 interval_out = Interval([[t_start, t_stop]]) 147 else : 148 if type(t_start) == Interval: 149 interval_out = t_start.copy() 150 else : 151 interval_out = Interval(t_start) 155 152 return interval_out 156 153 … … 173 170 return (self.interval.t_start(), self.interval.t_stop()) 174 171 175 def update_t_start_and_t_stop(self):172 def init_times(self): 176 173 """ 177 174 Update the t_start and t_stop constant to reflect the current t_start() and t_stop() methods 178 175 """ 179 176 self.t_start = self.interval.t_start() 180 self.t_stop = self.interval.t_stop()177 self.t_stop = self.interval.t_stop() 181 178 182 179 def is_equal(self, spktrain): … … 229 226 spiketrain.spike_times) 230 227 self.interval = self.interval.union(spiketrain.interval) 231 self. update_t_start_and_t_stop()228 self.init_times() 232 229 233 230 def format(self, relative=False, quantized=False): … … 304 301 34.2 305 302 """ 306 if not (t_start==None and t_stop==None and interval==None) : 307 rate_interval = self.extract_intervals_from_SpikeTrain_arguments(t_start, t_stop, interval)308 rate_interval = rate_interval.intersect(self.interval) 309 idx = rate_interval.slice_times(self.spike_times) 310 else : 311 idx = self.spike_times312 rate_interval = self.interval 313 314 return 1000.*len(idx)/ rate_interval.total_duration()303 304 interval = self.create_intervals(t_start, t_stop, interval) 305 306 if interval.is_equal(self.interval): 307 idx = self.spike_times 308 else: 309 interval = interval.intersect(self.interval) 310 idx = interval.slice_times(self.spike_times) 311 return 1000.*len(idx)/interval.total_duration() 315 312 316 313 def cv_isi(self, t_start=None, t_stop=None, interval=None): … … 416 413 """ 417 414 if newnum: 418 axis = numpy.arange(self. interval.t_start(), self.interval.t_stop()+time_bin, time_bin)419 else: 420 axis = numpy.arange(self. interval.t_start(), self.interval.t_stop(), time_bin)415 axis = numpy.arange(self.t_start, self.t_stop+time_bin, time_bin) 416 else: 417 axis = numpy.arange(self.t_start, self.t_stop, time_bin) 421 418 return axis 422 419 … … 440 437 """ 441 438 442 raster_interval = extract_intervals_from_SpikeTrain_arguments(t_start, t_stop, interval)439 raster_interval = self.create_intervals(t_start, t_stop, interval) 443 440 444 441 if not raster_interval.is_equal(self.interval): … … 476 473 self.interval.offset_full(offset) 477 474 self.spike_times += offset 478 self. update_t_start_and_t_stop()475 self.init_times() 479 476 480 477 … … 496 493 """ 497 494 interval = Interval((t_start, t_stop)) 498 sliced = self.interval_slice(interval) 499 sliced.update_t_start_and_t_stop() 500 return sliced 495 return self.interval_slice(interval) 501 496 502 497 def interval_slice(self, interval): … … 841 836 break_points = numpy.concatenate((break_points, [N])) 842 837 843 # even if a spikeTrain is empty, add ID to the cell list844 for id in id_list:845 self.spiketrains[id] = SpikeTrain([])846 838 # if there are spikes corresponding to an ID, add it 847 839 for idx in xrange(len(break_points)-1): … … 850 842 self.spiketrains[id] = SpikeTrain(spikes[break_points[idx]:break_points[idx+1], 1]) 851 843 852 self.interval = self. extract_intervals_from_SpikeList_arguments(t_start, t_stop, interval)844 self.interval = self.create_intervals(t_start, t_stop, interval) 853 845 854 846 if len(self) > 0: 855 847 for id in self.spiketrains.keys(): 856 self.spiketrains[id].interval = self.interval 857 self.spiketrains[id].update_t_start_and_t_stop() 858 859 self.update_t_start_and_t_stop() 848 self.spiketrains[id] = self.spiketrains[id].interval_slice(self.interval) 849 self.spiketrains[id].init_times() 850 851 self.init_times() 852 self.complete(id_list) 860 853 861 854 def id_list(self): … … 868 861 [0,1,2,3,....,9999] 869 862 """ 870 return numpy. array(self.spiketrains.keys(), int)863 return numpy.sort(numpy.array(self.spiketrains.keys(), int)) 871 864 872 865 def copy(self): … … 875 868 """ 876 869 877 spklist = SpikeList([], [], self.interval, self.dimensions)870 spklist = SpikeList([], [], None, None, self.interval, self.dimensions) 878 871 for id in self.id_list(): 879 872 spklist.append(float(id), self.spiketrains[float(id)]) 880 873 return spklist 881 874 882 def extract_intervals_from_SpikeList_arguments(self, t_start, t_stop, interval) :875 def create_intervals(self, t_start, t_stop, interval) : 883 876 if interval is not None: 884 877 # interval is fully defined by the user 885 if interval.__class__.__name__ == 'Interval':886 interval_out = interval 878 if type(interval) == Interval: 879 interval_out = interval.copy() 887 880 else : 888 881 interval_out = Interval(interval) 889 882 else: 890 if t_start == None and t_stop ==None :883 if t_start is None and t_stop is None : 891 884 try: 892 start_times = numpy.array([self.spiketrains[idx].t_start for idx in self.id_list()] , numpy.float32)893 t_start = numpy.min(start_times)885 start_times = numpy.array([self.spiketrains[idx].t_start for idx in self.id_list()]) 886 t_start = numpy.min(start_times) 894 887 logging.debug("Warning, t_start is infered from the data : %f" %t_start) 895 888 except Exception: 896 print " Error in guessing t_start (first spike), spikes may be empty !"889 print "SpikeList error in guessing t_start (first spike), spikes may be empty !" 897 890 t_start = 0 898 891 try: 899 stop_times = numpy.array([self.spiketrains[idx].t_stop for idx in self.id_list()] , numpy.float32)892 stop_times = numpy.array([self.spiketrains[idx].t_stop for idx in self.id_list()]) 900 893 t_stop = numpy.max(stop_times) 901 894 logging.debug("Warning, t_stop is infered from the data : %f" %t_stop) 902 895 except Exception: 903 896 t_stop = t_start + 0.1 904 print " Error in guessing t_stop (last spike), spikes may be empty !"897 print "SpikeList error in guessing t_stop (last spike), spikes may be empty !" 905 898 interval_out = Interval([[t_start, t_stop]]) 906 else : 907 if t_start == None : 899 elif t_start is None and t_stop is not None: 900 try: 901 start_times = numpy.array([self.spiketrains[idx].t_start for idx in self.id_list()]) 902 t_start = numpy.min(start_times) 903 logging.debug("Warning, t_start is infered from the data : %f" %t_start) 904 except Exception: 905 print "SpikeList error in guessing t_start (first spike), spikes may be empty !" 906 t_start = 0 907 interval_out = Interval([[t_start, t_stop]]) 908 elif t_start is not None and t_stop is not None: 909 interval_out = Interval([[t_start, t_stop]]) 910 elif t_start is not None and t_stop is None: 911 if type(t_start) == float or type(t_start) == int : 908 912 try: 909 st art_times = numpy.array([self.spiketrains[idx].t_start for idx in self.id_list()], numpy.float32)910 t_st art = numpy.min(start_times)911 logging.debug("Warning, t_st art is infered from the data : %f" %t_start)913 stop_times = numpy.array([self.spiketrains[idx].t_stop for idx in self.id_list()]) 914 t_stop = numpy.max(stop_times) 915 logging.debug("Warning, t_stop is infered from the data : %f" %t_stop) 912 916 except Exception: 913 print "Error in guessing t_stop (last spike), spikes may be empty !" 914 t_start = 0 915 interval_out = Interval([[t_start, t_stop]]) 916 if t_stop == None : 917 if t_start.__class__.__name__ == 'float' or t_start.__class__.__name__ == 'int' : 918 try: 919 stop_times = numpy.array([self.spiketrains[idx].t_stop for idx in self.id_list()], numpy.float64) 920 t_stop = numpy.max(stop_times) 921 logging.debug("Warning, t_stop is infered from the data : %f" %t_stop) 922 except Exception: 923 print "Error in guessing t_stop (last spike), spikes may be empty !" 924 t_stop = t_start+0.1 925 interval_out = Interval([[t_start, t_stop]]) 917 print "SpikeList error in guessing t_stop (last spike), spikes may be empty !" 918 t_stop = t_start+0.1 919 interval_out = Interval([[t_start, t_stop]]) 920 else : 921 if type(t_start) == Interval : 922 interval_out = t_start.copy() 926 923 else : 927 if t_start.__class__.__name__ == 'Interval' : 928 interval_out = t_start 929 else : 930 interval_out = Interval(t_start) 931 if not (t_start == None or t_stop == None) : 932 interval_out = Interval([[t_start, t_stop]]) 924 interval_out = Interval(t_start) 933 925 return interval_out 934 926 935 927 936 928 def __getitem__(self, id): 937 if id in self.id_list():929 if self.spiketrains.has_key(id): 938 930 return self.spiketrains[id] 939 931 else: … … 1031 1023 return (self.interval.t_start(), self.interval.t_stop()) 1032 1024 1033 def update_t_start_and_t_stop(self):1025 def init_times(self): 1034 1026 """ 1035 1027 Update the t_start and t_stop constant to reflect the current t_start() and t_stop() methods 1036 1028 """ 1037 1029 self.t_start = self.interval.t_start() 1038 self.t_stop = self.interval.t_stop()1030 self.t_stop = self.interval.t_stop() 1039 1031 1040 1032 def time_axis(self, time_bin): … … 1076 1068 for id in sl.id_list(): 1077 1069 self.append(id, sl.spiketrains[id]) 1078 self. update_t_start_and_t_stop()1070 self.init_times() 1079 1071 1080 1072 … … 1103 1095 spiketrain.relative_times() 1104 1096 self.append(id, spiketrain) 1105 self. update_t_start_and_t_stop()1097 self.init_times() 1106 1098 1107 1099 … … 1147 1139 time_slice, interval_slice 1148 1140 """ 1149 new_SpkList = SpikeList([], [], self.interval, self.dimensions)1141 new_SpkList = SpikeList([], [], None, None, self.interval, self.dimensions) 1150 1142 id_list = self.__sub_id_list(id_list) 1151 1143 for id in id_list: … … 1168 1160 """ 1169 1161 interval = Interval((t_start, t_stop)) 1170 sliced = self.interval_slice(interval) 1171 sliced.update_t_start_and_t_stop() 1162 sliced = self.interval_slice(interval) 1172 1163 return sliced 1173 1164 … … 1184 1175 id_slice, time_slice 1185 1176 """ 1186 new_SpkList = SpikeList([], [], interval, self.dimensions)1177 new_SpkList = SpikeList([], [], None, None, interval, self.dimensions) 1187 1178 for id in self.id_list(): 1188 1179 new_SpkList.append(id, self.spiketrains[id].interval_slice(interval)) … … 1207 1198 for id in self.id_list(): 1208 1199 self.spiketrains[id].time_offset(offset) 1209 self. update_t_start_and_t_stop()1200 self.init_times() 1210 1201 1211 1202 def id_offset(self, offset): … … 1409 1400 1410 1401 """ 1411 ids = self.id_list()1412 N = len(ids)1402 ids = self.id_list() 1403 N = len(ids) 1413 1404 cvs_isi = numpy.empty(N) 1414 1405 for idx in xrange(N): … … 1543 1534 1544 1535 Inputs: 1536 t_start - ?? 1537 t_stop - ?? 1545 1538 interval - An interval object 1546 1539 … … 1554 1547 mean_rates, mean_rate_std 1555 1548 """ 1556 interval = self.extract_intervals_from_SpikeList_arguments(t_start, t_stop, interval) 1557 1558 return numpy.mean(self.mean_rates(interval)) 1549 return numpy.mean(self.mean_rates(t_start, t_stop, interval)) 1559 1550 1560 1551 … … 1576 1567 mean_rate, mean_rates 1577 1568 """ 1578 interval = self.extract_intervals_from_SpikeList_arguments(t_start, t_stop, interval) 1579 return numpy.std(self.mean_rates(interval)) 1569 return numpy.std(self.mean_rates(t_start, t_stop, interval)) 1580 1570 1581 1571 … … 1592 1582 mean_rate, mean_rate_std 1593 1583 """ 1594 interval = self. extract_intervals_from_SpikeList_arguments(t_start, t_stop, interval)1595 rates = []1584 interval = self.create_intervals(t_start, t_stop, interval) 1585 rates = [] 1596 1586 for id in self.id_list(): 1597 1587 rates.append(self.spiketrains[id].mean_rate(interval)) … … 1819 1809 subplot = get_display(display) 1820 1810 1821 interval = self. extract_intervals_from_SpikeList_arguments(t_start, t_stop, interval)1811 interval = self.create_intervals(t_start, t_stop, interval) 1822 1812 if not interval.is_equal(self.interval): 1823 1813 spklist = self.interval_slice(interval) … … 1840 1830 pylab.draw() 1841 1831 elif isinstance(float_positions, numpy.ndarray): 1842 if not len(spklist.id_list()) == len(f spike2loat_positions[0]):1832 if not len(spklist.id_list()) == len(float_positions[0]): 1843 1833 raise Exception("Error, the number of flotting positions does not match the number of cells in the SpikeList") 1844 1834 rates = spklist.mean_rates() … … 2138 2128 spk = self.id_slice(id_list) 2139 2129 2140 interval = self. extract_intervals_from_SpikeList_arguments(t_start, t_stop, interval)2130 interval = self.create_intervals(t_start, t_stop, interval) 2141 2131 if not interval.is_equal(spk.interval): 2142 2132 spk = spk.interval_slice(interval) 2133 t_start, t_stop = spk.time_parameters() 2143 2134 2144 2135 if not subplot or not HAVE_PYLAB: … … 2265 2256 subplot = get_display(display) 2266 2257 2267 interval = self. extract_intervals_from_SpikeList_arguments(t_start, t_stop, interval)2258 interval = self.create_intervals(t_start, t_stop, interval) 2268 2259 if not subplot or not HAVE_PYLAB: 2269 2260 print PYLAB_ERROR … … 2308 2299 files.append(fname) 2309 2300 t_start += time_bin 2310 count += 1 2311 command = "mencoder 'mf://_tmp_*.png' -mf type=png:fps=%d -ovc lavc -lavcopts vcodec=wmv2 -oac copy -o %s" %(fps,output) 2301 count += 1 2302 print "Please wait while movie is created..." 2303 command = "mencoder 'mf://_tmp_*.png' -mf type=png:fps=%d -ovc lavc -lavcopts vcodec=wmv2 -oac copy -o %s >> movie.log" %(fps,output) 2312 2304 logging.debug(command) 2313 2305 os.system(command) … … 2483 2475 """ 2484 2476 spike_loader = DataHandler(user_file) 2485 return spike_loader.load_spikes(id_list=id_list, t_start= None, t_stop=None, dims=dims)2477 return spike_loader.load_spikes(id_list=id_list, t_start=t_start, t_stop=t_stop, dims=dims) 2486 2478 2487 2479 -
branches/interval/test/test_spikes.py
r424 r427 282 282 def testLastSpikeTime(self): 283 283 assert self.spk.last_spike_time() <= self.spk.t_stop 284 285 284 286 285 def testSelect_Ids(self):
