chans

package
v1.3.36 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 6, 2022 License: BSD-3-Clause Imports: 1 Imported by: 2

README

Chans: Channels of all types

chans.go contains Chans which defines the basic E, L, I, K channels.

Other channels are described below. There are various _plot directories with simple programs to plot the various functions and explore parameters.

Longer time-scale conductances from GABA-B / GIRK and NMDA receptors

This package implements two complementary conductances, GABA-B / GIRK and NMDA, that have relatively long time constants (on the order of 100-200 msec) and thus drive these longer-scale dynamics in neurons, beyond the basic AMPA and GABA-A channels with short ~10 msec time constants. In addition to their longer time constants, these neurons have interesting mirror-image rectification properties (voltage dependencies), inward and outward, which are a critical part of their function (Sanders et al, 2013).

GABA-B / GIRK

GABA-B is an inhibitory channel activated by the usual GABA inhibitory neurotransmitter, which is coupled to the GIRK G-protein coupled inwardly rectifying potassium (K) channel. It is ubiquitous in the brain, and is likely essential for basic neural function (especially in spiking networks from a computational perspective). The inward rectification is caused by a Mg+ ion block from the inside of the neuron, which means that these channels are most open when the neuron is hyperpolarized (inactive), and thus it serves to keep inactive neurons inactive.

In standard Leabra rate-code neurons using FFFB inhibition, the continuous nature of the GABA-A type inhibition serves this function already, so these GABA-B channels have not been as important, but whenever a discrete spiking function has been used along with FFFB inhibition or direct interneuron inhibition, there is a strong tendency for every neuron to fire at some point, in a rolling fashion, because neurons that are initially inhibited during the first round of firing can just pop back up once that initial wave of associated GABA-A inhibition passes. This is especially problematic for untrained networks where excitatory connections are not well differentiated, and neurons are receiving very similar levels of excitatory input. In this case, learning does not have the ability to further differentiate the neurons, and does not work effectively.

NMDA

NMDA is predominantly important for learning in most parts of the brain, but in frontal areas especially, a particular type of NMDA receptor drives sustained active maintenance, by driving sustained excitatory voltage-gated conductances (Goldman-Rakic, 1995; Lisman et al, 1998; Brunel & Wang, 2001). The well-known external Mg+ ion block of NMDA channels, which is essential for its Hebbian character in learning, also has the beneficial effect of keeping active neurons active by virtue of causing an outward rectification that is the mirror-image of the GIRK inward rectification, with the complementary functional effect. The Brunel & Wang (2001) model is widely used in many other active maintenance / working memory models.

Sanders et al, 2013 emphasize the "perfect couple" nature of the complementary bistability of GABA-B and NMDA, and show that it produces a more robust active maintenance dynamic in frontal cortical circuits.

We are using both NMDA and GABA-B to support robust active maintenance but also the ability to clear out previously-maintained representations, as a result of the GABA-B sustained inhibition.

Implementation

Spiking effects on Vm: Backpropagating Action Potentials

Spikes in the soma of a neuron also drive backpropagating action potentials back into the dendrites, which increases the overall membrane potential there above what is produced by the raw synaptic inputs. In our rate code models, we simulate these effects by adding a proportion of the rate code activation value to the Vm value. Also note that this Vm value is an equilibrium Vm that is not reset back to rest after each spike, so it is itself perhaps a bit elevated as a result.

GABA-B

The GABA-B / GIRK dynamics are based on a combination of Sanders et al, 2013 and Thomson & Destexhe, 1999 (which was major source for Sanders et al, 2013).

T&D found a sigmoidal logistic function described the maximum conductance as a function of GABA spikes, which saturates after about 10 spikes, and a conductance time course that is fit by a 4th-order function similar to the Hodgkin Huxley equations, with a peak at about 60 msec and a total duration envelope of around 200 msec. Sanders et al implemented these dynamics directly and describe the result as such:

