Leech Heart (HE) Motor Neuron conductances contributions to NN activity (Lamb & Calabrese 2013)

 Download zip file 
Help downloading and running models
Accession:153355
"... To explore the relationship between conductances, and in particular how they influence the activity of motor neurons in the well characterized leech heartbeat system, we developed a new multi-compartmental Hodgkin-Huxley style leech heart motor neuron model. To do so, we evolved a population of model instances, which differed in the density of specific conductances, capable of achieving specific output activity targets given an associated input pattern. ... We found that the strengths of many conductances, including those with differing dynamics, had strong partial correlations and that these relationships appeared to be linked by their influence on heart motor neuron activity. Conductances that had positive correlations opposed one another and had the opposite effects on activity metrics when perturbed whereas conductances that had negative correlations could compensate for one another and had similar effects on activity metrics. "
Reference:
1 . Lamb DG, Calabrese RL (2013) Correlated conductance parameters in leech heart motor neurons contribute to motor pattern formation. PLoS One 8:e79267 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network; Neuron or other electrically excitable cell;
Brain Region(s)/Organism: Leech;
Cell Type(s): Leech heart motor neuron (HE);
Channel(s): I Na,p; I A; I K; I K,leak; I K,Ca; I Sodium; I Calcium; I Na, leak;
Gap Junctions: Gap junctions;
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: GENESIS;
Model Concept(s): Action Potential Initiation; Activity Patterns; Bursting; Temporal Pattern Generation; Detailed Neuronal Models; Parameter sensitivity; Conductance distributions;
Implementer(s): Lamb, Damon [Damon.Lamb at neurology.ufl.edu];
Search NeuronDB for information about:  I Na,p; I A; I K; I K,leak; I K,Ca; I Sodium; I Calcium; I Na, leak;
/
LambCalabrese2013
lgenesis-noX
neurokit
prototypes
README
camit.p
compt_chop.g *
compt_chop.g.bu *
defaults.g *
defaults.g.bu *
hot *
Neurokit.g *
Neurokit.g.bu *
NEURON.g *
NEURON.g.bu *
newcamit.p
synactivator.g *
synactivator.g.bu *
userprefs.g *
userprefs.g.bu *
xall.g *
xall.g.bu *
xcell_funcs.g *
xcell_funcs.g.bu *
xchannel_funcs.g *
xchannel_funcs.g.bu *
xgeom.g *
xgeom.g.bu *
xgraph_funcs.g *
xgraph_funcs.g.bu *
xicons.g *
xicons.g.bu *
xout_funcs.g *
xout_funcs.g.bu *
xrun.g *
xrun.g.bu *
xselect.g *
xselect.g.bu *
xstartup.g *
xstartup.g.bu *
xtitle.g *
xtitle.g.bu *
                            
//genesis

float dt = user_dt
float refresh_factor = user_refresh
int i
int col1 = 15
int col2 = 15

// we need a synactivator to activate synaptic channels on
// command.

include synactivator.g

