Changeset 403
- Timestamp:
- 06/26/08 17:17:12 (5 months ago)
- Files:
-
- trunk/src/nest1/cells.py (modified) (2 diffs)
- trunk/src/nest2/__init__.py (modified) (1 diff)
- trunk/src/neuron2/cells.py (modified) (13 diffs)
- trunk/src/neuron2/simulator.py (modified) (4 diffs)
- trunk/test/unittests/generictests.py (modified) (1 diff)
- trunk/test/unittests/neuron2tests.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/nest1/cells.py
r390 r403 66 66 ('e_rev_I', 'V_reversal_I'), 67 67 ) 68 nest_name = "iaf_cond_neuron "68 nest_name = "iaf_cond_neuron2" 69 69 70 70 … … 96 96 https://facets.kip.uni-heidelberg.de/private/wiki/index.php/WP7_NNM 97 97 """ 98 # in 'iaf_sfa_neuron', the dimension of C is pF,99 # while in the pyNN context, cm is given in nF100 98 translations = common.build_translations( 101 99 ('v_reset', 'Vreset'), trunk/src/nest2/__init__.py
r402 r403 146 146 os.remove(nest_filename) 147 147 if data.size > 0: 148 # the following returns indices, not IDs. I'm not sure this is what we want. 148 149 if self.population is not None: 149 150 padding = self.population.cell.flatten()[0] trunk/src/neuron2/cells.py
r394 r403 35 35 36 36 37 38 class StandardIF(neuron.nrn.Section): 37 class SingleCompartmentNeuron(neuron.nrn.Section): 39 38 """docstring""" 40 39 … … 43 42 'conductance' : { 'exp': neuron.ExpSyn, 'alpha': AlphaSyn }, 44 43 } 45 46 def __init__(self, syn_type, syn_shape, tau_m=20, cm=1.0, v_rest=-65, 47 v_thresh=-55, t_refrac=2, i_offset=0, v_reset=None, 48 v_init=None, tau_e=5, tau_i=5, e_e=0, e_i=-70): 49 50 if v_reset is None: 51 v_reset = v_rest 52 if v_init is None: 53 v_init = v_rest 54 44 45 def __init__(self, syn_type, syn_shape, tau_m, cm, v_rest, i_offset, 46 v_init, tau_e, tau_i, e_e, e_i): 47 55 48 # initialise Section object with 'pas' mechanism 56 49 neuron.nrn.Section.__init__(self) … … 68 61 self.excitatory = self.esyn # } aliases 69 62 self.inhibitory = self.isyn # } 70 63 71 64 # insert current source 72 65 self.stim = neuron.IClamp(self, 0.5, delay=0, dur=1e12, amp=i_offset) 73 74 # insert spike reset mechanism 75 self.spike_reset = ResetRefrac(self, 0.5) 76 self.spike_reset.vspike = 40 # (mV) spike height 77 self.source = self.spike_reset 78 79 # process arguments 80 self.parameter_names = ['cm', 'tau_m', 'v_rest', 'v_thresh', 't_refrac', # 'cm' must come before 'tau_m' 81 'i_offset', 'v_reset', 'v_init', 'tau_e', 'tau_i'] 82 if syn_type == 'conductance': 83 self.parameter_names.extend(['e_e', 'e_i']) 84 for name in self.parameter_names: 85 setattr(self, name, locals()[name]) 86 66 67 # for recording spikes 87 68 self.spiketimes = neuron.Vector(0) 69 70 def area(self): 71 return pi*self.L*self.seg.diam 88 72 89 73 def __set_tau_m(self, value): … … 92 76 def __get_tau_m(self): 93 77 return 1e-3*self.seg.cm/self.seg.pas.g 94 78 95 79 tau_m = property(fget=__get_tau_m, fset=__set_tau_m) 96 80 cm = _new_property('seg', 'cm') … … 101 85 e_i = _new_property('isyn', 'e') 102 86 v_rest = _new_property('seg.pas', 'e') 103 v_thresh = _new_property('spike_reset', 'vthresh')104 v_reset = _new_property('spike_reset', 'vreset')105 t_refrac = _new_property('spike_reset', 'trefrac')106 107 87 # what about v_init? 108 88 … … 127 107 self.seg.v = self.v_init 128 108 129 130 109 def use_Tsodyks_Markram_synapses(ei, U, tau_rec, tau_facil, u0): 131 110 if self.syn_type == 'current': … … 146 125 syn.u0 = u0 147 126 148 127 def set_parameters(self, param_dict): 128 for name in self.parameter_names: 129 setattr(self, name, param_dict[name]) 130 131 class StandardIF(SingleCompartmentNeuron): 132 """docstring""" 133 134 def __init__(self, syn_type, syn_shape, tau_m=20, cm=1.0, v_rest=-65, 135 v_thresh=-55, t_refrac=2, i_offset=0, v_reset=None, 136 v_init=None, tau_e=5, tau_i=5, e_e=0, e_i=-70): 137 SingleCompartmentNeuron.__init__(self, syn_type, syn_shape, tau_m, cm, v_rest, 138 i_offset, v_init, 139 tau_e, tau_i, e_e, e_i) 140 if v_reset is None: 141 v_reset = v_rest 142 if v_init is None: 143 v_init = v_rest 144 145 # insert spike reset mechanism 146 self.spike_reset = ResetRefrac(self, 0.5) 147 self.spike_reset.vspike = 40 # (mV) spike height 148 self.source = self.spike_reset 149 150 # process arguments 151 self.parameter_names = ['cm', 'tau_m', 'v_rest', 'v_thresh', 't_refrac', # 'cm' must come before 'tau_m' 152 'i_offset', 'v_reset', 'v_init', 'tau_e', 'tau_i'] 153 if syn_type == 'conductance': 154 self.parameter_names.extend(['e_e', 'e_i']) 155 self.set_parameters(locals()) 156 157 v_thresh = _new_property('spike_reset', 'vthresh') 158 v_reset = _new_property('spike_reset', 'vreset') 159 t_refrac = _new_property('spike_reset', 'trefrac') 160 161 162 class BretteGerstnerIF(SingleCompartmentNeuron): 163 """docstring""" 164 165 def __init__(self, syn_type, syn_shape, tau_m=20, cm=1.0, v_rest=-65, 166 v_thresh=-55, t_refrac=2, i_offset=0, 167 v_init=None, tau_e=5, tau_i=5, e_e=0, e_i=-70, 168 v_spike=0.0, v_reset=-70.6, a=4.0, b=0.0805, tau_w=144.0, 169 w_init=0.0, delta=2.0): 170 SingleCompartmentNeuron.__init__(self, syn_type, syn_shape, tau_m, cm, v_rest, 171 i_offset, v_init, 172 tau_e, tau_i, e_e, e_i) 173 if v_init is None: 174 v_init = v_rest 175 176 # insert Brette-Gerstner spike mechanism 177 self.insert('IF_BG5') 178 self.seg.IF_BG5.surf = self.area() 179 180 v_thresh = _new_property('seg.IF_BG5', 'Vtr') 181 v_reset = _new_property('seg.IF_BG5', 'Vbot') 182 t_refrac = _new_property('seg.IF_BG5', 'Ref') 183 a = _new_property('seg.IF_BG5', 'a') 184 b = _new_property('seg.IF_BG5', 'b') 185 tau_w = _new_property('seg.IF_BG5', 'tau_w') 186 delta = _new_property('seg.IF_BG5', 'delta') 187 w_init = _new_property('seg.IF_BG5', 'w_init') 188 v_init = _new_property('seg', 'v') #?? 189 190 def __set_v_spike(self, value): 191 self.seg.IF_BG5.Vspike = value 192 self.seg.IF_BG5.Vtop = value + 10.0 193 def __get_v_spike(self): 194 return self.seg.IF_BG5.Vspike 195 v_spike = property(fget=__get_v_spike, fset=__set_v_spike) 196 149 197 class SpikeSource(object): 150 198 … … 178 226 self.rec.record(self.spiketimes.hoc_obj) 179 227 228 # == Standard cells ============================================================ 180 229 181 230 class IF_curr_alpha(common.IF_curr_alpha): … … 290 339 291 340 translations = common.build_translations( 292 ('cm', 'cm'),293 341 ('v_rest', 'v_rest'), 294 342 ('v_thresh', 'v_thresh'), 295 343 ('v_reset', 'v_reset'), 296 ('tau_refrac', 't_refrac'), 297 ('g_leak', 'tau_m', "cm*1000.0/g_leak", "CM*1000.0/tau_m"), 344 ('g_leak', 'tau_m', "0.2*1000.0/g_leak", "0.2*1000.0/tau_m"), 298 345 ('tau_syn_E', 'tau_e'), 299 346 ('tau_syn_I', 'tau_i'), 300 ('e_rev_E', 'e_e'), 301 ('e_rev_I', 'e_i'), 302 ) # v_init? 347 ('e_rev_I', 'e_i') 348 ) 303 349 model = StandardIF 304 350 … … 308 354 self.parameters['syn_shape'] = 'exp' 309 355 self.parameters['i_offset'] = 0.0 310 356 self.parameters['cm'] = 0.2 357 self.parameters['t_refrac'] = 0.4 358 self.parameters['e_e'] = 0.0 359 311 360 312 361 class SpikeSourcePoisson(common.SpikeSourcePoisson): … … 350 399 """ 351 400 352 translations = (401 translations = common.build_translations( 353 402 ('v_init', 'v_init'), 354 403 ('w_init', 'w_init'), 355 404 ('cm', 'cm'), 356 ('tau_refrac', ' Ref'),357 ('v_spike', ' Vspike'),358 ('v_reset', ' Vbot'),359 ('v_rest', ' EL'),360 ('tau_m', ' GL', "cm/tau_m", "CM/GL"), # uS405 ('tau_refrac', 't_refrac'), 406 ('v_spike', 'v_spike'), 407 ('v_reset', 'v_reset'), 408 ('v_rest', 'v_rest'), 409 ('tau_m', 'tau_m'), 361 410 ('i_offset', 'i_offset'), 362 411 ('a', 'a', 0.001), # nS --> uS … … 364 413 ('delta_T', 'delta'), 365 414 ('tau_w', 'tau_w'), 366 ('v_thresh', ' Vtr'),415 ('v_thresh', 'v_thresh'), 367 416 ('e_rev_E', 'e_e'), 368 417 ('tau_syn_E', 'tau_e'), … … 370 419 ('tau_syn_I', 'tau_i'), 371 420 ) 372 hoc_name = "IF_BG_alpha"421 model = BretteGerstnerIF 373 422 374 423 def __init__(self, parameters): trunk/src/neuron2/simulator.py
r388 r403 31 31 numpy1_0_formats = {'spikes': "%g", # only later versions of numpy support different 32 32 'v': "%g"} # formats for different columns 33 formats = {'spikes': ' t id',33 formats = {'spikes': 'id t', 34 34 'v': 't v id'} 35 35 … … 67 67 def get(self, gather=False): 68 68 """Returns the recorded data.""" 69 if self.population: # we return indices (always starting at 0), not IDs. This is what the other modules do, but I think we should really return IDs. 70 offset = self.population.first_id 71 else: 72 offset = 0 69 73 if self.variable == 'spikes': 70 74 data = numpy.empty((0,2)) … … 73 77 spikes = spikes[spikes<=state.t+1e-9] 74 78 if len(spikes) > 0: 75 new_data = numpy.array([ spikes, numpy.ones(spikes.shape)*id]).T79 new_data = numpy.array([numpy.ones(spikes.shape)*(id-offset), spikes]).T 76 80 data = numpy.concatenate((data, new_data)) 77 81 elif self.variable == 'v': … … 80 84 v = id._cell.vtrace.toarray() 81 85 t = id._cell.record_times.toarray() 82 new_data = numpy.array([t, v, numpy.ones(v.shape)* id]).T86 new_data = numpy.array([t, v, numpy.ones(v.shape)*(id-offset)]).T 83 87 data = numpy.concatenate((data, new_data)) 84 88 return data trunk/test/unittests/generictests.py
r393 r403 45 45 i = [1.0, 2.0] 46 46 cell.__setattr__(name, i) 47 o = cell.__getattr__(name)47 o = list(cell.__getattr__(name)) 48 48 self.assertEqual(i, o) 49 49 else: trunk/test/unittests/neuron2tests.py
r393 r403 496 496 neuron.run(100.0) 497 497 spikes = spike_source.getSpikes() 498 spikes = spikes[:, 0]498 spikes = spikes[:,1] 499 499 if neuron.rank() == 0: 500 500 self.assert_( max(spikes) == 100.0, str(spikes) )