These equations give a latency of GABAB-activated KIR current of 􏰅10 ms, time to peak of 􏰅50 ms, and a decay time constant of 􏰅80 ms as described by Thomson and Destexhe (1999). A slow time constant for GABA removal was chosen because much of the GABAB response is mediated by extrasynaptic receptors (Kohl and Paulsen, 2010) and because the time constant for GABA decline at extracellular sites appears to be much slower than at synaptic sites.

We take a simpler approach which is to just use a bi-exponential function to simulate the time course, using 45 and 50 msec time constants.

See gabab_plot subdirectory for program that generates these plots:

GABA-B V-G

V-G plot for GABA-B / GIRK from Sanders et al, 2013.

GABA-B S-G

Spike-G sigmoid plot for GABA-B / GIRK from Thomson & Destexhe (1999)

GABA-B Time

Bi-exponential time course with 45msec rise and 50msec decay fitting to results from Thomson & Destexhe (1999)

NMDA

The NMDA code uses the exponential function from Brunel & Wang (2001), which is very similar in shape to the Sanders et al, 2013 curve, to compute the voltage dependency of the current:

	vbio := v*100 - 100
	return 1 / (1 + 0.28*math32.Exp(-0.062*vbio))

where v is the normalized Vm value from the Leabra rate code equations -- vbio converts it into biological units.

See the nmda_plot directory for a program that plots this function, which looks like this (in terms of net conductance also taking into account the driving potential, which adds an (E - v) term in the numerator).

GABA-B V-G

V-G plot for NMDA from Brunel & Wang (2001)

VGCC: Voltage-gated Calcium Channels

VGCC implements an L-type Ca channel that opens as a function of membrane potential. It tends to broaden the effect of action potential spikes in the dendrites. See the vgcc_plot for more info.

Documentation

Overview

Package chans provides standard neural conductance channels for computing a point-neuron approximation based on the standard equivalent RC circuit model of a neuron (i.e., basic Ohms law equations). Includes excitatory, leak, inhibition, and dynamic potassium channels.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func VFmBio added in v1.2.97

func VFmBio(vm float32) float32

VFmBio returns normalized 0-1 voltage from biological mV voltage where 0 = -100mV and 1 = 0mV

func VToBio added in v1.2.97

func VToBio(vm float32) float32

VToBio returns biological mV voltage from normalized 0-1 voltage where 0 = -100mV and 1 = 0mV

Types

type AKParams added in v1.2.96

type AKParams struct {
	Gbar float32 `def:"2,0.01" desc:"strength of AK current"`
	Beta float32 `def:"0.01446,02039" desc:"multiplier for the beta term; 0.01446 for distal, 0.02039 for proximal dendrites"`
	Dm   float32 `def:"0.5,0.25" desc:"Dm factor: 0.5 for distal, 0.25 for proximal"`
	Koff float32 `def:"1.8,1.5" desc:"offset for K, 1.8 for distal, 1.5 for proximal"`
	Voff float32 `def:"1,11" desc:"voltage offset for alpha and beta functions: 1 for distal, 11 for proximal"`
	Hf   float32 `def:"0.1133,0.1112" desc:"h multiplier factor, 0.1133 for distal, 0.1112 for proximal"`
}

AKParams control an A-type K channel, which is voltage gated with maximal activation around -37 mV. It has two state variables, M (v-gated opening) and H (v-gated closing), which integrate with fast and slow time constants, respectively. H relatively quickly hits an asymptotic level of inactivation for sustained activity patterns. It is particularly important for counteracting the excitatory effects of voltage gated calcium channels which can otherwise drive runaway excitatory currents. See AKsParams for a much simpler version that works fine when full AP-like spikes are not simulated, as in our standard axon models.

func (*AKParams) AlphaFmVK added in v1.2.96

func (ap *AKParams) AlphaFmVK(vbio, k float32) float32

AlphaFmVK returns the Alpha function from vbio (not normalized, must not exceed 0)

func (*AKParams) BetaFmVK added in v1.2.96

func (ap *AKParams) BetaFmVK(vbio, k float32) float32

