Changeset 409
- Timestamp:
- 07/16/09 14:19:41 (3 years ago)
- Location:
- branches/interval
- Files:
-
- 3 added
- 5 modified
-
setup.py (modified) (1 diff)
-
src/__init__.py (modified) (1 diff)
-
src/nex (added)
-
src/nex/__init__.py (added)
-
src/nex/nex_wrapper.py (added)
-
src/signals/intervals.py (modified) (3 diffs)
-
src/signals/spikes.py (modified) (17 diffs)
-
test/test_spikes.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/interval/setup.py
r400 r409 11 11 'NeuroTools.tisean', 12 12 'NeuroTools.spike2', 13 'NeuroTools.nex', 13 14 'NeuroTools.signals', 14 15 'NeuroTools.spike2.sonpy', -
branches/interval/src/__init__.py
r400 r409 35 35 """ 36 36 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'] 38 38 __version__ = "0.1.0 (Asynchronous Astrocyte)" 39 39 -
branches/interval/src/signals/intervals.py
r408 r409 145 145 self.interval_data += shift 146 146 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 limit167 defines the reference limit (0 : start, 1: end) from where the new value is168 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 196 147 def total_duration(self) : 197 148 """ … … 203 154 return tot_duration 204 155 205 206 156 def slice_times(self, times): 207 157 spikes_selector = numpy.zeros(len(times), dtype=numpy.bool) … … 212 162 spikes_selector = (times >= self.t_start()) & (times <= self.t_stop()) 213 163 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 214 173 215 174 def is_equal(self, itv) : -
branches/interval/src/signals/spikes.py
r408 r409 390 390 interval = self.interval 391 391 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 393 397 subplot = get_display(display) 394 398 if not subplot or not HAVE_PYLAB: … … 607 611 t_max_l = numpy.floor(t_max/time_bin) 608 612 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)611 613 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): 614 617 count += 1 615 618 result += spk_hist[(ev-t_min_l):ev+t_max_l] … … 1432 1435 mean_rates, mean_rate_std 1433 1436 """ 1434 return numpy.mean(self.mean_rates( t_start, t_stop))1437 return numpy.mean(self.mean_rates(interval)) 1435 1438 1436 1439 … … 1662 1665 1663 1666 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={}): 1665 1668 """ 1666 1669 Generate a 2D map of the activity averaged between t_start and t_stop. … … 1693 1696 subplot = get_display(display) 1694 1697 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) 1701 1703 else: 1702 1704 spklist = self … … 1717 1719 pylab.draw() 1718 1720 elif isinstance(float_positions, numpy.ndarray): 1719 if not len(spklist.id_list()) == len(f loat_positions[0]):1721 if not len(spklist.id_list()) == len(fspike2loat_positions[0]): 1720 1722 raise Exception("Error, the number of flotting positions does not match the number of cells in the SpikeList") 1721 1723 rates = spklist.mean_rates() … … 1844 1846 raise Exception("The two SpikeList must have common time axis !") 1845 1847 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) 1847 1849 mat_neur1 = numpy.zeros((num_bins,N),int) 1848 1850 mat_neur2 = numpy.zeros((num_bins,N),int) … … 1856 1858 for idx in xrange(len(cells_id)): 1857 1859 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) 1860 1862 mat_neur1[times1,ids1] = 1 1861 1863 mat_neur2[times2,ids2] = 1 … … 1880 1882 xlabel = "Time (ms)" 1881 1883 ylabel = "Normalized CC" 1882 subplot.plot(xaxis+self. t_start, cc_time, **kwargs)1884 subplot.plot(xaxis+self.interval.t_start(), cc_time, **kwargs) 1883 1885 set_labels(subplot, xlabel, ylabel) 1884 1886 pylab.draw() … … 1978 1980 if not isinstance(spikelist, SpikeList): 1979 1981 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") 1982 1984 frate_1 = self.firing_rate(time_bin, average=True) 1983 1985 frate_2 = spikelist.firing_rate(time_bin, average=True) … … 2025 2027 else: 2026 2028 ids, spike_times = spk.convert(format="[ids, times]") 2027 idx = numpy.where((spike_times >= t_start) & (spike_times <= t_stop))[0]2028 2029 if len(spike_times) > 0: 2029 2030 subplot.plot(spike_times, ids, ',', **kwargs) … … 2077 2078 t_max_l = numpy.floor(t_max/time_bin) 2078 2079 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)2081 2080 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): 2084 2084 count += 1 2085 2085 result += spk_hist[:,(ev-t_min_l):ev+t_max_l] … … 2111 2111 2112 2112 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={}): 2114 2114 """ 2115 2115 Generate a movie of the activity between t_start and t_stop. … … 2145 2145 """ 2146 2146 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 2149 2151 if not subplot or not HAVE_PYLAB: 2150 2152 print PYLAB_ERROR … … 2158 2160 idx = 0 2159 2161 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) 2162 2164 else: 2163 2165 spk = self 2166 t_start, t_stop = self.interval.time_parameters() 2164 2167 time, pos = spk.convert("times, ids") 2165 2168 # We sort the spikes to allow faster process later … … 2341 2344 ############################################################# 2342 2345 2343 def load_spikelist(user_file, id_list=None, t_start=None, t_stop=None, dims=None):2346 def load_spikelist(user_file, id_list=None, interval=None, dims=None): 2344 2347 """ 2345 2348 Returns a SpikeList object from a file. If the file has been generated by PyNN, … … 2363 2366 """ 2364 2367 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) 2366 2369 2367 2370 -
branches/interval/test/test_spikes.py
r395 r409 36 36 def testCreateSpikeTrain(self): 37 37 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) 39 40 self.assert_( arrays_are_equal(spk.spike_times, numpy.arange(0,110,10)) ) 40 41 41 42 def testCreateSpikeTrainFromList(self): 42 43 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) 44 46 self.assert_( arrays_are_equal(spk.spike_times, numpy.arange(0,110,10)) ) 45 47 46 48 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) 49 52 50 53 def testCreateWithTStartOnly(self):
