load_file("nrngui.hoc")
cvode_active(1)
dist=7
rel=0.5
numbasal=70
xopen("geo9068802.hoc") // geometry file
xopen("fixnseg.hoc")
Cm = 2.4
Rm = 28000/Cm
RaAll= 550
RaAx = 50
Vrest = -70
dt = 0.1
gna = .043
AXONM = 5
gkdr = 0.025
celsius = 35.0
ka = 0.069
ghd=0.0000011
gkm=0.00002
gcat=0.00004
gahp=0.0003
gcak=0.00016
gcal=0.002
objref stim, apc, stim_amp_val, outfile, v1
forsec "axon" {insert pas e_pas=Vrest g_pas = 1/Rm Ra=RaAx cm=Cm}
forsec "soma" {insert pas e_pas=Vrest g_pas = 1/Rm Ra=RaAll cm=Cm}
forsec "dendrite"{insert pas e_pas=Vrest g_pas = 1/Rm Ra=RaAll cm=Cm}
forsec "user5" {insert pas e_pas=Vrest g_pas = 1/Rm Ra=RaAll cm=Cm}
access soma
freq=50
geom_nseg()
axon {nseg=11}
distance()
stim = new IClamp(.5)
stim.del=50
stim.dur=1000
stim.amp=0.76
tstop=1200
forsec "axon" {
insert nax gbar_nax=gna*AXONM
insert kdr gkdrbar_kdr=gkdr*AXONM
insert kap gkabar_kap = ka
insert km gbar_km=gkm*AXONM
}
forsec "soma" {
insert hd ghdbar_hd=ghd
insert na3 gbar_na3=gna*AXONM
insert kdr gkdrbar_kdr=gkdr*AXONM
insert kap gkabar_kap = ka
insert cat gcatbar_cat=gcat
insert cacum tau_cacum=100 depth_cacum=diam/2
insert KahpM95 gbar_KahpM95 = gahp*AXONM
insert km gbar_km=gkm
insert cagk gbar_cagk=gcak
insert cal gcalbar_cal =gcal
}
for i=0, numbasal-1 dendrite[i] {
insert cat gcatbar_cat=gcat
insert cacum tau_cacum=100 depth_cacum=diam/2
insert KahpM95 gbar_KahpM95 = gahp
insert cagk gbar_cagk=gcak
insert cal gcalbar_cal =gcal
insert hd ghdbar_hd=ghd
insert na3 gbar_na3=gna
insert kdr gkdrbar_kdr=gkdr
insert kap gkabar_kap=0
insert kadmio gkabar_kadmio=0
for (x,0) { xdist = distance(x)
ghdbar_hd(x) = ghd*(1+3*xdist/100)
if (xdist > 100){
gkabar_kadmio(x) = ka*(1+xdist/100)
} else {
gkabar_kap(x) = ka*(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 kadmio gkabar_kadmio=0
insert cacum tau_cacum=100 depth_cacum=diam/2
insert KahpM95 gbar_KahpM95 = gahp
insert cagk gbar_cagk=gcak
insert cat gcatbar_cat=gcat
insert cal gcalbar_cal =gcal
for (x,0) { xdist = distance(x)
ghdbar_hd(x) = ghd*(1+3*xdist/100)
if (xdist > 100){
gkabar_kadmio(x) = ka*(1+xdist/100)
} else {
gkabar_kap(x) = ka*(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 kadmio gkabar_kadmio=0
insert cacum tau_cacum=100 depth_cacum=diam/2
insert cat gcatbar_cat=gcat
insert KahpM95 gbar_KahpM95 = gahp
insert cagk gbar_cagk=gcak
insert cal gcalbar_cal =gcal
for (x,0) { xdist = distance(x)
ghdbar_hd(x) = ghd*(1+3*xdist/100)
if (xdist > 100){
gkabar_kadmio(x) = ka*(1+xdist/100)
} else {
gkabar_kap(x) = ka*(1+xdist/100)
}
}
}
proc init() {
t=0
forall {
v=Vrest
if (ismembrane("nax") || ismembrane("na3")) {ena=55}
if (ismembrane("KahpM95") || ismembrane("kap") || ismembrane("kadmio") || ismembrane("km") || ismembrane("cagk")) {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("hd")) {e_pas(x)=e_pas(x)+i_hd(x)/g_pas(x)}
if (ismembrane("cat")||ismembrane("cat")){e_pas(x)=e_pas(x)+ica(x)/g_pas(x)}
}
}
cvode.re_init()
cvode.event(tstop)
}
stim_amp_val = new Vector()
initial_amp = 0.59 //starting amplitude
increment = 0.02 //increment value
runtimes = 10
for i = 0, runtimes - 1 {
stim_amp_val.append(initial_amp + i * increment)
}
strdef filename
filename = "output_data_70.txt"
outfile = new File()
proc open_file() {
if (outfile.wopen(filename)) {
outfile.printf("Stimulus Amplitude\tAction Potential Count\n")
printf("Output file %s opened for writing.\n", filename)
} else {
printf("Could not open %s for writing\n", filename)
}
}
open_file()
xpanel("Run Control")
xvalue("Simulation Repetitions", "runtimes")
xbutton("Run", "gorun()")
xpanel()
proc gorun() {
for run_index = 0, runtimes-1 {
single_run(run_index)
}
finalize()
}
soma apc = new APCount(.5)
v1 = new Vector()
apc.record(v1)
proc advance() {
if (t >= tstop) {
print "apc"
print apc.n
}
fadvance()
}
proc single_run() {
stdinit()
access soma[0]
run_index = $1
stim.amp = stim_amp_val.x[run_index]
print "RUNNING SIMULATION ", run_index + 1, " with stim.amp = ", stim.amp
continuerun(tstop)
print "Simulation run ", run_index + 1, " completed.\n", "APC:", apc.n
if (outfile.isopen()) {
outfile.printf("%g\t%d\n", stim.amp, v1.size())
printf("APC for run %d written to %s\n", run_index + 1, filename)
} else {
printf("Could not open %s for appending\n", filename)
}
}
proc finalize() {
outfile.close()
printf("Output file %s closed.\n", filename)
}
//////////////////////////////////////////
objref gkm_field, gahp_field, gcak_field, update_button
proc update_conductances() {
forsec "axon" {
gbar_km = gkm*AXONM
gkdrbar_kdr=gkdr*AXONM
gbar_nax=gna*AXONM
gkabar_kap = ka
}
forsec "soma" {
gbar_km = gkm
gbar_KahpM95 = gahp*AXONM
gbar_cagk = gcak
gkdrbar_kdr = gkdr*AXONM
gbar_na3=gna*AXONM
gkabar_kap = ka
ghdbar_hd=ghd
gcatbar_cat=gcat
gcalbar_cal =gcal
}
for i=0, numbasal-1 dendrite[i] {
gbar_KahpM95 = gahp
gbar_cagk = gcak
gcatbar_cat=gcat
gcalbar_cal =gcal
gbar_na3=gna
gkdrbar_kdr=gkdr
for (x,0) { xdist = distance(x)
ghdbar_hd(x) = ghd*(1+3*xdist/100)
if (xdist > 100){
gkabar_kadmio(x) = ka*(1+xdist/100)
} else {
gkabar_kap(x) = ka*(1+xdist/100)
}
}
}
forsec "apical_dendrite" {
gbar_KahpM95 = gahp
gbar_cagk = gcak
gkdrbar_kdr=gkdr
gbar_na3=gna
gcatbar_cat=gcat
gcalbar_cal =gcal
for (x,0) { xdist = distance(x)
ghdbar_hd(x) = ghd*(1+3*xdist/100)
if (xdist > 100){
gkabar_kadmio(x) = ka*(1+xdist/100)
} else {
gkabar_kap(x) = ka*(1+xdist/100)
}
}
}
forsec "user5" {
gbar_KahpM95 = gahp
gbar_cagk = gcak
gkdrbar_kdr=gkdr
gbar_na3=gna
gcatbar_cat=gcat
gcalbar_cal =gcal
for (x,0) { xdist = distance(x)
ghdbar_hd(x) = ghd*(1+3*xdist/100)
if (xdist > 100){
gkabar_kadmio(x) = ka*(1+xdist/100)
} else {
gkabar_kap(x) = ka*(1+xdist/100)
}
}
}
print "Updated conductances: gkm=", gkm, ", gahp=", gahp, ", gcak=", gcak, ", gna=", gna, ", ka=", ka, ", ghd=", ghd, ", gkdr=", gkdr, ", gcat=", gcat, ", gcal=", gcal
}
stim_amp = stim.amp
proc update_stim_amp() {
stim.amp = stim_amp
print "Updated stim.amp: ", stim.amp
}
xpanel("Update Parameters")
xvalue("gkm", &gkm)
xvalue("gahp", &gahp)
xvalue("gcak", &gcak)
xvalue("gkdr", &gkdr)
xvalue("gna", &gna)
xvalue("ka", &ka)
xvalue("ghd", &ghd)
xvalue("gcat", &gcat)
xvalue("gcal", &gcal)
xbutton("Update Conductances", "update_conductances()")
xvalue("stim.amp", &stim_amp)
xbutton("Update stim.amp", "update_stim_amp()")
xpanel()
proc run_simulation() {
run()
print "APC at the end of the simulation: ", apc.n
}
load_file("simulation.ses")