objref velec,mycmd,mycmda,mycmdb,mycmdc,mycmdd
velec= new VClamp(0.5)
vtempdur1 = 0 // for temporary storage of
vtempamp1 = 0 // VClamp[0].dur[1] and amp[1]
vV0=-70
vTR=10000
vSLOPE=0.006
vDEL=1000
mycmd = new Vector() // must create object outside proc
mycmda = new Vector() // must create object outside proc
mycmdb = new Vector() // must create object outside proc
mycmdc = new Vector() // must create object outside proc
mycmdd = new Vector() // must create object outside proc
// invoke the following procedures as needed from the interpreter window
// to use the ramp to drive the VClamp
/* PROC mkbirampd()
* Set up vector to load zero head, then up and down ramps, then zero tail
*/
proc mkbirampd() { local vv0, sslope, ttr, vv1, ddel1
vv0 = $1
sslope = $2
ttr = $3
ddel1=$4
vv1 = vv0 + sslope*ttr/2
mycmda.resize(ddel1/dt) // The initial 1000 msec
mycmda.fill(vv0)
mycmdb.indgen(vv0, vv1, dt*sslope) // The upramp
mycmdc.indgen(vv0,vv1,dt*sslope) // The downramp
mycmdd.resize(ddel1/dt) // The final 1000 msec
mycmdd.fill(vv0)
mycmdc.reverse()
mycmd.resize(0)
mycmd.append(mycmda,mycmdb,mycmdc,mycmdd)
}
// END PROC mkbirampd()
// PROC vrampdelon()
proc vrampdelon() {
vtempdur1 = VClamp[0].dur[1]
vtempamp1 = VClamp[0].amp[1]
// make sure VClamp will follow the command throughout the simulation
VClamp[0].dur[1] =vTR+2*vDEL
mycmd.play(&VClamp[0].amp[1],dt)
print "VClamp[0].amp[1] is now driven by vector mycmd"
}
// END PROC vrampdelon()
// PROC vrampdeloff()
// to "disconnect" the ramp from the SEClamp
proc vrampdeloff() {
// restore VClamp[0].dur[1] to previously saved value
VClamp[0].dur[1] = vtempdur1
VClamp[0].amp[1] = vtempamp1
mycmd.play_remove()
print "VClamp[0].amp[1] has been released from mycmd"
}
// END PROC vrampdeloff()
// INVOKE rap initialization
mkbirampd(vV0,vSLOPE,vTR,vDEL)