| The following are some initial thoughts on the elements needed for network descriptions in NeuroML v2.0 based on discussions in the
INCF Multiscale Modelling Program. See here for how this package relates to other developments towards NeuroML 2. |
A key distinction in NetworkML version 1.x is between:
While there are an increasing number of tools which support the instance based representation of NetworkML v1.x, one of the main drawbacks of this version is the narrow range of templates for expressing the wide range of structures and connectivities encountered in neuronal network models. Another shortcoming of the current version is that it is not possible to create hierarchical networks, e.g. "create a subnetwork of 3 populations (2 laid out on regular 3D grids, and one randomly placed in a rectangular box above the others) and repeat that network on a 3x3 grid". Below is an image of the type of network which needs to be created.
Members of the NeuroML initiative are participating in the INCF Multiscale Modelling Program which is developing standards for expressing large scale network models (under the name NineML) and the elements for describing networks in NeuroML v2.0 will be compatible with the standards developed there.
The following are some elements which would extend the range of network structures which could be expressed in NeuroML version 2.0, and which could be useful input into the specification of the NineML User Layer. They are based on initial discussions between Robert Cannon, Padraig Gleeson and Hans Ekkehard Plesser at CNS09 in Berlin, and further developed by Robert and Padraig after the meeting.
A basic Java API has also been developed which can generate XML examples in this format.
The proposed network elements here follow the conventions being used in the development of NeuroML version 2.0 (e.g. using the attribute id for identifying each element and the element name for referencing; using camelCaseNaming for elements and attributes) which in turn are based on SBML conventions. The NineML examples are based on the latest proposed NineML User Layer document.
A population consists of a homogeneous collection of cells or sub-networks etc. It is always contained within a network. This element indicates that a single unit should be instantiated one or more times. A population contains:
This refers to the medium/space in which elements can be placed. Examples include 1D to 3D grids, and 1D to 3D Euclidean space. For now, the following spaces are assumed to be predefined: Euclidean_1D, Euclidean_2D, Euclidean_3D, Grid_1D, Grid_2D, Grid_3D. The space element could potentially include some extra information giving structure to the space, e.g. how the grid is laid out in 3D.
Other examples of spaces which may need to be added in future include 2D manifolds in 3D space.
A subset of a space into which to place cells, e.g. rectangular box defining a region in 3D space.
How population elements should be laid out on (a region of) its space. Examples include: a grid based layout (which specifies the size of the grid in x, y, z dimensions); random layout of a number of cells in a 3D region.
A network is a unit which contains a number of cells in populations, sub- and supersets of those cells and synaptic connections between the cells. A network element contains:
A convenient way to build sets of cells from existing populations (this element does not create any new cells!) which can be used, e.g. as the source or target of connections, a target for inputs, etc. It is envisioned that a type of XPath can be used to select across populations (e.g. select="NetworkA/PopulationB[0-10] | NetworkA/PopulationC[*]) but this needs further work.
The name cellSet is used as opposed to set since <cellSet id="mySet" select="NetworkA"> should refer to all cells as opposed to all cells & connections, etc.
Examples shown below and the Java API do not include this element yet.
A set of synaptic connections between a source population or cellSet and a target population or cellSet.
Examples shown below and the Java API do not include this element yet.
Used for applying electrical or synaptic stimulation to a specified population or cellSet.
Examples shown below and the Java API do not include this element yet.
The scope of the elements described is close to that of the NineML User Layer. This language allows definitions of groups of components (which could themselves be groups or cells/spiking nodes defined in the NineML Abstraction Layer) which can be linked by connections. This generic structure should allow a wider range of models beyond neural networks to be defined in the language, NeuroML v2.0 will focus on neuron models connected by synapses, and so the structure reflects those entities. There will hopefully be a direct mapping from network elements in NeuroML v2.0 to the corresponding elements in NineML, as illustrated in the example files below.
A basic API in Java for generating NeuroML v2.0 network files (and NineML User Layer files) based on the above elements is available from the NeuroML SourceForge Subversion repository. To check this out use:
svn co https://neuroml.svn.sourceforge.net/svnroot/neuroml/DemoVer2.0/NMLVer2_Test .
Some "handmade" NeuroML v2.0 network description files are available in the web/NeuroMLFiles directory. Included there are some other NeuroML version 2 example files for cells, ion channels etc. See here for more details.
The main Java classes for creating networks are in the src/java/org/neuroml/network/ folder.
Once checked out, these files can be compiled using ./make.sh (Linux/Mac) or make.bat (Win).
To execute a basic demo which generates a number of NeuroML v2.0/NetworkML v1.0 and NineML files, type: ./run.sh -test (Linux/Mac) or run.bat -test (Win). This demo also checks the validity of these generated files as well as the "handmade" example files against the NetworkML v1.x Schema, a prototype NeuroML v2.0 Schema and a very simple NineML v0.1 Schema.
This is one of the examples of the files in NeuroML v2.0 format generated by the Java API. It can be downloaded here.
<neuroml xmlns="http://www.neuroml.org/schema/neuroml2" |
This is one of the examples of the files in NineML format generated by the Java API. It can be downloaded here.
<nineml xmlns="http://nineml.org/9ML/0.1" |
Once a network description is generated with this API, the instances of the network can be generate by calling generate(seed) on the Network class. Using a different seed will produce a different network for stochastic layouts (e.g. randomly placed in a 3D region).
The generated network can be saved in a provisional NeuroML v2.0 instance based network file or as a valid NeuroML v1.x instance based file.
The generated NetworkML v1.x representation of the network can be visualised in compatible applications, e.g. neuroConstruct as in the figure above, or the X3D visualisation tool on the NeuroML website. A screenshot of the generated X3D file viewed in the OctagaPlayer is shown below: