// genesis //How to use/call this function: //make_vclamp "somaVmCompartmentName" {clampdur} {clampval} {clampdelay} {clamphold} function make_vclamp(path,dur,clampval,delay,hold) str path float dur, hold, delay float clampval create pulsegen {path}/pulsegen_hold setfield ^ level1 {hold} \ width1 {delay+(dur+delay)*10} \ delay1 {delay} \ delay2 {9999} \ baselevel {EREST_ACT} create pulsegen {path}/pulsegen_clamp setfield ^ level1 {clampval-hold} \ trig_mode 0 \ width1 {dur} \ delay1 {2*delay} \ delay2 {delay+dur} \ width2 {dur} \ level2 {clampval-hold} \ baselevel {hold-hold} //float test1 = {getfield {path}/pulsegen baselevel} //echo "baselevel: "{test1} //echo "clampval should be: " {clampval} create diffamp {path}/Vclamp setfield ^ saturation 999.0 \ gain 1 create RC {path}/lowpass setfield ^ R 1 \ C .00001 create PID {path}/PID //These parameters may need to be tweaked for morphology or time step /* parameters for 0.001 time step */ /* setfield ^ gain 0.003 \ tau_i 3e-7 \ tau_d 0.01 \ saturation 400.00 */ /* parameters for 0.005 time step */ /* setfield ^ gain 0.35 \ tau_i 4e-5 \ tau_d 0.2 \ saturation 400.00 */ setfield ^ gain 2e-5 \ saturation 400.00 \ tau_i .000001 \ tau_d .00000025 addmsg {path}/pulsegen_hold {path}/lowpass INJECT output addmsg {path}/pulsegen_clamp {path}/lowpass INJECT output //addmsg {path}/lowpass {path}/Vclamp PLUS state // addmsg {path}/Vclamp {path}/PID CMD output addmsg {path}/lowpass {path}/PID CMD state addmsg {path} {path}/PID SNS Vm addmsg {path}/PID {path} INJECT output end function make_vcgraph(path) str path create xform /vclamp [10,10,600,400] create xgraph /vclamp/pulsegen -title "Pulse generator" -hgeom 50% -wgeom 50% setfield ^ ymin -80e-3 ymax 20e-3 xmax .5 XUnits sec YUnits volts create xgraph /vclamp/inject -title "injected current" -hgeom 50% -wgeom 50% setfield ^ ymin -50e-3 ymax 100e-3 xmax .5 XUnits sec YUnits Amps create xgraph /vclamp/vclamp -title "command voltage" -xgeom 300 -ygeom 0 -hgeom 50% -wgeom 50% setfield ^ ymin -80e-3 ymax 20e-3 xmax .5 XUnits sec YUnits volts create xgraph /vclamp/vm -title "membrane potential" -xgeom 300 -hgeom 50% -wgeom 50% setfield ^ XUnits Sec YUnits V xmax .5 ymin -80e-3 ymax 20e-3 xshow /vclamp // send messages from vlcamp devices to their graphs addmsg {path}/pulsegen_hold /vclamp/pulsegen PLOT output *pulsegen *red addmsg {path}/pulsegen_clamp /vclamp/pulsegen PLOT output *pulsegen *green addmsg {path}/PID /vclamp/inject PLOT output *PID *blue addmsg {path}/lowpass /vclamp/vclamp PLOT state *Vclamp *black addmsg {path} /vclamp/vm PLOT Vm *voltage *black useclock 0 {path}/# useclock 0 /vclamp/# end