Changeset 1042

Show
Ignore:
Timestamp:
12/22/11 01:45:18 (5 months ago)
Author:
pierre
Message:

Add a new way of handling the CurrentSource? objects. Now everything is moved into standardmodels, and those objects are now inheriting from the StandardCurrentSource? object in the standardmodels, allowing to get parameters translations. Moreover, objects are now dynamically modified each time a parameter is changed. Will work on the tests later to be sure everything is fine. Note that parameters of the CurrentSource? objects should now be given as a dictionary, as for StandardCellType?. Pcsim compatibility will follow

Location:
trunk
Files:
5 added
11 modified

Legend:

Unmodified
Added
Removed
  • trunk/examples/StepCurrentSource.py

    r647 r1042  
    1616 
    1717cell = create(IF_curr_exp, {'v_thresh': -55.0, 'tau_refrac': 5.0}) 
    18 current_source = StepCurrentSource([50.0, 110.0, 150.0, 210.0], 
    19                                    [0.4, 0.6, -0.2, 0.2]) 
     18current_source = StepCurrentSource({'times' : [50.0, 110.0, 150.0, 210.0], 
     19                                    'amplitudes' : [0.4, 0.6, -0.2, 0.2]}) 
    2020cell.inject(current_source) 
    2121 
  • trunk/src/brian/__init__.py

    r1019 r1042  
    1717from pyNN.recording import files 
    1818from pyNN.brian.standardmodels.cells import * 
     19from pyNN.brian.standardmodels.electrodes import * 
    1920from pyNN.brian.connectors import * 
    2021from pyNN.brian.standardmodels.synapses import * 
    21 from pyNN.brian.electrodes import * 
    2222from pyNN.brian import electrodes 
    2323from pyNN.brian.recording import * 
  • trunk/src/models.py

    r957 r1042  
    9595    injectable = True # override for spike sources 
    9696 
     97class BaseCurrentSource(BaseModelType): 
     98    """Base class for current source model classes.""" 
    9799 
    98100class BaseSynapseDynamics(object): 
  • trunk/src/nemo/__init__.py

    r1022 r1042  
    1919from pyNN.nemo.connectors import * 
    2020from pyNN.nemo.standardmodels.synapses import * 
    21 from pyNN.nemo.electrodes import * 
     21from pyNN.nemo.standardmodels.electrodes import * 
    2222from pyNN.nemo import electrodes 
    2323from pyNN.nemo.recording import * 
  • trunk/src/nemo/simulator.py

    r1029 r1042  
    129129def reset(): 
    130130    """Reset the state of the current network to time t = 0.""" 
    131     state.net.reset_timer()     
    132     self.time   = 0 
    133     self._fired = [] 
     131    state.time   = 0 
     132    state._fired = [] 
    134133     
    135134# --- For implementation of access to individual neurons' parameters ----------- 
  • trunk/src/nest/__init__.py

    r1027 r1042  
    2727from pyNN.nest.standardmodels.synapses import * 
    2828from pyNN.nest.electrodes import * 
     29from pyNN.nest.standardmodels.electrodes import * 
    2930from pyNN.nest.recording import * 
    3031from pyNN.random import RandomDistribution 
  • trunk/src/neuron/__init__.py

    r1007 r1042  
    1717from pyNN.neuron.connectors import * 
    1818from pyNN.neuron.standardmodels.synapses import * 
    19 from pyNN.neuron.electrodes import * 
     19from pyNN.neuron.standardmodels.electrodes import * 
    2020from pyNN.neuron.recording import Recorder 
    2121from pyNN import standardmodels 
  • trunk/src/standardmodels/__init__.py

    r969 r1042  
    129129class StandardCellType(StandardModelType, models.BaseCellType): 
    130130    """Base class for standardized cell model classes.""" 
    131     recordable = ['spikes', 'v', 'gsyn'] 
     131    recordable    = ['spikes', 'v', 'gsyn'] 
    132132    synapse_types = ('excitatory', 'inhibitory') 
    133     always_local = False # override for NEST spike sources 
    134  
     133    always_local  = False # override for NEST spike sources 
     134 
     135 
     136class StandardCurrentSource(StandardModelType, models.BaseCurrentSource): 
     137    """Base class for standardized current source model classes."""              
     138     
     139    def inject_into(self, cells): 
     140        raise Exception("Should be redefined in the local simulator electrodes") 
     141 
     142    def __getattr__(self, name): 
     143        try: 
     144            val = self.__getattribute__(name) 
     145        except AttributeError: 
     146            try: 
     147                val = self.get_parameters()[name] 
     148            except KeyError: 
     149                raise errors.NonExistentParameterError(name, 
     150                                                       self.__class__.__name__, 
     151                                                       self.get_parameter_names()) 
     152        return val 
     153 
     154    def __setattr__(self, name, value): 
     155        if self.has_parameter(name): 
     156            self.set_parameters(**{name: value}) 
     157        else: 
     158            object.__setattr__(self, name, value) 
     159 
     160    def set_parameters(self, **parameters): 
     161        """ 
     162        Set current source parameters, given as a sequence of parameter=value arguments. 
     163        """ 
     164        # if some of the parameters are computed from the values of other 
     165        # parameters, need to get and translate all parameters 
     166        computed_parameters = self.computed_parameters() 
     167        have_computed_parameters = numpy.any([p_name in computed_parameters 
     168                                              for p_name in parameters]) 
     169        if have_computed_parameters: 
     170            all_parameters = self.get_parameters() 
     171            all_parameters.update(parameters) 
     172            parameters = all_parameters 
     173            parameters = self.translate(parameters) 
     174        self.set_native_parameters(parameters) 
     175 
     176    def get_parameters(self): 
     177        """Return a dict of all current source parameters.""" 
     178        parameters = self.get_native_parameters() 
     179        parameters = self.reverse_translate(parameters) 
     180        return parameters 
     181 
     182    def set_native_parameters(self, parameters): 
     183        pass 
     184 
     185    def get_native_parameters(self):     
     186        pass 
    135187 
    136188class ModelNotAvailable(object): 
  • trunk/test/system/test_nest.py

    r922 r1042  
    3939    print p1.get('Tau_m') 
    4040     
    41     current_source = nest.StepCurrentSource([50.0, 110.0, 150.0, 210.0], 
    42                                             [0.01, 0.02, -0.02, 0.01]) 
     41    current_source = nest.StepCurrentSource({'times' : [50.0, 110.0, 150.0, 210.0], 
     42                                            'amplitudes' : [0.01, 0.02, -0.02, 0.01]}) 
    4343    p1.inject(current_source) 
    4444     
  • trunk/test/unittests/test_neuron.py

    r999 r1042  
    3030        self.foo_init = -99.9 
    3131 
     32class MockStepCurrentSource(object): 
     33    parameter_names = ['amplitudes', 'times'] 
     34    def __init__(self, parameters): 
     35        self._devices = [] 
     36 
     37    def inject_into(self, cell_list): 
     38        for cell in cell_list: 
     39            if cell.local: 
     40               self._devices += [cell] 
     41 
     42class MockDCSource(object): 
     43    parameter_names = ['amplitude', 'start', 'stop'] 
     44    parameters      = {'amplitude' : 0, 'start' : 0, 'stop' : 1e12} 
     45    def __init__(self, parameters): 
     46        self._devices = [] 
     47 
     48    def inject_into(self, cell_list): 
     49        for cell in cell_list: 
     50            if cell.local: 
     51               self._devices += [cell] 
     52 
     53 
    3254class MockID(int): 
    3355    def __init__(self, n): 
     
    222244 
    223245    def test_inject_dc(self): 
    224         cs = electrodes.DCSource() 
     246        cs = electrodes.DCSource({}) 
    225247        cs.inject_into(self.cells) 
    226248        assert_equal(cs.stop, 1e12) 
     
    228250 
    229251    def test_inject_step_current(self): 
    230         cs = electrodes.StepCurrentSource([1,2,3], [0.5, 1.5, 2.5]) 
     252        cs = MockStepCurrentSource({'amplitudes' : [1,2,3], 'times' : [0.5, 1.5, 2.5]}) 
    231253        cs.inject_into(self.cells) 
    232254        assert_equal(len(cs._devices), 2)# 2 local cells 
  • trunk/test/unittests/test_population.py

    r1000 r1042  
    3030    def _create_cells(self, cellclass, cellparams, size): 
    3131        self.all_cells = numpy.array([MockID(i) for i in range(999, 999+size)], MockID) 
     32        self.cell      = self.all_cells 
    3233        self._mask_local = numpy.arange(size)%5==3 # every 5th cell, starting with the 4th, is on this node 
    3334        self.first_id = self.all_cells[0]