Simulating

Interfacing directly to NEURON

It is possible to export NineML to .mod files, for use in NEURON simulations. This can be done directly from the commandline, with the commandline tool:

$ nineml2nmodl.py myninemlfile.xml

If there is a single component in this file, this script will generate out a single file myninemlfile.mod, containing a mod-file which represents the dynamics of this neuron. If there are multiple components in this XML file, then nineml2nmodl.py will produce a mod-file for each one, in the form myninemlfile_comp1.mod, myninemlfile_comp2.mod, etc.

This code can also be generated from python, using the method:

def write_nmodldirect(component, mod_filename, weight_variables={}, hierarchical_mode=False):

where nineml_file is the filename to be written to; component is the component we want to create the mod-file from.

Interfacing to PyNN (NEST & NEURON)

To use a component with PyNN; we construct the component as we have been doing previously; then we construct a class that PyNN can use for simulation. If we are using the NEURON backend, this internally takes care of creating and compiling the relevant mod-file for the simulation, and if we are using the NEST back-end, it will automatically create the relevant module.

The interface to NineML is consistent across back-ends; using with pyNN/Neuron or pyNN/NEST, the code will look like this

#Either:
import pyNN.nest as sim
import pyNN.nest.nineml as pyNNml

#Or:
import pyNN.neuron as sim
import pyNN.neuron.nineml as pyNNml


# ...
# PyNN Initialisation:
# [omitted]
# ...

# Create a component; it can be hierachical.
test_component = get_hierachical_iaf_3coba()

celltype_cls = pyNNml.nineml_celltype_from_model(
                                        name = "iaf_3coba",
                                        nineml_model = test_component,
                                        synapse_components = [
                                            pyNNml.CoBaSyn( namespace='AMPA',  weight_connector='q' ),
                                            pyNNml.CoBaSyn( namespace='GABAa',  weight_connector='q' ),
                                            pyNNml.CoBaSyn( namespace='GABAb',  weight_connector='q' ),
                                                   ]
                                        )

parameters = ComponentFlattener.flatten_namespace_dict(
{
    'iaf.cm': 1.0,
    'iaf.gl': 50.0,
    'iaf.taurefrac': 5.0,
    'iaf.vrest': -65.0,
    'iaf.vreset': -65.0,
    'iaf.vthresh': -50.0,
    'AMPA.tau': 2.0,
    'GABAa.tau': 5.0,
    'GABAb.tau': 50.0,
    'AMPA.vrev': 0.0,
    'GABAa.vrev': -70.0,
    'GABAb.vrev': -95.0,

})


parameters = ( parameters )


cells = sim.Population(1, celltype_cls, parameters)

# Finish building simulation.....