function do_xcell_run_control
	for (i = 0; i < 10; i = i + 1)
		setclock {i} {dt}
	end
	setclock 9 {dt*refresh_factor}

	create x1form /cell_run_control [0,50,380,500] -nolabel
	ce ^
	disable .
	create x1label "SIMULATION CONTROL PANEL" [0,0,100%,40]
	create x1button stop [2%,45,30%,] -script finish_run
	create x1button reset [7:stop.right,45,30%,] -script reset
	create x1button run [7:reset.right,45,30%,] -script runsteps
	create x1button save [2%,72,30%,] -script save_sim
	create x1button restore [7:save.right,72,30%,] -script  \
	    restore_sim
	create x1button "run paradigm" [7:restore.right,72,30%,]  \
	    -script do_paradigm
	create x1dialog nstep -script "nstep "<widget> -value 10000
	create x1dialog runtime [8,5:nstep.bottom,64%,30] -script  \
	    "runtime "<widget> -value 0.1
	create x1dialog method [4:runtime.right,5:nstep.bottom,30%,30]  \
	    -script "intmethod "<widget> -value 0
	setfield /cell_run_control/method value {user_intmethod}

	/* If we change the clock used by a script_out element to one with
	** another period, we can get commands executed different rates. 
	** Here, clock 1 starts up at 1/10 the simulation clock rate so
	** the script is executed every 10 timesteps */

	create script_out /output/refresh_out
	create disk_out /output/field_out
	disable /output/field_out
	create asc_file /output/field_aout
	disable /output/field_aout
	create disk_out /output/plot_out
	disable /output/plot_out
	setfield /output/refresh_out command get_current_time
	useclock /output/refresh_out 9
	useclock /output/field_out 9
	useclock /output/field_aout 9
	useclock /output/plot_out 9

	create x1label /cell_run_control/"TIMING (sec)"
	create x1dialog current_time -script get_current_time -value  \
	    0.000
	create x1dialog clock [2%,5:current_time.bottom,50%,30] -value  \
	    {dt} -script "setdt <widget> "
	create x1dialog refresh_factor  \
	    [7:clock.right,5:current_time.bottom,44%,30] -script  \
	    "setrefresh <widget>" -value {refresh_factor}

	setfield runtime value {user_runtime}
	setfield nstep value {user_runtime/user_dt}

	create x1label "ELECTROPHYSIOLOGY"

	create x1toggle Record [0,4:ELECTROPHYSIOLOGY.bottom,16%,]  \
	    -script "do_run_clickmode "<widget>
	create x1toggle Iclamp [16%,4:ELECTROPHYSIOLOGY.bottom,16%,]  \
	    -script "do_run_clickmode "<widget>
	create x1toggle Vclamp [32%,4:ELECTROPHYSIOLOGY.bottom,16%,]  \
	    -script "do_run_clickmode "<widget>
	create x1toggle "Syn act" [48%,4:ELECTROPHYSIOLOGY.bottom,17%,] \
	     -script "do_run_clickmode "<widget>
	create x1toggle "Syn spike"  \
	    [65%,4:ELECTROPHYSIOLOGY.bottom,18%,] -script  \
	    "do_run_clickmode "<widget>
	create x1toggle "Syn rand"  \
	    [83%,4:ELECTROPHYSIOLOGY.bottom,17%,] -script  \
	    "do_run_clickmode "<widget>

	create neutral /stimulus

	// the rand element holds the rate and weight information
	// for synaptic spike input.  The rate and weight fields are
	// aliases for the y and z fields of the element

	create neutral /stimulus/rand
	addfield /stimulus/rand rate -indirect . y
	addfield /stimulus/rand weight -indirect . z
		setfield ^ rate {user_rate} weight {user_weight}

	// The spike_on_command element is used to activate
	// synaptic channels directly when the user clicks on
	// a compartment.  We will call the SEND_SPIKE action
	// to send the spike passing the channel path as an
	// argument.  The weight is determined by the weight field
	// which is set by the user through a dialog.

	// The synactivator object is defined in synactivator.g
	// which is included above.

	create synactivator /stimulus/spike_on_command
		setfield ^ weight {user_spike}

	create x1label dummy_dialog -label "Plant or remove recording electrodes" \
	    [2%,29:ELECTROPHYSIOLOGY.bottom,96%,30]           

	create x1dialog "inject (nanoAmps)"  \
	    [2%,29:ELECTROPHYSIOLOGY.bottom,96%,30] -script  \
	    "update_inject "<widget>
	setfield "inject (nanoAmps)" value {user_inject}

	create x1dialog "Clamp voltage (mV)"  \
	    [2%,29:ELECTROPHYSIOLOGY.bottom,96%,30] -script  \
	    "set_vclamp "<widget>
	setfield "Clamp voltage (mV)" value {user_clamp}

	create x1dialog "Spike rate (Hz)"  \
	    [2%,29:ELECTROPHYSIOLOGY.bottom,48%,30] -script  \
	    "set_rand_rate "<widget>
	setfield "Spike rate (Hz)" value {user_rate}

	create x1dialog "Spike weight"  \
	    [50%,29:ELECTROPHYSIOLOGY.bottom,48%,30] -script  \
	    "set_rand_wt "<widget>
	setfield "Spike weight" value {user_weight}

	create x1dialog "Amount of synaptic activation"  \
	    [2%,29:ELECTROPHYSIOLOGY.bottom,96%,30] -script  \
	    "set_act_dummy "<widget>
	setfield "Amount of synaptic activation" value {user_activ}

	create x1dialog "Weight of spike"  \
	    [2%,29:ELECTROPHYSIOLOGY.bottom,96%,30] -script \
	    "set_synspike_wt <widget>"
	setfield "Weight of spike" value {user_spike}

	create x1dialog click_site1 -script "click_site 1" -value none
	create x1dialog click_site2 -script "click_site 2" -value none
	create x1button {user_syntype1} [2%,3:click_site2.bottom,15%,30]  \
	    -script set_syn_type1
	create x1button {user_syntype2} [18%,3:click_site2.bottom,15%,30] \
	     -script set_syn_type2
	create x1dialog "Syn Type" [34%,3:click_site2.bottom,64%,30]  \
	    -value {user_syntype1}
	create x1button "Remove all electrophysiology probes" -script  \
	    remplot
	create x1toggle "FILE IO" [0,,50%,] -script  \
	    "popup_file_io "<widget>
		setfield ^ label0 "Show Simulation IO control"  \
		    label1 "Hide Simulation IO control"
	create x1toggle toggle_xout2 [50%,0:"Remove all electrophysiology probes",50%,] -script  \
	    "show_xout2 "<widget>
		setfield ^ label0 "Show extra cell window"  \
		    label1 "Hide extra cell window"

	create x1form /file_IO [0,555,380,350] -nolabel
	ce ^
	disable .
	create x1dialog filepath
	setfield filepath value {user_filepath}
	create x1dialog save_restore_file
	setfield save_restore_file value {user_restorefile}
	create x1dialog file_index -value 0

	create x1toggle save_run_info
		setfield ^ label1 "Save run info"  \
		    label0 "Do Not Save run info"
	create x1dialog info_file -value test
	create x1dialog notes -value " "

	create x1toggle save_plot
		setfield ^ label1 "Save Plots (graph1)"  \
		    label0 "Do Not Save Plots (graph1)"
	create x1dialog plot_file -value testplot

	create x1toggle save_field [2%,4:plot_file.bottom,46%,]
		setfield ^ label1 "Save Field"  \
		    label0 "Do Not Save Field"
	create x1toggle save_type [52%,4:plot_file.bottom,46%,]
		setfield ^ label1 "Ascii" label0 "Binary"
	create x1dialog field
	setfield field value {user_filefield}
	create x1dialog field_path
	setfield field_path value {cellpath}/{user_filefieldpath}
	create x1dialog field_file
	setfield field_file value {user_filename}
