objref gnamelist
gnamelist = new List()
gnamelist.append(new String("gna"))
gnamelist.append(new String("gk"))
gnamelist.append(new String("gca"))
gnamelist.append(new String("gca_high"))
gnamelist.append(new String("gar"))
gnamelist.append(new String("total"))
objref vmat, gmat[gnamelist.count], voutlist, vinlist
objref goutlist[gnamelist.count], tout, tin
proc vclampg() { local i, j, y, numcomp localobj vv, f, s, clist, c, rsav, cdvdt
s = new String()
voutlist = new List()
vinlist = new List()
for i=0, gnamelist.count-1 {
goutlist[i] = new List()
}
clist = new List()
f = new File()
numcomp=0 forsec cell.all numcomp += 1
vmat = new Matrix(100*tf-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)
for i=0, gnamelist.count-2 {
gmat[i] = new Matrix(100*tf-1, numcomp+1)
classname(cell, s.s)
sprint(s.s, "../p2c/state/%s_%s.dat", gnamelist.object(i).s, s.s)
f.ropen(s.s)
gmat[i].scanf(f, vmat.nrow, vmat.ncol)
}
gmat[5] = new Matrix(100*tf-1, numcomp+1)
gmat[5].setcol(0,gmat[0].getcol(0))
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)
insert cal insert ar insert cat_a
Ra = 1e9
c = new SEClamp(.5)
c.dur1 = 1e9
c.rs = .01
clist.append(c)
for j=0, gnamelist.count-2 {
vv = new Vector()
if (j == 0) vv.record(&ina(.5))
if (j == 1) vv.record(&ik(.5))
if (j == 2) vv.record(&i_cat_a(.5))
if (j == 3) vv.record(&ica_cal(.5))
if (j == 4) vv.record(&i_ar(.5))
goutlist[j].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(tf)
for i=1, vmat.ncol-1 cell.comp[i] {
for j=0, gnamelist.count-2 {
if (j == 0) y = ena(.5)
if (j == 1) y = ek(.5)
if (j == 2) y = 125
if (j == 3) y = 125
if (j == 4) y = erev_ar(.5)
if (j == 2) {
goutlist[2].object(i-1).add(goutlist[3].object(i-1))
}
vv = vinlist.object(i-1).c.sub(y)
gmat[j].setcol(i, gmat[j].getcol(i).mul(vv))
goutlist[j].object(i-1).mul(area(.5)/100)
}
}
for j=1, gmat[0].ncol-1 {
goutlist[5].append(new Vector(goutlist[0].object(j-1).size))
for case(&i, 0, 1, 2, 4) {
gmat[5].setcol(j, gmat[5].getcol(j).add(gmat[i].getcol(j)))
goutlist[5].object(j-1).add(goutlist[i].object(j-1))
}
}
for i=1, vmat.ncol-1 cell.comp[i] {
Ra = rsav.x[i-1] // but no longer is traub_exact
}
seefv(2, 0)
}
proc seefv() {localobj s
s = new String()
gg.erase_all()
seetype = $2
if (seetype > 5) { seetype = 5 }
if (seetype < 0) { seetype = 0 }
seewhich = $1
if (seewhich > voutlist.count) {seewhich = voutlist.count}
if (seewhich < 1) { seewhich = 1 }
cell.comp[seewhich] { sprint(s.s,"%s(.5) %s", secname(), gnamelist.object(seetype).s) }
gg.label(.5,.8,s.s,2,1,0,0,1)
gmat[seetype].getcol(seewhich).line(gg, tin, 2, 1)
goutlist[seetype].object(seewhich-1).line(gg, tout)
}
proc mkseefv() {
xpanel("compare compartment currents")
xvalue("type na=0 k=1", "seetype", 1, "seefv(seewhich, seetype)")
xvalue("which", "seewhich", 1, "seefv(seewhich, seetype)")
xpanel()
}
func maxdiff() {local i localobj gf, gn, r
gf = gmat[$1]
gn = goutlist[$1]
r = new Vector(gn.count)
for i=0,r.size-1 {
r.x[i] = gn.object(i).c.interpolate(tin, tout).sub(gf.getcol(i+1)).sumsq
}
print r.max
return r.max_ind
}