Changeset 939 for trunk

Show
Ignore:
Timestamp:
02/22/11 18:40:44 (15 months ago)
Author:
pierre
Message:

update in the NeMo? module, before trying it on a GPU. SpikeSourcePlayer? are now efficient

Location:
trunk/src/nemo
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/nemo/__init__.py

    r936 r939  
    104104        if isinstance(celltype, SpikeSourcePoisson):     
    105105            simulator.spikes_array_list += self.all_cells.tolist() 
    106             if params['duration'] > 1e6: 
    107                 params['duration'] = 1000 
    108106            params['precision'] = simulator.state.dt 
    109107            for idx in self.all_cells: 
  • trunk/src/nemo/recording.py

    r938 r939  
    5353            data   = numpy.empty((0,3)) 
    5454            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] 
    5657                new_data = numpy.array([numpy.ones(N)*id, self.times, vm]).T 
    5758                data = numpy.concatenate((data, new_data))                     
  • trunk/src/nemo/simulator.py

    r937 r939  
    9191            currents = []  
    9292            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 
    96101            #for currents in current_sources: 
    97102            #    currents. 
     
    286291            weights = weights.tolist()     
    287292        source   = int(source) 
     293        if len(targets) == 1: 
     294            targets = int(targets[0]) 
     295            delays  = int(delays[0]) 
     296            weights = weights[0] 
    288297        synapses = state.net.add_synapse(source, targets, delays, weights, self.is_plastic) 
    289298        #for syn in synapses:             
  • trunk/src/nemo/standardmodels/cells.py

    r936 r939  
    5454            self.start       = start 
    5555            self.duration    = duration 
    56             self.cursor      = 0 
    5756            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 
    6258             
    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.) 
    6963         
    70         def update(self): 
    71             self.cursor += 1 
    72  
    7364        def reset(self, rate=None, start=None, duration=None, precision=1): 
    7465            if rate is not None: 
     
    7869            if duration is not None: 
    7970                self.duration= duration 
    80             self.cursor      = 0 
    81             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.rate 
    88             t_stop = self.duration - self.start 
    89             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.0 
    95                 if number > 1: 
    96                     spikes = numpy.add.accumulate(isi) 
    97                 else: 
    98                     spikes = isi 
    99             else: 
    100                 spikes = numpy.array([]) 
    101  
    102             spikes += self.start 
    103             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.0 
    107                 while (t_last < t_stop): 
    108                     extra_spikes.append(t_last) 
    109                     t_last += self.rng.exponential(1.0/self.rate, 1)[0]*1000.0 
    110                 spikes = numpy.concatenate((spikes,extra_spikes)) 
    111             else: 
    112                 spikes = numpy.resize(spikes,(i,)) 
    113  
    114             return spikes 
    11571 
    11672    def __init__(self, parameters):