Changeset 974
- Timestamp:
- 05/30/11 00:18:03 (12 months ago)
- Files:
-
- 1 modified
-
trunk/src/nest/nineml.py (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/nest/nineml.py
r973 r974 33 33 #recording.simulator = simulator 34 34 35 36 35 37 logger = logging.getLogger("PyNN") 36 38 … … 46 48 47 49 48 49 50 51 52 53 50 def nineml_celltype_from_model(name, nineml_model, synapse_components): 54 51 """ … … 57 54 58 55 dct = {'nineml_model':nineml_model, 59 'synapse_components':synapse_components, 60 'builder': _compile_nmodl} 56 'synapse_components':synapse_components} 61 57 return _nest_build_nineml_celltype(name, (NineMLCellType,), dct) 62 58 … … 70 66 def __new__(cls, name, bases, dct): 71 67 68 import nineml.abstraction_layer as nineml 69 from nineml.abstraction_layer import models 70 import nest 72 71 73 72 #Extract Parameters Back out from Dict: … … 76 75 77 76 # Reduce the model: 78 from nineml.abstraction_layer import models 79 #reduction_process = models.ModelToSingleComponentReducer(nineml_model, componentname=name) 80 #reduced_component = reduction_process.reducedcomponent 81 reduced_component = models.reduce_to_single_component( nineml_model, componentname=name ) 77 reduced_component = models.reduce_to_single_component( nineml_model, 78 componentname=name ) 79 80 reduced_component.short_description = "Auto-generated 9ML neuron model for PyNN.nest" 81 reduced_component.long_description = "Auto-generated 9ML neuron model for PyNN.nest" 82 82 83 83 # synapse ports: 84 84 synapse_ports = [] 85 for syn in in synapse_components: 86 pass 87 # TODO: need to be able to get inferred event ports from model Component, i.e. 88 # access to the true component below! 89 85 for syn in synapse_components: 86 # get recv event ports 87 # TODO: model namespace look 88 #syn_component = nineml_model[syn.namespace] 89 syn_component = nineml_model.subnodes[syn.namespace] 90 recv_event_ports = list(syn_component.filter_ports(cls=nineml.EventPort, mode='recv')) 91 # check there's only one 92 if len(recv_event_ports)!=1: 93 raise ValueError, "A synapse component has multiple recv ports. Cannot dis-ambiguate" 94 synapse_ports.append(syn.namespace+'_'+recv_event_ports[0].symbol) 95 90 96 91 97 # New: 92 dct["combined_model"] = reduction_process.reducedcomponent 98 dct["combined_model"] = reduced_component 99 # TODO: Override this with user layer 100 #default_values = ModelToSingleComponentReducer.flatten_namespace_dict( parameters ) 93 101 dct["default_parameters"] = dict( (name, 1.0) for name in reduced_component.parameters ) 94 102 dct["default_initial_values"] = dict((name, 0.0) for name in reduced_component.state_variables) … … 98 106 dct["conductance_based"] = True # how to determine this?? 99 107 dct["model_name"] = name 100 108 dct["nest_model"] = name 109 101 110 102 111 # Recording from bindings: 103 dct["recordable"] = [port.name for port in reduced_component.analog_ports] + ['spikes', 'regime'] + [binding.name for binding in reduced_component.bindings] 112 dct["recordable"] = [port.name for port in reduced_component.analog_ports] + ['spikes', 'regime'] 113 # TODO bindings -> alias and support recording of them in nest template 114 #+ [binding.name for binding in reduced_component.bindings] 104 115 105 116 dct["weight_variables"] = dict([ (syn.namespace,syn.namespace+'_'+syn.weight_connector ) 106 117 for syn in synapse_components ]) 107 #{'cobaInhib':'cobaInhib_q', 'cobaExcit':'cobaExcit_q',}108 109 118 110 119 logger.debug("Creating class '%s' with bases %s and dictionary %s" % (name, bases, dct)) 111 # generate and compile NMODL code, then load the mechanism into NEUORN 112 dct["builder"](reduced_component, dct["weight_variables"], hierarchical_mode=True) 113 # TODO: weight variables should really be stored within combined_model 120 121 # TODO: UL configuration of initial regime. 122 initial_regime = reduced_component.regime_map.keys()[0] 123 124 from nestbuilder import NestFileBuilder 125 nfb = NestFileBuilder( nest_classname = name, 126 component = reduced_component, 127 synapse_ports = synapse_ports, 128 initial_regime = initial_regime, 129 initial_values = dct["default_initial_values"], 130 default_values = dct["default_parameters"], 131 ) 132 #nfb.compile_files() 133 nest.Install('mymodule') 114 134 115 135 return type.__new__(cls, name, bases, dct)
