public class ALIFSpikeGenerator extends java.lang.Object implements SpikeGenerator, Probeable
An adapting leaky-integrate-and-fire model of spike generation. The mechanism of adaptation is a current I_ahp that is related to firing frequency. This current is proportional to the concentration of an ion species N, as I_ahp = -g_N * [N]. [N] increases with every spike and decays between spikes, as follows: d[N]/dt = -[N]/tau_N + inc_N sum_k(delta(t-t_k).
This form is taken from La Camera et al. (2004) Minimal models of adapted neuronal response to in vivo-like input currents, Neural Computation 16, 2101-24. This form of adaptation (as opposed to variation in firing threshold or membrane time constant) is convenient because it allows a rate model as well as a spiking model.
Some example parameter values are the same as a standard LIF, plus TauN = .2; incN = .05 - .2. for greater amounts of differing adaptation, increase the range of incN
TODO: unit tests (particularly verify numbers of spikes and rate match in various cases -- they seem to)Modifier and Type | Class and Description |
---|---|
static class |
ALIFSpikeGenerator.Factory
Creates ALIFSpikeGenerators.
|
Constructor and Description |
---|
ALIFSpikeGenerator()
Uses default parameters
|
ALIFSpikeGenerator(float tauRef,
float tauRC,
float tauN,
float incN) |
Modifier and Type | Method and Description |
---|---|
SpikeGenerator |
clone() |
float |
getAdaptedRate(float I) |
TimeSeries |
getHistory(java.lang.String stateName)
Note that the units of TimeSeries' for a given state do not change over time (ie at different
time steps).
|
float |
getIncN() |
SimulationMode |
getMode() |
float |
getOnsetRate(float I) |
float |
getTauN() |
float |
getTauRC() |
float |
getTauRef() |
float |
getVoltage() |
java.util.Properties |
listStates() |
void |
reset(boolean randomize) |
InstantaneousOutput |
run(float[] time,
float[] current)
Runs the model for a given time segment.
|
void |
setIncN(float incN) |
void |
setMode(SimulationMode mode)
DEFAULT and RATE are supported.
|
void |
setTauN(float tauN) |
void |
setTauRC(float tauRC) |
void |
setTauRef(float tauRef) |
public ALIFSpikeGenerator()
public ALIFSpikeGenerator(float tauRef, float tauRC, float tauN, float incN)
tauRef
- Refracory period (s)tauRC
- Resistive-capacitive time constant (s)tauN
- Time constant of adaptation-related ionincN
- Increment of adaptation-related ion with each spikepublic float getTauRef()
public void setTauRef(float tauRef)
tauRef
- Refracory period (s)public float getTauRC()
public void setTauRC(float tauRC)
tauRC
- Resistive-capacitive time constant (s)public float getTauN()
public void setTauN(float tauN)
tauN
- Time constant of adaptation-related ionpublic float getIncN()
public void setIncN(float incN)
incN
- Increment of adaptation-related ion with each spikepublic InstantaneousOutput run(float[] time, float[] current)
SpikeGenerator
The model is responsible for maintaining its internal state, and the state is assumed to be consistent with the start time. That is, if a caller calls run({.001 .002}, ...) and then run({.501 .502}, ...), the results may not make any sense, but this is not the model's responsibility. Absolute times are provided to support explicitly time-varying models, and for the convenience of Probeable models.
run
in interface SpikeGenerator
time
- Array of points in time at which input current is defined. This includes
at least the start and end times, and possibly intermediate times. (The SpikeGenerator
model can use its own time step -- these times are only used to define the input.)current
- Driving current at each given point in time (assumed to be constant
until next time point)SpikeGenerator.run(float[], float[])
public float getOnsetRate(float I)
I
- driving currentpublic float getAdaptedRate(float I)
I
- driving currentpublic void reset(boolean randomize)
reset
in interface Resettable
randomize
- True indicates that the object should be reset to a
randomly selected initial state (the object must be aware of the
distribution from which to draw from). False indicates that the
object should be reset to a fixed initial state (which it must
also know). Some objects may not support randomization of the initial
state, in which case a fixed state will be used in either case.Resettable.reset(boolean)
public SimulationMode getMode()
getMode
in interface SimulationMode.ModeConfigurable
SimulationMode.ModeConfigurable.getMode()
public void setMode(SimulationMode mode)
setMode
in interface SimulationMode.ModeConfigurable
mode
- SimulationMode in which it is desired that the object runs.SimulationMode.ModeConfigurable.setMode(ca.nengo.model.SimulationMode)
public TimeSeries getHistory(java.lang.String stateName) throws SimulationException
Probeable
getHistory
in interface Probeable
stateName
- A state variable nameSimulationException
- if the Probeable does not have the requested stateProbeable.getHistory(java.lang.String)
public float getVoltage()
public java.util.Properties listStates()
listStates
in interface Probeable
Probeable.listStates()
public SpikeGenerator clone() throws java.lang.CloneNotSupportedException
clone
in interface SpikeGenerator
clone
in class java.lang.Object
java.lang.CloneNotSupportedException
- if clone can't be made