load_file("nrngui.hoc")
//Compartments definition
create soma, psoma
create dendrite1, pdendrite1
create dendrite2, pdendrite2
//Cells creation
objectvar inter, pyram
inter = new SectionList()
pyram = new SectionList()
forall inter.append()
forsec "p" pyram.append()
forsec "p" inter.remove()
//Segments connection
connect dendrite1(1), soma(0)
connect soma(1), dendrite2(0)
connect pdendrite1(1), psoma(0)
connect psoma(1), pdendrite2(0)
//Membrane mechanisms
forall {
insert nakpump {km_k_nakpump=2
km_na_nakpump=10}
Ra=100
cm=1
}
forsec inter {
insert leak
insert accum {setvolout_accum=0.15
setvolpyram_accum=1}
}
forsec pyram {
insert kcc2
insert leak
insert getconc
insert cal {gcal_cal=0.00015}
insert kahp {gkahp_kahp=0.0001}
insert kc {gkc_kc=0.196}
}
soma {
nseg=1
L=20
diam=15
insert inas {gna_inas=0.025}
insert ikdrs {gkdr_ikdrs=0.05}
}
dendrite1 {
nseg=1
L=300
diam=1.9
insert inad {gna_inad=0.0095}
insert ikdrd {gkdr_ikdrd=0.012}
}
dendrite2 {
nseg=1
L=400
diam=1.9
insert inad {gna_inad=0.0095}
insert ikdrd {gkdr_ikdrd=0.012}
}
psoma {
nseg=1
L=20
diam=15
insert pnas {gna_pnas=0.025}
insert pkdrs {gkdr_pkdrs=0.05}
insert nap {gna_nap=0.0002}
insert km {gkm_km=0.0035}
}
pdendrite1 {
nseg=1
L=300
diam=1.9
insert pnad {gna_pnad=0.0045}
insert pkdrd {gkdr_pkdrd=0.00185}
}
pdendrite2 {
nseg=1
L=150
diam=6.2
insert pnad {gna_pnad=0.0045}
insert pkdrd {gkdr_pkdrd=0.00185}
}
//Connecting pointers definition
proc connectpointers() {
forsec pyram {
for (x) if (x!=0||x!=1) {
setpointer soma.ikp_accum(x), psoma.ik(x)
setpointer soma.inap_accum(x), psoma.ina(x)
setpointer soma.icap_accum(x), psoma.ica(x)
setpointer soma.iclp_accum(x), psoma.icl(x)
setpointer soma.diamp_accum(x), psoma.diam(x)
setpointer psoma.kop_getconc(x), soma.ko(x)
setpointer psoma.naop_getconc(x), soma.nao(x)
setpointer psoma.caop_getconc(x), soma.cao(x)
setpointer psoma.clop_getconc(x), soma.clo(x)
setpointer psoma.kip_getconc(x), soma.kp_accum(x)
setpointer psoma.naip_getconc(x), soma.nap_accum(x)
setpointer psoma.caip_getconc(x), soma.cap_accum(x)
setpointer psoma.clip_getconc(x), soma.clp_accum(x)
setpointer dendrite1.ikp_accum(x), pdendrite1.ik(x)
setpointer dendrite1.inap_accum(x), pdendrite1.ina(x)
setpointer dendrite1.icap_accum(x), pdendrite1.ica(x)
setpointer dendrite1.iclp_accum(x), pdendrite1.icl(x)
setpointer dendrite1.diamp_accum(x), pdendrite1.diam(x)
setpointer pdendrite1.kop_getconc(x), dendrite1.ko(x)
setpointer pdendrite1.naop_getconc(x), dendrite1.nao(x)
setpointer pdendrite1.caop_getconc(x), dendrite1.cao(x)
setpointer pdendrite1.clop_getconc(x), dendrite1.clo(x)
setpointer pdendrite1.kip_getconc(x), dendrite1.kp_accum(x)
setpointer pdendrite1.naip_getconc(x), dendrite1.nap_accum(x)
setpointer pdendrite1.caip_getconc(x), dendrite1.cap_accum(x)
setpointer pdendrite1.clip_getconc(x), dendrite1.clp_accum(x)
setpointer dendrite2.ikp_accum(x), pdendrite2.ik(x)
setpointer dendrite2.inap_accum(x), pdendrite2.ina(x)
setpointer dendrite2.icap_accum(x), pdendrite2.ica(x)
setpointer dendrite2.iclp_accum(x), pdendrite2.icl(x)
setpointer dendrite2.diamp_accum(x), pdendrite2.diam(x)
setpointer pdendrite2.kop_getconc(x), dendrite2.ko(x)
setpointer pdendrite2.naop_getconc(x), dendrite2.nao(x)
setpointer pdendrite2.caop_getconc(x), dendrite2.cao(x)
setpointer pdendrite2.clop_getconc(x), dendrite2.clo(x)
setpointer pdendrite2.kip_getconc(x), dendrite2.kp_accum(x)
setpointer pdendrite2.naip_getconc(x), dendrite2.nap_accum(x)
setpointer pdendrite2.caip_getconc(x), dendrite2.cap_accum(x)
setpointer pdendrite2.clip_getconc(x), dendrite2.clp_accum(x)
}
}
}
connectpointers()
//Temperature, initial voltage
celsius = 32
v_init = -70
//Ion concentrations
//Extracellular concentrations
ko0_k_ion = 3.5
nao0_na_ion = 140
cao0_ca_ion = 2
clo0_cl_ion = 135
//Concentrations in inter
ki0_k_ion = 135
nai0_na_ion = 10
cai0_ca_ion = 5e-5
cli0_cl_ion = 3.5
//Concentrations in pyram
setkp_accum = 135
setnap_accum = 10
setcap_accum = 5e-5
setclp_accum = 3.5
//Stability with no stimulation - pyram
proc pyramstab() {
access psoma
rm=$1
init()
vrest = -70
dr_na = vrest-ena
dr_k = vrest-ek
eqinit()
depvar gna, gk
eqn gk:: gk = 1/rm - gna
eqn gna:: gna = (-dr_k*(3/2)*gk)/dr_na
solve()
forall gk_leak=gk
forall gna_leak=gna
p_k=(1+km_k_nakpump/ko)^(-2)
p_na=(1+km_na_nakpump/nai)^(-3)
p_tot=p_k*p_na
forall imax_nakpump = (-gna_leak*dr_na)/(3*p_tot)
}
//Stability with no stimulation - inter
proc interstab() {
access soma
rm=$1
init()
vrest = -70
dr_na = vrest-ena
dr_k = vrest-ek
eqinit()
depvar gna, gk
eqn gk:: gk = 1/rm - gna
eqn gna:: gna = (-dr_k*(3/2)*gk)/dr_na
solve()
forall gk_leak=gk
forall gna_leak=gna
p_k=(1+km_k_nakpump/ko)^(-2)
p_na=(1+km_na_nakpump/nai)^(-3)
p_tot=p_k*p_na
forall imax_nakpump = (-gna_leak*dr_na)/(3*p_tot)
}
//Initialization procedure
proc init() {
finitialize()
//Init inter
forsec inter {
v=v_init
}
//Init pyram
forsec pyram {
v=v_init
ki=setkp_accum
nai=setnap_accum
cai=setcap_accum
cli=setclp_accum
}
fcurrent()
}
//Synapses
//Pyram
//Synapse trigger
objref pp
pp = new NetStim()
pp.number = 1000000
pp.interval = 5
pp.noise = 1
pp.start = 0
//Inhibitory synapse (GABA_A)
objref ncl
ncl = new List()
objref syn
psoma syn = new is(0.5)
setpointer syn.e, psoma.ecl(0.5)
syn.tau2 = 6
syn.tau1 = 2
soma ncl.append(new NetCon(&v(1),syn,-10,0,0.003))
//Excitatory synapse
objref syn1
psoma syn1 = new Exp2Syn(0.5)
syn1.e = 0
syn1.tau2 = 6
syn1.tau1 = 2
objref pinput
pinput = new NetCon(pp,syn1,0,0,0.002)
//Inter
//Excitatory feedback of the pyramidal cell to the interneuron
objref ncl2
ncl2 = new List()
objref syn2
soma syn2 = new Exp2Syn(0.5)
syn2.e = 0
syn2.tau2 = 6
syn2.tau1 = 2
psoma ncl2.append(new NetCon(&v(1),syn2,0,0,0.001))
//Times
tstart = 0
tstop = 60000
//Call to the main procedures
interstab(5e3)
pyramstab(5e3)
//Control and graphics
xopen("MySession.ses")