// PG cell template
begintemplate PGcell
public soma, dend, gemmshaft, gemmbody
public AMPAr, spiketimes, dendspike, spikecount
create soma, dend, gemmshaft, gemmbody
objref AMPAr, spiketimes, dendspike, spikecount, dendcount
proc parameter() {
AMPAtau = 5.5
Erev = 0
shell_depth = 0.2
RM = 20e3 // ohm.cm2
EL = -65
ENA = 45
EK = -80
ECA = 100
gNa_Soma = 50e-3
gNa_Dend = 20e-3
Sh_Na = 5
gKdr_Soma = 20e-3
gKdr_Dend = 5e-3
gA_Soma = 10e-3
gA_Dend = 30e-3
Sha_A = 0
Shi_A = -20
k_tauH = 2.5
sh_tauH = 0
gH_Dend = 0.2e-3
gM_Soma = 1.0e-3
gM_Dend = 0.0e-3
gKCa_Soma = 0.0e-3
gKCa_Dend = 2.0e-3
gCapn_Soma = 0.0e-3
gCapn_Dend = 1.0e-3
gCaT_Soma = 0.0e-3
gCaT_Dend = 3.0e-3
Sha_T = -15
Shi_T = 0
K_tauH = 1.0
gcan_Dend = 0.0e-3
}
proc celldef() {
topol()
subsets()
segments()
geometry()
biophysics($1)
}
proc topol() {
connect dend(0), soma(1)
connect gemmshaft(0), dend(1)
connect gemmbody(0), gemmshaft(1)
}
// create subsets
objref pg_all, pgdendgemm, spine
proc subsets() {
// gemmules (body & shaft)
spine = new SectionList()
forsec "gemm" spine.append()
// dendrites & gemmules (body & shaft)
pgdendgemm = new SectionList()
forsec "dend" pgdendgemm.append()
forsec "gemm" pgdendgemm.append()
// all pg sections
pg_all = new SectionList()
forsec pgdendgemm pg_all.append()
soma pg_all.append()
}
proc segments() {
soma.nseg = 1
dend.nseg = 1
gemmshaft.nseg = 1
gemmbody.nseg = 1
}
proc geometry() {
soma { L=8 diam=8 }
dend { L=100 diam=1 }
gemmshaft { L=1 diam=1 }
gemmbody { L=1 diam=1 }
define_shape()
}
proc biophysics() {
parameter()
spiketimes = new Vector()
dendspike = new Vector()
spike_threshold = -10
forsec pg_all { // insert passive current everywhere
Ra = 80
cm = 1.2
insert pas
g_pas = 1/RM
e_pas = EL
}
soma {
insert nax
gbar_nax = gNa_Soma
sh_nax = Sh_Na
insert kdrmt
gbar_kdrmt = gKdr_Soma
q10_kdrmt = 3
insert kamt
gbar_kamt = gA_Soma
sha_kamt = Sha_A
shi_kamt = Shi_A
k_tauH_kamt = k_tauH
sh_tauH_kamt = sh_tauH
insert kM
gkbar_kM = gM_Soma
insert Icapn
gbar_Icapn = gCapn_Soma
insert Ikca
gkbar_Ikca = gKCa_Soma
insert Icat
gbar_Icat = gCaT_Soma
sha_Icat = Sha_T
shi_Icat = Shi_T
insert cad2
depth_cad2 = shell_depth
ena = ENA
ek = EK
eca = ECA
spikecount = new APCount(0.5)
spikecount.thresh = spike_threshold
spikecount.record(spiketimes)
}
forsec pgdendgemm {
insert nax
gbar_nax = gNa_Dend
sh_nax = Sh_Na
insert kdrmt
gbar_kdrmt = gKdr_Dend
q10_kdrmt = 3
insert kamt
gbar_kamt = gA_Dend
sha_kamt = Sha_A
shi_kamt = Shi_A
k_tauH_kamt = k_tauH
sh_tauH_kamt = sh_tauH
insert kM
gkbar_kM = gM_Dend
insert hpg
eh_hpg = 0
ghbar_hpg = gH_Dend
insert Ican
gbar_Ican = gcan_Dend
insert Ikca
gkbar_Ikca = gKCa_Dend
insert Icapn
gbar_Icapn = gCapn_Dend
insert Icat
gbar_Icat = gCaT_Dend
sha_Icat = Sha_T
shi_Icat = Shi_T
k_tauH_Icat = K_tauH
insert cad2
depth_cad2 = shell_depth
ena = ENA
ek = EK
eca = ECA
}
forsec spine {
insert Inic
enic_Inic = 3.2
gbar_Inic = $1
}
gemmbody{
AMPAr = new ExpSyn(0.5)
AMPAr.tau = AMPAtau
AMPAr.e = Erev
dendcount = new APCount(0.5)
dendcount.thresh = spike_threshold
dendcount.record(dendspike)
}
}
proc init() {
celldef($1)
}
endtemplate PGcell