strdef emptyLine, XTitle double Org[40][2000],GOF1[40],DisplayVolt[300] proc ShowUnCorr() { local temp1 g1 = new Graph() g1.color(2) g1.brush(0) temp1=0 for (VStepCount=FirstVStep;VStepCount<NumVSteps;VStepCount+=1) { print "Uncorr Voltage ", vclmp[VStepCount]," mV" g1.beginline() for FitTStepCount=0,NumFitTPoints { FitTPoint =FitTPoints[FitTStepCount] measTime=MeasTimes[FitTPoint] g1.line(measTime, iclmp[VStepCount][FitTPoint]/((vclmp[VStepCount]-Ek)/1000)) } } g1.exec_menu("View = plot") g1.label(0.5,0.95,"Uncorrected Conductances",2, 1, 0.5, 0.5, 2) g1.label(0.5,0.9,ExperimentName,2, 1, 0.5, 0.5, 2) g1.flush() } proc ShowOrg() { g3 = new Graph() g3.color(2) g3.brush(0) for (VStepCount=FirstVStep;VStepCount<NumVSteps;VStepCount+=1) { print "Org Voltage ", vclmp[VStepCount]," mV" g3.beginline() for FitTStepCount=0,NumFitTPoints { FitTPoint =FitTPoints[FitTStepCount] measTime=MeasTimes[FitTPoint] g3.line(measTime, Org[VStepCount][FitTPoint]) } } g3.exec_menu("View = plot") g3.label(0.5,0.95,"True Conductances",2, 1, 0.5, 0.5, 2) g3.label(0.5,0.85,ExperimentName,2, 1, 0.5, 0.5, 2) g3.flush() g3.color(1) } proc ShowCorr() { local First_VCount,Last_VCount First_VCount=(vclmp[FirstVStep]+gDKVPointerConverter)/OutputVScale Last_VCount=(vclmp[LastVStep]+gDKVPointerConverter)/OutputVScale g2 = new Graph() g2.color(1) g2.brush(0) for (VStepCount=First_VCount;VStepCount<Last_VCount;VStepCount+=4) { g2.beginline() print "Corr Voltage ", (OutputVScale*VStepCount-gDKVPointerConverter)," mV" for FitTStepCount=0,NumFitTPoints { FitTPoint =FitTPoints[FitTStepCount] measTime=MeasTimes[FitTPoint] g2.line(measTime, gbar[OutputVScale*VStepCount][gbarTRes*MeasTimes[FitTPoint]]) } } g2.exec_menu("View = plot") g2.label(0.5,0.95,"Corrected Conductances",2, 1, 0.5, 0.5, 2) g2.label(0.5,0.85,ExperimentName,2, 1, 0.5, 0.5, 2) g2.flush() } proc ShowOrgAndCorr() {local First_VCount,Last_VCount First_VCount=(vclmp[FirstVStep]+gDKVPointerConverter)/OutputVScale Last_VCount=(vclmp[LastVStep]+gDKVPointerConverter)/OutputVScale g4 = new Graph() g4.color(1) g4.brush(0) for (VStepCount=First_VCount;VStepCount<Last_VCount;VStepCount+=2) { g4.beginline() print "Corr Voltage ", (OutputVScale*VStepCount-gDKVPointerConverter)," mV" for FitTStepCount=0,NumFitTPoints { FitTPoint =FitTPoints[FitTStepCount] measTime=MeasTimes[FitTPoint] g4.line(measTime, gbar[OutputVScale*VStepCount][gbarTRes*MeasTimes[FitTPoint]]) } } g4.flush() g4.color(2) for (VStepCount=FirstVStep;VStepCount<LastVStep;VStepCount+=1) { print "Org Voltage ", vclmp[VStepCount]," mV" g4.beginline() for FitTStepCount=0,NumFitTPoints { FitTPoint =FitTPoints[FitTStepCount] measTime=MeasTimes[FitTPoint] g4.line(measTime, Org[VStepCount][FitTPoint]) } } g4.exec_menu("View = plot") g4.label(0.5,0.95,"True Conductances",2, 1, 0.5, 0.5, 2) g4.label(0.5,0.9,"Corrected Conductances",2, 1, 0.5, 0.5, 1) g4.label(0.5,0.85,ExperimentName,2, 1, 0.5, 0.5, 2) g4.flush() sprint(GFileName,"Output/%s_%s.ps",ExperimentName,"Graph") g4.printfile(GFileName) } proc ShowProgress() { local jj g5 = new Graph() g5.brush(0) // g5.color(4) g5.beginline() g5.flush for (jj=gDKVmin;jj<=gDKVmax-1;jj+=1){ DisplayVolt[jj+gDKVOffset-0.5]=jj g5.line(jj,gv_gDKkin3[jj+gDKVOffset-0.5]) } g5.size(-80,70,0,50) g5.label(0.5,0.02,"Voltage (mV)") g5.label(0.4,0.82,"Conductance") g5.color(4) } func CalcGOF() { local count1, Temp_sum,First_VCount,Last_VCount, Org_sum Temp_sum=0 Org_sum=0 First_VCount=(vclmp[FirstVStep]+gDKVPointerConverter)/OutputVScale Last_VCount=(vclmp[LastVStep]+gDKVPointerConverter)/OutputVScale for FitTStepCount=0,NumFitTPoints { FitTPoint =FitTPoints[FitTStepCount] measTime=MeasTimes[FitTPoint] count1=FirstVStep for (VStepCount=First_VCount;VStepCount<Last_VCount;VStepCount+=2) { GOF1[count1]=gbar[OutputVScale*VStepCount][gbarTRes*MeasTimes[FitTPoint]] count1+=1 } for (VStepCount=FirstVStep;VStepCount<LastVStep;VStepCount+=1) { Temp_sum+=(Org[VStepCount][FitTPoint]-GOF1[VStepCount])^2 Org_sum+=(Org[VStepCount][FitTPoint])^2 } // printf("%8.3f ", Temp_sum) } return 100*sqrt((Temp_sum/Org_sum)) } proc CorrectProc() { startsw() Correct() ShowOrgAndCorr() sprint(GFileName,"Output/%s_%s.g",ExperimentName,"Corrected") Write(GFileName) Seconds=stopsw() Minutes=int(Seconds/60) Hours=int(Minutes/60) Seconds=Seconds-Minutes*60 Minutes=Minutes-Hours*60 print "+++++ Experiment Name: ", ExperimentName, "++++++++" print " " print "Cell name", CellName print "Passive Parameters: (homogenous)" print "Rm: ",rm print "Ra: ",ra print "c_m: ",c_m print "Ek: ",Ek print "v_init: ",v_init access somaA print "Diam: ", diam psection() Dumm1=CalcGOF() printf ("Deviation from true kinetics %5.2f % \n", Dumm1) print "Correction lasted ", Hours, " Hours ",Minutes, " Minutes ", Seconds, " Seconds" } proc LoadOrg() {local COUNT, i, File_NumVSteps, TStepCount,File_measTime, VStepCount sprint(loadProg,"../Kinetics/Output/sphere.kin") print " Loading True Kinetics from " , loadProg // debug ropen(loadProg) File_NumVSteps=fscan() if (File_NumVSteps!=NumVSteps) { print "Total Number of Voltage Steps - Mismatch File<>Experiment (.iCl)" print "File_NumVSteps: ",File_NumVSteps, "NumVSteps: ", NumVSteps } // debug for TStepCount=0,NumTSteps { File_measTime=fscan() if (File_measTime!=MeasTimes[TStepCount]) { print "MeasTime - Mismatch File<>Experiment (.iCl)" print "TStepCount: ",TStepCount, "File_measTime: ",File_measTime, "MeasTimes[TStepCount]: ",MeasTimes[TStepCount] } // debug: comparing given experimental MeasTimes-Arr with meastimes in file } for VStepCount=0,NumVSteps-1 { File_vclmp = fscan() if (DebugOn) print "reading voltage: ",File_vclmp,"(VStepCount:",VStepCount,")" if (File_vclmp!=vclmp[VStepCount]) { print "VClmp - Mismatch (.iCl) " print "VStepCount:", VStepCount, "File_vclmp: ",File_vclmp,"vclmp[VStepCount]:", vclmp[VStepCount] } for TStepCount=0,NumTSteps { Org[VStepCount][TStepCount]=fscan() } } ropen() } proc LoadExp(){ ReadIC_and_leak(ExperimentName,LeakFileName) } proc LoadCorr(){ sprint(loadProg,"Output/%s_Corrected.g",ExperimentName) ropen(loadProg) for VStepCount=0,int(gDKVRange/OutputVScale) { tmp=fscan() } for FitTStepCount=0,NumFitTPoints { FitTPoint =FitTPoints[FitTStepCount] tmp=fscan() for VStepCount=0,int(gDKVRange/OutputVScale) { gbar[OutputVScale*VStepCount][gbarTRes*MeasTimes[FitTPoint]]=fscan() } } ropen() } xpanel("Cylinder simulation") sprint(XTitle,"Experiment name: %s",ExperimentName) xvarlabel(XTitle) xbutton("1. Display - Distorted","ShowUnCorr()") xbutton("2. Display - True ","ShowOrg()") xbutton("3. Correct (and wait) ", "CorrectProc()") xbutton("4. Show True & Corr ","ShowOrgAndCorr()") xvarlabel(emptyLine) xvalue("Tolerance","Tolerance") xvalue("Max Number of iterations", "numRun") xvalue("Time","DisplayT",0,"", 0, 1 ) xvalue("Voltage","DisplayV",0,"", 0, 1 ) xvalue("Conductance","DisplayG",0,"", 0, 1 ) xvalue("Iterations used","IterCount") xstatebutton("Verbose",&PrintVerbose) xpanel() LoadExp() LoadOrg() ShowOrg() ShowProgress()