Firing patterns in stuttering fast-spiking interneurons (Klaus et al. 2011)

 Download zip file 
Help downloading and running models
Accession:140254
This is a morphologically extended version of the fast-spiking interneuron by Golomb et al. (2007). The model captures the stuttering firing pattern and subthreshold oscillations in response to step current input as observed in many cortical and striatal fast-spiking cells.
Reference:
1 . Klaus A, Planert H, Hjorth J, Berke JD, Silberberg G, Kotaleski JH (2011) Striatal fast-spiking interneurons: from firing patterns to postsynaptic impact Front. Syst. Neurosci.
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): Neostriatum fast spiking interneuron;
Channel(s): I Na,t; I K; I A, slow;
Gap Junctions: Gap junctions;
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: GENESIS; PGENESIS;
Model Concept(s): Activity Patterns; Stuttering;
Implementer(s): Klaus, Andreas ;
Search NeuronDB for information about:  I Na,t; I K; I A, slow;
/**
 * This methods runs the simulation for the time specified by 'duration' (in seconds).
 *
 */
function runCurrentInj(duration)
	float duration
	
	check
    reset
    reset
    step {{duration} / {getclock 0}}
end

function createOutput(protocolname, channel0, channel1)
	
	/* Create a temporary directory if not existent. */
    if ({exists /tmp} != 1)
        create neutral /tmp
    end
    
    /* Channel 0: current steps. */
    create asc_file /tmp/plotIVchan0
    setfield /tmp/plotIVchan0 filename "./output/"{protocolname}"_ch"{channel0}".dat"
    useclock /tmp/plotIVchan0 1

    /* Channel 1: voltage responses. */
    create asc_file /tmp/plotIVchan1
    setfield /tmp/plotIVchan1 filename "./output/"{protocolname}"_ch"{channel1}".dat"
    useclock /tmp/plotIVchan1 1
end

/**
 * Delete the temporary output elements.
 */
function deleteOutput
	delete /tmp/plotIVchan0
    delete /tmp/plotIVchan1
end


/**
 * ...
 */
function currentInj(comppath, path, level, scale, delay, duration)
    str comppath
    str path
    float level
    float scale
    float delay
    float duration
    
    if ({exists {path}} == 1)
        return
    end
    create pulsegen {path}
    setfield {path} level1 {{scale} * {level}}  delay1 {delay}  width1 {duration} \
                    level2 0.0                  delay2     0.0  width2     3600.0 \
                    baselevel 0.0 trig_mode 0
    
    create neutral {path}/level
    setfield {path}/level x {level}
    
    addmsg {path} {comppath} INJECT output
end

/**
 * Starts at 100 pA and increases with 
 *
 */
function runTesteCode(cellpath, scale)
	str   cellpath
    float scale

	float level    = {scale} * 100.0e-12 // Scale the default value of 100 pA.
	float stepsize = {level} *   0.2     // The step size is one-fifth.

    createOutput "TesteCode" 0 1
    
    /* Create one copy for each step. */
    int n
    for (n = 0; n < 5; n = n + 1)
        echo "n = "{n}
        
        copy {cellpath} /tmp/neuron[{n}]
        
        currentInj /tmp/neuron[{n}]/soma /tmp/cinj[{n}] {level} 1.0 0.1 0.5
        level = {level} + {stepsize}
        echo "Level = "{level}
        
        addmsg /tmp/cinj[{n}]        /tmp/plotIVchan0 SAVE output
        addmsg /tmp/neuron[{n}]/soma /tmp/plotIVchan1 SAVE Vm
    end
    
    /* Run the protocol (0.7 s total). */
    runCurrentInj 0.7
    
    /* Clean-up. */
    for (n = 0; n < 5; n = n + 1)
        delete /tmp/neuron[{n}]
        delete /tmp/cinj[{n}]
        echo "Delete temporary elements (n = "{n}")"
    end
    
    deleteOutput
end

/**
 * This function runs short (50 ms) steps of high amplitude.
 * Steps are 400, 450, ..., 650, 700 pA
 * cellpath is the path to the cell in which current is injected somatically
 * maxlevel is the maximal current amplitude
 */
function runAPWaveform(cellpath, scale)
	str   cellpath
    float scale
    
    float level    = {scale} * 200.0e-12 // Scale the default value of 200 pA.
    float stepsize = {level} / 6.0       // The step size is one sixth.
    
    createOutput "APWaveform" 0 1
    
    /* Create one copy for each step. */
    int n
    for (n = 0; n < 11; n = n + 1)
        echo "n = "{n}
        
        copy {cellpath} /tmp/neuron[{n}]
        
        currentInj /tmp/neuron[{n}]/soma /tmp/cinj[{n}] {level} 1.0 0.005 0.05
        level = {level} + {stepsize}
        echo "Level = "{level}
        
        addmsg /tmp/cinj[{n}]        /tmp/plotIVchan0 SAVE output
        addmsg /tmp/neuron[{n}]/soma /tmp/plotIVchan1 SAVE Vm
    end
    
    
    runCurrentInj 0.08
    
    /* Clean-up. */
    for (n = 0; n < 11; n = n + 1)
        delete /tmp/neuron[{n}]
        delete /tmp/cinj[{n}]
    end
    
    deleteOutput
