Inputs#
A number of ComponentTypes for providing spiking ( e.g. spikeGeneratorPoisson, spikeArray ) and current inputs ( e.g. pulseGenerator, voltageClamp, timedSynapticInput, poissonFiringSynapse ) to other ComponentTypes
Original ComponentType definitions: Inputs.xml. Schema against which NeuroML based on these should be valid: NeuroML_v2.3.xsd. Generated on 14/08/24 from this commit. Please file any issues or questions at the issue tracker here.
basePointCurrent#
extends baseStandalone
Base type for all ComponentTypes which produce a current i ( with dimension current ).
i |
The total (usually time varying) current produced by this ComponentType |
baseVoltageDepPointCurrent#
extends basePointCurrent
Base type for all ComponentTypes which produce a current i ( with dimension current ) and require a voltage v exposed on the parent Component, which would often be the membrane potential of a Component extending baseCellMembPot.
i |
The total (usually time varying) current produced by this ComponentType (from basePointCurrent) |
v |
The current may vary with the voltage exposed by the ComponentType on which this is placed |
baseVoltageDepPointCurrentSpiking#
extends baseVoltageDepPointCurrent
Base type for all ComponentTypes which produce a current i, require a membrane potential v exposed on the parent and emit spikes ( on a port spike ). The exposed variable tsince can be used for plotting the time since the Component has spiked last.
i |
The total (usually time varying) current produced by this ComponentType (from basePointCurrent) |
|
tsince |
Time since the last spike was emitted |
v |
The current may vary with the voltage exposed by the ComponentType on which this is placed (from baseVoltageDepPointCurrent) |
spike |
Port on which spikes are emitted |
Direction: out |
basePointCurrentDL#
Base type for all ComponentTypes which produce a dimensionless current I. There are many dimensionless equivalents of all the core current producing ComponentTypes such as pulseGenerator / pulseGeneratorDL, sineGenerator / sineGeneratorDL and rampGenerator / rampGeneratorDL.
I |
The total (time varying) current produced by this ComponentType |
Dimensionless |
baseVoltageDepPointCurrentDL#
extends basePointCurrentDL
Base type for all ComponentTypes which produce a dimensionless current I and require a dimensionless membrane potential V exposed on the parent Component.
I |
The total (time varying) current produced by this ComponentType (from basePointCurrentDL) |
Dimensionless |
V |
The current may vary with the dimensionless voltage exposed by the ComponentType on which this is placed |
Dimensionless |
baseSpikeSource#
Base for any ComponentType whose main purpose is to emit spikes ( on a port spike ). The exposed variable tsince can be used for plotting the time since the Component has spiked last.
tsince |
Time since the last spike was emitted |
spike |
Port on which spikes are emitted |
Direction: out |
spikeGenerator#
extends baseSpikeSource
Simple generator of spikes at a regular interval set by period.
period |
Time between spikes. The first spike will be emitted after this time. |
SMALL_TIME = 1e-9ms |
A useful constant for use as a non zero time increment |
tnext |
When the next spike should ideally be emitted (dt permitting) |
|
tsince |
Time since the last spike was emitted (from baseSpikeSource) |
spike |
Port on which spikes are emitted (from baseSpikeSource) |
Direction: out |
<xs:complexType name="SpikeGenerator">
<xs:complexContent>
<xs:extension base="Standalone">
<xs:attribute name="period" type="Nml2Quantity_time" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Go to the libNeuroML documentation
from neuroml import SpikeGenerator
from neuroml.utils import component_factory
variable = component_factory(
SpikeGenerator,
id: 'a NonNegativeInteger (required)' = None,
metaid: 'a MetaId (optional)' = None,
notes: 'a string (optional)' = None,
properties: 'list of Property(s) (optional)' = None,
annotation: 'a Annotation (optional)' = None,
period: 'a Nml2Quantity_time (required)' = None,
)
<spikeGenerator id="spikeGenRegular" period="20 ms"/>
spikeGeneratorRandom#
extends baseSpikeSource
Generator of spikes with a random interspike interval of at least minISI and at most maxISI.
MSEC = 1ms |
Required for converting time values to/from dimensionless quantities |
isi |
The interval until the next spike |
|
tnext |
When the next spike should ideally be emitted (dt permitting) |
|
tsince |
Time since the last spike was emitted (from baseSpikeSource) |
spike |
Port on which spikes are emitted (from baseSpikeSource) |
Direction: out |
- State Variables
tsince: time (exposed as tsince)
tnext: time (exposed as tnext)
isi: time (exposed as isi)
- On Start
tsince = 0
isi = minISI + MSEC * random((maxISI - minISI) / MSEC)
tnext = isi
- On Conditions
IF t > tnext THEN
isi = minISI + MSEC * random((maxISI - minISI) / MSEC)
tsince = 0
tnext = tnext+isi
EVENT OUT on port: spike
- Time Derivatives
d tsince /dt = 1
d tnext /dt = 0
<xs:complexType name="SpikeGeneratorRandom">
<xs:complexContent>
<xs:extension base="Standalone">
<xs:attribute name="maxISI" type="Nml2Quantity_time" use="required"/>
<xs:attribute name="minISI" type="Nml2Quantity_time" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Go to the libNeuroML documentation
from neuroml import SpikeGeneratorRandom
from neuroml.utils import component_factory
variable = component_factory(
SpikeGeneratorRandom,
id: 'a NonNegativeInteger (required)' = None,
metaid: 'a MetaId (optional)' = None,
notes: 'a string (optional)' = None,
properties: 'list of Property(s) (optional)' = None,
annotation: 'a Annotation (optional)' = None,
max_isi: 'a Nml2Quantity_time (required)' = None,
min_isi: 'a Nml2Quantity_time (required)' = None,
)
<spikeGeneratorRandom id="spikeGenRandom" minISI="10 ms" maxISI="30 ms"/>
spikeGeneratorPoisson#
extends baseSpikeSource
Generator of spikes whose ISI is distributed according to an exponential PDF with scale: 1 / averageRate.
averageRate |
The average rate at which spikes are emitted |
SMALL_TIME = 1e-9ms |
isi |
The interval until the next spike |
|
tnextIdeal |
This is the ideal/perfect next spike time, based on a newly generated isi, but dt precision will mean that it’s usually slightly later than this |
|
tnextUsed |
This is the next spike time for practical purposes, ensuring that it’s later than the current time |
|
tsince |
Time since the last spike was emitted (from baseSpikeSource) |
spike |
Port on which spikes are emitted (from baseSpikeSource) |
Direction: out |
- State Variables
tsince: time (exposed as tsince)
tnextIdeal: time (exposed as tnextIdeal)
tnextUsed: time (exposed as tnextUsed)
isi: time (exposed as isi)
- On Start
tsince = 0
isi = -1 * log(random(1)) / averageRate
tnextIdeal = isi
tnextUsed = isi
- On Conditions
IF t > tnextUsed THEN
tsince = 0
isi = -1 * log(random(1)) / averageRate
tnextIdeal = (tnextIdeal+isi)
tnextUsed = tnextIdeal*H( (tnextIdeal-t)/t ) + (t+SMALL_TIME)*H( (t-tnextIdeal)/t )
EVENT OUT on port: spike
- Time Derivatives
d tsince /dt = 1
d tnextUsed /dt = 0
d tnextIdeal /dt = 0
<xs:complexType name="SpikeGeneratorPoisson">
<xs:complexContent>
<xs:extension base="Standalone">
<xs:attribute name="averageRate" type="Nml2Quantity_pertime" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Go to the libNeuroML documentation
from neuroml import SpikeGeneratorPoisson
from neuroml.utils import component_factory
variable = component_factory(
SpikeGeneratorPoisson,
id: 'a NonNegativeInteger (required)' = None,
metaid: 'a MetaId (optional)' = None,
notes: 'a string (optional)' = None,
properties: 'list of Property(s) (optional)' = None,
annotation: 'a Annotation (optional)' = None,
average_rate: 'a Nml2Quantity_pertime (required)' = None,
extensiontype_=None,
)
<spikeGeneratorPoisson id="spikeGenPoisson" averageRate="50 Hz"/>
spikeGeneratorRefPoisson#
extends spikeGeneratorPoisson
Generator of spikes whose ISI distribution is the maximum entropy distribution over [ minimumISI, +infinity ) with mean: 1 / averageRate.
averageRate |
The average rate at which spikes are emitted (from spikeGeneratorPoisson) |
|
minimumISI |
The minimum interspike interval |
averageIsi |
The average interspike interval |
averageIsi = 1 / averageRate
isi |
The interval until the next spike (from spikeGeneratorPoisson) |
|
tnextIdeal |
This is the ideal/perfect next spike time, based on a newly generated isi, but dt precision will mean that it’s usually slightly later than this (from spikeGeneratorPoisson) |
|
tnextUsed |
This is the next spike time for practical purposes, ensuring that it’s later than the current time (from spikeGeneratorPoisson) |
|
tsince |
Time since the last spike was emitted (from baseSpikeSource) |
spike |
Port on which spikes are emitted (from baseSpikeSource) |
Direction: out |
- State Variables
tsince: time (exposed as tsince)
tnextIdeal: time (exposed as tnextIdeal)
tnextUsed: time (exposed as tnextUsed)
isi: time (exposed as isi)
- On Start
tsince = 0
isi = minimumISI - (averageIsi-minimumISI) * log(random(1))
tnextIdeal = isi
tnextUsed = isi
- On Conditions
IF t > tnextUsed THEN
tsince = 0
isi = minimumISI - (averageIsi-minimumISI) * log(random(1))
tnextIdeal = (tnextIdeal+isi)
tnextUsed = tnextIdeal*H( (tnextIdeal-t)/t ) + (t+SMALL_TIME)*H( (t-tnextIdeal)/t )
EVENT OUT on port: spike
- Time Derivatives
d tsince /dt = 1
d tnextUsed /dt = 0
d tnextIdeal /dt = 0
<xs:complexType name="SpikeGeneratorRefPoisson">
<xs:complexContent>
<xs:extension base="SpikeGeneratorPoisson">
<xs:attribute name="minimumISI" type="Nml2Quantity_time" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Go to the libNeuroML documentation
from neuroml import SpikeGeneratorRefPoisson
from neuroml.utils import component_factory
variable = component_factory(
SpikeGeneratorRefPoisson,
id: 'a NonNegativeInteger (required)' = None,
metaid: 'a MetaId (optional)' = None,
notes: 'a string (optional)' = None,
properties: 'list of Property(s) (optional)' = None,
annotation: 'a Annotation (optional)' = None,
average_rate: 'a Nml2Quantity_pertime (required)' = None,
minimum_isi: 'a Nml2Quantity_time (required)' = None,
)
<spikeGeneratorRefPoisson id="spikeGenRefPoisson" averageRate="50 Hz" minimumISI="10 ms"/>
poissonFiringSynapse#
extends baseVoltageDepPointCurrentSpiking
Poisson spike generator firing at averageRate, which is connected to single synapse that is triggered every time a spike is generated, producing an input current. See also transientPoissonFiringSynapse.
averageRate |
The average rate at which spikes are emitted |
SMALL_TIME = 1e-9ms |
averageIsi |
The average interspike interval |
averageIsi = 1 / averageRate
spikeTarget |
The target of the spikes, i.e. the synapse |
synapse |
weight (default: 1) |
Dimensionless |
i |
The total (usually time varying) current produced by this ComponentType (from basePointCurrent) |
|
isi |
The interval until the next spike |
|
tnextIdeal |
||
tnextUsed |
||
tsince |
Time since the last spike was emitted (from baseVoltageDepPointCurrentSpiking) |
v |
The current may vary with the voltage exposed by the ComponentType on which this is placed (from baseVoltageDepPointCurrent) |
in |
Note this is not used here. Will be removed in future |
Direction: in |
spike |
Port on which spikes are emitted |
Direction: out |
spike |
Port on which spikes are emitted (from baseVoltageDepPointCurrentSpiking) |
Direction: out |
- Structure
WITH this AS a
WITH spikeTarget AS b
CHILD INSTANCE: synapse
EVENT CONNECTION from a TO b
- State Variables
tsince: time (exposed as tsince)
tnextIdeal: time (exposed as tnextIdeal)
tnextUsed: time (exposed as tnextUsed)
isi: time (exposed as isi)
- On Start
tsince = 0
isi = - averageIsi * log(random(1))
tnextIdeal = isi
tnextUsed = isi
- On Conditions
IF t > tnextUsed THEN
tsince = 0
isi = - averageIsi * log(1 - random(1))
tnextIdeal = (tnextIdeal+isi)
tnextUsed = tnextIdeal*H( (tnextIdeal-t)/t ) + (t+SMALL_TIME)*H( (t-tnextIdeal)/t )
EVENT OUT on port: spike
- Derived Variables
iSyn = synapse->i
i = weight * iSyn (exposed as i)
- Time Derivatives
d tsince /dt = 1
d tnextUsed /dt = 0
d tnextIdeal /dt = 0
<xs:complexType name="PoissonFiringSynapse">
<xs:complexContent>
<xs:extension base="Standalone">
<xs:attribute name="averageRate" type="Nml2Quantity_pertime" use="required"/>
<xs:attribute name="synapse" type="xs:string" use="required"/>
<xs:attribute name="spikeTarget" type="xs:string" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Go to the libNeuroML documentation
from neuroml import PoissonFiringSynapse
from neuroml.utils import component_factory
variable = component_factory(
PoissonFiringSynapse,
id: 'a NmlId (required)' = None,
metaid: 'a MetaId (optional)' = None,
notes: 'a string (optional)' = None,
properties: 'list of Property(s) (optional)' = None,
annotation: 'a Annotation (optional)' = None,
average_rate: 'a Nml2Quantity_pertime (required)' = None,
synapse: 'a string (required)' = None,
spike_target: 'a string (required)' = None,
)
<poissonFiringSynapse id="poissonFiringSyn" averageRate="10 Hz" synapse="synInput" spikeTarget="./synInput"/>
transientPoissonFiringSynapse#
extends baseVoltageDepPointCurrentSpiking
Poisson spike generator firing at averageRate after a delay and for a duration, connected to single synapse that is triggered every time a spike is generated, providing an input current. Similar to ComponentType poissonFiringSynapse.
averageIsi |
averageIsi = 1 / averageRate
spikeTarget |
synapse |
weight (default: 1) |
Dimensionless |
i |
The total (usually time varying) current produced by this ComponentType (from basePointCurrent) |
|
isi |
||
tnextIdeal |
||
tnextUsed |
||
tsince |
Time since the last spike was emitted (from baseVoltageDepPointCurrentSpiking) |
v |
The current may vary with the voltage exposed by the ComponentType on which this is placed (from baseVoltageDepPointCurrent) |
in |
Note this is not used here. Will be removed in future |
Direction: in |
spike |
Port on which spikes are emitted |
Direction: out |
spike |
Port on which spikes are emitted (from baseVoltageDepPointCurrentSpiking) |
Direction: out |
- Structure
WITH this AS a
WITH spikeTarget AS b
CHILD INSTANCE: synapse
EVENT CONNECTION from a TO b
- State Variables
tsince: time (exposed as tsince)
tnextIdeal: time (exposed as tnextIdeal)
tnextUsed: time (exposed as tnextUsed)
isi: time (exposed as isi)
- On Start
tsince = 0
isi = - averageIsi * log(1 - random(1)) +delay
tnextIdeal = isi
tnextUsed = isi
- On Conditions
IF t > tnextUsed THEN
tsince = 0
isi = - averageIsi * log(1 - random(1))
tnextIdeal = (tnextIdeal+isi) + H(((t+isi) - (delay+duration))/duration)*LONG_TIME
tnextUsed = tnextIdeal*H( (tnextIdeal-t)/t ) + (t+SMALL_TIME)*H( (t-tnextIdeal)/t )
EVENT OUT on port: spike
- Derived Variables
iSyn = synapse->i
i = weight * iSyn (exposed as i)
- Time Derivatives
d tsince /dt = 1
d tnextUsed /dt = 0
d tnextIdeal /dt = 0
<xs:complexType name="TransientPoissonFiringSynapse">
<xs:complexContent>
<xs:extension base="Standalone">
<xs:attribute name="averageRate" type="Nml2Quantity_pertime" use="required"/>
<xs:attribute name="delay" type="Nml2Quantity_time" use="required"/>
<xs:attribute name="duration" type="Nml2Quantity_time" use="required"/>
<xs:attribute name="synapse" type="xs:string" use="required"/>
<xs:attribute name="spikeTarget" type="xs:string" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Go to the libNeuroML documentation
from neuroml import TransientPoissonFiringSynapse
from neuroml.utils import component_factory
variable = component_factory(
TransientPoissonFiringSynapse,
id: 'a NmlId (required)' = None,
metaid: 'a MetaId (optional)' = None,
notes: 'a string (optional)' = None,
properties: 'list of Property(s) (optional)' = None,
annotation: 'a Annotation (optional)' = None,
average_rate: 'a Nml2Quantity_pertime (required)' = None,
delay: 'a Nml2Quantity_time (required)' = None,
duration: 'a Nml2Quantity_time (required)' = None,
synapse: 'a string (required)' = None,
spike_target: 'a string (required)' = None,
)
<transientPoissonFiringSynapse id="transPoissonFiringSyn" delay="50ms" duration="50ms" averageRate="300 Hz" synapse="synInputFast" spikeTarget="./synInputFast"/>
<transientPoissonFiringSynapse id="transPoissonFiringSyn2" delay="50ms" duration="500ms" averageRate="10 Hz" synapse="synInputFastTwo" spikeTarget="./synInputFastTwo"/>
timedSynapticInput#
extends baseVoltageDepPointCurrentSpiking
Spike array connected to a single synapse, producing a current triggered by each spike in the array.
spikeTarget |
synapse |
spikes |
weight (default: 1) |
Dimensionless |
i |
The total (usually time varying) current produced by this ComponentType (from basePointCurrent) |
|
tsince |
Time since the last spike was emitted (from baseVoltageDepPointCurrentSpiking) |
v |
The current may vary with the voltage exposed by the ComponentType on which this is placed (from baseVoltageDepPointCurrent) |
in |
This will receive events from the children |
Direction: in |
spike |
Port on which spikes are emitted (from baseVoltageDepPointCurrentSpiking) |
Direction: out |
- Structure
WITH this AS a
WITH spikeTarget AS b
CHILD INSTANCE: synapse
EVENT CONNECTION from a TO b
- State Variables
tsince: time (exposed as tsince)
- On Events
EVENT IN on port: in
tsince = 0
EVENT OUT on port: spike
- Derived Variables
iSyn = synapse->i
i = weight * iSyn (exposed as i)
- Time Derivatives
d tsince /dt = 1
<xs:complexType name="TimedSynapticInput">
<xs:complexContent>
<xs:extension base="Standalone">
<xs:sequence>
<xs:element name="spike" type="Spike" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="synapse" type="NmlId" use="required"/>
<xs:attribute name="spikeTarget" type="xs:string" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Go to the libNeuroML documentation
from neuroml import TimedSynapticInput
from neuroml.utils import component_factory
variable = component_factory(
TimedSynapticInput,
id: 'a NmlId (required)' = None,
metaid: 'a MetaId (optional)' = None,
notes: 'a string (optional)' = None,
properties: 'list of Property(s) (optional)' = None,
annotation: 'a Annotation (optional)' = None,
synapse: 'a NmlId (required)' = None,
spike_target: 'a string (required)' = None,
spikes: 'list of Spike(s) (optional)' = None,
)
<timedSynapticInput id="synTrain" synapse="synInputFastTwo" spikeTarget="./synInputFastTwo">
<spike id="0" time="2 ms"/>
<spike id="1" time="15 ms"/>
<spike id="2" time="27 ms"/>
<spike id="3" time="40 ms"/>
<spike id="4" time="45 ms"/>
<spike id="5" time="50 ms"/>
<spike id="6" time="52 ms"/>
<spike id="7" time="54 ms"/>
<spike id="8" time="54.5 ms"/>
<spike id="9" time="54.6 ms"/>
<spike id="10" time="54.7 ms"/>
<spike id="11" time="54.8 ms"/>
<spike id="12" time="54.9 ms"/>
<spike id="13" time="55 ms"/>
<spike id="14" time="55.1 ms"/>
<spike id="15" time="55.2 ms"/>
</timedSynapticInput>
spikeArray#
extends baseSpikeSource
Set of spike ComponentTypes, each emitting one spike at a certain time. Can be used to feed a predetermined spike train into a cell.
spikes |
tsince |
Time since the last spike was emitted (from baseSpikeSource) |
in |
This will receive events from the children |
Direction: in |
spike |
Port on which spikes are emitted (from baseSpikeSource) |
Direction: out |
- State Variables
tsince: time (exposed as tsince)
- On Start
tsince = 0
- On Events
EVENT IN on port: in
tsince = 0
EVENT OUT on port: spike
- Time Derivatives
d tsince /dt = 1
<xs:complexType name="SpikeArray">
<xs:complexContent>
<xs:extension base="Standalone">
<xs:sequence>
<xs:element name="spike" type="Spike" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Go to the libNeuroML documentation
from neuroml import SpikeArray
from neuroml.utils import component_factory
variable = component_factory(
SpikeArray,
id: 'a NonNegativeInteger (required)' = None,
metaid: 'a MetaId (optional)' = None,
notes: 'a string (optional)' = None,
properties: 'list of Property(s) (optional)' = None,
annotation: 'a Annotation (optional)' = None,
spikes: 'list of Spike(s) (optional)' = None,
)
<spikeArray id="spkArr">
<spike id="0" time="50 ms"/>
<spike id="1" time="100 ms"/>
<spike id="2" time="150 ms"/>
<spike id="3" time="155 ms"/>
<spike id="4" time="250 ms"/>
</spikeArray>
spike#
extends baseSpikeSource
Emits a single spike at the specified time.
time |
Time at which to emit one spike event |
spiked |
0 signals not yet spiked, 1 signals has spiked |
Dimensionless |
tsince |
Time since the last spike was emitted (from baseSpikeSource) |
spike |
Port on which spikes are emitted (from baseSpikeSource) |
Direction: out |
- Structure
WITH this AS a
WITH parent AS b
EVENT CONNECTION from a TO b
- State Variables
tsince: time (exposed as tsince)
spiked: Dimensionless (exposed as spiked)
- On Start
tsince = 0
- On Conditions
IF (t >= time) AND (spiked = 0) THEN
spiked = 1
tsince = 0
EVENT OUT on port: spike
- Time Derivatives
d tsince /dt = 1
<xs:complexType name="Spike">
<xs:complexContent>
<xs:extension base="BaseNonNegativeIntegerId">
<xs:attribute name="time" type="Nml2Quantity_time" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Go to the libNeuroML documentation
from neuroml import Spike
from neuroml.utils import component_factory
variable = component_factory(
Spike,
id: 'a NonNegativeInteger (required)' = None,
time: 'a Nml2Quantity_time (required)' = None,
)
<spike id="0" time="50 ms"/>
<spike id="1" time="100 ms"/>
<spike id="2" time="150 ms"/>
pulseGenerator#
extends basePointCurrent
Generates a constant current pulse of a certain amplitude for a specified duration after a delay. Scaled by weight, if set.
weight (default: 1) |
Dimensionless |
i |
The total (usually time varying) current produced by this ComponentType (from basePointCurrent) |
in |
Note: this is not used here. Will be removed in future |
Direction: in |
- State Variables
i: current (exposed as i)
- On Events
EVENT IN on port: in
- On Conditions
IF t < delay THEN
i = 0
IF t >= delay AND t < duration + delay THEN
i = weight * amplitude
IF t >= duration + delay THEN
i = 0
<xs:complexType name="PulseGenerator">
<xs:complexContent>
<xs:extension base="Standalone">
<xs:attribute name="delay" type="Nml2Quantity_time" use="required"/>
<xs:attribute name="duration" type="Nml2Quantity_time" use="required"/>
<xs:attribute name="amplitude" type="Nml2Quantity_current" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Go to the libNeuroML documentation
from neuroml import PulseGenerator
from neuroml.utils import component_factory
variable = component_factory(
PulseGenerator,
id: 'a NmlId (required)' = None,
metaid: 'a MetaId (optional)' = None,
notes: 'a string (optional)' = None,
properties: 'list of Property(s) (optional)' = None,
annotation: 'a Annotation (optional)' = None,
delay: 'a Nml2Quantity_time (required)' = None,
duration: 'a Nml2Quantity_time (required)' = None,
amplitude: 'a Nml2Quantity_current (required)' = None,
)
<pulseGenerator id="pulseGen1" delay="50ms" duration="200ms" amplitude="0.0032nA"/>
<pulseGenerator id="pulseGen2" delay="400ms" duration="200ms" amplitude="0.0020nA"/>
<pulseGenerator id="pulseGen3" delay="700ms" duration="200ms" amplitude="0.0010nA"/>
compoundInput#
extends basePointCurrent
Generates a current which is the sum of all its child basePointCurrent element, e.g. can be a combination of pulseGenerator, sineGenerator elements producing a single i. Scaled by weight, if set.
currents |
weight (default: 1) |
Dimensionless |
i |
The total (usually time varying) current produced by this ComponentType (from basePointCurrent) |
in |
Note this is not used here. Will be removed in future |
Direction: in |
- On Events
EVENT IN on port: in
- Derived Variables
i_total = currents[*]->i(reduce method: add)
i = weight * i_total (exposed as i)
<xs:complexType name="CompoundInput">
<xs:complexContent>
<xs:extension base="Standalone">
<xs:sequence>
<xs:element name="pulseGenerator" type="PulseGenerator" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="sineGenerator" type="SineGenerator" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="rampGenerator" type="RampGenerator" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Go to the libNeuroML documentation
from neuroml import CompoundInput
from neuroml.utils import component_factory
variable = component_factory(
CompoundInput,
id: 'a NmlId (required)' = None,
metaid: 'a MetaId (optional)' = None,
notes: 'a string (optional)' = None,
properties: 'list of Property(s) (optional)' = None,
annotation: 'a Annotation (optional)' = None,
pulse_generators: 'list of PulseGenerator(s) (optional)' = None,
sine_generators: 'list of SineGenerator(s) (optional)' = None,
ramp_generators: 'list of RampGenerator(s) (optional)' = None,
)
<compoundInput id="ci0">
<pulseGenerator id="pg1" delay="50ms" duration="200ms" amplitude=".8 nA"/>
<pulseGenerator id="pg2" delay="100ms" duration="100ms" amplitude=".4 nA"/>
<sineGenerator id="sg0" phase="0" delay="125ms" duration="50ms" amplitude=".4nA" period="25ms"/>
</compoundInput>
compoundInputDL#
extends basePointCurrentDL
Generates a current which is the sum of all its child basePointCurrentDL elements, e.g. can be a combination of pulseGeneratorDL, sineGeneratorDL elements producing a single i. Scaled by weight, if set.
currents |
weight (default: 1) |
Dimensionless |
I |
The total (time varying) current produced by this ComponentType (from basePointCurrentDL) |
Dimensionless |
in |
Note this is not used here. Will be removed in future |
Direction: in |
- On Events
EVENT IN on port: in
- Derived Variables
I_total = currents[*]->I(reduce method: add)
I = weight * I_total (exposed as I)
<xs:complexType name="CompoundInputDL">
<xs:complexContent>
<xs:extension base="Standalone">
<xs:sequence>
<xs:element name="pulseGeneratorDL" type="PulseGeneratorDL" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="sineGeneratorDL" type="SineGeneratorDL" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="rampGeneratorDL" type="RampGeneratorDL" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Go to the libNeuroML documentation
from neuroml import CompoundInputDL
from neuroml.utils import component_factory
variable = component_factory(
CompoundInputDL,
id: 'a NmlId (required)' = None,
metaid: 'a MetaId (optional)' = None,
notes: 'a string (optional)' = None,
properties: 'list of Property(s) (optional)' = None,
annotation: 'a Annotation (optional)' = None,
pulse_generator_dls: 'list of PulseGeneratorDL(s) (optional)' = None,
sine_generator_dls: 'list of SineGeneratorDL(s) (optional)' = None,
ramp_generator_dls: 'list of RampGeneratorDL(s) (optional)' = None,
)
pulseGeneratorDL#
extends basePointCurrentDL
Dimensionless equivalent of pulseGenerator. Generates a constant current pulse of a certain amplitude for a specified duration after a delay. Scaled by weight, if set.
weight (default: 1) |
Dimensionless |
I |
The total (time varying) current produced by this ComponentType (from basePointCurrentDL) |
Dimensionless |
in |
Note this is not used here. Will be removed in future |
Direction: in |
- State Variables
I: Dimensionless (exposed as I)
- On Events
EVENT IN on port: in
- On Conditions
IF t < delay THEN
I = 0
IF t >= delay AND t < duration + delay THEN
I = weight * amplitude
IF t >= duration + delay THEN
I = 0
<xs:complexType name="PulseGeneratorDL">
<xs:complexContent>
<xs:extension base="Standalone">
<xs:attribute name="delay" type="Nml2Quantity_time" use="required"/>
<xs:attribute name="duration" type="Nml2Quantity_time" use="required"/>
<xs:attribute name="amplitude" type="Nml2Quantity_none" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Go to the libNeuroML documentation
from neuroml import PulseGeneratorDL
from neuroml.utils import component_factory
variable = component_factory(
PulseGeneratorDL,
id: 'a NmlId (required)' = None,
metaid: 'a MetaId (optional)' = None,
notes: 'a string (optional)' = None,
properties: 'list of Property(s) (optional)' = None,
annotation: 'a Annotation (optional)' = None,
delay: 'a Nml2Quantity_time (required)' = None,
duration: 'a Nml2Quantity_time (required)' = None,
amplitude: 'a Nml2Quantity_current (required)' = None,
)
sineGenerator#
extends basePointCurrent
Generates a sinusoidally varying current after a time delay, for a fixed duration. The period and maximum amplitude of the current can be set as well as the phase at which to start. Scaled by weight, if set.
amplitude |
Maximum amplitude of current |
|
delay |
Delay before change in current. Current is zero prior to this. |
|
duration |
Duration for holding current at amplitude. Current is zero after delay + duration. |
|
period |
Time period of oscillation |
|
phase |
Phase (between 0 and 2*pi) at which to start the varying current (i.e. at time given by delay) |
Dimensionless |
weight (default: 1) |
Dimensionless |
i |
The total (usually time varying) current produced by this ComponentType (from basePointCurrent) |
in |
Direction: in |
- State Variables
i: current (exposed as i)
- On Events
EVENT IN on port: in
- On Conditions
IF t < delay THEN
i = 0
IF t >= delay AND t < duration+delay THEN
i = weight * amplitude * sin(phase + (2 * 3.14159265 * (t-delay)/period) )
IF t >= duration+delay THEN
i = 0
<xs:complexType name="SineGenerator">
<xs:complexContent>
<xs:extension base="Standalone">
<xs:attribute name="delay" type="Nml2Quantity_time" use="required"/>
<xs:attribute name="phase" type="Nml2Quantity_none" use="required"/>
<xs:attribute name="duration" type="Nml2Quantity_time" use="required"/>
<xs:attribute name="amplitude" type="Nml2Quantity_current" use="required"/>
<xs:attribute name="period" type="Nml2Quantity_time" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Go to the libNeuroML documentation
from neuroml import SineGenerator
from neuroml.utils import component_factory
variable = component_factory(
SineGenerator,
id: 'a NmlId (required)' = None,
metaid: 'a MetaId (optional)' = None,
notes: 'a string (optional)' = None,
properties: 'list of Property(s) (optional)' = None,
annotation: 'a Annotation (optional)' = None,
delay: 'a Nml2Quantity_time (required)' = None,
phase: 'a Nml2Quantity_none (required)' = None,
duration: 'a Nml2Quantity_time (required)' = None,
amplitude: 'a Nml2Quantity_current (required)' = None,
period: 'a Nml2Quantity_time (required)' = None,
)
<sineGenerator id="sg0" phase="0" delay="50ms" duration="200ms" amplitude="1.4nA" period="50ms"/>
<sineGenerator id="sg0" phase="0" delay="125ms" duration="50ms" amplitude=".4nA" period="25ms"/>
sineGeneratorDL#
extends basePointCurrentDL
Dimensionless equivalent of sineGenerator. Generates a sinusoidally varying current after a time delay, for a fixed duration. The period and maximum amplitude of the current can be set as well as the phase at which to start. Scaled by weight, if set.
amplitude |
Maximum amplitude of current |
Dimensionless |
delay |
Delay before change in current. Current is zero prior to this. |
|
duration |
Duration for holding current at amplitude. Current is zero after delay + duration. |
|
period |
Time period of oscillation |
|
phase |
Phase (between 0 and 2*pi) at which to start the varying current (i.e. at time given by delay) |
Dimensionless |
weight (default: 1) |
Dimensionless |
I |
The total (time varying) current produced by this ComponentType (from basePointCurrentDL) |
Dimensionless |
in |
Direction: in |
- State Variables
I: Dimensionless (exposed as I)
- On Events
EVENT IN on port: in
- On Conditions
IF t < delay THEN
I = 0
IF t >= delay AND t < duration+delay THEN
I = weight * amplitude * sin(phase + (2 * 3.14159265 * (t-delay)/period) )
IF t >= duration+delay THEN
I = 0
<xs:complexType name="SineGeneratorDL">
<xs:complexContent>
<xs:extension base="Standalone">
<xs:attribute name="delay" type="Nml2Quantity_time" use="required"/>
<xs:attribute name="phase" type="Nml2Quantity_none" use="required"/>
<xs:attribute name="duration" type="Nml2Quantity_time" use="required"/>
<xs:attribute name="amplitude" type="Nml2Quantity_none" use="required"/>
<xs:attribute name="period" type="Nml2Quantity_time" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Go to the libNeuroML documentation
from neuroml import SineGeneratorDL
from neuroml.utils import component_factory
variable = component_factory(
SineGeneratorDL,
id: 'a NmlId (required)' = None,
metaid: 'a MetaId (optional)' = None,
notes: 'a string (optional)' = None,
properties: 'list of Property(s) (optional)' = None,
annotation: 'a Annotation (optional)' = None,
delay: 'a Nml2Quantity_time (required)' = None,
phase: 'a Nml2Quantity_none (required)' = None,
duration: 'a Nml2Quantity_time (required)' = None,
amplitude: 'a Nml2Quantity_current (required)' = None,
period: 'a Nml2Quantity_time (required)' = None,
)
rampGenerator#
extends basePointCurrent
Generates a ramping current after a time delay, for a fixed duration. During this time the current steadily changes from startAmplitude to finishAmplitude. Scaled by weight, if set.
baselineAmplitude |
Amplitude of current before time delay, and after time delay + duration |
|
delay |
Delay before change in current. Current is baselineAmplitude prior to this. |
|
duration |
Duration for holding current at amplitude. Current is baselineAmplitude after delay + duration. |
|
finishAmplitude |
Amplitude of linearly varying current at time delay + duration |
|
startAmplitude |
Amplitude of linearly varying current at time delay |
weight (default: 1) |
Dimensionless |
i |
The total (usually time varying) current produced by this ComponentType (from basePointCurrent) |
in |
Direction: in |
- State Variables
i: current (exposed as i)
- On Start
i = baselineAmplitude
- On Events
EVENT IN on port: in
- On Conditions
IF t < delay THEN
i = weight * baselineAmplitude
IF t >= delay AND t < duration+delay THEN
i = weight * (startAmplitude + (finishAmplitude - startAmplitude) * (t - delay) / (duration))
IF t >= duration+delay THEN
i = weight * baselineAmplitude
<xs:complexType name="RampGenerator">
<xs:complexContent>
<xs:extension base="Standalone">
<xs:attribute name="delay" type="Nml2Quantity_time" use="required"/>
<xs:attribute name="duration" type="Nml2Quantity_time" use="required"/>
<xs:attribute name="startAmplitude" type="Nml2Quantity_current" use="required"/>
<xs:attribute name="finishAmplitude" type="Nml2Quantity_current" use="required"/>
<xs:attribute name="baselineAmplitude" type="Nml2Quantity_current" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Go to the libNeuroML documentation
from neuroml import RampGenerator
from neuroml.utils import component_factory
variable = component_factory(
RampGenerator,
id: 'a NmlId (required)' = None,
metaid: 'a MetaId (optional)' = None,
notes: 'a string (optional)' = None,
properties: 'list of Property(s) (optional)' = None,
annotation: 'a Annotation (optional)' = None,
delay: 'a Nml2Quantity_time (required)' = None,
duration: 'a Nml2Quantity_time (required)' = None,
start_amplitude: 'a Nml2Quantity_current (required)' = None,
finish_amplitude: 'a Nml2Quantity_current (required)' = None,
baseline_amplitude: 'a Nml2Quantity_current (required)' = None,
)
<rampGenerator id="rg0" delay="50ms" duration="200ms" startAmplitude="0.5nA" finishAmplitude="4nA" baselineAmplitude="0nA"/>
rampGeneratorDL#
extends basePointCurrentDL
Dimensionless equivalent of rampGenerator. Generates a ramping current after a time delay, for a fixed duration. During this time the dimensionless current steadily changes from startAmplitude to finishAmplitude. Scaled by weight, if set.
baselineAmplitude |
Amplitude of current before time delay, and after time delay + duration |
Dimensionless |
delay |
Delay before change in current. Current is baselineAmplitude prior to this. |
|
duration |
Duration for holding current at amplitude. Current is baselineAmplitude after delay + duration. |
|
finishAmplitude |
Amplitude of linearly varying current at time delay + duration |
Dimensionless |
startAmplitude |
Amplitude of linearly varying current at time delay |
Dimensionless |
weight (default: 1) |
Dimensionless |
I |
The total (time varying) current produced by this ComponentType (from basePointCurrentDL) |
Dimensionless |
in |
Direction: in |
- State Variables
I: Dimensionless (exposed as I)
- On Start
I = baselineAmplitude
- On Events
EVENT IN on port: in
- On Conditions
IF t < delay THEN
I = weight * baselineAmplitude
IF t >= delay AND t < duration+delay THEN
I = weight * (startAmplitude + (finishAmplitude - startAmplitude) * (t - delay) / (duration))
IF t >= duration+delay THEN
I = weight * baselineAmplitude
<xs:complexType name="RampGeneratorDL">
<xs:complexContent>
<xs:extension base="Standalone">
<xs:attribute name="delay" type="Nml2Quantity_time" use="required"/>
<xs:attribute name="duration" type="Nml2Quantity_time" use="required"/>
<xs:attribute name="startAmplitude" type="Nml2Quantity_none" use="required"/>
<xs:attribute name="finishAmplitude" type="Nml2Quantity_none" use="required"/>
<xs:attribute name="baselineAmplitude" type="Nml2Quantity_none" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Go to the libNeuroML documentation
from neuroml import RampGeneratorDL
from neuroml.utils import component_factory
variable = component_factory(
RampGeneratorDL,
id: 'a NmlId (required)' = None,
metaid: 'a MetaId (optional)' = None,
notes: 'a string (optional)' = None,
properties: 'list of Property(s) (optional)' = None,
annotation: 'a Annotation (optional)' = None,
delay: 'a Nml2Quantity_time (required)' = None,
duration: 'a Nml2Quantity_time (required)' = None,
start_amplitude: 'a Nml2Quantity_current (required)' = None,
finish_amplitude: 'a Nml2Quantity_current (required)' = None,
baseline_amplitude: 'a Nml2Quantity_current (required)' = None,
)
voltageClamp#
extends baseVoltageDepPointCurrent
Voltage clamp. Applies a variable current i to try to keep parent at targetVoltage. Not yet fully tested!!! Consider using voltageClampTriple!!
delay |
Delay before change in current. Current is zero prior to this. |
|
duration |
Duration for attempting to keep parent at targetVoltage. Current is zero after delay + duration. |
|
simpleSeriesResistance |
Current will be calculated by the difference in voltage between the target and parent, divided by this value |
|
targetVoltage |
Current will be applied to try to get parent to this target voltage |
weight (default: 1) |
Dimensionless |
i |
The total (usually time varying) current produced by this ComponentType (from basePointCurrent) |
v |
The current may vary with the voltage exposed by the ComponentType on which this is placed (from baseVoltageDepPointCurrent) |
in |
Note this is not used here. Will be removed in future |
Direction: in |
- State Variables
i: current (exposed as i)
- On Events
EVENT IN on port: in
- On Conditions
IF t < delay THEN
i = 0
IF t >= delay THEN
i = weight * (targetVoltage - v) / simpleSeriesResistance
IF t > duration + delay THEN
i = 0
<xs:complexType name="VoltageClamp">
<xs:complexContent>
<xs:extension base="Standalone">
<xs:attribute name="delay" type="Nml2Quantity_time" use="required"/>
<xs:attribute name="duration" type="Nml2Quantity_time" use="required"/>
<xs:attribute name="targetVoltage" type="Nml2Quantity_voltage" use="required"/>
<xs:attribute name="simpleSeriesResistance" type="Nml2Quantity_resistance" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Go to the libNeuroML documentation
from neuroml import VoltageClamp
from neuroml.utils import component_factory
variable = component_factory(
VoltageClamp,
id: 'a NmlId (required)' = None,
metaid: 'a MetaId (optional)' = None,
notes: 'a string (optional)' = None,
properties: 'list of Property(s) (optional)' = None,
annotation: 'a Annotation (optional)' = None,
delay: 'a Nml2Quantity_time (required)' = None,
duration: 'a Nml2Quantity_time (required)' = None,
target_voltage: 'a Nml2Quantity_voltage (required)' = None,
simple_series_resistance: 'a Nml2Quantity_resistance (required)' = None,
)
voltageClampTriple#
extends baseVoltageDepPointCurrent
Voltage clamp with 3 clamp levels. Applies a variable current i ( through simpleSeriesResistance ) to try to keep parent cell at conditioningVoltage until time delay, testingVoltage until delay + duration, and returnVoltage afterwards. Only enabled if active = 1.
active |
Whether the voltage clamp is active (1) or inactive (0). |
Dimensionless |
conditioningVoltage |
Target voltage before time delay |
|
delay |
Delay before switching from conditioningVoltage to testingVoltage. |
|
duration |
Duration to hold at testingVoltage. |
|
returnVoltage |
Target voltage after time duration |
|
simpleSeriesResistance |
Current will be calculated by the difference in voltage between the target and parent, divided by this value |
|
testingVoltage |
Target voltage between times delay and delay + duration |
weight (default: 1) |
Dimensionless |
i |
The total (usually time varying) current produced by this ComponentType (from basePointCurrent) |
v |
The current may vary with the voltage exposed by the ComponentType on which this is placed (from baseVoltageDepPointCurrent) |
in |
Note this is not used here. Will be removed in future |
Direction: in |
- State Variables
i: current (exposed as i)
- On Events
EVENT IN on port: in
- On Conditions
IF active = 1 AND t < delay THEN
i = weight * (conditioningVoltage - v) / simpleSeriesResistance
IF active = 1 AND t >= delay THEN
i = weight * (testingVoltage - v) / simpleSeriesResistance
IF active = 1 AND t > duration + delay THEN
i = weight * (returnVoltage - v) / simpleSeriesResistance
<xs:complexType name="VoltageClampTriple">
<xs:complexContent>
<xs:extension base="Standalone">
<xs:attribute name="active" type="ZeroOrOne" use="required"/>
<xs:attribute name="delay" type="Nml2Quantity_time" use="required"/>
<xs:attribute name="duration" type="Nml2Quantity_time" use="required"/>
<xs:attribute name="conditioningVoltage" type="Nml2Quantity_voltage" use="required"/>
<xs:attribute name="testingVoltage" type="Nml2Quantity_voltage" use="required"/>
<xs:attribute name="returnVoltage" type="Nml2Quantity_voltage" use="required"/>
<xs:attribute name="simpleSeriesResistance" type="Nml2Quantity_resistance" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Go to the libNeuroML documentation
from neuroml import VoltageClampTriple
from neuroml.utils import component_factory
variable = component_factory(
VoltageClampTriple,
id: 'a NmlId (required)' = None,
metaid: 'a MetaId (optional)' = None,
notes: 'a string (optional)' = None,
properties: 'list of Property(s) (optional)' = None,
annotation: 'a Annotation (optional)' = None,
active: 'a ZeroOrOne (required)' = None,
delay: 'a Nml2Quantity_time (required)' = None,
duration: 'a Nml2Quantity_time (required)' = None,
conditioning_voltage: 'a Nml2Quantity_voltage (required)' = None,
testing_voltage: 'a Nml2Quantity_voltage (required)' = None,
return_voltage: 'a Nml2Quantity_voltage (required)' = None,
simple_series_resistance: 'a Nml2Quantity_resistance (required)' = None,
)
<voltageClampTriple id="vClamp0" active="1" delay="50ms" duration="200ms" conditioningVoltage="-70mV" testingVoltage="-50mV" returnVoltage="-70mV" simpleSeriesResistance="1e6ohm"/>