Changeset 1027 for trunk

Show
Ignore:
Timestamp:
12/09/11 02:22:43 (6 months ago)
Author:
pierre
Message:

Fix some bugs in Nemo in order to be able to run and stop a simulation without losing any spikes. Backend is giving good results.

Location:
trunk/src
Files:
3 modified

Legend:

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

    r1023 r1027  
    6060        self.simulation    = None 
    6161        self.stdp          = None 
    62         self.verbose       = False 
    63  
    64     def progressbar(self, N): 
    65         self.prog = utility.ProgressBar(0, N, 20, mode='fixed')         
     62        self.time          = 0 
     63        self._fired        = [] 
    6664 
    6765    @property 
    6866    def sim(self): 
    69         if self.simulation is False: 
     67        if self.simulation is None: 
    7068            raise Exception("Simulation object is empty, run() needs to be called first") 
    7169        else:  
     
    7472    @property 
    7573    def t(self): 
    76         return self.sim.elapsed_simulation() 
     74        return self.time 
    7775 
    7876    def set_stdp(self, stdp): 
     
    8886    def run(self, simtime): 
    8987         
    90         self.simulation = nemo.Simulation(self.net, self.conf) 
    91         if self.verbose: 
    92             self.progressbar(simtime) 
     88        if self.simulation is None: 
     89            self.simulation = nemo.Simulation(self.net, self.conf) 
    9390 
    9491        poissons_sources = [] 
    9592        arrays_sources   = [] 
    96         fired            = [] 
    9793 
    9894        for source in spikes_array_list: 
     
    104100        for t in numpy.arange(0, simtime, self.dt): 
    105101            spikes   = [] 
    106             currents = []  
    107             for source in poissons_sources: 
     102            currents = [] 
     103            for source in poissons_sources:                 
    108104                if source.player.do_spike(t): 
    109105                    spikes += [source] 
     
    112108                    source.player.update()                     
    113109                    spikes += [source] 
    114              
    115110            for recorder in recorder_list: 
    116111                if recorder.variable is "spikes": 
    117                     recorder._add_spike(fired, self.t) 
     112                    recorder._add_spike(self._fired, self.t) 
    118113                if recorder.variable is "v": 
    119114                    recorder._add_vm(self.t) 
    120115 
    121             fired = self.sim.step(spikes, currents) 
    122  
     116            self._fired = self.sim.step(spikes, currents) 
     117            self.time  += self.sim.elapsed_simulation() 
     118         
    123119            if self.stdp: 
    124120                self.simulation.apply_stdp(1.0) 
    125             
    126             if self.verbose:                 
    127                 self.prog.update_amount(t) 
    128                 print self.prog, "\r", 
    129                 sys.stdout.flush() 
    130      
     121                
    131122    @property 
    132123    def next_id(self):         
     
    139130    """Reset the state of the current network to time t = 0.""" 
    140131    state.net.reset_timer()     
     132    self.time   = 0 
     133    self._fired = [] 
    141134     
    142135# --- For implementation of access to individual neurons' parameters ----------- 
  • trunk/src/nemo/standardmodels/cells.py

    r1017 r1027  
    6161            self.rng         = numpy.random.RandomState() 
    6262            self.precision   = precision 
    63             self.rate_Hz     = self.rate * self.precision/1000. 
     63            self.rate_Hz     = self.rate * self.precision / 1000. 
    6464            self.stop_time   = self.start + self.duration 
    6565            self.buffer      = 1000            
     
    7272            else: 
    7373                if self.idx == (self.buffer - 1): 
    74                     self.do_spikes = self.rng.rand(self.buffer) < self.rate_Hz 
     74                    self.do_spikes = self.rng.rand(self.buffer) <= self.rate_Hz 
    7575                    self.idx       = 0 
    7676                self.idx += 1 
  • trunk/src/nest/__init__.py

    r1021 r1027  
    124124 
    125125    # set resolution 
    126     nest.SetKernelStatus({'resolution': timestep}) 
     126    nest.SetKernelStatus({'resolution': float(timestep)}) 
    127127 
    128128    # Set min_delay and max_delay for all synapse models 
    129129    for synapse_model in NEST_SYNAPSE_TYPES: 
    130         nest.SetDefaults(synapse_model, {'delay' : min_delay, 
    131                                          'min_delay': min_delay, 
    132                                          'max_delay': max_delay}) 
     130        nest.SetDefaults(synapse_model, {'delay'    : float(min_delay), 
     131                                         'min_delay': float(min_delay), 
     132                                         'max_delay': float(max_delay)}) 
    133133    simulator.reset() 
    134134