from tvbo import SimulationExperiment
exp = SimulationExperiment.from_string("""
label: "NeuroML Ex16: Input Types"
dynamics:
name: RS
iri: neuroml:izhikevich2007Cell
parameters:
v0: { value: -60, unit: mV }
C: { value: 100, unit: pF }
k: { value: 0.7, unit: nS_per_mV }
vr: { value: -60, unit: mV }
vt: { value: -40, unit: mV }
vpeak: { value: 35, unit: mV }
a: { value: 0.03, unit: per_ms }
b: { value: -2, unit: nS }
c: { value: -50, unit: mV }
d: { value: 100, unit: pA }
network:
dynamics:
# ── Synapse used by spike sources ──
syn1:
name: syn1
iri: neuroml:expTwoSynapse
parameters:
gbase: { value: 1, unit: nS }
erev: { value: 20, unit: mV }
tauRise: { value: 0.1, unit: ms }
tauDecay: { value: 3, unit: ms }
# ── Synapses used by poissonFiringSynapse / transientPoisson / timedSynapticInput ──
synInput:
name: synInput
iri: neuroml:expTwoSynapse
parameters:
gbase: { value: 8, unit: nS }
erev: { value: 20, unit: mV }
tauRise: { value: 1, unit: ms }
tauDecay: { value: 5, unit: ms }
synInputFast:
name: synInputFast
iri: neuroml:expTwoSynapse
parameters:
gbase: { value: 1, unit: nS }
erev: { value: 20, unit: mV }
tauRise: { value: 0.2, unit: ms }
tauDecay: { value: 1, unit: ms }
synInputFastTwo:
name: synInputFastTwo
iri: neuroml:expThreeSynapse
parameters:
gbase1: { value: 1.5, unit: nS }
tauRise: { value: 0.1, unit: ms }
tauDecay1: { value: 0.7, unit: ms }
gbase2: { value: 0.5, unit: nS }
tauDecay2: { value: 2.5, unit: ms }
erev: { value: 0, unit: mV }
# ── Current input generators ──
pulseGen0:
name: pulseGen0
iri: neuroml:pulseGenerator
parameters:
delay: { value: 50, unit: ms }
duration: { value: 200, unit: ms }
amplitude: { value: 1, unit: nA }
sg0:
name: sg0
iri: neuroml:sineGenerator
parameters:
phase: { value: 0 }
delay: { value: 50, unit: ms }
duration: { value: 200, unit: ms }
amplitude: { value: 1.4, unit: nA }
period: { value: 50, unit: ms }
rg0:
name: rg0
iri: neuroml:rampGenerator
parameters:
delay: { value: 50, unit: ms }
duration: { value: 200, unit: ms }
startAmplitude: { value: 0.5, unit: nA }
finishAmplitude: { value: 4, unit: nA }
baselineAmplitude: { value: 0, unit: nA }
vClamp0:
name: vClamp0
iri: neuroml:voltageClampTriple
parameters:
active: { value: 1 }
delay: { value: 50, unit: ms }
duration: { value: 200, unit: ms }
conditioningVoltage: { value: -70, unit: mV }
testingVoltage: { value: -50, unit: mV }
returnVoltage: { value: -70, unit: mV }
simpleSeriesResistance: { value: 1.0e6, unit: ohm }
# ── Event sources (become populations + synapticConnection) ──
spkArr:
name: spkArr
iri: neuroml:spikeArray
events:
spikes:
event_type: preset_time
trigger_times: [50, 100, 150, 155, 250]
spikeGenRegular:
name: spikeGenRegular
iri: neuroml:spikeGenerator
parameters:
period: { value: 20, unit: ms }
spikeGenRandom:
name: spikeGenRandom
iri: neuroml:spikeGeneratorRandom
parameters:
minISI: { value: 10, unit: ms }
maxISI: { value: 30, unit: ms }
spikeGenPoisson:
name: spikeGenPoisson
iri: neuroml:spikeGeneratorPoisson
parameters:
averageRate: { value: 50, unit: Hz }
spikeGenRefPoisson:
name: spikeGenRefPoisson
iri: neuroml:spikeGeneratorRefPoisson
parameters:
averageRate: { value: 50, unit: Hz }
minimumISI: { value: 10, unit: ms }
# ── Firing synapse inputs (current inputs with built-in synapse) ──
poissonFiringSyn:
name: poissonFiringSyn
iri: neuroml:poissonFiringSynapse
parameters:
averageRate: { value: 10, unit: Hz }
synapse: { description: synInput }
spikeTarget: { description: "./synInput" }
ci0:
name: ci0
iri: neuroml:compoundInput
components:
pg1:
name: pg1
iri: neuroml:pulseGenerator
parameters:
delay: { value: 50, unit: ms }
duration: { value: 200, unit: ms }
amplitude: { value: 0.8, unit: nA }
pg2:
name: pg2
iri: neuroml:pulseGenerator
parameters:
delay: { value: 100, unit: ms }
duration: { value: 100, unit: ms }
amplitude: { value: 0.4, unit: nA }
sg0:
name: sg0
iri: neuroml:sineGenerator
parameters:
phase: { value: 0 }
delay: { value: 125, unit: ms }
duration: { value: 50, unit: ms }
amplitude: { value: 0.4, unit: nA }
period: { value: 25, unit: ms }
transPoissonFiringSyn:
name: transPoissonFiringSyn
iri: neuroml:transientPoissonFiringSynapse
parameters:
delay: { value: 50, unit: ms }
duration: { value: 50, unit: ms }
averageRate: { value: 300, unit: Hz }
synapse: { description: synInputFast }
spikeTarget: { description: "./synInputFast" }
synTrain:
name: synTrain
iri: neuroml:timedSynapticInput
parameters:
synapse: { description: synInputFastTwo }
spikeTarget: { description: "./synInputFastTwo" }
events:
spikes:
event_type: preset_time
trigger_times: [2, 15, 27, 40, 45, 50, 52, 54, 54.5, 54.6, 54.7, 54.8, 54.9, 55, 55.1, 55.2]
nodes:
- {id: 0, dynamics: RS}
- {id: 1, dynamics: RS}
- {id: 2, dynamics: RS}
- {id: 3, dynamics: RS}
- {id: 4, dynamics: RS}
- {id: 5, dynamics: RS}
- {id: 6, dynamics: RS}
- {id: 7, dynamics: RS}
- {id: 8, dynamics: RS}
- {id: 9, dynamics: RS}
- {id: 10, dynamics: RS, record: false}
- {id: 11, dynamics: RS, record: false}
- {id: 12, dynamics: RS, record: false}
# Input source nodes
- {id: 100, dynamics: pulseGen0, record: false}
- {id: 101, dynamics: sg0, record: false}
- {id: 102, dynamics: rg0, record: false}
- {id: 103, dynamics: vClamp0, record: false}
- {id: 104, dynamics: spkArr, record: false}
- {id: 105, dynamics: spikeGenRegular, record: false}
- {id: 107, dynamics: spikeGenPoisson, record: false}
- {id: 112, dynamics: spikeGenRefPoisson, record: false}
- {id: 106, dynamics: spikeGenRandom, record: false}
- {id: 108, dynamics: poissonFiringSyn, record: false}
- {id: 109, dynamics: ci0, record: false}
- {id: 110, dynamics: transPoissonFiringSyn, record: false}
- {id: 111, dynamics: synTrain, record: false}
edges:
# Current inputs → explicitInput
- {source: 100, target: 0}
- {source: 101, target: 1}
- {source: 102, target: 2}
- {source: 103, target: 3}
- {source: 108, target: 8}
- {source: 109, target: 9}
- {source: 110, target: 10}
- {source: 111, target: 11}
# Spike sources → synapticConnection via syn1
- {source: 104, target: 4, coupling: syn1}
- {source: 105, target: 5, coupling: syn1}
- { source: 106, target: 6, coupling: syn1 }
- { source: 107, target: 7, coupling: syn1 }
- { source: 112, target: 12, coupling: syn1 }
integration:
method: euler
step_size: 0.001
duration: 300.0
time_scale: ms
parameters:
seed: { value: 123 }
""")
print(f"Model: {exp.dynamics.name if exp.dynamics else 'network'}")
print(f"Network nodes: {len(exp.network.nodes)}")