// Artificial cells no longer need a default section.
//Network cell templates
// VIPCell
// Simplified version (BPG 27-9-08)
// - geometry and channels from Santhakumar et al 2005
// - geometry modified to preserve VCUs different dendrites
global_lambda_f = 1
func lambda_f() {return global_lambda_f}
begintemplate VIPCRCell_EDITED
public is_art
public init, topol, basic_shape, subsets, geom, biophys
public pre_list, connect2target
public soma
public rad1 // public radProx1, radMed1, radDist1, lmM1, lmt1
public rad2 // public radProx2, radMed2, radDist2, lmM2, lmt2
public ori1 // public oriProx1, oriMed1, oriDist1
public ori2 // public oriProx2, oriMed2, oriDist2
public all
objref pre_list
proc init() {
topol()
subsets()
geom()
biophys()
geom_nseg()
pre_list = new List()
synapses()
}
create soma
create rad1 // create radProx1, radMed1, radDist1, lmM1, lmt1
create rad2 // create radProx2, radMed2, radDist2, lmM2, lmt2
create ori1 // create oriProx1, oriMed1, oriDist1
create ori2 // create oriProx2, oriMed2, oriDist2
proc topol() { local i
connect rad1(0), soma(0) // connect radProx1(0), soma(0)
// connect radMed1(0), radProx1(1)
// connect radDist1(0), radMed1(1)
// connect lmM1(0), radDist1(1)
// connect lmt1(0), lmM1(1)
connect rad2(0), soma(1) // connect radProx2(0), soma(1)
// connect radMed2(0), radProx2(1)
// connect radDist2(0), radMed2(1)
// connect lmM2(0), radDist2(1)
// connect lmt2(0), lmM2(1)
connect ori1(0), soma(0) // connect oriProx1(0), soma(0)
// connect oriMed1(0), oriProx1(1)
// connect oriDist1(0), oriMed1(1)
connect ori2(0), soma(1) // connect oriProx2(0), soma(1)
// connect oriMed2(0), oriProx2(1)
// connect oriDist2(0), oriMed2(1)
//basic_shape()
}
//proc basic_shape() {
//soma { pt3dclear() pt3dadd(0, 0, 0, 10) pt3dadd(15, 0, 0, 10) }
//rad1 { pt3dclear() pt3dadd() pt3dadd() }
//rad2 { pt3dclear() pt3dadd() pt3dadd() }
//ori1 { pt3dclear() pt3dadd() pt3dadd() }
//ori2 { pt3dclear() pt3dadd() pt3dadd() }
//radProx1 { pt3dclear() pt3dadd(0, 0, 0, 4) pt3dadd(-7, 7.50, 0, 4) }
//radMed1 { pt3dclear() pt3dadd(-14, 15, 0, 3) pt3dadd(-21.5, 22.5, 0, 3) }
//radDist1 { pt3dclear() pt3dadd(-29, 30, 0, 2) pt3dadd(-36.5, 37.5, 0, 2) }
//lmM1 { pt3dclear() pt3dadd(-44, 45, 0, 1.5) pt3dadd(-51.5, 52.5, 0, 1.5) }
//lmt1 { pt3dclear() pt3dadd(-59, 60, 0, 1) pt3dadd(-74, 75, 0, 1) }
//radProx2 { pt3dclear() pt3dadd(15, 0, 0, 4) pt3dadd(30, 15, 0, 4) }
//radMed2 { pt3dclear() pt3dadd(45, 30, 0, 3) pt3dadd(60, 45, 0, 3) }
//radDist2 { pt3dclear() pt3dadd(75, 60, 0, 2) pt3dadd(82.5, 67.5, 0, 2) }
//lmM2 { pt3dclear() pt3dadd(90, 75, 0, 1.5) pt3dadd(97.5, 82.5, 0, 1.5) }
//lmt2 { pt3dclear() pt3dadd(105, 90, 0, 1) pt3dadd(112.50, 97.5, 0, 1) }
//oriProx1 { pt3dclear() pt3dadd(0, 0, 0, 2) pt3dadd(-14.5, -14.5, 0, 2) }
//oriMed1 { pt3dclear() pt3dadd(-29, -29, 0, 1.5) pt3dadd(-44, -44, 0, 1.5) }
//oriDist1 { pt3dclear() pt3dadd(-59, -59, 0, 1) pt3dadd(-74, -74, 0, 1) }
//oriProx2 { pt3dclear() pt3dadd(15, 0, 0, 2) pt3dadd(30, -14.5, 0, 2) }
//oriMed2 { pt3dclear() pt3dadd(45, -29, 0, 1.5) pt3dadd(60, -44, 0, 1.5) }
//oriDist2 { pt3dclear() pt3dadd(75, -59, 0, 1) pt3dadd(90, -74, 0, 1) }
//}
objref all
proc subsets() { local i
objref all
all = new SectionList()
soma all.append()
rad1 all.append()
rad2 all.append()
ori1 all.append()
ori2 all.append()
//radProx1 all.append()
//radMed1 all.append()
//radDist1 all.append()
//lmM1 all.append()
//lmt1 all.append()
//radProx2 all.append()
//radMed2 all.append()
//radDist2 all.append()
//lmM2 all.append()
//lmt2 all.append()
//oriProx1 all.append()
//oriMed1 all.append()
//oriDist1 all.append()
//oriProx2 all.append()
//oriMed2 all.append()
//oriDist2 all.append()
}
proc geom() {
forsec all { }
soma { L = 20 diam = 10 }
rad1 { L = 300 diam = 3 }
rad2 { L = 300 diam = 3 }
ori1 { L = 150 diam = 1.5 }
ori2 { L = 150 diam = 1.5 }
//radProx1 { L = 50 diam = 4 }
//radMed1 { L = 50 diam = 3 }
//radDist1 { L = 100 diam = 2 }
//lmM1 { L = 50 diam = 1.5 }
//lmt1 { L = 50 diam = 1 }
//radProx2 { L = 50 diam = 4 }
//radMed2 { L = 50 diam = 3 }
//radDist2 { L = 100 diam = 2 }
//lmM2 { L = 50 diam = 1.5 }
//lmt2 { L = 50 diam = 1 }
//oriProx1 { L = 50 diam = 2 }
//oriMed1 { L = 50 diam = 1.5 }
//oriDist1 { L = 50 diam = 1 }
//oriProx2 { L = 50 diam = 2 }
//oriMed2 { L = 50 diam = 1.5 }
//oriDist2 { L = 50 diam = 1 }
}
external lambda_f
proc geom_nseg() {
forsec all { nseg = int((L/(0.1*lambda_f(100))+.9)/2)*2 + 1 }
}
proc biophys() {
soma_nafcr = 0.015
soma_kdrcr = 0.018
soma_Kslowcr = 0.000725
soma_iCcr = 0.00003
soma_kadcr = 0.003
soma_cancr = 0.001
v_initcr = -70
soma {
insert pas
cm = 1.2 //microF/cm2
g_pas = 1/20000
e_pas = v_initcr
Ra = 150
insert Nafcr
gnafbar_Nafcr= soma_nafcr
insert kdrcr
gkdrbar_kdrcr= soma_kdrcr
insert IKscr
gKsbar_IKscr= soma_Kslowcr
insert iCcr
gkcbar_iCcr= soma_iCcr
//insert kadcr --> do not see this listed as a mod file
//gkabar_kadcr= soma_kadcr
insert cancr
gcatbar_cancr=soma_cancr
insert cadyn
// TO DO: cadyn_new, compile,insert, and verify the validation tests
}
rad1 {
insert pas
cm = 1.2 //microF/cm2
g_pas = 1/20000
e_pas = v_initcr
v_initcr = -70
Ra = 150
insert Nafcr
gnafbar_Nafcr = 0.018*5
insert kdrcr
gkdrbar_kdrcr = 0.018*0.5
}
rad2 {
insert pas
cm = 1.2 //microF/cm2
g_pas = 1/20000
e_pas = v_initcr
v_initcr = -70
Ra = 150
insert Nafcr
gnafbar_Nafcr = 0.018*5
insert kdrcr
gkdrbar_kdrcr = 0.018*0.5
}
ori1 {
insert pas
cm = 1.2 //microF/cm2
g_pas = 1/20000
e_pas = v_initcr
v_initcr = -70
Ra = 150
insert Nafcr
gnafbar_Nafcr = 0.018*5
insert kdrcr
gkdrbar_kdrcr = 0.018*0.5
}
ori2 {
insert pas
cm = 1.2 //microF/cm2
g_pas = 1/20000
e_pas = v_initcr
v_initcr = -70
Ra = 150
insert Nafcr
gnafbar_Nafcr = 0.018*5
insert kdrcr
gkdrbar_kdrcr = 0.018*0.5
}
forsec all {
ko0_k_ion = 3.82 //mM
ki0_k_ion = 140 //mM
celsius = 23
}
}
obfunc connect2target() { localobj nc //$o1 target point process, optional $o2 returned NetCon
soma nc = new NetCon(&v(1), $o1)
nc.threshold = -10
if (numarg() == 2) { $o2 = nc } // for backward compatibility
return nc
}
objref syn_
proc synapses_EC() {
/* E0 */ rad1 syn_ = new MyExp2Syn(0.5) pre_list.append(syn_) // AMPA EC // was lmM1: 200-250 from soma(0)
syn_.tau1 = 2.0
syn_.tau2 = 6.3
syn_.e = 0
/* E1 */ rad2 syn_ = new MyExp2Syn(0.5) pre_list.append(syn_) // AMPA EC // was lmM2: 200-250 from soma(1)
syn_.tau1 = 2.0
syn_.tau2 = 6.3
syn_.e = 0
}
proc synapses_CA3() {
/* E2 */ rad1 syn_ = new MyExp2Syn(0.5) pre_list.append(syn_) // AMPA CA3 Shaffer collateral // was radProx1 & radMed1: 0-50 & 50-100 from soma(0)
syn_.tau1 = 2.0
syn_.tau2 = 6.3
syn_.e = 0
/* E3 */ rad2 syn_ = new MyExp2Syn(0.5) pre_list.append(syn_) // AMPA CA3 Shaffer collateral // was radProx2 & radMed2: 0-50 & 50-100 from soma(1)
syn_.tau1 = 2.0
syn_.tau2 = 6.3
syn_.e = 0
}
proc synapses_PC() {
/* E4 */ ori1 syn_ = new MyExp2Syn(0.5) pre_list.append(syn_) // AMPA PC // was oriProx1: 0-50 from soma(0)
syn_.tau1 = 0.5
syn_.tau2 = 3.0
syn_.e = 0
/* E5 */ ori2 syn_ = new MyExp2Syn(0.5) pre_list.append(syn_) // AMPA PC // was oriProx2: 0-50 from soma(1)
syn_.tau1 = 0.5
syn_.tau2 = 3.0
syn_.e = 0
}
proc synapses_SEP() {
/* I8 */ ori1 syn_ = new MyExp2Syn(0.6) pre_list.append(syn_) // GABA-A Septum // was oriProx1: 0-50 from soma(0)
syn_.tau1 = 1
syn_.tau2 = 8
syn_.e = -75
/* I9 */ ori2 syn_ = new MyExp2Syn(0.6) pre_list.append(syn_) // GABA-A Septum // was oriProx2: 0-50 from soma(1)
syn_.tau1 = 1
syn_.tau2 = 8
syn_.e = -75
/* I10 */ ori1 syn_ = new MyExp2Syn(0.6) pre_list.append(syn_) // GABA-B Septum // was oriProx1: 0-50 from soma(0)
syn_.tau1 = 35
syn_.tau2 = 100
syn_.e = -75
/* I11 */ ori2 syn_ = new MyExp2Syn(0.6) pre_list.append(syn_) // GABA-B Septum // was oriProx2: 0-50 from soma(1)
syn_.tau1 = 35
syn_.tau2 = 100
syn_.e = -75
}
proc synapses() {
synapses_EC()
synapses_CA3()
synapses_PC()
synapses_SEP()
}
func is_art() { return 0 }
endtemplate VIPCRCell_EDITED