end

function get_current_time
	setfield /cell_run_control/current_time value {getstat -time}
end

function nstep(widget)
str widget
	float nsteps = ({getfield {widget} value})
	setfield /cell_run_control/runtime value {nsteps*dt}
end

function runtime(widget)
str widget
	float runtime = ({getfield {widget} value})
	int nsteps

	nsteps = runtime/dt + 0.5
	setfield /cell_run_control/nstep value {nsteps}
end

function intmethod(widget)
str widget
    int imethod = ({getfield {widget} value})
    if ((imethod) == 10)
	if (!({exists {cellpath}/solve}))
            create hsolve {cellpath}/solve
            if ({user_symcomps})
                setfield {cellpath}/solve path {cellpath}/##[][TYPE=symcompartment]
            else
                setfield {cellpath}/solve path {cellpath}/##[][TYPE=compartment]
            end
            setfield {cellpath}/solve chanmode 1
            setmethod {cellpath}/solve 10
	    call {cellpath}/solve SETUP
	    echo Warning : the previous integration scheme  \
	    will still apply for non-hsolvable elements
            echo Note : a reset may be necessary
            reset
	else
            setmethod {cellpath}/solve 10
	end
    end
    if ((imethod) == 11)
	if (!({exists {cellpath}/solve}))
            create hsolve {cellpath}/solve
            if ({user_symcomps})
                setfield {cellpath}/solve path {cellpath}/##[][TYPE=symcompartment]
            else
                setfield {cellpath}/solve path {cellpath}/##[][TYPE=compartment]
            end
            setfield {cellpath}/solve chanmode 1
            setmethod {cellpath}/solve 11
	    call {cellpath}/solve SETUP
	    echo Warning : the previous integration scheme  \
	    will still apply for non-hsolvable elements
            echo Note : a reset may be necessary
            reset
	else
            setmethod {cellpath}/solve 11
	end
    end

	if ((imethod) < -1)
		echo illegal entry, setting to exponential method
		imethod = 0
		setfield /cell_run_control/method value 0
	end
	if (((imethod) != 10) && ((imethod) != 11))
		if (({exists {cellpath}/solve}))
			delete {cellpath}/solve
			echo reset may be necessary
		end
		if ((imethod) > 7)
			echo illegal entry, setting to exponential  \
			    method
		end
	end

	setmethod {cellpath}/## {imethod}
	/*
**	This is what we ought to do, but method fields are not universal
	if ({user_symcomps})
		set {cellpath}/##[][TYPE=symcompartment] method {imethod}
	else
		set {cellpath}/##[][TYPE=compartment] method {imethod}
	end
*/
end

