//genesis
// Hacked version of neurokit/xchannel_funcs.g for testing channels
int kincolor = 15
function do_xchannel_funcs
create xform /channel_params [0,0,800,450]
pushe /channel_params
create xgraph alpha [0,0,50%,45%] -range [-0.1,0,0.1,1]
setfield alpha ymin 0 overlay 0 XUnits Volts YUnits "1/sec"
create xgraph beta [50%,0,50%,45%] -range [-0.1,0,0.1,1]
setfield beta ymin 0 overlay 0 XUnits Volts YUnits "1/sec"
create xgraph taus [0,39%,50%,45%] -range [-0.1,0,0.1,1]
setfield taus ymin 0 overlay 0 XUnits Volts YUnits "sec"
create xgraph minf [50%,39%,50%,45%] -range [-0.1,0,0.1,1]
setfield minf ymin 0 overlay 0 XUnits Volts YUnits "minf"
create xdialog gate [4,4:minf.bottom,19%,30] -value "X" \
-script "do_plot_kinetics "<widget>
create xtoggle overlay [20%,4:minf.bottom,19%,30]
setfield ^ label0 "overlay off" label1 "overlay on"
create xdialog channel_path [4,4:overlay.bottom,75%,30] -value {channelpath} \
-script set_channelpath
create xbutton QUIT [75%,4:overlay.bottom,24%,30] -script quit
pope
end
function set_channelpath
channelpath = {getfield /channel_params/channel_path value}
end
function deleteelms(path)
str elm
foreach elm ({el {path}})
delete {elm}
end
end
function do_plot_kinetics(widget)
str widget
str gate = {getfield {widget} value}
str channeltype
str gatepath
float x,y,a,b,tau
float xmin=-0.1,xmax=0.07,dx=0.002
float amax=-1.0,bmax=-1.0,mmax=-1.0,tmax=-1.0
str kinname
int i
ce /channel_params
dx = 0.005
if (!({exists {channelpath}}))
return
end
kinname = {getfield {channelpath} name} @ "->" @ (gate)
channeltype = {getfield {channelpath} object->name}
if ({getfield /channel_params/overlay state} == 0)
deleteelms alpha/##[ISA=xplot]
deleteelms beta/##[ISA=xplot]
deleteelms taus/##[ISA=xplot]
deleteelms minf/##[ISA=xplot]
setfield alpha ymax 1e6
setfield beta ymax 1e6
setfield taus ymax 1e6
setfield taus ymax 1e6
kincolor = 15
else
kincolor = kincolor + 15
if (kincolor > 99)
kincolor = kincolor - 95
end
amax = {getfield alpha ymax}
bmax = {getfield beta ymax}
mmax = {getfield minf ymax}
tmax = {getfield taus ymax}
end
if ({strcmp {channeltype} hh_channel} == 0)
if ((!{strcmp {gate} "X"} == 0) || ({strcmp {gate} "Y"} == 0))
echo For hh channels, gate must be X or Y
return
end
end
if ({strcmp {channeltype} tabchannel} == 0)
if (!(({strcmp {gate} "X"} == 0) || ({strcmp {gate} "Y"} == 0) || ({strcmp {gate} "Z"} == 0)))
echo For vdep channels, gate must be X or Y or Z
return
end
if ({getfield {channelpath} {gate}_alloced} == 1)
xmin = {getfield {channelpath} {gate}_A->xmin}
xmax = {getfield {channelpath} {gate}_A->xmax}
dx = {getfield {channelpath} {gate}_A->dx}
if (dx < ((xmax - xmin)/100.0))
dx = (xmax - xmin)/100.0
end
else
echo gate {gate} not allocated
return
end
end
if (({strcmp {channeltype} hh_channel} == 0) || \
({strcmp {channeltype} tabchannel} == 0))
if (!{exists alpha/{kinname}})
create xplot alpha/{kinname}
end
if (!{exists beta/{kinname}})
create xplot beta/{kinname}
end
if (!{exists taus/{kinname}})
create xplot taus/{kinname}
end
for (x = xmin; x <= xmax; x = x + dx)
a = {call {channelpath} CALC_ALPHA {gate} {x}}
if (amax < a)
amax = a
end
b = {call {channelpath} CALC_BETA {gate} {x}}
if (bmax < b)
bmax = b
end
tau = 1/(a + b)
if (tau > tmax)
tmax = tau
end
call alpha/{kinname} ADDPTS {x} {a}
setfield alpha/{kinname} fg {kincolor}
call beta/{kinname} ADDPTS {x} {b}
setfield beta/{kinname} fg {kincolor}
call taus/{kinname} ADDPTS {x} {tau}
setfield taus/{kinname} fg {kincolor}
end
if (!{exists minf/{kinname}})
create xplot minf/{kinname}
end
for (x = xmin ; x <= xmax ; x = x + dx)
y = {call {channelpath} CALC_MINF {gate} {x}}
if (y > mmax)
mmax = y
end
call minf/{kinname} ADDPTS {x} {y}
setfield minf/{kinname} fg {kincolor}
end
setfield alpha ymax {amax} xmin {xmin} xmax {xmax}
setfield beta ymax {bmax} xmin {xmin} xmax {xmax}
setfield taus ymax {tmax} xmin {xmin} xmax {xmax}
setfield minf ymax {mmax} xmin {xmin} xmax {xmax}
end
/* deal with vdep_channel later
if ({strcmp {channeltype} vdep_channel} == 0)
gatepath = (channelpath) @ "/" @ (gate)
if (!{exists({gatepath})})
echo Gate {gatepath} does not exist.
return
end
if ({strcmp {getfield {gatepath} object->name} vdep_gate) != 0)
xmin = get({gatepath},alpha->xmin)
xmax = get({gatepath},alpha->xmax)
dx = get({gatepath},alpha->dx)
if (dx < {(xmax - xmin)/100.0})
dx = (xmax - xmin)/100.0
end
end
for (x = xmin ; x <= xmax ; x = x + dx)
a = call({gatepath},CALC_ALPHA,{x})
if (amax < a )
amax = a
end
b = call({gatepath},CALC_BETA,{x})
if (bmax < b)
bmax = b
end
tau = 1/(a+b)
if (tau > tmax)
tmax = tau
end
xaddpts alpha -plotname {kinname} -color hot{kincolor} {x} {a}
xaddpts beta -plotname {kinname} -color hot{kincolor} {x} {b}
xaddpts taus -plotname {kinname} -color hot{kincolor} {x} {tau}
end
for (x = xmin ; x <= xmax ; x = x + dx)
y = call({gatepath},CALC_MINF,{x})
if (y > mmax)
mmax = y
end
xaddpts minf -plotname {kinname} -color hot{kincolor} {x} {y}
end
set alpha ymax {amax} xmin {xmin} xmax {xmax}
set beta ymax {bmax} xmin {xmin} xmax {xmax}
set taus ymax {tmax} xmin {xmin} xmax {xmax}
set minf ymax {mmax} xmin {xmin} xmax {xmax}
end
if (strcmp({channeltype},channelC2) == 0)
end
if (strcmp({channeltype},table) == 0)
end
*/
ce /
end