NML2: Synapse Types

All synapse types — expOne, expTwo, alpha, blocking, NMDA

NML2_SynapseTypes.nml

Catalog of all NeuroML2 built-in synapse types:

Synapse Kinetics Key Parameters
expOneSynapse Single-exponential decay gbase, erev, tauDecay
expTwoSynapse Rise + decay gbase, erev, tauRise, tauDecay
expThreeSynapse Rise + two decay phases gbase, erev, tauRise, tauDecay1, tauDecay2
alphaSynapse Alpha function gbase, erev, tau
blockingPlasticSynapse With voltage block + plasticity + blockConcentration, blockMechanism
doubleSynapse Two conductance components gbase1, gbase2, …
from pathlib import Path

nml_file = Path.home() / "work_data/toolboxes/NeuroML2/examples/NML2_SynapseTypes.nml"
text = nml_file.read_text()

for line in text.split('\n'):
    stripped = line.strip()
    if 'Synapse' in stripped and stripped.startswith('<') and 'id=' in stripped:
        print(stripped[:120])
<alphaSynapse id="synalpha" gbase="0.5nS" erev="0mV" tau="2ms" >
<expOneSynapse id="sy1" gbase="0.5nS" erev="0mV" tauDecay="3ms" >
<expTwoSynapse id="SimpleSynapse" gbase="0.5nS" erev="0mV"
<expThreeSynapse id="AMPA" gbase1="1.5nS" tauRise="0.1ms" tauDecay1="0.7ms"
<blockingPlasticSynapse id="stpSynDep" gbase="1nS" erev="0mV" tauRise="0.1ms" tauDecay="2ms">
<blockingPlasticSynapse id="stpSynDepFac" gbase="1nS" erev="0mV"
<blockingPlasticSynapse id="blockStpSynDep" gbase="1nS" erev="0mV"
<blockingPlasticSynapse id="blockStpSynDepFac" gbase="1nS" erev="0mV"
<blockingPlasticSynapse id="NMDA" gbase="0.5nS"
<doubleSynapse id="AMPA_NMDA" synapse1="AMPA" synapse1Path="./AMPA" synapse2="NMDA" synapse2Path="./NMDA">

TVBO Representation: IaF Cell (Synapse Target)

from tvbo import SimulationExperiment

exp = SimulationExperiment.from_string("""
label: "NML2 SynapseTypes: IaF Cell"
dynamics:
  name: IntegrateAndFire
  parameters:
    leakReversal: { value: -50.0 }
    tau:          { value: 30.0 }
    thresh:       { value: -55.0 }
    reset:        { value: -70.0 }
  state_variables:
    v:
      equation: { rhs: "(leakReversal - v) / tau" }
      initial_value: -50.0
      variable_of_interest: true
  events:
    spike:
      condition: { rhs: "v > thresh" }
      affect:    { rhs: "v = reset" }
network:
  number_of_nodes: 1
integration:
  method: euler
  step_size: 0.005
  duration: 300.0
  time_scale: ms
""")
xml = exp.render("lems")
print(xml[:800])

<Lems>

  <!-- Tell jLEMS/jNeuroML which component is the simulation entry point. -->
  <Target component="sim_NML2_SynapseTypes__IaF_Cell"/>

  <!-- ════════════════════════════════════════════════════════════════
       Dimensions & Units (inline — no external includes needed)
       ════════════════════════════════════════════════════════════════ -->

  <!-- Dimensions -->
  <Dimension name="none"/>
  <Dimension name="time" t="1"/>
  <Dimension name="voltage" m="1" l="2" t="-3" i="-1"/>
  <Dimension name="per_time" t="-1"/>
  <Dimension name="conductance" m="-1" l="-2" t="3" i="2"/>
  <Dimension name="capacitance" m="-1" l="-2" t="4" i="2"/>
  <Dimension name="current" i="1"/>
  <Dimension name="resistance" m="1" l="2" t="-3" i="-2"/>
  <Dimension name="concentration" l="-3" n="1"/>
  

Run TVBO

import numpy as np
import matplotlib.pyplot as plt

result = exp.run("neuroml")
da = result.integration.data
t = da.coords['time'].values
v = da.values[:, 0]

fig, ax = plt.subplots(figsize=(10, 4))
ax.plot(t, v)
ax.set_xlabel("Time (ms)")
ax.set_ylabel("Voltage (mV)")
ax.set_title("NML2 SynapseTypes: IaF Cell via TVBO")
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()