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()