end

/**
 * ...
 */
function currentInjFixDur(comppath, path, level, scale)
    str comppath
    str path
    float level
    float scale
    
    if ({exists {path}} == 1)
        return
    end
    create pulsegen {path}
    setfield {path} level1 {{scale} * {level}} delay1 0.1 width1 1.0 level2 0.0 delay2 0.0 width2 100.0 baselevel 0.0 trig_mode 0
    
    create neutral {path}/level
    setfield {path}/level x {level}
    
    addmsg {path} {comppath} INJECT output
end

/**
 * Run different steps of somatic current injection (1 sec).
 * cellpath is the path to the cell in which current is injected somatically (e.g. /fsn[0])
 * level is the amount of current to be injected at 100%. Current steps are testet for -280..160%.
 */
function runIV(cellpath, level)
    str cellpath
    float level

    /* Create a temporary directory if not existent. */
    if ({exists /tmp} != 1)
        create neutral /tmp
    end
    
    /* Channel 0: current steps. */
    create asc_file /tmp/plotIVchan0
    setfield /tmp/plotIVchan0 filename "./output/IVchan0.dat"
    useclock /tmp/plotIVchan0 1

    /* Channel 1: voltage responses. */
    create asc_file /tmp/plotIVchan1
    setfield /tmp/plotIVchan1 filename "./output/IVchan1.dat"
    useclock /tmp/plotIVchan1 1

    /* Create one copy for each step. */
    int n
    for (n = 0; n < 12; n = n + 1)
        echo "n = "{n}
        copy {cellpath} /tmp/fsn[{n}]
        currentInjFixDur /tmp/fsn[{n}]/soma /tmp/cinj[{n}] {level} {{{n}/2.5}-2.8}
        addmsg /tmp/cinj[{n}]     /tmp/plotIVchan0 SAVE output
        addmsg /tmp/fsn[{n}]/soma /tmp/plotIVchan1 SAVE Vm
    end
    
    /* Run the protocol (1.2 sec total). */
    check
    reset
    reset
    step {1.2/{getclock 0}}

    /* Clean-up. */
    for (n = 0; n < 12; n = n + 1)
        delete /tmp/fsn[{n}]
        delete /tmp/cinj[{n}]
    end
    delete /tmp/plotIVchan0
    delete /tmp/plotIVchan1
end


function setInj(path, level1)
    str path
    float level1

    setfield {path}       level1 {level1}
    setfield {path}/level x      {level1}
end

function scaleInj(path, scale)
    str path
    float scale
    setfield {path} level1 {{scale} * {getfield {path}/level x}}
    echo "Level1: "{getfield {path} level1}
end

/**
 * Run different steps of somatic current injection to test the frequency
 * response of the neuron. The stimulus should evoke sub- and superthreshold
 * responses.
 */
function runIDrest(cellpath, level)
    str cellpath
    float level

    /* Create a temporary directory if not existent. */
    if ({exists /tmp} != 1)
        create neutral /tmp
    end
    
    /* Channel 0: current steps. */
    create asc_file /tmp/plotIVchan0
    setfield /tmp/plotIVchan0 filename "./output/IDrestchan0.dat"
    useclock /tmp/plotIVchan0 1

    /* Channel 1: voltage responses. */
    create asc_file /tmp/plotIVchan1
    setfield /tmp/plotIVchan1 filename "./output/IDrestchan1.dat"
    useclock /tmp/plotIVchan1 1

    int n
    for (n = 0; n <= 11; n = n + 1)
        copy {cellpath} /tmp/fsn[{n}]
        currentInjFixDur /tmp/fsn[{n}]/soma /tmp/cinj[{n}] {level} {{{n}/2.5} + 1.2}
        setfield /tmp/cinj[{n}] width1 2.0

        addmsg /tmp/cinj[{n}]     /tmp/plotIVchan0 SAVE output
        addmsg /tmp/fsn[{n}]/soma /tmp/plotIVchan1 SAVE Vm
    end

    /* Run the protocol (1.2 sec total). */
    check
    reset
    reset
    step {2.2/{getclock 0}}

    /* Clean-up. */
    for (n = 0; n <= 11; n = n + 1)
        delete /tmp/fsn[{n}]
        delete /tmp/cinj[{n}]
    end
    delete /tmp/plotIVchan0
    delete /tmp/plotIVchan1
end

Loading data, please wait...