// assume show.hoc already loaded (via start.hoc).
// i.e sc_ is a ShowConnect instance
begintemplate RecordInfo
public gid, sec, x, record, yvec, tvec, name
objref vv, yvec, tvec, this
external Mitral, Granule, nmitral
strdef sec
proc init() {
gid = $1
sec = $s2
x = $3
}
proc record() {localobj cell, s, pc
pc = new ParallelContext()
yvec = new Vector()
tvec = new Vector()
cell = pc.gid2cell(gid)
s = new String()
sprint(s.s, "%s.%s {yvec.record(&v(%g)) tvec.record(&t)}", cell, sec, x)
execute(s.s, this)
}
obfunc name() {localobj s
s = new String()
if (gid < nmitral) {
sprint(s.s, "Mitral(%d).%s(%g)", gid, sec, x)
}else{
sprint(s.s, "Granule(%d).%s(%g)", gid-nmitral, sec, x)
}
return s
}
endtemplate RecordInfo
objref recinfo
recinfo = new List(0)
// record soma voltage for arglist of mitral indices
proc rm() {local i
for i=1, numarg() {
sc_.msel.x[$i] = 1
recinfo.append(new RecordInfo($i, "soma", 0.5))
}
}
// record soma voltage for arglist of granule indices
proc rg() {local i
for i=1, numarg() {
sc_.gsel.x[$i] = 1
recinfo.append(new RecordInfo($i+nmitral, "soma", 0.5))
}
}
// record mitral secden voltage at positions given by arglist of granule
// indices. (first arg is mitral index). If mitral does not have a position
// at an indicated granule index, then that granule index arg is ignored
proc rmx() {local i, x localobj sden
return // not implemented yet
sc_.msel.x[$1] = 1
for i=2, numarg() {
recinfo.append($1, sden.s, x)
}
}
proc go() {local i
sc_.create_subnet()
for i=0, recinfo.count-1 {
recinfo.o(i).record()
}
run()
pfile("tplot.dat")
}
proc pfile() {local i, sz localobj f
f = new File()
f.wopen($s1)
sz = recinfo.o(0).tvec.size
f.printf("nrow ncol\n")
f.printf("%d %d\n", sz, recinfo.count + 1)
f.printf("t\n")
for i=0, recinfo.count-1 {
f.printf("%s\n", recinfo.o(i).name().s)
}
for i=0, sz-1 {
f.printf("%g", recinfo.o(0).tvec.x[i])
for j=0, recinfo.count-1 {
f.printf(" %g", recinfo.o(j).yvec.x[i])
}
f.printf("\n")
}
}