objref map, x
obfunc synaptic_map_construct (){ localobj f, s, tmpmap
/* $1 thisno,
$2 num_presynaptic_cells,
$3 num_postsynaptic_cells,
// no more $o4 map(i,j), Matrix object = cell # of ith presyn input to jth postsyn cell
$4 num_presyninputs_perpostsyn_cell,
$5 display
$s6 map file base name
*/
// Construct a map of presynaptic cells of one type to postsyn.
// cells of some type.
// display is an integer flag. If display = 1, print gjtable
// INTEGER thisno, num_presynaptic_cells,
// & num_postsynaptic_cells,
// & num_presyninputs_perpostsyn_cell,
// & map (num_presyninputs_perpostsyn_cell,
// & num_postsynaptic_cells)
// INTEGER i,j,k,l,m,n,o,p
// INTEGER display
// double precision seed, x(1)
thisno = $1
num_presynaptic_cells = $2
num_postsynaptic_cells = $3
objref map
//map = $o4 // dosen't matter
num_presyninputs_perpostsyn_cell = $4
display = $5
// objref seed
seed = new Vector()
seed.append(297.e0)
map = new Matrix( num_presyninputs_perpostsyn_cell+1, num_postsynaptic_cells+1 )
if (!use_p2c_net_connections) {
k = 1
for ii = 1, num_postsynaptic_cells {
// print " Constructing map for cell #",ii
for j = 1, num_presyninputs_perpostsyn_cell {
x = durand (seed, k, x)
// This defines a presynaptic cell
LL = int ( x.x(0) * num_presynaptic_cells ) + 1
if (LL > num_presynaptic_cells) {
print " unnexpected boundary issue in synaptic_map_construct()"
LL = num_presynaptic_cells
}
map.x[j][ii] = LL
}
}
// Possibly print out map when done.
if ((display == 1) && (thisno == 0)) {
print "SYNAPTIC MAP"
for i = 1, num_postsynaptic_cells {
printf("%6d %6d %6d \n",map.x(1,i), map.x(2,i), \
map.x(num_presyninputs_perpostsyn_cell,i))
}
}
}else{
// read from file created by port2colossus
s = new String()
sprint(s.s, "../../p2c/map/%s.dat", $s6)
//printf("%s %d %d\n", s.s, map.nrow-1, map.ncol-1)
f = new File()
f.ropen(s.s)
tmpmap = new Matrix(map.nrow-1, map.ncol-1)
tmpmap.scanf(f, map.nrow-1, map.ncol-1)
tmpmap.bcopy(0,0,map.nrow-1, map.ncol-1, 1, 1, map)
}
return map
}