// ############# Like write_everything.g, except
// ############# display the total current from all
// ############# compartments, rather than just the
// ############# present compartment
// ## Dave Stanley Feb 10 2010
int scriptmode=7
int plot_HPo_channel=0
int show_calcium = 0
//Called by plot_graphs
//Writes Vm to graph and to file
function write_Vm (source, dest_plot, dest_save, graphics_on)
str diffampname = {{source} @ "/../soma/diffamp" @ {countelementlist {source}/../soma/#[TYPE=diffamp]}} // Create name & number for diffamp
str dest_info = {"." @ {dest_save} @ "_info"}
openfile {dest_info} w
create diffamp {diffampname}
setfield {diffampname} plus 0 minus 0 gain 1000 saturation inf // Convert V to mV
if (scriptmode == 7)
// addmsg {source}/../soma {diffampname} PLUS Vm
addmsg {source} {diffampname} PLUS Vm
else
addmsg {source} {diffampname} PLUS Vm
end
if (graphics_on); addmsg {diffampname} {{dest_plot} @ "/Vm"} PLOT output *Vm *blue; end
addmsg {diffampname} {dest_save} SAVE output
end
function write_everything (source, dest_plot, dest_save, pfield, graphics_on, sum_currents)
str curr_chan
int col = 15
str dest_info = {"." @ {dest_save} @ "_info"}
openfile {dest_info} w
xcolorscale hot
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Enter calculator (sum) mode #########################################
if (sum_currents == 1)
str curr_chan_name
str calc_path
foreach curr_chan ({el {source}/../#/#[TYPE=GENvgpores]} {el {source}/../#/#[TYPE=GENVhalf]} {el {source}/../#/#[TYPE=GENtabchan]} \
{el {source}/../#/#[TYPE=tabchannel]} {el {source}/../#/#[TYPE=vdep_channel]} {el {source}/../#/#[TYPE=GENsynpores]})
curr_chan_name = {getfield {curr_chan} name}
calc_path = {{curr_chan} @ "/../.."}
// echo {calc_path}
if ({curr_chan_name} == "K_AHPs_m")
curr_chan_name = "K_AHP_m"
end
if ({curr_chan_name} == "K_Cs_m")
curr_chan_name = "K_C_m"
end
if ({curr_chan_name} == "K_AHPs")
curr_chan_name = "K_AHP"
end
if ({curr_chan_name} == "K_Cs")
curr_chan_name = "K_C"
end
if ({curr_chan_name} == "NaA")
curr_chan_name = "Na"
end
if ({curr_chan_name} == "K_DRA")
curr_chan_name = "K_DR"
end
if ( !({exists {calc_path}/sum_{curr_chan_name}}) )
create calculator {calc_path}/sum_{curr_chan_name}
setfield {calc_path}/sum_{curr_chan_name} resetclock 0
addfield {calc_path}/sum_{curr_chan_name} channel_name
setfield {calc_path}/sum_{curr_chan_name} channel_name {curr_chan_name}
end
addmsg {curr_chan} {calc_path}/sum_{curr_chan_name} SUM {pfield}k
end
// Adds messages from "pooled" channel and Ca_concen objects
foreach curr_chan ({el {source}/../#/#[TYPE=calculator],{source}/../#/volweighted_Ca#[TYPE=diffamp]})
curr_chan_name = {getfield {curr_chan} name}
calc_path = {{curr_chan} @ "/../.."}
// echo {calc_path}
if ( !({exists {calc_path}/sum_{curr_chan_name}}) )
create calculator {calc_path}/sum_{curr_chan_name}
setfield {calc_path}/sum_{curr_chan_name} resetclock 0
addfield {calc_path}/sum_{curr_chan_name} channel_name
setfield {calc_path}/sum_{curr_chan_name} channel_name {curr_chan_name}
end
addmsg {curr_chan} {calc_path}/sum_{curr_chan_name} SUM output
end
// Look after High Open Probability stuff for SK2 channels - get average
if ( plot_HPo_channel )
create neutral {source}/../HPo_stuff
foreach curr_chan ({el {source}/../sum_HPo#[TYPE=calculator]})
move {curr_chan} {source}/../HPo_stuff
end
float total_Gk = 0
foreach curr_chan ({el /pyr_array/pyr/#/allpools/#/HPo#})
if ( {getfield {curr_chan} name} == "HPo_SK2" )
total_Gk = {getfield {curr_chan} Gbar} + total_Gk
elif ( {getfield {curr_chan} name} == "HPo_SK2_m" )
total_Gk = {getfield {curr_chan} Nt}*{10.0*{onepS}} + total_Gk
end
end
if ( !({exists {source}/../HPo_norm}) )
create diffamp {source}/../HPo_norm
setfield ^ gain {1.0/total_Gk} saturation 999
addfield ^ channel_name
setfield ^ channel_name {getfield {source}/../HPo_stuff/sum_HPo_allpools channel_name}
addmsg {source}/../HPo_stuff/sum_HPo_allpools {source}/../HPo_norm PLUS output
end
end
// %%%%% Add calculator object messages
foreach curr_chan ({el {source}/../#[TYPE=calculator],{source}/../#[TYPE=diffamp]})
//echo calculator currentchannel {curr_chan}
if (graphics_on); addmsg {curr_chan} {{dest_plot} @ "/Ik"} PLOT output *sum_{getfield {curr_chan} channel_name} *{col}; end
addmsg {curr_chan} {dest_save} SAVE output
writefile {dest_info} {curr_chan}
col = col + 7
if (col > 63)
col = col - 60
end
end
// ############################# End calculator mode %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
elif (sum_currents == 0)
/// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Regular Mode %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
foreach curr_chan ({el {source}/#[TYPE=GENvgpores]} {el {source}/#[TYPE=GENVhalf]} {el {source}/#[TYPE=GENsynpores]} {el {source}/#[TYPE=GENtabchan]})
if ( {getfield {curr_chan} originalchannel} == "GABA_B" )
if ( {getfield {curr_chan} mode} == "regular" )
if (graphics_on)
addmsg {curr_chan}/G_protein {{dest_plot} @ "/Ik"} PLOT {pfield}k *{getfield {curr_chan} name} *{col}
addmsg {curr_chan}/K_pore {{dest_plot} @ "/Ik"} PLOT {pfield}k *{getfield {curr_chan} name} *{col}
//addmsg {curr_chan}/G_protein {{dest_plot} @ "/Ik"} PLOT Gconcs *{getfield {curr_chan} name} *{col}
end
//addmsg {curr_chan}/G_protein {dest_save} SAVE {pfield}k
addmsg {curr_chan}/K_pore {dest_save} SAVE {pfield}k
else
if (graphics_on); addmsg {curr_chan} {{dest_plot} @ "/Ik"} PLOT {pfield}k *{getfield {curr_chan} name} *{col}; end
addmsg {curr_chan} {dest_save} SAVE {pfield}k
end
else
if (graphics_on); addmsg {curr_chan} {{dest_plot} @ "/Ik"} PLOT {pfield}k *{getfield {curr_chan} name} *{col}; end
addmsg {curr_chan} {dest_save} SAVE {pfield}k
end
writefile {dest_info} {curr_chan}
col = col + 7
if (col > 63)
col = col - 60
end
end
foreach curr_chan ({el {source}/#[TYPE=tabchannel]} {el {source}/#[TYPE=vdep_channel]})
if (graphics_on); addmsg {curr_chan} {{dest_plot} @ "/Ik"} PLOT {pfield}k *{getfield {curr_chan} name} *{col}; end
addmsg {curr_chan} {dest_save} SAVE {pfield}k
writefile {dest_info} {curr_chan}
col = col + 7
if (col > 63)
col = col - 60
end
end
foreach curr_chan ({el {source}/#[TYPE=calculator],{source}/Ca#[TYPE=diffamp]})
if (graphics_on); addmsg {curr_chan} {{dest_plot} @ "/Ik"} PLOT output *{getfield {curr_chan} name} *{col}; end
addmsg {curr_chan} {dest_save} SAVE output
writefile {dest_info} {curr_chan}
col = col + 7
if (col > 63)
col = col - 60
end
end
// ############################# End regular mode %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
elif (sum_currents == -1)
// ############################# Single pool mode %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
foreach curr_chan ({el {source}/#[TYPE=GENvgpores]} {el {source}/#[TYPE=GENVhalf]} {el {source}/#[TYPE=GENsynpores]} {el {source}/#[TYPE=GENtabchan]})
if ( {getfield {curr_chan} originalchannel} == "GABA_B" )
if ( {getfield {curr_chan} mode} == "regular" )
if (graphics_on)
addmsg {curr_chan}/G_protein {{dest_plot} @ "/Ik"} PLOT {pfield}k *{getfield {curr_chan} name} *{col}
addmsg {curr_chan}/K_pore {{dest_plot} @ "/Ik"} PLOT {pfield}k *{getfield {curr_chan} name} *{col}
//addmsg {curr_chan}/G_protein {{dest_plot} @ "/Ik"} PLOT Gconcs *{getfield {curr_chan} name} *{col}
end
//addmsg {curr_chan}/G_protein {dest_save} SAVE {pfield}k
addmsg {curr_chan}/K_pore {dest_save} SAVE {pfield}k
else
if (graphics_on); addmsg {curr_chan} {{dest_plot} @ "/Ik"} PLOT {pfield}k *{getfield {curr_chan} name} *{col}; end
addmsg {curr_chan} {dest_save} SAVE {pfield}k
end
else
if (graphics_on); addmsg {curr_chan} {{dest_plot} @ "/Ik"} PLOT {pfield}k *{getfield {curr_chan} name} *{col}; end
addmsg {curr_chan} {dest_save} SAVE {pfield}k
end
writefile {dest_info} {curr_chan}
col = col + 7
if (col > 63)
col = col - 60
end
end
foreach curr_chan ({el {source}/#[TYPE=tabchannel]} {el {source}/#[TYPE=vdep_channel]})
if (graphics_on); addmsg {curr_chan} {{dest_plot} @ "/Ik"} PLOT {pfield}k *{getfield {curr_chan} name} *{col}; end
addmsg {curr_chan} {dest_save} SAVE {pfield}k
writefile {dest_info} {curr_chan}
col = col + 7
if (col > 63)
col = col - 60
end
end
// Add single pool currents
foreach curr_chan ({el {source}/allpools/Capool_1/#[TYPE=GENvgpores]} {el {source}/allpools/Capool_1/#[TYPE=GENVhalf]} {el {source}/allpools/Capool_1/#[TYPE=GENsynpores]} {el {source}/allpools/Capool_1/#[TYPE=GENtabchan]})
if ( {getfield {curr_chan} originalchannel} == "GABA_B" )
if ( {getfield {curr_chan} mode} == "regular" )
if (graphics_on)
addmsg {curr_chan}/G_protein {{dest_plot} @ "/Ik"} PLOT {pfield}k *{getfield {curr_chan} name} *{col}
addmsg {curr_chan}/K_pore {{dest_plot} @ "/Ik"} PLOT {pfield}k *{getfield {curr_chan} name} *{col}
//addmsg {curr_chan}/G_protein {{dest_plot} @ "/Ik"} PLOT Gconcs *{getfield {curr_chan} name} *{col}
end
//addmsg {curr_chan}/G_protein {dest_save} SAVE {pfield}k
addmsg {curr_chan}/K_pore {dest_save} SAVE {pfield}k
else
if (graphics_on); addmsg {curr_chan} {{dest_plot} @ "/Ik"} PLOT {pfield}k *{getfield {curr_chan} name} *{col}; end
addmsg {curr_chan} {dest_save} SAVE {pfield}k
end
else
if (graphics_on); addmsg {curr_chan} {{dest_plot} @ "/Ik"} PLOT {pfield}k *{getfield {curr_chan} name} *{col}; end
addmsg {curr_chan} {dest_save} SAVE {pfield}k
end
writefile {dest_info} {curr_chan}
col = col + 7
if (col > 63)
col = col - 60
end
end
foreach curr_chan ({el {source}/allpools/Capool_1/#[TYPE=tabchannel]} {el {source}/allpools/Capool_1/#[TYPE=vdep_channel]})
if (graphics_on); addmsg {curr_chan} {{dest_plot} @ "/Ik"} PLOT {pfield}k *{getfield {curr_chan} name} *{col}; end
addmsg {curr_chan} {dest_save} SAVE {pfield}k
writefile {dest_info} {curr_chan}
col = col + 7
if (col > 63)
col = col - 60
end
end
foreach curr_chan ({el {source}/allpools/Capool_1/#[TYPE=Ca_concen]})
if (graphics_on); addmsg {curr_chan} {{dest_plot} @ "/Ik"} PLOT Ca *{getfield {curr_chan} name} *{col}; end
addmsg {curr_chan} {dest_save} SAVE Ca
writefile {dest_info} {curr_chan}
col = col + 7
if (col > 63)
col = col - 60
end
end
foreach curr_chan ({el {source}/allpools/Capool_1/#[TYPE=difshell]})
if (graphics_on); addmsg {curr_chan} {{dest_plot} @ "/Ik"} PLOT C *{getfield {curr_chan} name} *{col}; end
addmsg {curr_chan} {dest_save} SAVE C
writefile {dest_info} {curr_chan}
col = col + 7
if (col > 63)
col = col - 60
end
end
// ############################# End single pool mode %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
create diffamp {source}/sum_synapses
setfield ^ gain 1 saturation Inf minus 0
int num_channels = 0
foreach curr_chan ({el {source}/#[TYPE=GENsynpores]})
num_channels = num_channels + 1
addmsg {curr_chan} {source}/sum_synapses PLUS {pfield}k
end
if (num_channels > 0)
// if (graphics_on); addmsg {source}/sum_synapses {{dest_plot} @ "/Ik"} PLOT output *{"sum" @ {getfield {curr_chan} name}} *{col}; end
//addmsg {source}/sum_synapses {dest_save} SAVE output
//writefile {dest_info} "tot_synaptic_activity"
col = col + 7
if (col > 63)
col = col - 60
end
end
foreach curr_chan ({el {source}/#[TYPE=GENgap]})
echo addmsg {curr_chan} {{dest_plot} @ "/Ik"} PLOT {pfield}k *{getfield {curr_chan} name} *{col}
if (graphics_on); addmsg {curr_chan} {{dest_plot} @ "/Ik"} PLOT {pfield}k *{getfield {curr_chan} name} *{col}; end
addmsg {curr_chan} {dest_save} SAVE {pfield}k
writefile {dest_info} {curr_chan}
//create xform /form //display voltage comparison
//create xgraph /form/graph
//xshow /form
//addmsg {curr_chan} /form/graph PLOT Vk *Vk *blue
//addmsg {curr_chan} /form/graph PLOT Vk2 *Vk2 *red
col = col + 7
if (col > 63)
col = col - 60
end
end
foreach curr_chan ( {el {source}/#[TYPE=synchan2]} )
if (graphics_on); addmsg {curr_chan} {{dest_plot} @ "/Ik"} PLOT {pfield}k *{getfield {curr_chan} name} *{col}; end
addmsg {curr_chan} {dest_save} SAVE {pfield}k
writefile {dest_info} {curr_chan}
col = col + 7
if (col > 63)
col = col - 60
end
end
// For NaCa Pump
foreach curr_chan ({el {source}/#[TYPE=tabcurrent]})
if (graphics_on); addmsg {curr_chan} {{dest_plot} @ "/Ik"} PLOT {pfield}k *{getfield {curr_chan} name} *{col}; end
addmsg {curr_chan} {dest_save} SAVE {pfield}k
writefile {dest_info} {curr_chan}
col = col + 7
if (col > 63)
col = col - 60
end
end
if (show_calcium)
foreach curr_chan ({el {source}/#[TYPE=Ca_concen]})
if (graphics_on); addmsg {curr_chan} {{dest_plot} @ "/Ik"} PLOT Ca *{getfield {curr_chan} name} *{col}; end
addmsg {curr_chan} {dest_save} SAVE C
writefile {dest_info} {curr_chan}
col = col + 7
if (col > 63)
col = col - 60
end
end
end
foreach curr_chan ({el {source}/#[TYPE=difshell]})
if (graphics_on); addmsg {curr_chan} {{dest_plot} @ "/Ik"} PLOT C *{getfield {curr_chan} name} *{col}; end
addmsg {curr_chan} {dest_save} SAVE C
writefile {dest_info} {curr_chan}
col = col + 7
if (col > 63)
col = col - 60
end
end
foreach curr_chan ({el {source}/../soma/#[TYPE=PID]})
if (graphics_on); addmsg {curr_chan} {{dest_plot} @ "/Ik"} PLOT output *PID *{col}; end
addmsg {curr_chan} {dest_save} SAVE output
writefile {dest_info} {curr_chan}
col = col + 7
if (col > 63)
col = col - 60
end
end
// Include soma current
//addmsg {source}/../soma {{dest_plot} @ "/Ik"} PLOT Im *{getfield {source}/../soma name} *{col}
//addmsg {source}/../soma {dest_save} SAVE Im
//writefile {dest_info} "soma current"
closefile {dest_info}
end
function plot_graphs (src_path, graph_name, file_name, graphics_on, sum_currents)
if (graphics_on)
create xform {graph_name} [10,10,900,350] -notitle
create xlabel {graph_name}/label [10,0,98%,25] -label {src_path}
create xgraph {graph_name}/Vm [10,10:label.bottom,50%,90%] -title \
"membrane potential"
setfield {graph_name}/Vm XUnits "t (sec)" YUnits "voltage (V)"
setfield {graph_name}/Vm xmax 0.03 ymin -150 ymax 40
useclock {graph_name}/Vm 1
create xgraph {graph_name}/Ik [10:Vm.right,10:label.bottom,49%,90%] \
-title "channel current"
setfield {graph_name}/Ik XUnits "t (sec)" YUnits "current (S)"
setfield {graph_name}/Ik xmax 0.03 ymin -1e-7 ymax 9e-7
useclock {graph_name}/Ik 1
xshow {graph_name}
end
create asc_file {file_name}
setfield ^ flush 0 leave_open 1 append 0 notime 0 float_format %0.12g
useclock ^ 1
write_Vm {src_path} {graph_name} {file_name} {graphics_on}
write_everything {src_path} {graph_name} {file_name} I {graphics_on} {sum_currents}
end
|