FacetsML

FacetsML is an attempt to create a middleware between NeuroML and PyNN :

source:doc/diag_middleware.png

FacetsML is the declarative equivalent to the procedural language PyNN. It is a XML dialect, which can be easily translated to PyNN with a XSLT transformation.

For example, here is the declaration of a cell type named "cellA", which is a PyNN standardized "IF_cond_exp" neuron ("Leaky integrate and fire model with fixed threshold and decaying-exponential post-synaptic conductance") :

<cells>
    <cell name="cellA">
        <class:IF_cond_exp v_rest="-60."
                           cm="1."
                           tau_m="20."
                           tau_refrac="5."
                           tau_syn_E="5."
                           tau_syn_I="10."
                           e_rev_E="0."
                           e_rev_I="-80."
                           v_thresh="-50."
                           v_reset="-60."
                           i_offset="0.1"
                           v_init="-65.0" />
    </cell>
</cells>

That would be then translated to PyNN as :

cellclass['cellA'] = IF_cond_exp
cellparams['cellA'] = { 'v_rest': -60., 'cm': 1., 'tau_m': 20., 'tau_refrac': 5., 'tau_syn_E': 5., 'tau_syn_I': 10., 'e_rev_E': 0., 'e_rev_I': -80., 'v_thresh': -50., 'v_reset': -60., 'i_offset': 0.1, 'v_init': -65.0, }

That type of cell can then be used in a population that way :

<populations>
    <population name="exc_cells" label="Excitatory_Cells">
        <dim size="4000"/>
        <cell_type name="cellA"/>
        <randomInit rng="rng">
            <rand:uniform min="-60." max="-50."/>
        </randomInit>
    </population>
</populations>

translated in PyNN as :

exc_cells = Population((4000,), cellclass = cellclass['cellA'], cellparams = cellparams['cellA'], label="Excitatory_Cells", )
exc_cells.randomInit(RandomDistribution('uniform',[-60., -50., ], rng=rng))

And that population will be used in a projection that way :

<projections>
    <projection name="e2e"
        presynaptic_population_name="exc_cells"
        postsynaptic_population_name="exc_cells"
        method="fixedProbability"
        weight="0.004"
        target="excitatory"
        rng="rng">
            <methodParameter name="p_connect" value="0.02"/>
    </projection>
</projections>

translated in PyNN as :

e2e = Projection(exc_cells, exc_cells, method="fixedProbability", methodParameters=0.02, target="excitatory", rng=rng, )

The way the cells, populations and projections are declared is inspired by NeuroML.

Next step is to translate FacetsML to NeuroML and the opposite :



Online Converter (only available to Facets members)

online simulator

FacetsML web form

Download

Bugs/Enhancements

The translation between NeuroML and FacetsML is discussed there, please feel free to contribute (members only) :

If you find a bug in FacetsML, or wish to request a new feature, please click on "New Ticket" in the menu above and fill in the form.

The Neural Ensemble Ring

Other projects at http://neuralensemble.org:

  • NeuroTools -- a set of tools written in Python to manage, store and analyze computational neuroscience simulations.
  • nrnpy -- an unofficial, experimental branch of the NEURON codebase, focused on improving and extending the integration of the Python programming language into NEURON.