LEMS: the Low Entropy Model Specification language
LEMS (Low Entropy Model Specification) is an XML based language with interpreter originally developed by Robert Cannon for specifying generic models of hybrid 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.).
|Full details of the background to LEMS, its current structure and functionality, its usage in NeuroML 2 and the various tools available for using these languages can be found in Cannon et al. 2014.|
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.
LEMS & NeuroML 2
This image (adapted from Vella et al. 2014) shows the usage of LEMS ComponentTypes & Components in NeuroML. Elements in NeuroML v2 are Components which have a corresponding structural and mathematical definition in LEMS ComponentTypes. A number of examples of ComponentTypes in LEMS are shown. A ComponentType izhikevichCell is defined in LEMS, and its parameters are specified as a, b, c, d, and thresh. The Dynamics of the ComponentType defines the state variables v and U. LEMS specifies how these vary with time. Conditions such as when the membrane potential crosses firing threshold are also defined using OnConditions. Shortened examples of a synapse (expTwoSynapse) and an ion channel model (ionChannelHH) are also shown. Instances of LEMS ComponentTypes can be created by specifying the values for each of the parameters. These instances are usually contained in NeuroML XML files.
There is a core set of ComponentTypes describing the behaviour of dynamical elements in NeuroML 2 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.
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.
jNeuroML is a 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.
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/translatable 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.