function setrefresh(widget)
str widget
	echo setting refresh_factor to {getfield {widget} value}
	refresh_factor = ({getfield {widget} value})
	//sec : for the refresh views
	setclock 9 {({getclock 0})*refresh_factor}
end

function showtoggle(widget, form)
str widget
str form
	echo {widget} {form}
	if (({getfield {widget} state}) == 1)
		xhide {form}
	else
		xshow {form}
	end
end

function do_nothing// a dummy function

end

function setdt(widget)
str widget
str cell
int clockno, nsteps

	dt = {getfield {widget} value}
	echo setting {cell} timesteps to {dt}
	echo a reset may be necessary.
	setclock {clockno} {dt} // sec
	if (clockno == 0)
		setclock 9 {dt*refresh_factor}
	end
	nsteps = ({getfield /cell_run_control/runtime value}/dt + 0.5)
	setfield /cell_run_control/nstep value {nsteps}
end

function run_func
	source cellparms.g
end

/*
function run_para
	set dummy_para script {get(paradigm_file,value)}


	if (strcmp({get(paradigm_file,value)},"cellparms") == 0)
		cellparms
		return
	end
	if (strcmp({get(paradigm_file,value)},"para1") == 0)
		para1
		return
	end
	if (strcmp({get(paradigm_file,value)},"para2") == 0)
		para2
		return
	end
	// Default op is to step as many as specified
	nstep /cell_run_control/nstep
end
*/

str info_file
str plot_file
str field_file

