// genesis 2.2
// Kerstin Menne
// Luebeck, 02.10.2001
// functions for the construction of arrays of cells including randomizatons;
// pattern of connectivity implemented in connections.g
// creation of two dimensional array
function create_array(array_name,cell_name,nx,ny,dx,dy,origin_x,origin_y)
str array_name
str cell_name // cell that has to be copied and arranged in network
int nx, ny // number of cells in x- and y-dimension, respectively
float dx, dy // distance between neighbouring cells in x and y
float origin_x, origin_y // x- and y-coordinate of first cell (numbered
// 0) in array
if (!({exists {array_name}}))
create neutral {array_name}
end
createmap {cell_name} {array_name} {nx} {ny} -delta {dx} {dy} \
-origin {origin_x} {origin_y}
end
// implement rotations of individual cells, randomization of cell-positions in
// array and randomizaton of resting potential to make data less monoton
function randomize(array_name,cell_name,inumber_cells)
str array_name, cell_name
int inumber_cells // number of cells in respective array
str comp // help variables
float iinitvm
int i
// randomize positions of cells in cell array and rotate them
for (i = 0; i <inumber_cells; i = i + 1)
pushe {array_name}{cell_name}[{i}]
// new position can differ upto 5 microns compared to
// original position in each dimension
// changed to 3 microns for x and y
position . {{getfield . x} + {rand -3e-6 3e-6}} \
{{getfield . y} + {rand -3e-6 3e-6}} \
{{getfield . z} + {rand -50e-6 50e-6}}
// rotation around z-axis
rotcoord . {rand 0 3.141592} -z \
-center {getfield . x} {getfield . y} {getfield . z}
// randomization of resting potentials
iinitvm = {rand -0.065 -0.060}
foreach comp ({el {array_name}{cell_name}[{i}]/#[TYPE=compartment]})
setfield {comp} initVm {iinitvm} Vm {iinitvm} Em {iinitvm}
end //foreach
pope
end //for
end
// randomizations for afferent inputs: randomization of positions and
// rates; since the afferent input layer is supposed to be above the
// network of pyramidal cells and interneurons, 100e-6 are added to the
// z-component
function randomize_afferents(array_name,cell_name,inumber_cells)
str array_name, cell_name
int inumber_cells // number of randomspike-elements
int i
int new_rate
// randomize positions
for (i = 0; i <inumber_cells; i = i + 1)
pushe {array_name}{cell_name}[{i}]
// new position can differ upto 30microns compared to
// original position in each dimension
// changed to 5 microns
position . {{getfield . x} + {rand -5e-6 5e-6}} \
{{getfield . y} + {rand -5e-6 5e-6}} \
{{getfield . z} + 100e-6 + {rand -10e-6 10e-6}}
// rate +/- upto 20 events
// changed to +/- 5 events
new_rate = {{getfield . rate} + \
{rand -5 5}}
setfield . rate {new_rate}
pope
end
end