Electrophysiology: models¶
The electrophysiology library contains a number of models of electrodes, amplifiers and recording protocols to simulate intracellular electrophysiological recordings. To import the electrophysiology library:
from brian.library.electrophysiology import *
There is a series of example scripts in the examples/electrophysiology folder.
Electrodes¶
Electrodes are defined as resistor/capacitor (RC) circuits, or multiple RC circuits in series. Define a simple RC electrode with resistance Re and capacitance Ce (possibly 0 pF) as follows:
el=electrode(Re,Ce)
The electrode
function returns an Equations
object containing the
electrode model, where
the electrode potential is v_el
(the recording), the membrane potential is vm
, the electrode current
entering the membrane is i_inj
and command current is i_cmd
.
These names can be overriden using the corresponding keywords. For example, a membrane
equation with a .5 nA current injected through an electrode is defined as follows:
eqs=Equations('dv/dt=(-gl*v+i_inj)/Cm : volt')+electrode(50*Mohm,10*pF,vm='v',i_cmd=.5*nA)
Specify i_cmd=None
if the electrode is only used to record (no current injection). More complex
electrodes can be defined by passing lists of resistances and capacitances, e.g.:
el=electrode([50*Mohm,20*Mohm],[5*pF,3*pF])
Amplifiers¶
Current-clamp amplifier¶
A current-clamp amplifier injects a current through an intracellular electrode and records the membrane potential. Two standard circuits are included to compensate for the electrode voltage: bridge compensation and capacitance neutralization (see e.g. the Axon guide). The following command:
amp=current_clamp(Re=80*Mohm,Ce=10*pF)
defines a current-clamp amplifier with an electrode modelled as a RC circuit. The function
returns an Equations
object, where
the recording potential is v_rec
, the membrane potential is vm
, the electrode current
entering the membrane is i_inj
and command current is i_cmd
.
These names can be overriden using the corresponding keywords.
For implementation reasons, the amplifier always includes an electrode.
Optionally, bridge compensation, can be used with the bridge
keyword and capacitance
neutralization with the capa_comp
keyword. For example, the following instruction defines
a partially compensated recording:
amp=current_clamp(Re=80*Mohm,Ce=10*pF,bridge=78*Mohm,capa_comp=8*pF)
The capacitance neutralization is a feedback circuit, so that it becomes unstable if
the feedback capacitance is larger than the actual capacitance of the electrode.
The bridge compensation is an input-dependent voltage offset (bridge*i_cmd
), and
thus is always stable (unless an additional feedback, such as dynamic clamp, is provided).
Note that the bridge and capacitance neutralization parameters can be variable names, e.g.:
amp=current_clamp(Re=80*Mohm,Ce=10*pF,bridge='Rbridge',capa_comp=8*pF)
and then the bridge compensation can be changed dynamically during the simulation.
Voltage-clamp amplifier¶
The library includes a single-electrode voltage-clamp amplifier, which clamps the potential at a given value and records the current going through the electrode. The following command:
amp=voltage_clamp(Re=20*Mohm)
defines a voltage-clamp amplifier with an electrode modelled as a pure
resistance.
The function
returns an Equations
object, where
the recording current is i_rec
, the membrane potential is vm
, the electrode current
entering the membrane is i_inj
and command voltage is v_cmd
(note that i_rec
= - i_inj
).
These names can be overriden using the corresponding keywords.
For implementation reasons, the amplifier always includes an electrode.
Electrode capacitance is not included, meaning that
the capacitance neutralization circuit is always set at the maximum value.
The quality of the clamp is limited by the electrode or ‘’series’’ resistance,
which can be compensated in a similar way as bridge compensation in current-clamp
recordings. Series resistance compensation consists in adding a current-dependent
voltage offset to the voltage command. Because of the feedback, that compensation needs
to be slightly delayed (with a low-pass circuit). The following example defines a
voltage-clamp amplifier with half-compensated series resistance and compensation delay
1 ms:
amp=voltage_clamp(Re=20*Mohm,Rs=10*Mohm,tau_u=1*ms)
The tau_u
keyword is optional and defaults to 1 ms.
Acquisition board¶
An acquisition board samples a recording
and sends a command (e.g. injected current)
at regular times. It is defined as a
NeuronGroup
.
Use:
board=AcquisitionBoard(P=neuron,V='V',I='I',clock)
where P
= neuron group (possibly containing amplifier and electrode),
V
= potential variable name,
I
= current variable name,
clock
= acquisition clock. The recording variable is then stored in
board.record
and a command is sent with the instruction board.command=I
.
Discontinuous current clamp¶
The discontinuous current clamp (DCC) consists in alternatively injecting current and measuring the potential, in order to measure the potential when the voltage across the electrode has vanished. The sampling clock is mainly determined by the electrode time constant (the sampling period should be two orders of magnitude larger than the electrode time constant). It is defined and used in the same way as an acquisition board (above):
board=DCC(P=neuron,V='V',I='I',frequency=2*kHz)
where frequency
is the sampling frequency. The duty cycle is 1/3
(meaning current is injected during 1/3 of each sampling step).
Discontinuous voltage clamp¶
The discontinuous voltage clamp or single-electrode voltage clamp (SEVC) is an implementation of the voltage clamp using a feedback current with a DCC amplifier. It is defined as the DCC:
board=SEVC(P=neuron,V='V',I='I',frequency=2*kHz,gain=10*nS)
except that a gain parameter is included. The SEVC injects a negative
feedback current I=gain*(Vcommand-V). The quality of the clamp improves with
higher gains, but there is a maximum value above which the system is unstable,
because of the finite temporal resolution.
The recorded current is stored in board.record
and the command voltage is sent
with the instruction board.command=-20*mV
.
With this implementation of the SEVC, the membrane is never perfectly clamped.
A better clamp is obtained by adding an integral controller with the keyword
gain2=10*nS/ms
. The additional current J(t) is governed by the differential
equation dJ/dt=gain2*(Vcommand-V), so that it ensures perfect clamping in the
stationary state.
However, this controller does not improve the settling time of the clamp, but
only the final voltage value.
Active Electrode Compensation¶
The electrophysiology library includes the Active Electrode Compensation (AEC) technique described in Brette et al (2008), High-resolution intracellular recordings using a real-time computational model of the electrode, Neuron 59(3):379-91.
It can be applied offline, or online, using the models of experimental setup described above. (for dynamic-clamp or voltage-clamp recordings, the electrode compensation must be done online). An AEC board is initialized in the same way as an acquisition board:
board=AEC(neuron,'V','I',clock)
where clock
is the acquisition clock. The estimation phase typically looks like:
board.start_injection()
run(2*second)
board.start_injection()
run(100*ms)
board.estimate()
where white noise is injected for 2 seconds (default amplitude .5 nA).
You can change the default amplitude and DC current as follows:
board.start_injection(amp=.5*nA,DC=1*nA)
.
After estimation, the kernel is stored in board.Ke
.
The following options can be passed to the function estimate
:
ksize
(default 150 sampling steps), ktail
(default 50 sampling steps)
and dendritic
(default False
, use True
is the recording is a thin
process, i.e., axon or dendrite).
Online compensation is then switched on with board.switch_on()
and off with board.switch_off()
. For example, to inject a .5 nA current
pulse for 200 ms, use the following instructions:
board.switch_on()
board.command=.5*nA
run(200*ms)
board.command=0*nA
run(150*ms)
board.switch_off()
During the simulation, the variable board.record
stores the compensated
potential.