// Mitral cell model template
begintemplate Mitral
public soma, prim, dend, tuft, all
public AMPA, GABAA, spiketimes, dendspike, tuftspike, spikecount, spikecount2, spikecount3
create soma, prim, dend, tuft
//objref real
objref AMPA, GABAA, spikecount, spikecount2, spikecount3
objref spiketimes, dendspike, tuftspike
proc celldef() {
topol()
subsets()
geom()
biophys($1)
// geom_nseg()
}
proc topol() {
connect dend(0), soma(1)
connect prim(1), soma(0)
connect tuft(1), prim(0)
}
// create subsets
objref all
proc subsets() {
all = new SectionList()
soma all.append
prim all.append
dend all.append
tuft all.append
}
// The following parameters are adapted from Shen et al. JNP, 1999
proc geom() {
soma {
L = 25
diam = 20
nseg = 1
}
prim {
L = 370
diam = 3.5
nseg = 5
}
dend {
L = 500
diam = 3.4 // 3.4 !!!
nseg = 7
}
tuft {
L = 20
diam = 0.5
nseg = 1
}
forall {
//nseg = 1
//nseg = int((L/(0.1*lambda_f(100))+0.9)/2)*2 + 1
}
}
func lambda_f() {
return 1e5*sqrt(diam/(4*PI*$1*Ra*cm))
}
proc biophys() { local El, RM, AMPAtau, AMPArev, GABAAtau GABAArev
RM = 30e3 // ohm.cm2 Shen et al. JNP, 1999
El = -60 // -60 !!!
ENa = 45
Ek = -80
AMPAtau = 10
AMPArev = 0
GABAAtau = 18
GABAArev = -70
shell_depth = 1
spike_threshold = -10
//==========================================================
gNa_soma = 50e-3
gNa_dend = 30e-3
gNa_prim = 20e-3
gNa_tuft = 20e-3
sh_Na = -3 // -3
gKdr_soma = 30e-3
gKdr_dend = 20e-3
gKdr_prim = 10e-3
gKdr_tuft = 10e-3
gA_soma = 10e-3
gA_dend = 0e-3
gA_prim = 0e-3
gA_tuft = 0e-3
Sha_A = 9.9
Shi_A = 5.7
ScaleNP = 1.0 // 1.0/1.5 !!! (1.4/1.5/1.6)
ScaleKS = 1.0 // 1.0/1.3 !!! (1.2/1.2/1.3)
gNaP_soma = ScaleNP*0.2e-3 // 0.2
gNaP_dend = ScaleNP*0.02e-3 // 0.02
gNaP_prim = ScaleNP*0.10e-3 // 0.1
gNaP_tuft = ScaleNP*0.10e-3 // 0.1
gKs_soma = ScaleKS*42e-3 // 42
gKs_dend = ScaleKS*8e-3 // 8
gKs_prim = ScaleKS*18e-3 // 18
gKs_tuft = ScaleKS*18e-3 // 18
tau_KS = 10 // Default: 10 !!!
kh_KS = 1.5 // Default: 1.5
gCa_soma = 0.4e-3
gCa_dend = 0.05e-3
gCa_prim = 0.2e-3
gCa_tuft = 0.2e-3
gKCa_soma = 5e-3 // 5
spiketimes = new Vector()
dendspike = new Vector()
tuftspike = new Vector()
forsec all {
Ra = 70 // ohm*cm; Shen et al. JNP, 1999
cm = 1.2 // uF/cm^2; Shen et al. JNP, 1999
}
soma {
insert pas
e_pas = El
g_pas = 1/RM
insert Inic
enic_Inic = 0
gbar_Inic = 0.0e-3 // 0.1
insert nafast
gnabar_nafast = gNa_soma
sh_nafast = sh_Na
insert kfasttab
gkbar_kfasttab = gKdr_soma
insert kamt
gbar_kamt = gA_soma
sha_kamt = Sha_A
shi_kamt = Shi_A
insert IKs
gbar_IKs = gKs_soma
tauM_IKs = tau_KS
kh_IKs = kh_KS
insert INaP
gbar_INaP = gNaP_soma
insert ICa
gcabar_ICa = gCa_soma
insert Ikca
gkbar_Ikca = gKCa_soma
insert cad
depth_cad = shell_depth
spikecount = new APCount(0.5)
spikecount.thresh = spike_threshold
spikecount.record(spiketimes)
}
dend {
insert pas
e_pas = El
g_pas = 1/RM
insert nafast
gnabar_nafast = gNa_dend
sh_nafast = sh_Na
insert kfasttab
gkbar_kfasttab = gKdr_dend
insert kamt
gbar_kamt = gA_dend
sha_kamt = Sha_A
shi_kamt = Shi_A
insert IKs
gbar_IKs = gKs_dend
tauM_IKs = tau_KS
kh_IKs = kh_KS
insert INaP
gbar_INaP = gNaP_dend
insert ICa
gcabar_ICa = gCa_dend
insert cad
depth_cad = shell_depth
GABAA = new ExpSyn(0.5)
GABAA.tau = GABAAtau
GABAA.e = GABAArev
spikecount2 = new APCount(1.0)
spikecount2.thresh = spike_threshold
spikecount2.record(dendspike)
}
prim {
insert pas
e_pas = El
g_pas = 1/RM
insert nafast
gnabar_nafast = gNa_prim
sh_nafast = sh_Na
insert kfasttab
gkbar_kfasttab = gKdr_prim
insert kamt
gbar_kamt = gA_prim
sha_kamt = Sha_A
shi_kamt = Shi_A
insert IKs
gbar_IKs = gKs_prim
tauM_IKs = tau_KS
kh_IKs = kh_KS
insert INaP
gbar_INaP = gNaP_prim
insert ICa
gcabar_ICa = gCa_prim
insert cad
depth_cad = shell_depth
}
tuft {
insert pas
e_pas = El
g_pas = 1/RM
insert Inic
enic_Inic = 3.2
gbar_Inic = $1
insert nafast
gnabar_nafast = gNa_tuft
sh_nafast = sh_Na
insert kfasttab
gkbar_kfasttab = gKdr_tuft
insert kamt
gbar_kamt = gA_tuft
sha_kamt = Sha_A
shi_kamt = Shi_A
insert IKs
gbar_IKs = gKs_tuft
tauM_IKs = tau_KS
kh_IKs = kh_KS
insert INaP
gbar_INaP = gNaP_tuft
insert ICa
gcabar_ICa = gCa_tuft
insert cad
depth_cad = shell_depth
AMPA = new ExpSyn(0.5)
AMPA.tau = AMPAtau
AMPA.e = AMPArev
spikecount3 = new APCount(0.5)
spikecount3.thresh = spike_threshold
spikecount3.record(tuftspike)
}
forall if (ismembrane("na_ion")) {
ena = ENa
}
forall if (ismembrane("k_ion")) {
ek = Ek
}
}
proc init() {
celldef($1)
}
endtemplate Mitral