conductance
This document describes the "conductance" C++ class. This class describes objects that are conductances, or populations of ion channels.
This is an abstract class, and concrete implementations of ion channel types need to inherit from this class and define certain attributes like their activation functions.
Abstract | can contain | contained in |
---|---|---|
yes | nothing | compartment |
Properties¶
container
¶
type | default | user-accessible |
---|---|---|
compartment* | NULL | no |
gbar
¶
type | default | user-accessible |
---|---|---|
double | 0 | yes |
The maximal conductance of this channel type (in ). This is typically exposed to the user as a parameter to set and modify.
gbar_next
¶
type | default | user-accessible |
---|---|---|
double | 0 | no |
g
¶
type | default | user-accessible |
---|---|---|
double | 0 | no |
The instantaneous conductance of this channel type.
This is a product of gbar
and the activation and
inactivation variables.
E
¶
type | default | user-accessible |
---|---|---|
double | 0 | yes |
The reversal potential of this channel type.
m
¶
type | default | user-accessible |
---|---|---|
double | 0 | no |
The activation variable of this channel type.
h
¶
type | default | user-accessible |
---|---|---|
double | 1 | no |
The inactivation variable of this channel type.
verbosity
¶
type | default | user-accessible |
---|---|---|
int | -1 | no |
A flag that tells this channel how verbose it should be.
This is not be exposed to the user, since it it
broadcast to all components from xolotl.verbosity
.
Methods¶
buildLUT¶
Function Signature
void buildLUT(double approx_channels)
Description
This method constructs a look up table (LUT) that is used to estimate and other functions of the voltage. Since these functions are repeatedly evaluated, it is often faster to compute them for some values of the voltage once, store these values in a table, and use this table subsequently. This is an approximation since the voltage is rounded off to the nearest value in the look-up table, uses a little more memory, but can be much faster.
Code
Click here to view this method's code
fast_pow¶
Function Signature
inline double fast_pow(double x, int a)
Description
This method is a dirty hack to speed up computing exponents in C++. This requires that the power that a number is raised to be an integer (0-8)
Code
Click here to view this method's code
fast_exp¶
Function Signature
inline double fast_exp(double x)
Description
This method constitutes a dirty hack which is a faster way to compute exp(x) but is less precise
Code
Click here to view this method's code
getCurrent¶
Function Signature
double getCurrent(double V)
Description
This method returns the current that flows through this channel at this moment.
Code
Click here to view this method's code
checkSolvers¶
Function Signature
void checkSolvers(int solver_order)
Description
Code
Click here to view this method's code
mdot¶
Function Signature
double mdot(double V, double Ca, double m_)
Description
This method defines the rate of change of the m
variable
of this conductance. This definition is used when integrateMS
is used.
Code
Click here to view this method's code
hdot¶
Function Signature
double hdot(double V, double Ca, double h_)
Description
This method defines the rate of change of the h
variable
of this conductance. This definition is used when integrateMS
is used.
Code
Click here to view this method's code
m_inf¶
Function Signature
double m_inf(double V, double Ca)
Description
This method defines the activation curve of this channel. This is a virtual method, and is meant to be defined in the channel object.
Code
Click here to view this method's code
h_inf¶
Function Signature
double h_inf(double V, double Ca)
Description
This method defines the inactivation curve of this channel. This is a virtual method, and is meant to be defined in the channel object.
Code
Click here to view this method's code
tau_m¶
Function Signature
double tau_m(double V, double Ca)
Description
This method defines the dependence of the timescale of the activation variable on the voltage of this channel. This is a virtual method, and is meant to be defined in the channel object.
Code
Click here to view this method's code
tau_h¶
Function Signature
double tau_h(double V, double Ca)
Description
This method defines the dependence of the timescale of the inactivation variable on the voltage of this channel. This is a virtual method, and is meant to be defined in the channel object.
Code
Click here to view this method's code
gaussrand¶
Function Signature
double gaussrand()
Description
This method implements a very fast Gaussian random
number generator. This is much faster than the
built-in generators in the C++ <random>
header, and
is copied from Knuth and Marsaglia.
For the original source, see "A Convenient Method for Generating Normal Variables" SIAM Rev., 6(3), 260–264.
Code
Click here to view this method's code
getState¶
Function Signature
double getState(int i)
Description
The virtual method returns the "state" of a conductance. You can use this to read out whatever you want from this conductance.
Code
Click here to view this method's code
connect¶
Function Signature
void connect(compartment *pcomp_)
Description
This method "connects" a conductance object to a compartment
object. This sets the container
property of the conductance,
so the channel knows which compartment contains it.
Code
Click here to view this method's code
init¶
Function Signature
void init()
Description
This virtual method is a placeholder initialization method. Initialization methods are called after the model has been constructed, and all components have been connected, but before the model starts the simulation. This is a good place to put code that you need to run once before the simulation.
Code
Click here to view this method's code
integrate¶
Function Signature
void integrate(double V, double Ca)
Description
This method integrates the conductance object using
the exponential Euler method. This is the default
integration method used by xolotl. If an exact solution
is to be calculated (i.e.,AllowMInfApproximation = 0
and AllowHInfApproximation=0
)
then m
and h
are updated using the exponential Euler
equation using function evaluations of the activation
functions at this voltage and Calcium.
Otherwise, the lookup table is used to update m
and h
in this channel.
Note that this method is defined as virtual, so it can be overridden by integration methods specified in a specific conductance.
See Also
Code
Click here to view this method's code
integrateLangevin¶
Function Signature
void integrateLangevin(double V, double Ca)
Description
This method integrates the conductance object using the Euler-Maruyama method. The integration method used here is consistent with the methods used in Goldwyn and Shea-Brown 2011 and with Sengupta, Laughlin and Niven
Briefly, this method follows the approximate Langevin formulation of the underlying stochastic system formed by N independent channels that have independent gating kinetics. It can be thought of as the deterministic ODE, with an additive noise term whose variance scales with the inverse square root of the number of channels. The number of channels is computed automatically from the channel density and the area of the compartment.
Code
Click here to view this method's code
integrateMS¶
Function Signature
void integrateMS(int k, double V, double Ca)
Description
This method integrates a channel object using a multi-step solver (MS = "multi-step"). The "sub-step" is indicated in the integer k, which is the first input to this method.
The multi-step solver that is used here is a Runge-Kutta 4th order solver. Thus, k can have values up to 4.
Based on k
, different elements of the arrays k_m
and k_h
are calculated and stored. At each step, the derivative functions
mdot
and hdot
are computed.
See Also
Code
Click here to view this method's code