Inject current
This document describes how to inject current in a compartment in xolotl.
Limitations¶
- You cannot simultaneously inject current and voltage clamp a model
- Current injection is not supported when using the Runge-Kutta solver
How to inject current into a compartment¶
Inject a constant current into a single compartment model¶
The simplest way to inject current into a compartment is to
set the I_ext property in xolotl. Assuming you have a single compartment model called x
,
x.I_ext = .1; % nA
will inject 1 nA of current into the compartment. That's it.
Inject a constant current in a multi-compartment model¶
The size of I_ext in the second dimension is the number of compartments. Therefore, to inject a constant current into the compartment you want, set that element of I_ext. For example, if x
is a model with three compartments,
x.I_ext = [0 1 0];
will inject 1 nA into the second compartment, but nothing into the other two.
Inject a time-varying current into a compartment¶
xolotl supports injecting arbitrary, time-varying currents into a compartment, as long as they are determined in advance. In this case, I_ext must be a matrix whose size in the first dimension should be equal to x.t_end/x.sim_dt
Warning
A common error is tying to set I_ext to a vector whose length is x.t_end/x.dt. Note that x.dt and x.sim_dt can be different.
For example, if we want to inject a random current into a neuron model, we can do something like this:
x = xolotl.examples.neurons.BurstingNeuron;
x.I_ext = randn(x.t_end/x.sim_dt,1);
Warning
If you specify a time-varying x.I_ext, and then change x.t_end or x.sim_dt, I_ext may be overwritten if it is of an incompatible size.
Manipulating models while injecting current¶
Injecting constant current¶
By default, manipulating a model using x.manipulate allows you to vary the amount of constant current applied to the neuron:
This also means that if you specify a time-varying current, that I_ext is overwritten with a constant value when you call x.manipulate()
Injecting time-varying current¶
To manipulate a model while injecting a custom, time-varying current, set this preference:
x.pref.use_I_ext = false;
Now, your custom I_ext will be used, and sliders for I_ext will not be shown when manipulate is called.