function start_run
	pushe /file_IO

	info_file = ({getfield filepath value}) @ "/" @ ({getfield info_file value}) @ ({getfield file_index value})
	plot_file = ({getfield filepath value}) @ "/" @ ({getfield plot_file value}) @ ({getfield file_index value})
	field_file = ({getfield filepath value}) @ "/" @ ({getfield field_file value}) @ ({getfield file_index value})

	if (({getfield save_run_info state}) == 1)
		echo saving run info in {info_file}
		openfile {info_file} "a"
		writefile {info_file}
		writefile {info_file} {getdate}
		/*
		writefile {info_file} paradigm : {get(paradigm_file,value)}
		*/
		writefile {info_file} Cell input res =  \
		    {calcRm {cellpath}/soma}
		writefile {info_file} Approx Cell cap =  \
		    {calcCm {cellpath}}
		writefile {info_file} notes : {getfield notes value}
		writefile {info_file}
    	if (({getfield save_plot state}) == 1)
        	writefile {info_file} storing plots in {plot_file}
    	end

    	if (({getfield save_field state}) == 1)
        	writefile {info_file} storing field  \
        	    '{getfield field value}' in {field_file}
    	end
	end

	/* \
	     This makes the data go to a new file with the new header info.
	** It should overwrite existing files with the same name, so
	** beware ! */
	if (({getfield save_plot state}) == 1)
		enable /output/plot_out
		setfield /output/plot_out filename {plot_file}  \
		    initialize 1
	end

	if (({getfield save_field state}) == 1)
		if (({getfield save_type state}) == 1)
			enable /output/field_aout
			setfield /output/field_aout  \
			    filename {field_file} initialize 1
			call /output/field_aout RESET
		else
			enable /output/field_out
			setfield /output/field_out filename {field_file} \
			     initialize 1
			call /output/field_out RESET
		end
	end

	pope
end

function make_output_messages
	str name
	str field
	str src
	int nmsgs
	int i

	pushe /file_IO
	if (({getfield save_plot state}) == 1)

		setfield /output/plot_out filename {plot_file} append 1  \
		    leave_open 1
		nmsgs = {getmsg {cellpath}graph1/graph -incoming -count}

		for (i = 0; i < nmsgs; i = i + 1)
			src = {getmsg {cellpath}graph1/graph -incoming -source {i}}
			addmsg {src} /output/plot_out SAVE Vm
		end
		// look at all messages going to the graph, and send them to
		// a file as well

		// openfile {plot_file} "a"
	end

	if (({getfield save_field state}) == 1)
		field = ({getfield field value})
		if (({getfield save_type state}) == 1)
			setfield /output/field_aout  \
			    filename {field_file} append 1 leave_open 1  \
			    flush 1
		else
			setfield /output/field_out filename {field_file} \
			     append 1 leave_open 1 flush 1
		end

		foreach name ({el {getfield field_path value}})
			if (({getfield save_type state}) == 1)
				addmsg {name} /output/field_aout SAVE  \
				    {field}
			else
				addmsg {name} /output/field_out SAVE  \
				    {field}
			end
		end
		reset
	end
	pope
end

function finish_run
	pushe /file_IO

	stop

	if (({getfield save_run_info state}) == 1)
		closefile {info_file}
	end
	pope
	disable /output/field_out
	disable /output/field_aout
	disable /output/plot_out
end

function clean_output_messages
	int nmsgs, i
	pushe /file_IO
	/* Getting rid of the messages */
	if (({getfield save_plot state}) == 1)
		nmsgs = {getmsg /output/plot_out -incoming -count}
		for (i = 0; i < nmsgs; i = i + 1)
			deletemsg /output/plot_out  0 -incoming
		end
	end

	if (({getfield save_field state}) == 1)
		if (({getfield save_type state}) == 1)
			nmsgs = {getmsg /output/field_aout -incoming -count}
			for (i = 0; i < nmsgs; i = i + 1)
				deletemsg /output/field_aout  0  \
				    -incoming
			end
		else
			nmsgs = {getmsg /output/field_out -incoming -count}
			for (i = 0; i < nmsgs; i = i + 1)
				deletemsg /output/field_out  0 -incoming
			end
		end
	end
	pope
end

function do_dummy
	click_site 1
end

function set_rand_rate(widget)
	setfield /stimulus/rand rate {getfield {widget} value}
end

function set_rand_wt(widget)
	setfield /stimulus/rand weight {getfield {widget} value}
end

function set_synspike_wt(widget)
	setfield /stimulus/spike_on_command weight {getfield {widget} value}
