NineML is an API designed for specifying the dynamics and connectivity of neural simulations; in particular for large-scale simulations of many point neurons.
Typically, point-neurons are currently simulated by writing a either a custom simulation in a general purpose programming language, (such as Python, Matlab) or by writing a model for a particular simulator (NEURON/NEST/BRIAN). As models of neuronal dynamics and connectivity become more and more complex, writing a simulations from scratch in python or Matlab can become more and more complex; taking time to debug and producing hard to find bugs. On the other-hand, writing simulator specific models can reduce some of this duplication, but means the model will only run on a single simulator.
NineML tries to mitigate some of these problems by providing an language for defining smaller components of a simulation in a language-independent way, and provides pathways for generating code for various simulators from this description.
The official NineML pages are hosted at INCF Software Center.
In NineML, the definition of a component is split into two parts;
The flow for a simulation using NineML would look like:
An obvious question is Why do this?!
For a single, relatively simple simulation, it may not be worth the effort! But imagine we are modelling a (relatively simple) network of neurons, which contains 5 different types of neurons. The neurons synapse onto each other, and there are 3 different classes of synapses, with different models for their dynamics. If we were to implement this naively, we could potentially copy and paste the same code 15 times, for each simulator. By factoring out basic functionality, we make our workflow much more manageable.
Python-NineML is the python implementation of the NineML specification.