RSnet.g.txt

Click here to get the file

Size 6.8 kB - File type text/plain

File contents

//genesis  -  RSnet.g                                
/*======================================================================
  A network of simplified Regular Spiking neocortical neurons
  with local excitatory connections
  ======================================================================*/

/* Customize these strings and parameters to modify this simulation for
   another cell.
*/

str cellfile = "RScell.p"  // name of the cell parameter file
str synpath = "soma/Ex_channel" // compartment-name/synchan-name
// Label to appear on the graph
str graphlabel = "Network of simplified cortical pyramidal cells"

float tmax = 0.5		// simulation time
float dt = 50e-6		// simulation time step

float SEP_X = 0.001 // 1 mm
float SEP_Y = 0.001  // Scripts/piriform simulation uses 0.00067
int NX = 25  // number of cells = NX*NY
int NY = NX

/* parameters for synaptic connections */
float cond_vel = 0.5 // m/sec - or 2 msec for nearest neighbors
float prop_delay = SEP_X/cond_vel
float syn_weight = 10 // synaptic weight, effectively multiplies gmax
float gmax = 1e-9 // 1 nS - possibly a little small for this cell
float tau = 0.003

// index of middle cell (or approximately, if NX, NY are even)
int middlecell = {round {(NY-1)/2}}*NX + {round {(NX -1)/2}}
int InjCell = middlecell // default current injection point
// default (initial) parameters for current injection

float injwidth = 0.05 // 50 msec
// for constant injection, use injwidth >= tmax
float injdelay = 0
float injinterval = 1
float injcurrent = 1.0e-9

/* for debugging and exploring - see comments in file for details
   Usage:   synapse_info path_to_synchan
   Example: synapse_info /network/cell[5]/Ex_channel
*/
include synapseinfo.g

// =============================
//   Function definitions
// =============================

function step_tmax
    echo {NX*NY}" cells    dt = "{getclock 0}"   tmax = "{tmax}
    echo "START: " {getdate}
    step {tmax} -time
    echo "END  : " {getdate}
end

function set_weights(weight)
   float weight
   planarweight /network/cell[]/soma/spike -fixed {weight}
end

function set_delays(delay)
   float delay
   planardelay /network/cell[]/soma/spike -fixed {delay}
//   planardelay /network/cell[]/soma/spike -radial {cond_vel}
end


function set_inj_timing(delay, width, interval)
    float delay, width, interval
    setfield /injectpulse width1 {width} delay1 {delay}  \
        baselevel 0.0 trig_mode 0 delay2 {interval - delay} width2 0
    // free run mode with very long delay for 2nd pulse (non-repetitive)
    // level1 is set by the inj_toggle function
end

function set_frequency(frequency)
    float frequency
    setfield /network/cell[]/{synpath} frequency {frequency}
end

//===============================
//    Main simulation section
//===============================

setclock  0  {dt}		// set the simulation clock

/* Make the network
   Step 1: Assemble the components to build the prototype cell under the
	   neutral element /library.
*/

// create prototype definitions used by the cell parameter file 'cellfile'

include protodefs.g  // This creates /library with the cell components

// Now /library contains prototype channels, compartments, spikegen

/* Step 2: Create the prototype cell specified in 'cellfile', using readcell.
	   Then, set up the excitatory synchan in the appropriate compartment,
	   and the spikegen attached to the soma
*/
readcell {cellfile} /library/cell
setfield /library/cell/{synpath} gmax {gmax}
setfield /library/cell/soma/spike thresh 0  abs_refract 0.004  output_amp 1

/* Step 3 - make a 2D array of cells with copies of /library/cell */
// usage: createmap source dest Nx Ny -delta dx dy [-origin x y]

createmap /library/cell /network {NX} {NY} -delta {SEP_X} {SEP_Y}

/* There will be NX cells along the x-direction, separated by SEP_X,
   and  NY cells along the y-direction, separated by SEP_Y.
   The default origin is (0, 0).  This will be the coordinates of cell[0].
   The last cell, cell[{NX*NY-1}], will be at (NX*SEP_X -1, NY*SEP_Y-1).
*/

/* Step 4: Now connect them up with planarconnect.  Usage:
 * planarconnect source-path destination-path
 *               [-relative]
 *               [-sourcemask {box,ellipse} xmin ymin xmax ymax]
 *               [-sourcehole {box,ellipse} xmin ymin xmax ymax]
 *               [-destmask   {box,ellipse} xmin ymin xmax ymax]
 *               [-desthole   {box,ellipse} xmin ymin xmax ymax]
 *               [-probability p]
 */

/* Connect each source spike generator to excitatory synchans on the 4
   nearest neighbors.  Set the ellipse axes or box size just higher than the
   cell spacing, to be sure cells are included.  To connect to nearest
   neighbors and the 4 diagonal neighbors, use a box:
     -destmask box {-SEP_X*1.01} {-SEP_Y*1.01} {SEP_X*1.01} {SEP_Y*1.01}
   For all-to-all connections with a 10% probability, set both the sourcemask
   and the destmask to have a range much greater than NX*SEP_X using options
     -destmask box -1 -1  1  1 \
     -probability 0.1
   Set desthole to exclude the source cell, to prevent self-connections.
*/

planarconnect /network/cell[]/soma/spike /network/cell[]/{synpath} \
    -relative \	    // Destination coordinates are measured relative to source
    -sourcemask box -1 -1  1  1 \   // Larger than source area ==> all cells
    -destmask ellipse 0 0 {SEP_X*1.2}  {SEP_Y*1.2} \
    -desthole box {-SEP_X*0.5} {-SEP_Y*0.5} {SEP_X*0.5} {SEP_Y*0.5} \
    -probability 1.1	// set probability > 1 to connect to all in destmask


/* Step 5: Set the axonal propagation delay and weight fields of the target
   synchan synapses for all spikegens.  To scale the delays according to
   distance instead of using a fixed delay, use
       planardelay /network/cell[]/soma/spike -radial {cond_vel}
   and change dialogs in graphics.g to set cond_vel.  This would be
   appropriate when connections are made to more distant cells.  Other
   options of planardelay and planarweight allow some randomized variations
   in the delay and weight.
*/

planardelay /network/cell[]/soma/spike -fixed {prop_delay}
planarweight /network/cell[]/soma/spike -fixed {syn_weight}

/* Set up the circuitry to provide injection pulses to the network */
create pulsegen /injectpulse // Make a periodic injection current step
set_inj_timing {injdelay} {injwidth} {injinterval}
// set the amplitude (current) with the gain of a differential amplifier
create diffamp /injectpulse/injcurr
setfield /injectpulse/injcurr saturation 10000 gain {injcurrent}
addmsg /injectpulse /injectpulse/injcurr PLUS output
addmsg /injectpulse/injcurr /network/cell[{InjCell}]/soma INJECT output

// include the graphics functions
include graphics

// make the control panel
make_control

// make the graph to display soma Vm and pass messages to the graph
make_Vmgraph

/* To eliminate net view and run faster, comment out the next line */
make_netview
colorize
check
reset
echo "Network of "{NX}" by "{NY}" cells with separations "{SEP_X}" by "{SEP_Y}