objref vmat, fvmat, voutlist, vinlist, fvoutlist, tout, tin
proc vcompclamp() { local i, j, numcomp localobj vv, f, s, clist, c, rsav, cdvdt
s = new String()
voutlist = new List()
vinlist = new List()
fvoutlist = new List()
clist = new List()
f = new File()
numcomp=0 forsec cell.all numcomp += 1
vmat = new Matrix(100*100-1, numcomp+1)
classname(cell, s.s)
sprint(s.s, "../p2c/state/v_%s.dat", s.s)
f.ropen(s.s)
vmat.scanf(f, vmat.nrow, vmat.ncol)
fvmat = new Matrix(100*100-1, numcomp+1)
classname(cell, s.s)
sprint(s.s, "../p2c/state/fv_%s.dat", s.s)
f.ropen(s.s)
fvmat.scanf(f, vmat.nrow, vmat.ncol)
i = 1
tout = new Vector()
cell.comp[1] {tout.record(&t)}
tin = vmat.getcol(0)
rsav = new Vector()
for i=1, vmat.ncol-1 cell.comp[i] {
rsav.append(Ra)
Ra = 1e9
c = new SEClamp(.5)
c.dur1 = 1e9
c.rs = .01
clist.append(c)
vv = new Vector()
vv.record(&c.i)
fvoutlist.append(vv)
vv = new Vector()
vv.record(&v(.5))
voutlist.append(vv)
vv = vmat.getcol(i)
vv.play(&c.amp1, tin, 1)
vinlist.append(vv)
}
stdinit()
continuerun(100)
for i=1, vmat.ncol-1 cell.comp[i] {
cdvdt = voutlist.object(i-1).c.deriv(dt,2)
fvoutlist.object(i-1).div(cm*area(.5)/100).add(cdvdt)
}
for i=1, vmat.ncol-1 cell.comp[i] {
Ra = rsav.x[i-1] // but no longer is traub_exact
}
seefv(2)
}
proc seefv() {localobj s
s = new String()
gg.erase_all()
seewhich = $1
if (seewhich > fvoutlist.count) {seewhich = fvoutlist.count}
if (seewhich < 1) { seewhich = 1 }
cell.comp[seewhich] { sprint(s.s,"%s(.5) clamp current", secname()) }
gg.label(.5,.8,s.s,2,1,0,0,1)
fvmat.getcol(seewhich).line(gg, tin, 2, 1)
fvoutlist.object(seewhich-1).line(gg, tout)
}
proc mkseefv() {
xpanel("compare compartment currents")
xvalue("which", "seewhich", 1, "seefv(seewhich)")
xpanel()
}