- Timestamp:
- 02/22/11 18:40:44 (15 months ago)
- Location:
- trunk/src/nemo
- Files:
-
- 4 modified
-
__init__.py (modified) (1 diff)
-
recording.py (modified) (1 diff)
-
simulator.py (modified) (2 diffs)
-
standardmodels/cells.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/nemo/__init__.py
r936 r939 104 104 if isinstance(celltype, SpikeSourcePoisson): 105 105 simulator.spikes_array_list += self.all_cells.tolist() 106 if params['duration'] > 1e6:107 params['duration'] = 1000108 106 params['precision'] = simulator.state.dt 109 107 for idx in self.all_cells: -
trunk/src/nemo/recording.py
r938 r939 53 53 data = numpy.empty((0,3)) 54 54 N = len(self.times) 55 for id, vm in zip(filtered_ids, self.data[id]): 55 for id in filtered_ids: 56 vm = self.data[id] 56 57 new_data = numpy.array([numpy.ones(N)*id, self.times, vm]).T 57 58 data = numpy.concatenate((data, new_data)) -
trunk/src/nemo/simulator.py
r937 r939 91 91 currents = [] 92 92 for source in spikes_array_list: 93 if source.player.next_spike == t: 94 source.player.update() 95 spikes += [source] 93 if isinstance(source.celltype, SpikeSourcePoisson): 94 if source.player.do_spike(t): 95 spikes += [source] 96 elif isinstance(source.celltype, SpikeSourceArray): 97 if source.player.next_spike == t: 98 source.player.update() 99 spikes += [source] 100 96 101 #for currents in current_sources: 97 102 # currents. … … 286 291 weights = weights.tolist() 287 292 source = int(source) 293 if len(targets) == 1: 294 targets = int(targets[0]) 295 delays = int(delays[0]) 296 weights = weights[0] 288 297 synapses = state.net.add_synapse(source, targets, delays, weights, self.is_plastic) 289 298 #for syn in synapses: -
trunk/src/nemo/standardmodels/cells.py
r936 r939 54 54 self.start = start 55 55 self.duration = duration 56 self.cursor = 057 56 self.rng = numpy.random.RandomState() 58 self.spike_times = self.generate() 59 self.spike_times = precision * numpy.round(self.spike_times/precision) 60 self.spike_times = numpy.unique(numpy.sort(self.spike_times)) 61 self.N = len(self.spike_times) 57 self.precision = precision 62 58 63 @property 64 def next_spike(self): 65 if self.cursor < self.N: 66 return self.spike_times[self.cursor] 67 else: 68 return numpy.inf 59 def do_spike(self, t): 60 if (t > self.start + self.duration) or (t < self.start): 61 return False 62 return (self.rng.rand() < self.rate * self.precision/1000.) 69 63 70 def update(self):71 self.cursor += 172 73 64 def reset(self, rate=None, start=None, duration=None, precision=1): 74 65 if rate is not None: … … 78 69 if duration is not None: 79 70 self.duration= duration 80 self.cursor = 081 self.spike_times = precision * numpy.round(self.spike_times/precision)82 self.spike_times = numpy.unique(numpy.sort(self.spike_times))83 self.N = len(self.spike_times)84 85 86 def generate(self):87 n = self.duration/1000.0*self.rate88 t_stop = self.duration - self.start89 number = numpy.ceil(n+3*numpy.sqrt(n))90 if number<100:91 number = min(5+numpy.ceil(2*n),100)92 93 if number > 0:94 isi = self.rng.exponential(1.0/self.rate, number)*1000.095 if number > 1:96 spikes = numpy.add.accumulate(isi)97 else:98 spikes = isi99 else:100 spikes = numpy.array([])101 102 spikes += self.start103 i = numpy.searchsorted(spikes, t_stop)104 extra_spikes = []105 if i==len(spikes):106 t_last = spikes[-1] + self.rng.exponential(1.0/self.rate, 1)[0]*1000.0107 while (t_last < t_stop):108 extra_spikes.append(t_last)109 t_last += self.rng.exponential(1.0/self.rate, 1)[0]*1000.0110 spikes = numpy.concatenate((spikes,extra_spikes))111 else:112 spikes = numpy.resize(spikes,(i,))113 114 return spikes115 71 116 72 def __init__(self, parameters):