BetaFmVK returns the Beta function from vbio (not normalized, must not exceed 0)

func (*AKParams) DMHFmV added in v1.2.96

func (ap *AKParams) DMHFmV(v, m, h float32) (float32, float32)

DMHFmV returns the change at msec update scale in M, H factors as a function of V normalized (0-1)

func (*AKParams) Defaults added in v1.2.96

func (ap *AKParams) Defaults()

Defaults sets the parameters for distal dendrites

func (*AKParams) Distal added in v1.2.96

func (ap *AKParams) Distal()

Distal sets the parameters for distal dendrites

func (*AKParams) Gak added in v1.2.96

func (ap *AKParams) Gak(m, h float32) float32

Gak returns the AK net conductance from m, h gates

func (*AKParams) HFmV added in v1.2.96

func (ap *AKParams) HFmV(vbio float32) float32

HFmV returns the H gate value from vbio (not normalized, must not exceed 0)

func (*AKParams) HTauFmV added in v1.2.96

func (ap *AKParams) HTauFmV(vbio float32) float32

HTauFmV returns the HTau rate constant in msec from vbio (not normalized, must not exceed 0)

func (*AKParams) KFmV added in v1.2.96

func (ap *AKParams) KFmV(vbio float32) float32

KFmV returns the K value from vbio (not normalized, must not exceed 0)

func (*AKParams) MFmAlpha added in v1.2.96

func (ap *AKParams) MFmAlpha(alpha float32) float32

MFmAlpha returns the M gate factor from alpha

func (*AKParams) MTauFmAlphaBeta added in v1.2.96

func (ap *AKParams) MTauFmAlphaBeta(alpha, beta float32) float32

MTauFmAlphaBeta returns the MTau rate constant in msec from alpha, beta

func (*AKParams) Proximal added in v1.2.96

func (ap *AKParams) Proximal()

Proximal sets parameters for proximal dendrites

func (*AKParams) Update added in v1.3.23

func (ap *AKParams) Update()

type AKsParams added in v1.3.23

type AKsParams struct {
	Gbar float32 `def:"2,0.01" desc:"strength of AK current"`
	Hf   float32 `` /* 151-byte string literal not displayed */
	Mf   float32 `def:"0.075" desc:"multiplier for M -- determines slope of function"`
	Voff float32 `def:"2" desc:"voltage offset in biological units for M function"`
	Vmax float32 `def:-37" desc:"voltage level of maximum channel opening -- stays flat above that"`
}

AKsParams provides a highly simplified stateless A-type K channel that only has the voltage-gated activation (M) dynamic with a cutoff that ends up capturing a close approximation to the much more complex AK function. This is voltage gated with maximal activation around -37 mV. It is particularly important for counteracting the excitatory effects of voltage gated calcium channels which can otherwise drive runaway excitatory currents.

func (*AKsParams) Defaults added in v1.3.23

func (ap *AKsParams) Defaults()

Defaults sets the parameters for distal dendrites

func (*AKsParams) Gak added in v1.3.23

func (ap *AKsParams) Gak(v float32) float32

Gak returns the conductance as a function of normalized Vm GBar * MFmVnorm(v)

func (*AKsParams) MFmV added in v1.3.23

func (ap *AKsParams) MFmV(vbio float32) float32

MFmV returns the M gate function from vbio

func (*AKsParams) MFmVnorm added in v1.3.23

func (ap *AKsParams) MFmVnorm(v float32) float32

MFmVnorm returns the M gate function from vnorm

func (*AKsParams) Update added in v1.3.23

func (ap *AKsParams) Update()

type Chans

type Chans struct {
	E float32 `desc:"excitatory sodium (Na) AMPA channels activated by synaptic glutamate"`
	L float32 `desc:"constant leak (potassium, K+) channels -- determines resting potential (typically higher than resting potential of K)"`
	I float32 `desc:"inhibitory chloride (Cl-) channels activated by synaptic GABA"`
	K float32 `desc:"gated / active potassium channels -- typically hyperpolarizing relative to leak / rest"`
}

