load_file("nrngui.hoc")
//use_mcell_ran4(1) // MUST be used on CINECA
cvode_active(0)
a1=0.1
b1=0.7
a1max=a1
b1max=b1
rap_a1=5
rap_b1=(b1/0.71)*5
numaxon=1
numsoma=1
numbasal=58
numapical=78
numtrunk=57
cont=26 // ****** number of obliques
last=12 //******** n-ple size
ns=26 //******** number of trunk comps with noise
sim4conf=102
double pin[cont]
double cond[cont]
double trunko[cont]
double dendo[cont]
double u2[last+3]
double u[last]
weight=80
xopen("geoc91662.hoc") // geometry file
xopen("fixnseg.hoc")
Rm = 28000
RmDend = Rm/1
RmSoma = Rm
RmAx = Rm
Cm = 1
CmSoma= Cm
CmAx = Cm
CmDend = Cm*1
RaAll= 150
RaSoma=150
RaAx = 50
Vrest = -65
dt = 0.1
gna = .025
AXONM = 5
gkdr = 0.01
celsius = 35.0
KMULT = 0.03
KMULTP = 0.03
ghd=0.00005
nash=0
objref g, b,c, stim, vbox,vecchio,pc, args, args2, r,ennupla
objref p, s[cont], rsyn[cont], nc[last], sref, blist[numtrunk],aplist,f[2*cont]
strdef dend, trunk
for i=0, numtrunk-1 {blist[i] = new Vector()}
args = new Vector()
args2 = new Vector()
aplist = new Vector(numapical)
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()
maxdist=0
forsec "user5" for(x) {if (distance(x)>maxdist) {maxdist=distance(x)}}
print "total # of segments (50Hz): ",tot, " max path distance: ", maxdist
//*********mapping bifurcations******************
for i=0, numapical-1 apical_dendrite[i] {
while (!issection("user5.*")) {
//print "before ", i, secname()
sref = new SectionRef()
access sref.parent
sprint(dend, secname())
}
//print "apical ",i," ",dend
for k=0, numtrunk-1 user5[k] {
sprint(trunk,secname())
x=strcmp(dend, trunk)
if (x==0) {blist[k].append(i)aplist.x[i]=k}
}
}
/*****************lettura da file********************/
vecchio = new File()
vecchio.ropen("obliqui91662.txt")
for i=0,cont-1 {
trunko[i]=vecchio.scanvar()
dendo[i]=vecchio.scanvar()
pin[i]=vecchio.scanvar()
cond[i]=vecchio.scanvar()
}
vecchio.close()
/******************** fine **********************/
tstop=30
for z=0, cont-1 {
s[z] = new NetStims(.5)
s[z].interval=0.2
s[z].number = 1
s[z].start=10
s[z].noise=0
s[z].seed(987651119)
rsyn[z] = new Exp2Syn(0.5)
rsyn[z].tau1 = 0.4
rsyn[z].tau2 = 1
rsyn.e=0
}
user5[13] { // *************cell dependent
stim= new IClamp(0)
stim.amp=0
stim.dur=tstop
stim.del=0
}
forsec "axon" {
insert nax gbar_nax=gna * AXONM sh_nax=nash
insert kdr gkdrbar_kdr=gkdr
insert kap gkabar_kap = KMULTP*1
}
forsec "soma" {
insert hd ghdbar_hd=ghd vhalfl_hd=-73
insert na3 ar_na3=1 sh_na3=nash gbar_na3=gna
insert kdr gkdrbar_kdr=gkdr
insert kap gkabar_kap = KMULTP
insert ds
}
for i=0, numbasal-1 dendrite[i] {
insert hd ghdbar_hd=ghd vhalfl_hd=-73
insert na3 ar_na3=1 gbar_na3=gna sh_na3=nash
insert kdr gkdrbar_kdr=gkdr
insert kap gkabar_kap = KMULTP
}
forsec "user5" {
insert hd ghdbar_hd=ghd
insert na3 ar_na3=1 gbar_na3=gna sh_na3=nash
insert kdr gkdrbar_kdr=gkdr
insert kap gkabar_kap=0
insert kad gkabar_kad=0
for (x,0) {
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)
}
}
}
for i=0, numapical-1 apical_dendrite[i] {
insert hd
insert na3 ar_na3=1 gbar_na3=gna sh_na3=nash
insert kdr gkdrbar_kdr=gkdr
insert kap
insert kad
gkabar_kad = 1*user5[aplist.x[i]].gkabar_kad(1)
gkabar_kap = 1*user5[aplist.x[i]].gkabar_kap(1)
vhalfl_hd = user5[aplist.x[i]].vhalfl_hd
ghdbar_hd = user5[aplist.x[i]].ghdbar_hd(1)
}
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("hd")) {e_pas(x)=e_pas(x)+i_hd(x)/g_pas(x)}
}
}
cvode.re_init()
cvode.event(tstop)
access soma
//g.begin()
flag=0
}
proc advance() {
fadvance()
if (vmax_ds(.5)>0) {t=tstop flag=1}
//g.plot(t)
//g.flush()
//p.flush()
doNotify()
}
func superrun() {local id, numprove, c, k, seme1, seme2, seme3
a1=$o2.x[0]
b1=$o2.x[1]
stim.amp=$o2.x[2]
k=$3
c=$4
seme1=(k*sim4conf+c)*31530
seme2=(k*sim4conf+c)*22210
seme3=(k*sim4conf+c)*18230
print "seme1", seme1
print "seme2", seme2
print "seme3", seme3
for kk=0, ns user5[kk] { // cell-dependent
f[kk] = new Gfluct2(0.5)
f[kk].g_e0 = a1
f[kk].g_i0 = b1
f[kk].std_e = a1/rap_a1
f[kk].std_i = b1/rap_b1
f[kk].new_seed(seme1)
print " noise #",kk, " at ",secname()
}
print k,c
objref ennupla
numprove=0
id = hoc_ac_
ennupla= new Vector()
flag=0
// definiamo ennupla
for c=0, cont-1 {
ennupla.append(c)
}
aux=cont
// print "seme", seme3
r= new Random()
r.MCellRan4(seme3)
for c=0, last-1 {
ind=r.discunif(0, aux-1)
cond[ennupla.x[ind]]=80
aux=aux-1
print ennupla.x(ind)
ennupla.remove(ind)
}
print "\n"
for c=0, cont-last-1 {
cond[ennupla.x(c)]=0
print ennupla.x(c)
}
ennupla.resize(0)
r= new Random(seme2)
r.MCellRan4(seme2)
while(0==0){
numprove=numprove+1
for c=0, cont-1 {
ennupla.append(c)
}
aux=cont
// print " \n"
for c=0, last-1 {
ind=r.discunif(0, aux-1)
//print "indice ",ind
u[c]=ennupla.x[ind]
u2[c]=dendo[u[c]]
nc[c] = new NetCon(s[u[c]],rsyn[u[c]],0,0,cond[u[c]]*1.e-3)
apical_dendrite[u2[c]] rsyn[u[c]].loc(0.5)
ennupla.remove(ind)
aux=aux-1
//print u[c]
}
// print " \n"
ennupla.resize(0)
// print f[2].g_e0
run()
//print numprove*0.025-0.5 ," s "
if (flag==1) { print "ha sparato dopo",numprove,"prove" spikec=1}
if(numprove>3600){print "piu di 3600 prove" flag=1 spikec=0}
}
pc.post(id, $o2,numprove,seme1,seme2,seme3)
return id
}
pc = new ParallelContext()
pc.runworker()
for yy=0, last-1 {u[yy]=0}
order=0
conto=0
print "Begin Simulation"
print "Contesto = ",stim.amp
objref aa1, bb1, aamp
aa1 = new Vector()
bb1 = new Vector()
aamp = new Vector()
//ennupla = new Vector()
aa1.append(0.02)
//aa1.append(0.25,0.38,0.5,1,2.5,5,7.5)
bb1.append(0.02)
//bb1.append(0.5,0.75,1,2,5,10,15)
//aamp.append(0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5)
contex = 0
proc loop() { local k, first, ind, c
k=$1
c=$2
args.resize(0)
args.append(aa1.x[nsim]*a1max)
args.append(bb1.x[nsim]*b1max)
args.append(contex)
pc.submit("superrun", order, args,k,c)
order=order+1
}
for nsim=0, aa1.size()-1 {
for z=1,sim4conf{
loop(nsim,z)
}
}
objref outfile, outfile2
outfile = new File()
outfile2 = new File()
strdef name, name2
total=0
while ((id = pc.working) != 0) {
pc.take(id)
args2 = pc.upkvec
m = pc.upkscalar
seme1=pc.upkscalar
seme2=pc.upkscalar
seme3=pc.upkscalar
// args2.printf()
total = total +1
// printf("%d configurazioni ", m)
//for y=0, last-1 {printf(" %g ", args2.x[y])}
// printf("noise ex %g inh %g context %g semerum %d semeennupla %d \n",args2.x[0]/a1max,args2.x[1]/b1max, args2.x[2],seme1,seme2)
//write n-uples
sprint(name,"le%dple-%dobl-%gecc-%gini-b%g-%d.txt",last,cont,args2.x[0]/a1max,args2.x[1]/b1max,b1max,sim4conf)
sprint(name2,"le%dple-%dobl-%gecc-%gini-b%g-solotempi-%d.txt",last,cont,args2.x[0]/a1max,args2.x[1]/b1max,b1max,sim4conf)
outfile.aopen(name)
outfile.printf(" %d configurazioni ",m)
args2.printf(outfile, " %g ")
outfile.printf(" seme r seme e semel %d %d %d",seme1,seme2,seme3)
outfile.close()
outfile2.aopen(name2)
outfile2.printf(" %d %d \n",m,seme1)
outfile2.close()
}
pc.done