Nengo.ca

ca.nengo.model.neuron.impl
Class LIFSpikeGenerator

java.lang.Object
  extended by ca.nengo.model.neuron.impl.LIFSpikeGenerator
All Implemented Interfaces:
SpikeGenerator, Probeable, Resettable, SimulationMode.ModeConfigurable, java.io.Serializable, java.lang.Cloneable

public class LIFSpikeGenerator
extends java.lang.Object
implements SpikeGenerator, Probeable

A leaky-integrate-and-fire model of spike generation. From Koch, 1999, the subthreshold model is: C dV(t)/dt + V(t)/R = I(t). When V reaches a threshold, a spike occurs (spike-related currents are not modelled).

For simplicity we take Vth = R = 1, which does not limit the behaviour of the model, although transformations may be needed if it is desired to convert to more realistic parameter ranges.

See Also:
Serialized Form

Nested Class Summary
static class LIFSpikeGenerator.Factory
          Creates LIFSpikeGenerators.
 
Constructor Summary
LIFSpikeGenerator()
          Uses default values.
LIFSpikeGenerator(float maxTimeStep, float tauRC, float tauRef)
           
LIFSpikeGenerator(float maxTimeStep, float tauRC, float tauRef, float initialVoltage)
           
 
Method Summary
 SpikeGenerator clone()
           
 float constantRateRun(float current)
           
 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 getMaxTimeStep()
           
 SimulationMode getMode()
           
 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 setMaxTimeStep(float max)
           
 void setMode(SimulationMode mode)
          Sets the object to run in either the given mode or the closest mode that it supports (all ModeConfigurables must support SimulationMode.DEFAULT, and must default to this mode).
 void setTauRC(float tauRC)
           
 void setTauRef(float tauRef)
           
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LIFSpikeGenerator

public LIFSpikeGenerator()
Uses default values.


LIFSpikeGenerator

public LIFSpikeGenerator(float maxTimeStep,
                         float tauRC,
                         float tauRef)
Parameters:
maxTimeStep - maximum integration time step (s). Shorter time steps may be used if a run(...) is requested with a length that is not an integer multiple of this value.
tauRC - resistive-capacitive time constant (s)
tauRef - refracory period (s)

LIFSpikeGenerator

public LIFSpikeGenerator(float maxTimeStep,
                         float tauRC,
                         float tauRef,
                         float initialVoltage)
Parameters:
maxTimeStep - Maximum integration time step (s). Shorter time steps may be used if a run(...) is requested with a length that is not an integer multiple of this value.
tauRC - Resistive-capacitive time constant (s)
tauRef - Refracory period (s)
initialVoltage - Initial condition on V
Method Detail

getMaxTimeStep

public float getMaxTimeStep()
Returns:
Maximum integration time step (s).

setMaxTimeStep

public void setMaxTimeStep(float max)
Parameters:
max - Maximum integration time step (s).

getTauRC

public float getTauRC()
Returns:
Resistive-capacitive time constant (s)

setTauRC

public void setTauRC(float tauRC)
Parameters:
tauRC - Resistive-capacitive time constant (s)

getTauRef

public float getTauRef()
Returns:
Refracory period (s)

setTauRef

public void setTauRef(float tauRef)
Parameters:
tauRef - Refracory period (s)

reset

public void reset(boolean randomize)
Specified by:
reset in interface Resettable
Parameters:
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.

run

public InstantaneousOutput run(float[] time,
                               float[] current)
Description copied from interface: SpikeGenerator
Runs the model for a given time segment. The total time is meant to be short (eg 1/2ms), in that the output of the model is either a spike or no spike during this period of simulation time.

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.

Specified by:
run in interface SpikeGenerator
Parameters:
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)
Returns:
true If there is a spike between the first and last times, false otherwise
See Also:
SpikeGenerator.run(float[], float[])

getVoltage

public float getVoltage()
Returns:
membrane voltage

constantRateRun

public float constantRateRun(float current)
Parameters:
current - Given current
Returns:
Result of solving for activity given current

getHistory

public TimeSeries getHistory(java.lang.String stateName)
                      throws SimulationException
Description copied from interface: Probeable
Note that the units of TimeSeries' for a given state do not change over time (ie at different time steps). CAUTION: The TimeSeries should not contain a reference to any arrays that you are going to change later. The caller owns what you return.

Specified by:
getHistory in interface Probeable
Parameters:
stateName - A state variable name
Returns:
History of values for the named state variable. The history must cover the most recent network time step, and no more. There should be no overlap in the time points returned for different steps.
Throws:
SimulationException - if the Probeable does not have the requested state
See Also:
Probeable.getHistory(String)

listStates

public java.util.Properties listStates()
Specified by:
listStates in interface Probeable
Returns:
List of state variable names, eg "V", and associated descriptions eg "membrane potential (mV)"
See Also:
Probeable.listStates()

getMode

public SimulationMode getMode()
Specified by:
getMode in interface SimulationMode.ModeConfigurable
Returns:
The SimulationMode in which the object is running
See Also:
SimulationMode.ModeConfigurable.getMode()

setMode

public void setMode(SimulationMode mode)
Description copied from interface: SimulationMode.ModeConfigurable
Sets the object to run in either the given mode or the closest mode that it supports (all ModeConfigurables must support SimulationMode.DEFAULT, and must default to this mode).

Specified by:
setMode in interface SimulationMode.ModeConfigurable
Parameters:
mode - SimulationMode in which it is desired that the object runs.
See Also:
SimulationMode.ModeConfigurable.setMode(ca.nengo.model.SimulationMode)

clone

public SpikeGenerator clone()
                     throws java.lang.CloneNotSupportedException
Specified by:
clone in interface SpikeGenerator
Overrides:
clone in class java.lang.Object
Returns:
Valid clone
Throws:
java.lang.CloneNotSupportedException - if clone can't be made

Nengo.ca