begintemplate mTufted
// ls - long secondary dendrites
public soma, priden, secden, tuftden, hillock, initialseg, node, myelin
public all, secdens, tufts, dendritic, somatic, axonal, somden, ornsyn, ornrng, vcinit
public nsecden, ntuft, nmyelin
nmyelin=5
create soma, priden, secden[2], tuftden[1], hillock, initialseg, node[nmyelin], myelin[nmyelin]
objref dendritic, somatic, somden, synodor, external_syn, all, secdens, tufts, axonal
objref ornsyn, ornrng
objref vc
proc vcinit() {
priden vc = new VClamp(1)
vc.dur[0] = 10
vc.dur[1] = 0.1
vc.dur[2] = 0
vc.amp[0] = -55
vc.amp[1] = 100
vc.amp[2] = -55
}
proc init() {
ornsyn = new List()
ornsyn.remove_all()
ornrng = new List()
ornrng.remove_all()
nsecden = 2
ntuft = 1
subsets()
topol()
geometry()
segments()
memb()
}
proc createsec() {
nsecden = $1
ntuft = $2
nmyelin=5
ornsyn.remove_all()
ornrng.remove_all()
create soma, priden, secden[nsecden], tuftden[ntuft], hillock, initialseg, node[nmyelin], myelin[nmyelin]
}
proc subsets() {
all = new SectionList()
forall all.append()
secdens = new SectionList()
forsec "secden" secdens.append()
tufts = new SectionList()
forsec "tuftden" tufts.append()
dendritic = new SectionList()
forsec "priden" dendritic.append()
forsec secdens dendritic.append()
forsec tufts dendritic.append()
somatic = new SectionList()
soma somatic.append
axonal = new SectionList()
initialseg axonal.append()
forsec "node" axonal.append()
}
proc segments() {local i, dx
soma.nseg = 1
priden {
if(n3d() > 1) nseg = n3d() - 1
}
forsec tufts {
if(n3d() > 1) nseg = n3d() - 1
}
forsec secdens {
if(n3d() > 1) nseg = n3d() - 1
}
initialseg.nseg = 3
hillock.nseg = 3
}
proc geometry() {local i
soma { L = 25 diam = 20 }
priden { L = 300 diam = 3 }
// forsec tufts {rallbranch=20 L=300 diam(0:1)=.4:.4 }
forsec tufts {L=300 diam(0:1)=.4:.4 }
forsec secdens { L=1000 diam=2 }
initialseg{ L=30 diam=1.5}
hillock { L=5 diam(0:1) = soma.diam(0) : initialseg.diam(0) }
forsec "node" { L=1 diam=1 }
forsec "myelin" { L=1000 diam=1.5}
//define_shape()
}
proc topol() {local i localobj s
if (numarg() > 0) if ($1 == 0) { // do not connect secondary dendrites
}else{ // connect all secondary dendrites to soma (no branching)
for i =0, nsecden-1 {
connect secden[i](0), soma(.5)
}
}
connect priden(0), soma(1)
for i =0, ntuft-1 {
connect tuftden[i](0), priden(1)
}
connect hillock(0), soma(0)
connect initialseg(0), hillock(1)
connect myelin[0](0), initialseg(1)
for i = 0, nmyelin-1 {
connect node[i](0), myelin[i](1)
if (i == nmyelin-1) break
connect myelin[i+1](0), node[i](1)
}
}
proc memb() { local tau, cap, Vrest
Vrest = -55
tau = 20180
cap = 1
sh = 10
forall {
insert ks gksbar_ks=0.0055 tp_ks=12.5 a0q_ks=2000 kp_ks=2.5 vhalfp_ks=-35-sh vhalfq_ks=-50-sh tvh_ks=-50-sh
insert kamt gbar_kamt=0.004
insert nax gbar_nax=0.04 sh_nax=15-sh
insert pas g_pas=1/(tau/cap) Ra=150 cm=cap e_pas=Vrest
}
forsec "initialseg" {
gksbar_ks=0
gbar_kamt=0.06
gbar_nax=2.5/1.15
g_pas=1/(tau/cap/3)
}
forsec "node" {
gksbar_ks=0
gbar_kamt=0.06
gbar_nax =2.5/1.15
g_pas=1/(tau/cap/3)
}
forsec "myelin" {
gksbar_ks=0
gbar_kamt=0
gbar_nax =0
g_pas=1/(tau/cap/3*10/3)
cm=cap/100
}
forall {
ek=-80
ena=40
}
}
proc setup_orns() { localobj synodor, synrng
for i=0,ntuft-1 tuftden[i] {
synodor = new orn(0.5)
synrng = new Random()
synrng.Random123($1, $2+i)
synrng.normal(0, 1)
synodor.noiseFromRandom(synrng)
ornsyn.append(synodor)
ornrng.append(synrng)
}
}
endtemplate mTufted