end

function do_run_clickmode(widget)
	str widget

	str widgname = {getfield {widget} name}
	int n
	str num, draww

	ce /cell_run_control
	if (({getfield Record state}) == 1)
		setfield Record state 0
	end
	if (({getfield Iclamp state}) == 1)
		setfield Iclamp state 0
	end
	if (({getfield Vclamp state}) == 1)
		setfield Vclamp state 0
	end
	if (({getfield "Syn act" state}) == 1)
		setfield "Syn act" state 0
	end
	if (({getfield "Syn spike" state}) == 1)
		setfield "Syn spike" state 0
	end
	if (({getfield "Syn rand" state}) == 1)
		setfield "Syn rand" state 0
	end
	setfield {widget} state 1

	for (n = 1; n <= 2; n = n + 1)
		num = n
		draww = (cellpath) @ "xout" @ (num) @ "/draw"
		if ({strcmp {widgname} "Record"} == 0)
			select_mouse {draww} add_plot "add_plot "{num}  \
			    drop_plot "drop_plot "{num} dummy do_dummy
			xraise  dummy_dialog
		end
		if ({strcmp {widgname} "Iclamp"} == 0)
			select_mouse {draww} inject "do_inject "{num}  \
			    unject "clear_inject "{num} dummy do_dummy
			xraise "inject (nanoAmps)"
		end
		if ({strcmp {widgname} "Vclamp"} == 0)
			select_mouse {draww} Vclamp "do_vclamp "{num}  \
			    unclamp "clear_vclamp "{num} dummy do_dummy
			xraise "Clamp voltage (mV)"
		end
		if ({strcmp {widgname} "Syn act"} == 0)
			xraise "Amount of synaptic activation"
			select_mouse {draww} SynAct "do_act "{num} UnAct \
			     "do_unact "{num} dummy do_dummy
		end
		if ({strcmp {widgname} "Syn spike"} == 0)
			xraise /cell_run_control/"Weight of spike"
			select_mouse {draww} SynSpike "do_spike "{num}  \
			    UnSpike "do_unspike "{num} dummy do_dummy
		end
		if ({strcmp {widgname} "Syn rand"} == 0)
			xraise /cell_run_control/"Spike rate (Hz)"
			xraise /cell_run_control/"Spike weight"
			select_mouse {draww} RandSyn "do_rand "{num}  \
			    UnRand "do_unrand "{num} dummy do_dummy
		end
	end
end


function set_act_dummy(widget)
	str widget

	int n
	float act
	str compt, channame, iname, num

	for (n = 1; n <= user_numxouts; n = n + 1)
		num = n
		compt = {getfield {cellpath}xout{num}/draw value}
		channame = {getfield /cell_run_control/"Syn Type" value}
		iname = {getfield {compt} name} @ {getfield {compt} index}
		act = {getfield {widget} value}
		if ( \
		    {exists {cellpath}xout{num}/draw/act{channame}{iname}/dummy} \
		    )
		 setfield  \
		     {cellpath}xout{num}/draw/act{channame}{iname}/dummy \
		      z {act}
		end
	end
end

