Auditory cortex layer IV network model (Beeman 2013)

 Download zip file 
Help downloading and running models
"... The primary objective of this modeling study was to determine the effects of axonal conduction velocity (often neglected, but significant), as well as synaptic time constants, on the ability of such a network to create and propagate cortical waves. ... The model is also being used to study the interaction between single and two-tone input and normal background activity, and the effects of synaptic depression from thalamic inputs. The simulation scripts have the additional purpose of serving as tutorial examples for the construction of cortical networks with GENESIS. The present model has fostered the development of the G-3 Python network analysis and visualization tools used in this study... It is my hope that this short tutorial and the example simulation scripts can provide a head start for a graduate student or postdoc who is beginning a cortical modeling project. "
1 . Beeman D (2013) A modeling study of cortical waves in primary auditory cortex BMC Neuroscience 14(Supl 1):P23
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network;
Brain Region(s)/Organism: Auditory cortex;
Cell Type(s): Neocortex V1 pyramidal corticothalamic L6 cell; Neocortex V1 interneuron basket PV cell;
Gap Junctions:
Simulation Environment: GENESIS;
Model Concept(s): Activity Patterns; Tutorial/Teaching;
Implementer(s): Beeman, Dave;
Search NeuronDB for information about:  Neocortex V1 pyramidal corticothalamic L6 cell; Neocortex V1 interneuron basket PV cell;
    A GENESIS GUI for providing inputs to an auditory cortex model

//      Function Definitions

// Display the parameters for the specified input
function show_params(input_num)
    str control_form = "/input_control"
    int input_num, row_num
    setfield {control_form}/input_num value {input_num}
    float frequency, delay, width, interval
    str pulse_src = {input_source} @ "[" @ {input_num} @ "]" @ "/spikepulse"
    str spike_out = {input_source} @ "[" @ {input_num} @ "]" @ "/soma/spike"
     // this assumes set_pulse_params has been called so that abs_refract != 0
    row_num = {getfield {{input_source} @ "[" @ {input_num} @ "]"} input_row}
    setfield {control_form}/targ_row value {row_num}
    frequency = {getfield {{input_source} @ "[" @ {input_num} @ "]"} input_freq}
    setfield {control_form}/spikefreq value {frequency}
    delay = {getfield {pulse_src} delay1 }
    float width = {getfield {pulse_src} width1}
    interval = {getfield {pulse_src} delay1} \
        + {getfield {pulse_src} delay2}
    setfield {control_form}/pulse_delay value {delay}
    setfield {control_form}/pulse_width value {width}
    setfield {control_form}/interval value {interval}

    // Set the spiketoggle state
    int toggle_state = 0
    if ({getfield {pulse_src} level1} > 0.5)
        toggle_state = 1
    setfield {control_form}/spiketoggle state {toggle_state}

    // set the Spike train weight dialog from the output_weight field
    setfield {control_form}/st_weight value \ 
       {getfield {{input_source} @ "[" @ {input_num} @ "]"} output_weight }
    //  This is an ugly hack to make sure that the main form gets input_num
    //  It assumes that there is an xdialog control/show_params 
    setfield /control/show_params value {input_num}
    xshow {control_form}

function decr_input_num
    str form = "/input_control"
    int input_num
    input_num = {getfield {form}/input_num value}
    if ({input_num} > 1)
        input_num = input_num - 1
    show_params {input_num}

function incr_input_num
    str form = "/input_control"
    int input_num
    input_num = {getfield {form}/input_num value}
    if ({input_num} < {Ninputs})
        input_num = input_num + 1
    show_params {input_num}

