// genesis (R.M. 12/12/95)
// Copied from Parallel_fiber.g on 29/12//2001
// Intended to model a 2D array of electrodes
// IMPORTANT
// Because the efield object is not yet supported by the hines solver,
// the elctrodes must be made, and connected, after the hines solver
// has been installed for the compartments to which the electrodes
// are to be connected.
// For this reason, the constants, makearray and setup of messages are
// collapsed in this single script.
include defaults
include Gran_layer_const.g
// the constants
int nx = 1 // number of electrodes along X-axis
int ny = 1 // number of electrodes along Y-axis
float dx = 0 // interelectrode spacing
float dy = 0
float ox = {({number_Golgi_cells} - 1) / 2.0} * {Golgi_cell_separation}
float oy = 0.000300
int i, j, index
// the make function
function make_electrode_array (nx, ny, dx, dy, ox, oy)
int nx, ny // n = number
float dx, dy, ox, oy // d = delta, o = origin
if(!{exists /library})
create neutral /library
disable /library
end
create efield /library/electrode
setfield ^ scale 1e-3
possibility to low-pass-filter the electrode signal, so that it
can be sampled at a lower clock rate
create RC /library/electrode/RC
setfield ^ V0 0 R 1 C 0.001 // should give same amplitude as input,
// but low-pass-filtered with tau 1 ms
addmsg /library/electrode /library/electrode/RC INJECT field
createmap /library/electrode / {nx} {ny} -delta {dx} {dy} -origin {ox} {oy}
end
// make the array
make_electrode_array {nx} {ny} {dx} {dy} {ox} {oy}
// connect the electrodes to an asc_file element
str electrodes_ascii_filename = {filename} @ "electrodes_" @ {label} @ ".ascii"
if (!({exists /output/electrodes}))
create asc_file /output/electrodes
end
setclock 7 20e-5
useclock /output/electrodes 7
enable /output
enable /output/electrodes
setfield /output/electrodes filename {electrodes_ascii_filename} \
initialize 1 leave_open 1 flush 1
echo Output to {filename}
for (i = 0; i < {nx}; i = i + 1)
for (j = 0; j < {ny}; j = j + 1)
index = {i * nx + j}
addmsg /electrode[{index}]/RC /output/electrodes SAVE field
end
end
// this reset is needed to activate the connections to the asc_file object ?
reset
// connect all electrodes to all compartments of all Golgi cells
float el_x, el_y, el_z // (x,y,z) coordinates of electrode
float cp_x, cp_y, cp_z // (x,y,z) coordinates of compartment
float distance // distance between electrode and compartment
str name, elem
foreach name ({el /granule_cell_layer/##[][TYPE=compartment]})
echo {name}
cp_x = {getfield {name} x}
cp_y = {getfield {name} y}
cp_z = {getfield {name} z}
for (i = 0; i < {nx}; i = i + 1)
for (j = 0; j < {ny}; j = j + 1)
index = {i * nx + j}
echo {getfield /electrode[{index}] x}
el_x = {getfield /electrode[{index}] x}
el_y = {getfield /electrode[{index}] y}
el_z = {getfield /electrode[{index}] z}
distance = {sqrt {{pow {{cp_x} - {el_x}} 2.0} + \
{pow {{cp_y} - {el_y}} 2.0} + \
{pow {{cp_z} - {el_z}} 2.0}}}
echo {distance}
elem = ({findsolvefield {name}/../solve {name} Im})
echo {elem}
addmsg {name}/../solve /electrode[{index}] CURRENT {elem} {distance}
end
end
end