Skip to content

Commit

Permalink
"initial version"
Browse files Browse the repository at this point in the history
  • Loading branch information
tommorse committed May 31, 2019
0 parents commit fa92470
Show file tree
Hide file tree
Showing 19 changed files with 5,074 additions and 0 deletions.
300 changes: 300 additions & 0 deletions fig7C.hoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,300 @@
load_file("nrngui.hoc")
load_file("olm-t.hoc")
cvode_active(1)

numaxon=1
numsoma=2
numbasal=52
numapical=70
numtrunk=49

xopen("geo5038804-S.hoc") // geometry file
xopen("fixnseg.hoc")

Rm = 28000
RmDend = Rm
RmSoma = Rm
RmAx = Rm

Cm = 1
CmSoma= Cm
CmAx = Cm
CmDend = Cm

RaAll= 150
RaSoma=150
RaAx = 50

Vrest = -65
dt = 0.1
gna = .025
fact=0.053431452
gkm=0.0015
gkmINT=0.0015
AXONM = 5
gkdr = 0.01
celsius = 35.0
KMULT = 0.03
KMULTP = 0.03
ghd=0.00005
factor=1
norm=1
mod=0

objref syni, syn1, syn0, nsi, ns1, ns0, nci, nc1, nc0, inter, apc, b, g, c

inter = new OLM()

forsec "axon" {insert pas e_pas=Vrest g_pas = 1/RmAx Ra=RaAx cm=CmAx}
forsec "soma" {insert pas e_pas=Vrest g_pas = 1/RmSoma Ra=RaSoma cm=CmSoma}
forsec "dendrite"{insert pas e_pas=Vrest g_pas = 1/RmDend Ra=RaAll cm=CmDend}
forsec "user5" {insert pas e_pas=Vrest g_pas = 1/RmDend Ra=RaAll cm=CmDend}

access soma

freq=50
geom_nseg()
tot=0
forall {tot=tot+nseg}
distance()

soma apc = new APCount(0.5)
apc.thresh = -20.

tstop=1100


b = new VBox()
b.intercept(1)
g = new Graph()
g.size(0,tstop,-80,40)
g.addvar("inter.inta[0].v(0.5)",3,1,2*tstop,0,2)
g.label(0.3,0.1,"int (Kv7.2+Kv7.3)")
g.exec_menu("10% Zoom out")
g.xaxis(1)
c = new Graph()
c.size(0,tstop,-80,40)
c.xaxis(1)
c.addvar("soma[0].v(0.5)",2,1,2*tstop,0,2)
c.exec_menu("10% Zoom out")
c.label(0.3,0.1,"CA1 (Kv7.2+Kv7.3)")
b.intercept(0)
b.map()

user5[6]{
// excitatory synapse
syn1= new Exp2Syn(.5)
syn1.tau1=0.5
syn1.tau2=5
syn1.e=0

ns1 = new NetStim(.5)
ns1.start=100
ns1.number=50
ns1.interval=20
ns1.noise=0.5
ns1.seed(225345)
}
nc1 = new NetCon(ns1, syn1, 0, 0, 0.039)


inter.inta[0]{
//excitatory synapse on BC
syni= new Exp2Syn(.5)
syni.tau1=0.5
syni.tau2=5
syni.e=0
}

nci = new NetCon(ns1, syni, 0, 3, 0.022)

soma[0]{
// inhibitory synapse
syn0= new Exp2Syn(.5)
syn0.tau1=0.5
syn0.tau2=7
syn0.e=-80
}


inter.inta[0] nc0 = new NetCon(&v(.5), syn0, 0, 3, 0.15)

forsec "inta" {
insert kv72wt73wt gbar_kv72wt73wt=gkmINT*norm
insert kv72wt73wtR201C gbar_kv72wt73wtR201C=gkmINT*mod
}

forsec "axon" {
insert kv72wt73wt gbar_kv72wt73wt=gkm*3*norm
insert kv72wt73wtR201C gbar_kv72wt73wtR201C=gkm*3*mod
insert nax gbar_nax=gna * AXONM
insert kdr gkdrbar_kdr=gkdr
insert kap gkabar_kap = KMULTP
}