function set_spike_pulse
   str form = "/input_control"
   int input_num
   input_num = {getfield {form}/input_num value}
   float frequency, delay, width, interval
   frequency = {getfield {form}/spikefreq value}
   delay = {getfield {form}/pulse_delay value}
   width = {getfield {form}/pulse_width value}
   interval = {getfield {form}/interval value}
   set_pulse_params {input_num} {frequency} {delay} {width} {interval}
   echo "Spike frequency = "{frequency}
   echo "Pulse delay = "{getfield {form}/pulse_delay value}" sec"
   echo "Pulse width = "{getfield {form}/pulse_width value}" sec"
   echo "Pulse interval = "{getfield {form}/interval value}" sec"

function spike_toggle // toggles spike train ON/OFF for given input
    str form = "/input_control"
    int input_num
    input_num = {getfield {form}/input_num value}
    if ({getfield {form}/spiketoggle state} == 1)
        setfield {input_source}[{input_num}]/spikepulse level1 1.0  // ON
        setfield {input_source}[{input_num}]/spikepulse level1 0.0  // OFF

function set_input_weight
   str form = "/input_control"
   int input_num
   input_num = {getfield {form}/input_num value}
   float weight
   weight = {getfield {form}/st_weight value}
   set_spiketrain_weight {input_num} {weight}

function set_input_delays_from_GUI
    str form = "/input_control"
    // Set the global values from the values in the form
    input_delay = {getfield {form}/input_delay value}
    input_jitter = {getfield {form}/input_jitter value}
    // check range of jitter value
    if ((input_jitter < 0.0) || (input_jitter > 1.0))
        echo "jitter must be >= 0, and <= 1.0"
        input_jitter = 0.0
        setfield {form}/input_jitter value {input_jitter}
    set_input_delays {input_delay} {input_jitter}
//    Functions to create the Graphical User Interface

function make_input_control
    int control_height = 520
    create xform /input_control [0,{35 + control_height},270,345]
    pushe /input_control
    create xlabel spikeparms -label "Parameters for inputs 1 - "{Ninputs}

    create xbutton less -label " < " -wgeom 20%  -script decr_input_num
    create xdialog input_num -xgeom 0:less -ygeom 0:spikeparms -wgeom 60% \
        -label "Input:" -value 1 -script "show_params <v>"
    create xbutton more -label " > " -wgeom 20% -xgeom 0:input_num \
        -ygeom 0:spikeparms -script incr_input_num
    create xtoggle spiketoggle -label "" -script spike_toggle
    setfield spiketoggle offlabel "Spike Train OFF"  state 0
    setfield spiketoggle onlabel "Spike Train ON"
    spike_toggle     // initialize
    create xdialog targ_row -label "Target Row" -value 0
    create xdialog st_weight -label "Spike train weight" \
        -value 1.0  -script "set_input_weight"
    create xdialog spikefreq -label "Input freq" -value {spikefreq} \
        -script "set_spike_pulse"
    create xdialog pulse_delay -label "Delay (sec)" \
         -value {pulse_delay}   -script "set_spike_pulse"
    create xdialog pulse_width -label "Width (sec)" \
        -value {pulse_width}  -script "set_spike_pulse"
    create xdialog interval -label "Interval (sec)" -value {pulse_interval} \
        -script "set_spike_pulse"
    // The delay and jitter are set globally for all MGBv connections
    create xdialog input_delay -label "Input delay" -value {input_delay} \
        -script "set_input_delays_from_GUI"
    create xdialog input_jitter -label "Input jitter" -value {input_jitter} \
        -script "set_input_delays_from_GUI"

    create xbutton DISMISS -script "xhide /input_control"
    // Initialize values for input 1
    show_params 1
    xshow /input_control

function make_MGBv_Vmgraph
    str form = "/MGBv_Vm"
    float vmin = -0.075
    float vmax = 0.125
    create xform {form} [1048,0,400,250]
    create xgraph {form}/voltage -hgeom 100% \
        -title "MGBv_cell Membrane Potential" -bg white 
    setfield ^ XUnits sec YUnits V
    setfield ^ xmax {tmax} ymin {vmin} ymax {vmax}
    makegraphscale {form}/voltage
    xshow {form}

Loading data, please wait...