// groucho_gapbld_mix.hoc
/*
****************************this is one big comment ************************
! 15 Nov. 2003, variation of groucho_gapbld.f to allow for gj
! between 2 cell populations, eg suppyrRS and suppyrFRB, or
! tuftRS and tuftIB. Structure of gjtable as before, with col. 1
! giving cell of 1st type and col. 3 giving coupled cell of 2nd type.
SUBROUTINE GROUCHO_gapbld_mix (thisno, numcells1, numcells2,
& numgj, gjtable, allowedcomps, num_allowedcomps, display)
c Construct a gap-junction network for groucho.f
$1 thisno double
$2 numcells1 = number of cells in 1st population.
$3 numcells2 = number of cells in 2nd population.
$4 numgj = total number of gj to be formed between these populations.
// this is the output: gjtable = table of gj's: each row is a gj.
Entries are: cell A, compartment on cell A; cell B, compartment on cell B
$o5 allowedcomps = a list of compartments where gj allowed to form
$6 num_allowedcomps = number of compartments in a cell on which a gj
$7 display
c might form.
! IT IS ASSUMED THAT ALLOWEDCOMPS AND NUM_ALLOWEDCOMPS SAME FOR
! THE 2 POPULATIONS.
c display is an integer flag. If display = 1, print gjtable
INTEGER thisno, numcells1, numcells2, numgj, gjtable(numgj,4),
& num_allowedcomps, allowedcomps(num_allowedcomps)
INTEGER i,j,k,l,m,n,o,p, ictr /0/
c ictr keeps track of how many gj have been "built"
INTEGER display
double precision seed, x1(1), x2(1), y(2)
****************************this is one big comment ************************
*/
objref gjtable,x1, x2, y1
obfunc groucho_gapbld_mix() { // see note above for arguments:
thisno = $1
numcells1 = $2
numcells2 = $3
numgj = $4
allowedcomps = $o5
num_allowedcomps = $6
display = $7
// print "Arrived at groucho_gapbld_mix with display = ",display
seed = new Vector()
seed.append(137.e0)
objref gjtable
gjtable = new Matrix(numgj+1, 4+1) // FORTRAN-like indicies start at 1
ictr = 0
// 2
while (ictr < numgj) {
k = 1
not_unique = 1
while (not_unique) {
x1 = durand (seed, k, x1) // durand returns vec c-style indicies
x2 = durand (seed, k, x2)
// c This defines a candidate cell pair
k = 2
y = durand (seed, k, y)
// c This defines a candidate pair of compartments
i = int ( x1.x[0] * numcells1 ) + 1
j = int ( x2.x[0] * numcells2 ) + 1
// c Is the ORDERED cell pair (i,j) in the list so far?
// superfluous but true if (ictr.eq.0) goto 1
not_unique = 0
for eL = 1, ictr {
if ((gjtable.x(eL,1) == i) && (gjtable.x(eL,3) == j)) {not_unique = 1}
}
if (one_tenth_ncell) {
not_unique = 0
}
} // loop replaces if (p.eq.1) goto 2
// c Proceed with construction
// 1
ictr = ictr + 1
m = int ( y.x[0] * num_allowedcomps ) + 1
n = int ( y.x[1] * num_allowedcomps ) + 1
gjtable.x[ictr][1] = i
gjtable.x[ictr][3] = j
gjtable.x[ictr][2] = allowedcomps.x[m]
gjtable.x[ictr][4] = allowedcomps.x[n]
} // loop replacing if (ictr.lt.numgj) goto 2
// c Possibly print out gjtable when done.
// print "at end of groucho_gapbld_mix display = ",display,", thisno = ",thisno
if ((display == 1) && (thisno == 0)) {
print " MIX GJTABLE"
for i = 1, numgj {
printf("%6d, %6d %6d %6d \n",gjtable.x(i,1), gjtable.x(i,2), \
gjtable.x(i,3), gjtable.x(i,4))
}
}
// print "successfully printed or not"
return gjtable
}