function remplot
	int nmsgs, i, n
	str name, num

	for (n = 1; n <= user_numxouts; n = n + 1)
		num = n
		nmsgs = {getmsg {cellpath}graph{num}/graph -incoming -count}
		for (i = 0; i < nmsgs; i = i + 1)
			deletemsg {cellpath}graph{num}/graph  0  \
			    -incoming
		end
		foreach name ({el {cellpath}xout{num}/draw/Tr#})
			delete {name}
		end
		foreach name ({el {cellpath}xout{num}/draw/Inj#})
			delete {name}
		end
		foreach name ({el {cellpath}/#[]/Vclamp#})
			delete {name}
		end
		foreach name ({el {cellpath}xout{num}/draw/rand#})
			delete {name}
		end
		// This seems to be wrong! ---dhb
		//delete /stimulus/axon:0
		foreach name ({el {cellpath}xout{num}/draw/act#})
			delete {name}
		end
		xupdate {cellpath}xout{num}/draw
	end
	if ((user_symcomps))
		foreach name ({el {cellpath}/##[TYPE=symcompartment]})
			setfield {name} inject 0.0
		end
	else
		foreach name ({el {cellpath}/##[TYPE=compartment]})
			setfield {name} inject 0.0
		end
	end
	echo removed all electrophysiology probes
end

function update_inject(widget)
	str widget

	if (({strcmp {lastinjectsite1} "none"}) != 0)
	    setfield {lastinjectsite1}  \
	        inject {{getfield {widget} value}/1.0e9}
	    echo  \
	        "setting injection on "{lastinjectsite1}" to "{getfield {widget} value}" nA"
	end
	if (({strcmp {lastinjectsite2} "none"}) != 0)
	    setfield {lastinjectsite2}  \
	        inject {{getfield {widget} value}/1.0e9}
	    echo  \
	        "setting injection on "{lastinjectsite2}" to "{getfield {widget} value}" nA"
	end
end

function set_vclamp(widget)
	str widget
	float temp = {getfield {widget} value}
	str draww, iname

	draww = cellpath @ "xout1/draw"
	if (lastinjectsite1 != "none")
		iname = {getfield {lastinjectsite1} name} @ {getfield {lastinjectsite1} index}
		if ({exists {draww}/Vclamp{iname}})
			temp = temp/1.0e3
			/*
			set {draww}/Vclamp{iname}/Vclamp x {temp}
			*/
			setfield {lastinjectsite1}/Vclamp x {temp}
		end
	end
	draww = cellpath @ "xout2/draw"
	if (lastinjectsite2 != "none")
		iname = {getfield {lastinjectsite2} name} @ {getfield {lastinjectsite2} index}
		if ({exists {draww}/Vclamp{iname}})
			temp = temp/1.0e3
			/*
			set {draww}/Vclamp{iname}/Vclamp x {temp}
			*/
			setfield {lastinjectsite2}/Vclamp x {temp}
		end
	end
end

function runsteps
	echo doing {getfield /cell_run_control/nstep value} steps
	start_run
	make_output_messages
	resched
	step {getfield /cell_run_control/nstep value}
	finish_run
	clean_output_messages
	echo finished {getfield /cell_run_control/nstep value} steps
end

function set_syn_type1
	setfield /cell_run_control/"Syn Type" value {user_syntype1}
end

function set_syn_type2
	setfield /cell_run_control/"Syn Type" value {user_syntype2}
end

function show_xout2(widget)
	str widget

	if (({getfield {widget} state}) == 0)
    	disable {cellpath}graph2
    	disable {cellpath}xout2
    	xhide {cellpath}xout2
    	xhide {cellpath}graph2
		setfield {cellpath}xout1 width 600
		setfield {cellpath}graph1 width 600
		user_numxouts = 1
	else
		setfield {cellpath}xout1  \
		    width {(user_screenwidth - 380)/2}
		setfield {cellpath}graph1  \
		    width {(user_screenwidth - 380)/2}
    	enable {cellpath}graph2
    	enable {cellpath}xout2
    	xshowontop {cellpath}xout2
    	xshowontop {cellpath}graph2
		user_numxouts = 2
	end
end

function popup_file_io(widget)
	str widget
	if (({getfield {widget} state}) == 0)
		xhide /file_IO
	else
		xshowontop /file_IO
	end
end

function save_sim
	str  \
	    file_name = ({getfield /file_IO/save_restore_file value}) @ ({getfield /file_IO/file_index value})

	save {getfield /file_IO/field_path value}  {file_name}

end

function restore_sim
	str  \
	    file_name = ({getfield /file_IO/save_restore_file value}) @ ({getfield /file_IO/file_index value})

	restore  {file_name}
end