Chans are ion channels used in computing point-neuron activation function

func (*Chans) SetAll

func (ch *Chans) SetAll(e, l, i, k float32)

SetAll sets all the values

func (*Chans) SetFmMinusOther

func (ch *Chans) SetFmMinusOther(minus float32, oth Chans)

SetFmMinusOther sets all the values from given value minus other Chans

func (*Chans) SetFmOtherMinus

func (ch *Chans) SetFmOtherMinus(oth Chans, minus float32)

SetFmOtherMinus sets all the values from other Chans minus given value

type GABABParams added in v1.2.96

type GABABParams struct {
	RiseTau  float32 `def:"45" desc:"rise time for bi-exponential time dynamics of GABA-B"`
	DecayTau float32 `def:"50" desc:"decay time for bi-exponential time dynamics of GABA-B"`
	Gbar     float32 `def:"0,0.2" desc:"overall strength multiplier of GABA-B current"`
	Gbase    float32 `` /* 130-byte string literal not displayed */
	GiSpike  float32 `def:"10" desc:"multiplier for converting Gi to equivalent GABA spikes"`
	MaxTime  float32 `inactive:"+" desc:"time offset when peak conductance occurs, in msec, computed from RiseTau and DecayTau"`
	TauFact  float32 `view:"-" desc:"time constant factor used in integration: (Decay / Rise) ^ (Rise / (Decay - Rise))"`
}

GABABParams control the GABAB dynamics in PFC Maint neurons, based on Brunel & Wang (2001) parameters.

func (*GABABParams) BiExp added in v1.2.96

func (gp *GABABParams) BiExp(g, x float32) (dG, dX float32)

BiExp computes bi-exponential update, returns dG and dX deltas to add to g and x

func (*GABABParams) Defaults added in v1.2.96

func (gp *GABABParams) Defaults()

func (*GABABParams) GABAB added in v1.2.96

func (gp *GABABParams) GABAB(gabaB, gabaBx, gi float32) (g, x float32)

GABAB returns the updated GABA-B / GIRK activation and underlying x value based on current values and gi inhibitory conductance (proxy for GABA spikes)

func (*GABABParams) GFmS added in v1.2.96

func (gp *GABABParams) GFmS(s float32) float32

GFmS returns the GABA-B conductance as a function of GABA spiking rate, based on normalized spiking factor (i.e., Gi from FFFB etc)

func (*GABABParams) GFmV added in v1.2.96

func (gp *GABABParams) GFmV(v float32) float32

GFmV returns the GABA-B conductance as a function of normalized membrane potential

func (*GABABParams) GgabaB added in v1.2.96

func (gp *GABABParams) GgabaB(gabaB, vm float32) float32

GgabaB returns the overall net GABAB / GIRK conductance including Gbar, Gbase, and voltage-gating

func (*GABABParams) Update added in v1.2.96

func (gp *GABABParams) Update()

type NMDAParams added in v1.2.96

type NMDAParams struct {
	Gbar float32 `` /* 172-byte string literal not displayed */
	Tau  float32 `` /* 256-byte string literal not displayed */
	ITau float32 `` /* 196-byte string literal not displayed */
	MgC  float32 `` /* 257-byte string literal not displayed */
	Voff float32 `` /* 209-byte string literal not displayed */

	Dt     float32 `view:"-" json:"-" xml:"-" desc:"rate = 1 / tau"`
	IDt    float32 `view:"-" json:"-" xml:"-" desc:"rate = 1 / tau"`
	MgFact float32 `view:"-" json:"-" xml:"-" desc:"MgFact = MgC / 3.57"`
}

NMDAParams control the NMDA dynamics, based on Jahr & Stevens (1990) equations which are widely used in models, from Brunel & Wang (2001) to Sanders et al. (2013). The overall conductance is a function of a voltage-dependent postsynaptic factor based on Mg ion blockage, and presynaptic Glu-based opening, which in a simple model just increments

func (*NMDAParams) CaFmV added in v1.3.1

