// Connectivity of the 2D OB network
objref outfile, outfile2
outfile = new File()
outfile2 = new File()
strdef outfilepath, filename
outfilepath = "connection/"
for k = 0, ngranx-1 {
for l = 0, ngrany-1 {
sprint(filename, "%sGC%d%d",outfilepath, k,l)
outfile2.wopen(filename)
outfile2.printf("This GC connects to the following MCs\n")
outfile2.close()
}
}
objref ru, rn
ru = new Random(seedU)
rn = new Random(seedN)
null = ru.uniform(0, 1)
if (NICOTIN == 0) {
gnic_MC = 0.0e-3 // mS/cm2
gnic_PG = 0.0e-3
} else {
gnic_MC = 1.0e-3 // mS/cm2
gnic_PG = 8.0e-3 //
}
//=========================================================================
// Create cells
//=========================================================================
objref mit[nmitx][nmity], pg[npgx][npgy], gran[ngranx][ngrany]
// MC
for i = 0, nmitx-1 {
for j = 0, nmity-1 {
seed = i*nmity+j
mit[i][j] = new Mitral(gnic_MC)
}
}
// PG
for i = 0, npgx-1 {
for j = 0, npgy-1 {
pg[i][j] = new PGcell(gnic_PG)
}
}
// GC
for i = 0, ngranx-1 {
for j = 0, ngrany-1 {
gran[i][j] = new Granule(MUSCARIN)
}
}
//=========================================================================
// Connection between MCs and PGs
//=========================================================================
objref m2pAMPA[nmitx][nmity], m2pNMDA[nmitx][nmity], p2m[nmitx][nmity]
for i=0, nmitx-1 {
for j = 0, nmity-1 {
// AMPA synapses
AMPAgmax = Wm2p*AMPAgmaxPG
pg[i][j].gemmbody m2pAMPA[i][j] = new gradAMPA(0.5)
setpointer m2pAMPA[i][j].vpre, mit[i][j].tuft.v(0.5)
m2pAMPA[i][j].gmax = AMPAgmax
m2pAMPA[i][j].alpha = AMPAalpha
m2pAMPA[i][j].beta = AMPAbeta
m2pAMPA[i][j].thetasyn = AMPAact
m2pAMPA[i][j].sigma = AMPAsigma
m2pAMPA[i][j].e = AMPArev
// NMDA synapses
NMDAgmax = Wm2p*NMDAgmaxPG
pg[i][j].gemmbody m2pNMDA[i][j] = new gradNMDA(0.5)
setpointer m2pNMDA[i][j].vpre, mit[i][j].tuft.v(0.5)
m2pNMDA[i][j].gmax = NMDAgmax
m2pNMDA[i][j].alpha = NMDAalpha
m2pNMDA[i][j].beta = NMDAbeta
m2pNMDA[i][j].thetasyn = NMDAact
m2pNMDA[i][j].sigma = NMDAsigma
m2pNMDA[i][j].e = NMDArev
// GABAA synapses
GABAAgmax = Wp2m*GABAAgmaxPG
mit[i][j].tuft p2m[i][j] = new gradGABA(0.5)
setpointer p2m[i][j].vpre, pg[i][j].gemmbody.v(0.5)
p2m[i][j].gmax = GABAAgmax
p2m[i][j].alpha = GABAAalpha_PG
p2m[i][j].beta = GABAAbeta_PG
p2m[i][j].thetasyn = GABAAact
p2m[i][j].sigma = GABAAsigma
p2m[i][j].e = GABAArev
}
}
//====================================================================================
// Connection between MCs and GCs
//====================================================================================
objref NC
NC = new Vector()
objref m2gAMPA[nGran][nMit], m2gNMDA[nGran][nMit], g2m[nMit][nGran]
double MGS[ngranx][ngrany] // record the number of synapses from MCs to each GC
double GMS[nMit]
for i = 0, ngranx-1 {
for j = 0, ngrany-1 {
MGS[i][j] = 0
}
}
null = ru.uniform(0, 1)
outfile.wopen("connection/MC2GC")
outfile.printf("Connections from MC cells to GC cells:\n")
outfile.close
for i=0, nmitx-1 {
for j = 0, nmity-1 {
count = 0
M = i*nmity+j // for the pointer
Z = 0 // for the pointer
outfile.aopen("connection/MC2GC")
outfile.printf("From the %d MC cell(%d,%d):\n", M+1,i,j)
outfile.close
x0 = dm*i // coordinate x for MC
y0 = dm*j // coordinate y for MC
for k = 0, ngranx-1 {
for l = 0, ngrany-1 {
N = k*ngrany+l
x1 = dg*k // real coordinate x in the 2D space
y1 = dg*l // real coordinate y in the 2D space
dx = x0-x1
dy = y0-y1
nx = abs(dx)/dg
ny = abs(dy)/dg
if (nx > Hgc) {
if (dx>0) {
kk = ngranx + k
} else {
kk = k - ngranx
}
} else {
kk = k
}
if (ny > Hgc) {
if (dy>0) {
ll = ngrany + l
} else {
ll = l - ngrany
}
} else {
ll = l
}
x2 = dg*kk // mapped coordinate x in the torus
y2 = dg*ll // mapped coordinate y in the torus
d = sqrt((x2-x0)^2+(y2-y0)^2)
if (d>R) {
d = R
}
Pr = ru.repick()
if (Pr<= Pc) {
sprint(filename, "%sGC%d%d",outfilepath, k,l)
outfile2.aopen(filename)
outfile2.printf("(%d,%d) %3.2f \n", i,j,d)
outfile2.close()
H = MGS[k][l]
// AMPA synapses
// AMPAgmax = (We*Gampa)/Ng // ~2 nS
AMPAgmax = Wm2g*AMPAgmaxGC
gran[k][l].gemmbody m2gAMPA[N][H] = new gradAMPA(0.5)
setpointer m2gAMPA[N][H].vpre, mit[i][j].dend.v(d/R)
m2gAMPA[N][H].gmax = AMPAgmax
m2gAMPA[N][H].alpha = AMPAalpha
m2gAMPA[N][H].beta = AMPAbeta
m2gAMPA[N][H].thetasyn = AMPAact
m2gAMPA[N][H].sigma = AMPAsigma
m2gAMPA[N][H].e = AMPArev
// NMDA synapses
// NMDAgmax = (We*Gnmda)/Ng // ~1 nS
NMDAgmax = Wm2g*NMDAgmaxGC
gran[k][l].gemmbody m2gNMDA[N][H] = new gradNMDA(0.5)
setpointer m2gNMDA[N][H].vpre, mit[i][j].dend.v(d/R)
m2gNMDA[N][H].gmax = NMDAgmax
m2gNMDA[N][H].alpha = NMDAalpha
m2gNMDA[N][H].beta = NMDAbeta
m2gNMDA[N][H].thetasyn = NMDAact
m2gNMDA[N][H].sigma = NMDAsigma
m2gNMDA[N][H].e = NMDArev
// Graded inhibtion
// GABAAgmax = (Wi*Ggaba)/Nm // ~2 nS
GABAAgmax = Wg2m*GABAAgmaxGC
mit[i][j].dend g2m[M][Z] = new gradGABA(d/R)
setpointer g2m[M][Z].vpre, gran[k][l].gemmbody.v(0.5)
g2m[M][Z].gmax = GABAAgmax
g2m[M][Z].alpha = GABAAalpha_GC
g2m[M][Z].beta = GABAAbeta_GC
g2m[M][Z].thetasyn = GABAAact
g2m[M][Z].sigma = GABAAsigma
g2m[M][Z].e = GABAArev
Z = Z + 1
MGS[k][l] = MGS[k][l]+1
count = count + 1
if ( count/6-int(count/5) == 0){
outfile.printf("\n")
}
outfile.aopen("connection/MC2GC")
outfile.printf("(%d,%d)(%d, %d) %3.2f; ", k, l, kk, ll,d/R)
}
}
}
GMS[M]=Z
NC.append(count)
outfile.printf("\n%d\n\n", count)
outfile.close()
}
}
outfile.wopen("connection/MGS")
for i = 0, ngranx-1 {
for j = 0, ngrany-1 {
index = i*ngranx+j
if ( (index%10) == 0){
outfile.printf("\n")
}
outfile.printf("%d ", MGS[i][j])
}
}
outfile.close()
Ntotal = NC.sum()
print "\nTotal number of MC-GC projection is\n"
print Ntotal
print "\nThe average number of GC inputs per MC is\n"
print Ntotal/nMit
print "\nThe average number of MC inputs per GC is\n"
print Ntotal/nGran
print "\n"