forsec "soma" {
insert kv72wt73wt gbar_kv72wt73wt=gkm*norm
insert kv72wt73wtR201C gbar_kv72wt73wtR201C=gkm*mod
insert hd ghdbar_hd=ghd vhalfl_hd=-73
insert na3 gbar_na3=gna
insert kdr gkdrbar_kdr=gkdr
insert kap gkabar_kap = KMULTP
}

for i=0, numbasal-1 dendrite[i] {
insert hd ghdbar_hd=ghd vhalfl_hd=-73
insert na3 gbar_na3=gna
insert kdr gkdrbar_kdr=gkdr
insert kap gkabar_kap=0
insert kad gkabar_kad=0

for (x) if (x>0 && x<1) { xdist = distance(x)
ghdbar_hd(x) = ghd*(1+3*xdist/100)
if (xdist > 100){
vhalfl_hd=-81
gkabar_kad(x) = KMULT*(1+xdist/100)
} else {
vhalfl_hd=-73
gkabar_kap(x) = KMULTP*(1+xdist/100)
}
}
}

forsec "apical_dendrite" {
insert hd ghdbar_hd=ghd
insert na3 gbar_na3=gna
insert kdr gkdrbar_kdr=gkdr
insert kap gkabar_kap=0
insert kad gkabar_kad=0

for (x) if (x>0 && x<1) { xdist = distance(x)
ghdbar_hd(x) = ghd*(1+3*xdist/100)
if (xdist > 100){
vhalfl_hd=-81
gkabar_kad(x) = KMULT*(1+xdist/100)
} else {
vhalfl_hd=-73
gkabar_kap(x) = KMULTP*(1+xdist/100)
}
}
}

forsec "user5" {
insert hd ghdbar_hd=ghd
insert na3 gbar_na3=gna
insert kdr gkdrbar_kdr=gkdr
insert kap gkabar_kap=0
insert kad gkabar_kad=0

for (x) if (x>0 && x<1) { xdist = distance(x)
ghdbar_hd(x) = ghd*(1+3*xdist/100)
if (xdist > 100){
vhalfl_hd=-81
gkabar_kad(x) = KMULT*(1+xdist/100)
} else {
vhalfl_hd=-73
gkabar_kap(x) = KMULTP*(1+xdist/100)
}
}
}

proc init() {
t=0
forall {
v=Vrest
if (ismembrane("nax") || ismembrane("na3")) {ena=55}
if (ismembrane("kdr") || ismembrane("kap") || ismembrane("kad")) {ek=-90}
if (ismembrane("hd") ) {ehd_hd=-30}
}
finitialize(Vrest)
fcurrent()

forall {
for (x) {
if (ismembrane("na3") || ismembrane("nax")){e_pas(x)=v(x)+(ina(x)+ik(x))/g_pas(x)}
if (ismembrane("kv72wt73wt")|| ismembrane("kv72wt73wtR201C")){e_pas(x)=v(x)-norm*ik_kv72wt73wt(x)/g_pas(x)-mod*ik_kv72wt73wtR201C(x)/g_pas(x)}
// if (ismembrane("kv72wt73wtR201C")){e_pas(x)=*v(x)-mod*ik_kv72wt73wtR201C(x)/g_pas(x)}
if (ismembrane("hd")) {e_pas(x)=e_pas(x)+i_hd(x)/g_pas(x)}//
}
}
cvode.re_init()
cvode.event(tstop)
access soma
g.begin()
c.begin()
}


proc advance() {
fadvance()
g.plot(t)
g.flush()
c.plot(t)
c.flush()
doNotify()
}

xpanel(" ")
xlabel(" ")
xradiobutton("Kv7.2+Kv7.3","setKv72()",1)
xradiobutton("Kv7.2+Kv7.2R201C+Kv7.3","setKvR201C()")
xlabel(" ")
xbutton("run", "run()")
xpanel()


