Changeset 403

Show
Ignore:
Timestamp:
06/26/08 17:17:12 (5 months ago)
Author:
apdavison
Message:

More modifications to neuron2 to pass generictests.py

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/nest1/cells.py

    r390 r403  
    6666        ('e_rev_I',    'V_reversal_I'), 
    6767    ) 
    68     nest_name = "iaf_cond_neuron
     68    nest_name = "iaf_cond_neuron2
    6969     
    7070 
     
    9696    https://facets.kip.uni-heidelberg.de/private/wiki/index.php/WP7_NNM 
    9797    """ 
    98     # in 'iaf_sfa_neuron', the dimension of C is pF, 
    99     # while in the pyNN context, cm is given in nF 
    10098    translations = common.build_translations( 
    10199        ('v_reset',    'Vreset'), 
  • trunk/src/nest2/__init__.py

    r402 r403  
    146146            os.remove(nest_filename) 
    147147            if data.size > 0: 
     148                # the following returns indices, not IDs. I'm not sure this is what we want. 
    148149                if self.population is not None: 
    149150                    padding = self.population.cell.flatten()[0] 
  • trunk/src/neuron2/cells.py

    r394 r403  
    3535 
    3636 
    37  
    38 class StandardIF(neuron.nrn.Section): 
     37class SingleCompartmentNeuron(neuron.nrn.Section): 
    3938    """docstring""" 
    4039     
     
    4342        'conductance' : { 'exp': neuron.ExpSyn,  'alpha': AlphaSyn }, 
    4443    } 
    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         
    5548        # initialise Section object with 'pas' mechanism 
    5649        neuron.nrn.Section.__init__(self) 
     
    6861        self.excitatory = self.esyn # } aliases 
    6962        self.inhibitory = self.isyn # } 
    70  
     63         
    7164        # insert current source 
    7265        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 
    8768        self.spiketimes = neuron.Vector(0) 
     69 
     70    def area(self): 
     71        return pi*self.L*self.seg.diam 
    8872 
    8973    def __set_tau_m(self, value): 
     
    9276    def __get_tau_m(self): 
    9377        return 1e-3*self.seg.cm/self.seg.pas.g 
    94      
     78 
    9579    tau_m    = property(fget=__get_tau_m, fset=__set_tau_m) 
    9680    cm       = _new_property('seg', 'cm') 
     
    10185    e_i      = _new_property('isyn', 'e') 
    10286    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      
    10787    # what about v_init? 
    10888 
     
    127107        self.seg.v = self.v_init 
    128108 
    129      
    130109    def use_Tsodyks_Markram_synapses(ei, U, tau_rec, tau_facil, u0): 
    131110        if self.syn_type == 'current': 
     
    146125        syn.u0 = u0 
    147126 
    148  
     127    def set_parameters(self, param_dict): 
     128        for name in self.parameter_names: 
     129            setattr(self, name, param_dict[name]) 
     130 
     131class 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     
     162class 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     
    149197class SpikeSource(object): 
    150198     
     
    178226                self.rec.record(self.spiketimes.hoc_obj) 
    179227             
     228# == Standard cells ============================================================ 
    180229 
    181230class IF_curr_alpha(common.IF_curr_alpha): 
     
    290339 
    291340    translations = common.build_translations( 
    292         ('cm',         'cm'), 
    293341        ('v_rest',     'v_rest'), 
    294342        ('v_thresh',   'v_thresh'), 
    295343        ('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"), 
    298345        ('tau_syn_E',  'tau_e'), 
    299346        ('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    ) 
    303349    model = StandardIF 
    304350 
     
    308354        self.parameters['syn_shape'] = 'exp' 
    309355        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         
    311360 
    312361class SpikeSourcePoisson(common.SpikeSourcePoisson): 
     
    350399    """ 
    351400     
    352     translations =
     401    translations = common.build_translations
    353402        ('v_init',     'v_init'), 
    354403        ('w_init',     'w_init'), 
    355404        ('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"), # uS 
     405        ('tau_refrac', 't_refrac'),  
     406        ('v_spike',    'v_spike'), 
     407        ('v_reset',    'v_reset'), 
     408        ('v_rest',     'v_rest'), 
     409        ('tau_m',      'tau_m'), 
    361410        ('i_offset',   'i_offset'),  
    362411        ('a',          'a',        0.001), # nS --> uS 
     
    364413        ('delta_T',    'delta'),  
    365414        ('tau_w',      'tau_w'),  
    366         ('v_thresh',   'Vtr'),  
     415        ('v_thresh',   'v_thresh'),  
    367416        ('e_rev_E',    'e_e'), 
    368417        ('tau_syn_E',  'tau_e'),  
     
    370419        ('tau_syn_I',  'tau_i'), 
    371420    ) 
    372     hoc_name = "IF_BG_alpha" 
     421    model = BretteGerstnerIF 
    373422     
    374423    def __init__(self, parameters): 
  • trunk/src/neuron2/simulator.py

    r388 r403  
    3131    numpy1_0_formats = {'spikes': "%g", # only later versions of numpy support different 
    3232                        'v': "%g"}      # formats for different columns 
    33     formats = {'spikes': 't id', 
     33    formats = {'spikes': 'id t', 
    3434               'v': 't v id'} 
    3535     
     
    6767    def get(self, gather=False): 
    6868        """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 
    6973        if self.variable == 'spikes': 
    7074            data = numpy.empty((0,2)) 
     
    7377                spikes = spikes[spikes<=state.t+1e-9] 
    7478                if len(spikes) > 0: 
    75                     new_data = numpy.array([spikes, numpy.ones(spikes.shape)*id]).T 
     79                    new_data = numpy.array([numpy.ones(spikes.shape)*(id-offset), spikes]).T 
    7680                    data = numpy.concatenate((data, new_data)) 
    7781        elif self.variable == 'v': 
     
    8084                v = id._cell.vtrace.toarray() 
    8185                t = id._cell.record_times.toarray() 
    82                 new_data = numpy.array([t, v, numpy.ones(v.shape)*id]).T 
     86                new_data = numpy.array([t, v, numpy.ones(v.shape)*(id-offset)]).T 
    8387                data = numpy.concatenate((data, new_data)) 
    8488        return data 
  • trunk/test/unittests/generictests.py

    r393 r403  
    4545                        i = [1.0, 2.0] 
    4646                        cell.__setattr__(name, i) 
    47                         o = cell.__getattr__(name
     47                        o = list(cell.__getattr__(name)
    4848                        self.assertEqual(i, o) 
    4949                    else: 
  • trunk/test/unittests/neuron2tests.py

    r393 r403  
    496496        neuron.run(100.0) 
    497497        spikes = spike_source.getSpikes() 
    498         spikes = spikes[:,0
     498        spikes = spikes[:,1
    499499        if neuron.rank() == 0: 
    500500            self.assert_( max(spikes) == 100.0, str(spikes) )