func (np *NMDAParams) CaFmV(v float32) float32

CaFmV returns the calcium current factor as a function of normalized membrane potential -- this factor is needed for computing the calcium current * MgGFmV

func (*NMDAParams) CaFmVbio added in v1.3.1

func (np *NMDAParams) CaFmVbio(vbio float32) float32

CaFmVbio returns the calcium current factor as a function of biological membrane potential -- this factor is needed for computing the calcium current * MgGFmV. This is the same function used in VGCC for their conductance factor.

func (*NMDAParams) Defaults added in v1.2.96

func (np *NMDAParams) Defaults()

func (*NMDAParams) Gnmda added in v1.2.96

func (np *NMDAParams) Gnmda(nmda, vm float32) float32

Gnmda returns the NMDA net conductance from nmda Glu binding and Vm including the GBar factor

func (*NMDAParams) MgGFmV added in v1.3.1

func (np *NMDAParams) MgGFmV(v float32) float32

MgGFmV returns the NMDA conductance as a function of normalized membrane potential based on Mg ion blocking

func (*NMDAParams) MgGFmVbio added in v1.3.1

func (np *NMDAParams) MgGFmVbio(vbio float32) float32

MgGFmVbio returns the NMDA conductance as a function of biological membrane potential based on Mg ion blocking

func (*NMDAParams) NMDASyn added in v1.3.1

func (np *NMDAParams) NMDASyn(nmda, raw float32) float32

NMDASyn returns the updated synaptic NMDA Glu binding based on new raw spike-driven Glu binding.

func (*NMDAParams) SnmdaFmSpike added in v1.3.5

func (np *NMDAParams) SnmdaFmSpike(spike float32, snmdaO, snmdaI *float32)

SnmdaFmSpike updates sender-based NMDA channel opening based on neural spiking using the inhibition and decay factors. These dynamics closely match the Urakubo et al (2008) allosteric NMDA receptor behavior, with ITau = 100, Tau = 30

func (*NMDAParams) Update added in v1.2.97

func (np *NMDAParams) Update()

func (*NMDAParams) VFactors added in v1.3.1

func (np *NMDAParams) VFactors(v float32) (mgg, cav float32)

VFactors returns MgGFmV and CaFmV based on normalized membrane potential. Just does the voltage conversion once.

type VGCCParams added in v1.2.96

type VGCCParams struct {
	Gbar float32 `def:"0.02,0.12" desc:"strength of VGCC current -- 0.12 value from Urakubo et al (2008) model"`
}

VGCCParams control the standard L-type Ca channel

func (*VGCCParams) DMHFmV added in v1.2.96

func (np *VGCCParams) DMHFmV(v, m, h float32) (float32, float32)

DMHFmV returns the change at msec update scale in M, H factors as a function of V normalized (0-1)

func (*VGCCParams) Defaults added in v1.2.96

func (np *VGCCParams) Defaults()

func (*VGCCParams) GFmV added in v1.2.96

func (np *VGCCParams) GFmV(v float32) float32

GFmV returns the VGCC conductance as a function of normalized membrane potential

func (*VGCCParams) Gvgcc added in v1.2.96

func (np *VGCCParams) Gvgcc(vm, m, h float32) float32

Gvgcc returns the VGCC net conductance from m, h activation and vm

func (*VGCCParams) HFmV added in v1.2.96

func (np *VGCCParams) HFmV(vbio float32) float32

HFmV returns the H gate function from vbio (not normalized, must not exceed 0)

func (*VGCCParams) MFmV added in v1.2.96

func (np *VGCCParams) MFmV(vbio float32) float32

MFmV returns the M gate function from vbio (not normalized, must not exceed 0)

func (*VGCCParams) Update added in v1.3.23

func (np *VGCCParams) Update()

Directories

Path Synopsis
gababplot plots an equation updating over time in a etable.Table and Plot2D. This is a good starting point for any plotting to explore specific equations.
gababplot plots an equation updating over time in a etable.Table and Plot2D. This is a good starting point for any plotting to explore specific equations.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL