/* Author: Johannes Luthman
This file inserts the ion channels, synapses, and other biophysics into the DCN neuron.
Subroutines in this file:
main: DCNmechs()
setBiophysics()
insertChannels()
insertSynapses()
fixCaIons()
*/
objref ampa[EXCTOTALSYNAPSES]
objref fnmda[EXCTOTALSYNAPSES]
objref snmda[EXCTOTALSYNAPSES]
objref gaba[INHTOTALSYNAPSES]
proc DCNmechs() {
setBiophysics()
insertChannels()
insertSynapses()
fixCaIons()
}
proc setBiophysics() {
// insert biophysics common to all compartments
forall {
cm = CM
Ra = RA
insert pasDCN
gbar_pasDCN = PASSCOND
}
// Change conductance and resistivity of the axon, the only compartment type with
// "non-standard" conductance and resistivity.
forsec axNode {
cm = CMMYEL
gbar_pasDCN = PASSCONDMYEL
}
}
proc insertChannels() {
// For each type of compartment, insert NMODL mechanisms
// (ion channels and ca-concentration).
// The qdeltat variable is GLOBAL in the NMODLs, meaning that it only needs to be
// specified once for each mechanism, here in the soma (which contains a copy of
// each mechanism).
soma {
insert NaF
gbar_NaF = gNaFsoma
qdeltat_NaF = QdTchannelGating
insert NaP
gbar_NaP = gNaPsoma
qdeltat_NaP = QdTchannelGating
ena = SodiumRevPot
insert fKdr
gbar_fKdr = gfKdrsoma
qdeltat_fKdr = QdTchannelGating
insert sKdr
gbar_sKdr = gsKdrsoma
qdeltat_sKdr = QdTchannelGating
insert SK
gbar_SK = gSKsoma
qdeltat_SK = QdTchannelGating
ek = PotassiumRevPot
insert h
gbar_h = gHsoma
qdeltat_h = QdTchannelGating
eh_h = hRevPot
insert TNC
gbar_TNC = gTNCsoma
eTNC_TNC = TNCrevPot
// calcium channels - they use the Goldman-Hodgkin-Katz (GHK) current equation
// and so don't have a set reversal potential.
insert CaLVA
perm_CaLVA = permCaLVAsoma
qdeltat_CaLVA = QdTchannelGating
insert CaHVA
perm_CaHVA = permCaHVAsoma
qdeltat_CaHVA = QdTchannelGating
// insert a hypothetical shell below the membrane of the cell to keep track of the
// calcium entering the cell through the CaHVA and CaLVA channels, respectively.
// The resulting calcium concentration is used to calculate the current flow through
// through those channels.
// For the CaHVA channel:
insert CaConc
tauCa_CaConc = tauCaConcSoma
kCa_CaConc = kCaCaConcSoma
// For the soma, the calculation of shell thickness is different from
// the dendrites since it is a sphere in GENESIS and a cylinder
// in NEURON. See how it's done in GENESIS file cn_comp_dj10.g and
// divide that expression by the surface area of the NEURON soma to get
// the following expression:
depth_CaConc = SHELLTHICK - 2*SHELLTHICK^2/diam + \
4*SHELLTHICK^3/(3*diam^2) // =0.196215
// For the CaLVA channel:
insert CalConc
tauCal_CalConc = tauCaConcSoma
kCal_CalConc = kCaCaConcSoma
depth_CalConc = SHELLTHICK - 2*SHELLTHICK^2/diam + \
4*SHELLTHICK^3/(3*diam^2) // =0.196215
}
forsec axHillock {
insert NaF
gbar_NaF = gNaFaxHill
ena = SodiumRevPot
insert fKdr
gbar_fKdr = gfKdraxHill
insert sKdr
gbar_sKdr = gsKdraxHill
ek = PotassiumRevPot
insert TNC
gbar_TNC = gTNCaxHill
eTNC_TNC = TNCrevPot
}
forsec axIniSeg {
insert NaF
gbar_NaF = gNaFaxIniSeg
ena = SodiumRevPot
insert fKdr
gbar_fKdr = gfKdraxIniSeg
insert sKdr
gbar_sKdr = gsKdraxIniSeg
ek = PotassiumRevPot
insert TNC
gbar_TNC = gTNCaxIniSeg
eTNC_TNC = TNCrevPot
}
// No channels in the axon.
// forsec axNode {
// }
forsec proxDend {
insert NaF
gbar_NaF = gNaFpDend
ena = SodiumRevPot
insert fKdr
gbar_fKdr = gfKdrpDend
insert sKdr
gbar_sKdr = gsKdrpDend
insert SK
gbar_SK = gSKpDend
ek = PotassiumRevPot
insert h
gbar_h = gHpDend
eh_h = hRevPot
insert TNC
gbar_TNC = gTNCpDend
eTNC_TNC = TNCrevPot
insert CaLVA
perm_CaLVA = permCaLVAdend
insert CaHVA
perm_CaHVA = permCaHVAdend
insert CaConc
kCa_CaConc = kCaCaConcDend
depth_CaConc = SHELLTHICK - (SHELLTHICK*SHELLTHICK/diam)
insert CalConc
kCal_CalConc = kCaCaConcDend
depth_CalConc = SHELLTHICK - (SHELLTHICK*SHELLTHICK/diam)
}
forsec distDend {
insert SK
gbar_SK = gSKdDend
ek = PotassiumRevPot
insert h
gbar_h = gHdDend
eh_h = hRevPot
insert CaLVA
perm_CaLVA = permCaLVAdend
insert CaHVA
perm_CaHVA = permCaHVAdend
insert CaConc
kCa_CaConc = kCaCaConcDend
depth_CaConc = SHELLTHICK - (SHELLTHICK*SHELLTHICK/diam)
insert CalConc
kCal_CalConc = kCaCaConcDend
depth_CalConc = SHELLTHICK - (SHELLTHICK*SHELLTHICK/diam)
}
} // end proc insertChannels()
proc insertSynapses() {
// GABAergic synapses
// If the short term depression variant of the GABA synapse is used, then calculate
// the depression level to start out with. Set the level to that reached at steady state
// with the present input frequency, using the equation from DCNsynGABA.mod giving "relProbSS".
if (useGABAsyndep == 1) {
initDeprLevel = 0.08 + 0.60*exp(-2.84*inhibitoryHz) + 0.32*exp(-0.02*inhibitoryHz)
}
c = 0
forsec inhSynapseComps {
if (useGABAsyndep == 1) {
gaba[c] = new DCNsynGABA(0.5)
gaba[c].startDeprLevel = initDeprLevel
} else {
gaba[c] = new DCNsyn(0.5)
}
gaba[c].tauRise = tauRiseGABA
gaba[c].tauFall = tauFallGABA
gaba[c].e = GABARevPot
c+=1
}
// Excitatory synapses
c = 0
forsec excSynapseComps {
ampa[c] = new DCNsyn(0.5)
ampa[c].tauRise = tauRiseAMPA
ampa[c].tauFall = tauFallAMPA
ampa[c].e = ExcitSynRevPot
fnmda[c] = new DCNsynNMDA(0.5)
fnmda[c].tauRise = tauRisefNMDA
fnmda[c].tauFall = tauFallfNMDA
fnmda[c].e = ExcitSynRevPot
fnmda[c].MgFactor = MgFactorfNMDA
fnmda[c].gamma = gammafNMDA
snmda[c] = new DCNsynNMDA(0.5)
snmda[c].tauRise = tauRisesNMDA
snmda[c].tauFall = tauFallsNMDA
snmda[c].e = ExcitSynRevPot
snmda[c].MgFactor = MgFactorsNMDA
snmda[c].gamma = gammasNMDA
c+=1
}
} // end of proc insertSynapses()
proc fixCaIons() {
// Set some specifications for the Ca and Cal ions. The following ion_style
// statements don't affect the behaviour of the model but compared to not giving
// them, speed up the simulation ca 5%, probably due to preventing eca from being
// calculated each dt. ion_style has to be set for each compartment where the Ca ion
// is used but gives no error when set for those compartments that don't use the ion.
forall {
ion_style("ca_ion", 2, 0, 0, 0, 1)
}
forall {
ion_style("cal_ion", 2, 0, 0, 0, 1)
}
// Set the extracellular calcium concentrations (mM):
cao0_ca_ion = 2
calo0_cal_ion = 2
}
DCNmechs()