proc setKv72() {
norm=1
mod=0
forsec "inta" {
insert kv72wt73wt gbar_kv72wt73wt=gkmINT*norm
insert kv72wt73wtR201C gbar_kv72wt73wtR201C=gkmINT*mod}
forsec "axon" {
insert kv72wt73wt gbar_kv72wt73wt=gkm*3*norm
insert kv72wt73wtR201C gbar_kv72wt73wtR201C=gkm*3*mod}
forsec "soma" {
insert kv72wt73wt gbar_kv72wt73wt=gkm*norm
insert kv72wt73wtR201C gbar_kv72wt73wtR201C=gkm*mod}
g.erase_all()
c.erase_all()
g.size(0,tstop,-80,40)
g.addvar("inter.inta[0].v(0.5)",3,1,2*tstop,0,2)
g.label(0.3,0.1,"int (Kv7.2+Kv7.3)")
g.exec_menu("10% Zoom out")
g.xaxis(1)
c.size(0,tstop,-80,40)
c.xaxis(1)
c.addvar("soma[0].v(0.5)",2,1,2*tstop,0,2)
c.exec_menu("10% Zoom out")
c.label(0.3,0.1,"CA1 (Kv7.2+Kv7.3)")
ns1.seed(225345)
run()
}

proc setKvR201C() {
norm=0
mod=1
forsec "inta" {
insert kv72wt73wt gbar_kv72wt73wt=gkmINT*norm
insert kv72wt73wtR201C gbar_kv72wt73wtR201C=gkmINT*mod}
forsec "axon" {
insert kv72wt73wt gbar_kv72wt73wt=gkm*3*norm
insert kv72wt73wtR201C gbar_kv72wt73wtR201C=gkm*3*mod}
forsec "soma" {
insert kv72wt73wt gbar_kv72wt73wt=gkm*norm
insert kv72wt73wtR201C gbar_kv72wt73wtR201C=gkm*mod}
g.erase_all()
c.erase_all()
g.size(0,tstop,-80,40)
g.addvar("inter.inta[0].v(0.5)",4,1,2*tstop,0,2)
g.exec_menu("10% Zoom out")
g.xaxis(1)
c.size(0,tstop,-80,40)
c.xaxis(1)
c.addvar("soma[0].v(0.5)",1,1,2*tstop,0,2)
c.exec_menu("10% Zoom out")
g.label(0.3,0.1,"int (Kv7.2+Kv7.2R201C+Kv7.3)")
c.label(0.3,0.1,"CA1 (Kv7.2+Kv7.2R201C+Kv7.3)")
ns1.seed(225345)
run()
}
44 changes: 44 additions & 0 deletions fixnseg.hoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/* Sets nseg in each section to an odd value
so that its segments are no longer than
d_lambda x the AC length constant
at frequency freq in that section.

Be sure to specify your own Ra and cm before calling geom_nseg()

To understand why this works,
and the advantages of using an odd value for nseg,
see Hines, M.L. and Carnevale, N.T.
NEURON: a tool for neuroscientists.
The Neuroscientist 7:123-135, 2001.
*/

// these are reasonable values for most models
freq = 100 // Hz, frequency at which AC length constant will be computed
d_lambda = 0.1

func lambda_f() { local i, x1, x2, d1, d2, lam
if (n3d() < 2) {
return 1e5*sqrt(diam/(4*PI*$1*Ra*cm))
}
// above was too inaccurate with large variation in 3d diameter
// so now we use all 3-d points to get a better approximate lambda
x1 = arc3d(0)
d1 = diam3d(0)
lam = 0
for i=1, n3d()-1 {
x2 = arc3d(i)
d2 = diam3d(i)
lam += (x2 - x1)/sqrt(d1 + d2)
x1 = x2 d1 = d2
}
// length of the section in units of lambda
lam *= sqrt(2) * 1e-5*sqrt(4*PI*$1*Ra*cm)

return L/lam
}

proc geom_nseg() {
soma area(0.5) // make sure diam reflects 3d points
forall { nseg = int((L/(d_lambda*lambda_f(freq))+0.9)/2)*2 + 1 }
}

Loading

0 comments on commit fa92470

Please sign in to comment.