/*--------------------------------------------------------------------- Written by Alessandro Limongiello University "Federico II" of Naples, 2012 -----------------------------------------------------------------------*/ load_file("nrngui.hoc") /*--------------------------------------------- USEFUL DATA ---------------------------------------------*/ create soma[1] create eqSection[1] xopen("fixnseg.hoc") Vrest = -65 Ra0 = 150 //Ohm*cm RaAx = 50 g_pas0 = 1/28000 //Siemens/cm^2 1/30000 cm0 = 1 freq=50 freqEq=3 factRm = 1 factCm = 1 factRa = 1 celsius = 34 maxStim = 160 maxStimOnOff = 1 xopen("useful&InitProc.hoc") xopen("stimulation1.hoc") ////// Spike counter////////// objref apcOr,apcEq proc insert_APCor() { apcOr = new APCount(0.5) apcOr.thresh = -10 } proc insert_APCeq() { apcEq = new APCount(0.5) apcEq.thresh = -10 } /*--------------------------------------------- MAIN ---------------------------------------------*/ synNum = 160 synType = 0 noise0 = 1 positionSeed = 7638401// 7638401 for geoc70863; 2762668 for geocd1152 poissonSeed = 5273491//5273491 for geoc70863; 1907324 for geocd1152 optFactGmaxSyn = 0 iMorph = 2 optPrint = 0 optPrint1 = 0 optPrint2 = 0 tgraph = 180 objref vbox3 vbox3 = new VBox() vbox3.intercept(1) xpanel("Input Data:") xbutton("Cell Morphologies","readingFile()") xvalue("Randomize synapses position","positionSeed",0,"if(firstInit == -1) firstInit = 0") xvalue("Randomize synapses activation","intervalSynSeed",0,"if(firstInit == -1) firstInit = 0") xvalue("Randomize synapses weight","gmaxSynSeed",0,"if(firstInit == -1) firstInit = 0") xvalue("Poisson ON/OFF","noise0",0,"if(firstInit == -1) firstInit = 0") xvalue("Poisson Seed","poissonSeed",0,"if(firstInit == -1) firstInit = 0") xvalue("Number of Active Synapses","synNum",0,"if(firstInit == -1) firstInit = 0") xvalue("MaxStim Value","maxStim",0,"if(firstInit == -1) firstInit = 0") xvalue("Scaling Procedure ON/OFF","maxStimOnOff",0,"if(firstInit == -1) firstInit = 0") //xvalue("Full & Reduced Models ON/OFF","optPrint1",0,"if(firstInit == -1) firstInit = 0") //xvalue("Signal Propagation ON/OFF","optPrint2",0,"if(firstInit == -1) firstInit = 0") xpanel() vbox3.intercept(0) vbox3.map("Input Data", 0, 120, 250, 210) time0=0 objref vbox4 vbox4 = new VBox() vbox4.intercept(1) xpanel("Run Control:") xbutton("Run the Full & Reduced Models","{init() integrate()}") xbutton("Run the Full Model","goMorph()") xbutton("Run the Reduced Model","goEq()") xbutton("Stop","{stoprun = 1}") xvalue("tstop","tgraph",0) xvalue("Simulation Time (sec): ","time0",0) xvalue("Accuracy: ","accu",0) xpanel() vbox4.intercept(0) vbox4.map("Run Control", 370, 0, 200, 170) firstInit = 1 // 0=file already read but any change in the parameters // 1=first init // -1=file already read and no change in the parameters // 2=file not yet read but any change in the parameters objref graphCum,graphEq,graphMorph objref vbox7 objref pc pc = new ParallelContext() proc init(){ t=0 tstop = tgraph while (firstInit==1) {readingFile()} time00 = pc.time() AleFunctionalSetting() if (optPrint==1) print "FunctionalSetting Time: ", pc.time() - time00 if (firstInit==0){ time00 = pc.time() cellAnalysis() clusteriseAleFunz1() reduction() {create eqSection[clusterList.count]} createEqCell(clusterList,RaMERGINGMETHOD) if (optPrint==1) print "cellAnalysis+clusteriseAleFunz1+reduction+createEqCell Time: ", pc.time() - time00 printClusterList(clusterList) objref injCurr, injCurrEq time00 = pc.time() insertSyn1(synNum,positionSeed,synType,clusterList) if (optPrint==1) print "insertSyn1 Time: ", pc.time() - time00 time00 = pc.time() changeSurf(clusterList,synNum) if (optPrint==1) print "changeSurf Time: ", pc.time() - time00 firstInit = -1 } time00 = pc.time() findSyn(clusterList,optFactGmaxSyn,synNum,synType,iMorph) if (optPrint==1) print "findSyn Time: ", pc.time() - time00 for (i = 0; i < clusterList.count; i = i + 1){print "surfFact",i,": ",surfFact.x(i)} time00 = pc.time() ind = 1 forsec "eqSection.*" if (!issection("eqSection[0]")) {g_pas=factRm*surfFactRmCm.x(ind)*g_pas0 cm=factCm*cm0*surfFactRmCm.x(ind) ind=ind+1} totEq=0 forsec "eqSection.*" { nseg = int((L/(d_lambda*lambda_f(freqEq))+0.9)/2)*2 + 1 totEq=totEq+nseg } if (optPrint==1) print "Nseg Time: ", pc.time() - time00 printf("totSegIni: %d\n", totOr) printf("totSegEq: %d\n", totEq) printf("_____________________________\n\n") onfile(clusterList) time00 = pc.time() canalAllMigliore05() initMigliore05() if (optPrint==1) print "canalAllMigliore05+initMigliore05 Time: ", pc.time() - time00 vbox7 = new VBox() vbox7.intercept(1) graphCum = new Graph() graphCum.addvar("soma[0].v(0.5)",2,1) graphCum.addvar("eqSection[0].v(0.5)",4,1) graphCum.size(0,tgraph,-70,50) graphEq = new Graph() graphEq.addvar("eqSection[0].v(0.5)",4,1) graphEq.size(0,tgraph,-70,50) graphMorph = new Graph() graphMorph.addvar("soma[0].v(0.5)",2,1) graphMorph.size(0,tgraph,-70,50) vbox7.intercept(0) vbox7.map("graphCum", 680, 0,410, 550) cumEqMorph = 0 } objref vecNSpikeOr,vecNSpikeEq,vecISISpikeOr,vecISISpikeEq,vecTTSpikeOr,vecTTSpikeEq proc integrate() { time00 = pc.time() //advance() if (cumEqMorph==0){ vecNSpikeOr= new Vector() vecISISpikeOr= new Vector() vecTTSpikeOr= new Vector() vecNSpikeEq= new Vector() vecISISpikeEq= new Vector() vecTTSpikeEq= new Vector() objref apcOr access soma[0] insert_APCor() tprecOr=0 ttOr=0 firstSpikeOr = 1 objref apcEq access eqSection[0] insert_APCeq() tprecEq=0 ttEq=0 firstSpikeEq = 1 } continuerun(tstop) time0 = pc.time()-time00 print "Time: ",time0 if (cumEqMorph==0){ accu = accuracy(vecTTSpikeOr,vecTTSpikeEq) print "Accuracy: ",accu } } cumEqMorph = 0 // 0,1,2 proc advance() { if(optPrint2) shPlot.flush() //if(t==0 && optPrint1) {coloringClusterList(clusterList)} if (cumEqMorph==0){ graphCum.plot(t) graphCum.flush() graphEq.plot(t) graphEq.flush() graphMorph.plot(t) graphMorph.flush() if (apcOr.n==1){tprecOr=apcOr.time if(firstSpikeOr){vecTTSpikeOr.append(tprecOr) firstSpikeOr=0 print "TSpikesOr: ",tprecOr }} if (apcOr.time>tprecOr && tprecOr!=0){ //if (apcOr.n==2){vecTTSpikeOr.append(tprecOr)} vecTTSpikeOr.append(apcOr.time) ttOr = apcOr.time - tprecOr vecISISpikeOr.append(ttOr) print "TSpikesOr: ",apcOr.time tprecOr=apcOr.time } if (apcEq.n==1){tprecEq=apcEq.time if(firstSpikeEq){vecTTSpikeEq.append(tprecEq) firstSpikeEq=0 print "TSpikesEq: ",tprecEq }} if (apcEq.time>tprecEq && tprecEq!=0){ //if (apcEq.n==2){vecTTSpikeEq.append(tprecEq)} vecTTSpikeEq.append(apcEq.time) ttEq = apcEq.time - tprecEq vecISISpikeEq.append(ttEq) print "TSpikesEq: ",apcEq.time tprecEq=apcEq.time } } else if (cumEqMorph==1){ graphEq.plot(t) graphEq.flush() } else if (cumEqMorph==2){ graphMorph.plot(t) graphMorph.flush() } fadvance() } objectvar StimEqListAppp,Exp2SynEqListAppp,NetConEqListAppp proc go(){ init() objectvar Exp2SynList,NetConList,StimList//,StimEqList,Exp2SynEqList,NetConEqList objref synApp,netConApp//stimApp,stimEqApp,synEqApp,netConEqApp forall if (!issection("eqSection.*")){ uninsert pas uninsert na3 uninsert kdr uninsert nax uninsert kap uninsert hd uninsert kad uninsert ds delete_section() } vbox7 = new VBox() vbox7.intercept(1) graphEq = new Graph() graphEq.addvar("eqSection[0].v(0.5)",4,1) graphEq.size(0,tgraph,-70,50) vbox7.intercept(0) vbox7.map("graphEq",680,340,410,170) cumEqMorph = 1 //finitialize(Vrest) integrate() init() objectvar StimEqList,Exp2SynEqList,NetConEqList objref stimEqApp,synEqApp,netConEqApp forall if (issection("eqSection.*")){ uninsert pas uninsert na3 uninsert kdr uninsert nax uninsert kap uninsert hd uninsert kad uninsert ds delete_section() } vbox7 = new VBox() vbox7.intercept(1) graphMorph = new Graph() graphMorph.addvar("soma[0].v(0.5)",2,1) graphMorph.size(0,tgraph,-70,50) vbox7.intercept(0) vbox7.map("graphMorph",680,510,410,170) cumEqMorph = 2 integrate() } proc goMorph(){ init() objectvar StimEqList,Exp2SynEqList,NetConEqList objref stimEqApp,synEqApp,netConEqApp forall if (issection("eqSection.*")){ uninsert pas uninsert na3 uninsert kdr uninsert nax uninsert kap uninsert hd uninsert kad uninsert ds delete_section() } vbox7 = new VBox() vbox7.intercept(1) graphMorph = new Graph() graphMorph.addvar("soma[0].v(0.5)",2,1) graphMorph.size(0,tgraph,-70,50) vbox7.intercept(0) vbox7.map("graphMorph",680,510,410,170) cumEqMorph = 2 integrate() } proc goEq(){ init() objectvar Exp2SynList,NetConList,StimList//,StimEqList,Exp2SynEqList,NetConEqList objref synApp,netConApp//stimApp,stimEqApp,synEqApp,netConEqApp forall if (!issection("eqSection.*")){ uninsert pas uninsert na3 uninsert kdr uninsert nax uninsert kap uninsert hd uninsert kad uninsert ds delete_section() } vbox7 = new VBox() vbox7.intercept(1) graphEq = new Graph() graphEq.addvar("eqSection[0].v(0.5)",4,1) graphEq.size(0,tgraph,-70,50) vbox7.intercept(0) vbox7.map("graphEq",680,340,410,170) cumEqMorph = 1 integrate() }