NeuroML version 2 beta2
For details of the meetings which have taken place to date where NeuroML v2.0 has been discussed see here.
In June 2013 the first NeuroML Editorial Board was elected by the NeuroML community. This group will have responsibility for creating a stable specification for NeuroML v2.0 (and appropriate parts of LEMS). See here for more details.
NeuroML v2beta2 Schema (March 2014)
Most of the work listed below aims to handle XML files valid according to this schema. This should be the target structure for anyone wishing to implement NeuroML 2 support at this stage.
This image shows some of the elements currently defined in NeuroML v2beta2. The overall structure is similar to NeuroML version 1.x Level 3 (see figures 4-6 here). Note that there are a greater range of cell models supported (e.g. Izhikevich spiking cell, adaptive exponential integrate & fire) in addition to the multicompartmental conductance based models which were a focus of version 1.x.
Examples of NeuroML 2 files using this schema are available here:
- A simple cell with morphology & segment groups
- A cell with biophysical properties (channel densities, passive electrical properties, etc.)
- A simple HH Na+ channel
- Some of the simplified spiking neuron models which are supported
- Some synapse models (single/double exponential conductances, NMDA-R synapse)
- A network of populations of cells in 3D
- A full NeuroML v2beta2 network model description with cells, channels, populations and networks
Development of LEMS & mapping to NeuroML 2
LEMS (Low Entropy Model Specification) is a new XML based language with interpreter developed by Robert Cannon for specifying generic models of dynamical systems. ComponentType (ComponentClass was briefly used as a name for these) elements which specify Parameters, StateVariables and their Dynamics and Structure can be defined as templates for model elements (e.g. HH ion channels, abstract cells, etc.). Components are instances of these with specific values of Parameters (e.g. HH squid axon Na+ channel, I&F cell with threshold -60mV, etc.).
jLEMS is a Java package for parsing and executing LEMS models and is the reference implementation of the LEMS language. PyLEMS is a Python API for reading and writing LEMS and can also execute models in the language.
jNeuroML is a more comprehensive Java application for handling LEMS and NeuroML 2. It bundles jLEMS together with the LEMS definitions for NeuroML 2 ComponentTypes, and can simulate any LEMS model as well as many NeuroML 2 models, validate NeuroML 1/2, and export to and import from a number of other simulator formats.
A core set of ComponentTypes describing the behaviour of dynamical elements in NeuroML 2 has been defined in LEMS:
- Cell models: Cells.xml (source in LEMS)
- Network elements: Networks.xml (source in LEMS)
- Ion channels: Channels.xml (source in LEMS)
- Synapse models: Synapses.xml (source in LEMS)
- Mapping of PyNN cells & synapses: PyNN.xml (source in LEMS)
- Dimensions/units allowed: NeuroMLCoreDimensions.xml (source in LEMS)
These serve as the basis for Component definitions in NeuroML 2 files, e.g. izhikevichCell, iafTauCell, ionChannelHH, etc. The behaviour of the model element (e.g. the behaviour of v in terms of threshold, reset, tau in a simple I&F cell) is specified in the ComponentType, and the user only has to supply the name of the ComponentType and give parameter values to create a Component in their NeuroML file.
This image shows the usage of LEMS ComponentTypes & Components in NeuroML
Note that specifying a Component does not imply that an instance of the model is created. Instances will only be instantiated when the cells are created in a population which is present in a network.
Using LEMS to specify the core of NeuroML version 2 has the following significant advantages:
NeuroML 2 XML files can be used standalone by applications in the same way as NeuroML v1.x, without using LEMS, easing the transition for v1.x compliant applications
Any NeuroML 2 ComponentType can be extended and will be usable by any application (e.g. jLEMS) which understands LEMS
The first point above means that a parsing application does not have to natively read the LEMS type definition for, e.g. an izhikevichCell element, it just has to map the NeuroML element parameters onto its own object implementing that entity. The behaviour should be the same and should be tested against the reference LEMS implementation (jLEMS).
The second point above means that if an application does support LEMS, it can automatically parse (and generate code for) a wide range of NeuroML 2 cells, channels and synapses, including any new ComponentType derived from these, without having to natively know anything about channels, cell models, etc.
Specifications & examples
The table below summarises the current specifications for LEMS & NeuroML 2.
|LEMS||LEMS_v0.7.1.xsd||LEMS element definitions||LEMS examples|
|NeuroML v2beta2||NeuroML_v2beta2.xsd||NeuroML 2 Core ComponentTypes
|NeuroML 2 examples|
Implementations & APIs in Java and Python
|Read, validate & execute LEMS XML files||jLEMS||PyLEMS|
|Read & write NeuroML 2 files||Java API for NeuroML 2||libNeuroML|
Parse & execute LEMS; validate NeuroML v1/v2; convert LEMS to graphical format, NEURON, Brian, etc.; convert SBML to LEMS...
A summary of the holes & areas of current work in the current specifications...
- Network connection templates: more advanced options for defining connectivity between populations of cells is required. This is being worked on in collaboration with development for PyNN
- Support for multi compartment modelling in LEMS: While the NeuroML v2beta2 Schema supports description of multi compartmental conductance based neuronal models, the LEMS interpreter can only execute single compartment cell models at present.
- Better numerical integration in LEMS: At present jLEMS uses a simple forward Euler numerical integration method by default, limiting the size and speed of simulations. Other numerical integration options are in development...