Simulations of motor unit discharge patterns (Powers et al. 2011)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:143671
" ... To estimate the potential contributions of PIC (Persistent Inward Current) activation and synaptic input patterns to motor unit discharge patterns, we examined the responses of a set of cable motoneuron models to different patterns of excitatory and inhibitory inputs. The models were first tuned to approximate the current- and voltage-clamp responses of low- and medium-threshold spinal motoneurons studied in decerebrate cats and then driven with different patterns of excitatory and inhibitory inputs. The responses of the models to excitatory inputs reproduced a number of features of human motor unit discharge. However, the pattern of rate modulation was strongly influenced by the temporal and spatial pattern of concurrent inhibitory inputs. Thus, even though PIC activation is likely to exert a strong influence on firing rate modulation, PIC activation in combination with different patterns of excitatory and inhibitory synaptic inputs can produce a wide variety of motor unit discharge patterns."
Reference:
1 . Powers RK, Elbasiouny SM, Rymer WZ, Heckman CJ (2012) Contribution of intrinsic properties and synaptic inputs to motoneuron discharge patterns: a simulation study. J Neurophysiol 107:808-23 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell;
Brain Region(s)/Organism:
Cell Type(s): Spinal cord lumbar motor neuron alpha ACh cell;
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Activity Patterns; Bursting; Action Potentials;
Implementer(s): Powers, Randy [rkpowers at u.washington.edu];
Search NeuronDB for information about:  Spinal cord lumbar motor neuron alpha ACh cell;
/
PowersEtAl2012
code
Gfluctdv.mod *
ghchan.mod *
kca2.mod *
kdrRL.mod *
L_Ca.mod *
mAHP.mod *
na3rp.mod *
naps.mod *
synss.mod
ana_FI.hoc
ana_G.hoc
ana_passive.hoc
ana_vc.hoc
ana_vc_synss.hoc
AP_AHP.ses
FIgraph.hoc
FRcablepas.hoc
FRmnrampcc.ses
FRmnrampvc_synss.ses
FRMotoneuronNaHH.hoc
gramp.ses
GUI_FR_analysis.hoc
inhibdist
makebiramp.hoc *
passive.ses
RecActive.hoc
re-init.hoc
SetConductances.hoc
test.hoc
twobirampsdel.hoc *
vramp
vrampdel
vrampdel.hoc
                            
/************************************************************************
 * FILE GUI_FR_analysis.hoc
 *
 * GUI for analyzing motoneuron properties
 ************************************************************************/
 
{xpanel("FR motoneuron control panel")}

{	strdef FRchoice, anaChoice}
	// Use this menu to select one of the model cell parameter sets
{	xvarlabel(FRchoice)}
{	xbutton("pick a file", "chooseCell\(\)")}
{	xmenu()}
	
{	xvarlabel(anaChoice)}
{	xmenu("Choose analysis")}
{		xbutton("passive", "assign_ana\(\"passive\"\)")}
{		xbutton("AP/AHP", "assign_ana\(\"AP/AHP\"\)")}
{		xbutton("FI", "assign_ana\(\"FI\"\)")}
{		xbutton("IV", "assign_ana\(\"IV\"\)")}
//{		xbutton("G ramp", "assign_ana(\"G\")")}
{	xmenu()}
{	xbutton("GO", "run_ana\(ana\)")}

{xpanel()}

// PROC assign_model() begin
// user selected a cell file from the GUI
strdef model
proc assign_model() {
    if (numarg() < 1) {
	print "assign_model(): missing model cell argument"
    }
    model = $s1
    printf("model = %s\n", model)
    sprint(FRchoice, "Cell: %s", model)
}
// PROC assign_model() end

// PROC ramp_suggestions() begin
proc ramp_suggestions() {
    print "Suggested parameters for current clamp ramp:"
    print "Cell\tFRvar61\tFRv61lt\tFRv61ht\tFRv61B\tFRv61BltFRv61Bht"
    print "V0\t-5\t-10\t5\t-5\t-10\t5"
    print "SLOPE\t0.006\t0.006\t0.006\t0.006\t0.006\t0.006"
    print "TR\t10000\t10000\t10000\t10000\t10000\t10000\n"
}
// PROC ramp_suggestions() end

// PROC assign_ana() begin
// called from menu selection on top level GUI
strdef ana
proc assign_ana() {
    if (numarg() < 1) {
	print "assign_ana(): missing analyze type argument"
    }
    // show user suggested values for the popup window
    ramp_suggestions()
    ana = $s1
    printf("ana = %s\n", ana)
    sprint(anaChoice, "Analyze: %s", ana)
    if (strcmp(ana,"FI")==0) {
	xpanel("FI current clamp parameters")
	xvalue("Baseline current, I0", "V0", 1, "print \"V0=\",V0")
	xvalue("Ramp rate, SLOPE", "SLOPE", 1, "print \"SLOPE=\",SLOPE")
	xvalue("Time of ramp, TR", "TR", 1, "print \"TR=\",TR")
	xpanel()
    }
    if (strcmp(ana,"IV")==0) {
	xpanel("With or Without Synaptic Activity?")
	xcheckbox("enable synaptic input", &mult_synss)
	xpanel()
    }
}
// PROC assign_ana() end

// initial assignments for ramp parameters
// NOTE that V0 is used for current, in cc mode
{V0=0}
{SLOPE=.006}	// low threshold cells may need lower SLOPE, like .004, to keep firing
{TR=10000}

// PROC run_ana() begin
// hit the go button to get this procedure to run
proc run_ana() {
    if (numarg() < 1) {
	print "run_ana(): missing analyze type argument"
    }
    ana = $s1
    if (strcmp(ana,"passive") == 0) {
	{ana_passive(model)}
    }
    
    if (strcmp(ana,"AP/AHP") == 0) {
	{ana_AP_AHP(model)}
    }
    
    if (strcmp(ana,"FI") == 0) {
	{ana_FI(model)}
    }

    if (strcmp(ana,"IV") == 0) {
        {ana_IV(model)}
    }
 
    if (strcmp(ana,"G") == 0) {
        {ana_G(model)}
    }
 
}
// PROC run_ana() end

// Assign default values; these are countermanded by user setting via the GUI
assign_model("<pending>")
assign_ana("passive")

/***********************************************
 * PROC chooseCell()
 *
 * pick a model using GUI
 ***********************************************/
 
strdef chosenCell, bn, dir
objref myCell, strobj

proc chooseCell() {
    chdir(start_dir)
    objref myCell, strobj
    myCell = new File()
    myCell.chooser("r", "browse to cell", "*.hoc", "click to pick", "Exit", start_dir)
    while (myCell.chooser()) {
	myCell.getname(chosenCell)
    }
    printf("Chosen cell is %s\n", chosenCell)
    printf("directory\n%s\n", getcwd())
    
    // chosenCell now contains the relative path to the selected file
    strobj = new StringFunctions()
    bnloc = strobj.tail(chosenCell, ".*/", bn)
    // bn now contains the basename of the chosen file
    strobj.left(chosenCell, bnloc)
    // chosenCell now contains the relative directory location of the file
    printf("bn = %s, bnloc = %s\n", bn, chosenCell)
    
    chdir(chosenCell)
    assign_model(bn)
}
/*******************************
 * END chooseCell()
 *******************************/