{load_file("nrngui.hoc")}
seed1 = n_trials
seed2 = n_runs*n_trials
{load_file("cells/pyramidal_cell_14VbTest.hoc")}
{load_file("cells/basket_cell17S.hoc")}
{load_file("cells/axoaxonic_cell17S.hoc")}
{load_file("cells/bistratified_cell13S.hoc")}
{load_file("cells/olm_cell2.hoc")}
{load_file("cells/vipcck_cell17S.hoc")}
{load_file("cells/vipcr_cell17S.hoc")}
{load_file("cells/stim_cell_noise.hoc")}
{load_file("cells/stim_cell_ec.hoc")}
{load_file("cells/stim_cell_ca3.hoc")}
{load_file("cells/burst_cell.hoc")}
{load_file("cells/ranstream.hoc")}
func round () {
if ($1-int($1) >= 0.5) {
return int($1)+1
} else {
return int($1)
}
}
func ceiling () {
if ($1-int($1) != 0) {
return int($1)+1
} else {
return int($1)
}
}
func flooring () {
if ($1-int($1) != 0) {
return int($1)-1
} else {
return int($1)
}
}
strdef my_string,temp_save1,temp_save2,temp_dir, temp_mkdir
if (n_neuron==0) {
SOMr = 1.0
SOMrC = 1.0
PVr = 1.0
PVrC = 1.0
ECrC = 1.0
CA3rC = 1.0
my_string = "Control"
desynch_factor=0
} else if (n_neuron==1) {
SOMr = factor
SOMrC = factor
PVr = 1.0
PVrC = 1.0
ECrC = 1.0
CA3rC = 1.0
sprint(my_string,"SOMred%1.2f",factor)
desynch_factor=0
} else if (n_neuron==2) {
SOMr = 1.0
SOMrC = 1.0
PVr = factor
PVrC = factor
ECrC = 1.0
CA3rC = 1.0
sprint(my_string,"PVred%1.2f",factor)
desynch_factor=0
} else if (n_neuron==3) {
SOMr = 1.0
SOMrC = 1.0
PVr = 1.0
PVrC = 1.0
ECrC = 1.0
CA3rC = 1.0
sprint(my_string,"Desynch%d", desynch)
desynch_factor=int(desynch)
} else if (n_neuron==4) {
SOMr = factor
SOMrC = factor
PVr = factor
PVrC = factor
ECrC = 1.0
CA3rC = 1.0
sprint(my_string,"ALL%1.2f_%d",factor,desynch)
desynch_factor=int(desynch)
} else if (n_neuron==5) {
SOMr = 1.0
SOMrC = 1.0
PVr = 1.0
PVrC = 1.0
ECrC = 1.0
CA3rC = 1.0
sprint(my_string,"SOMdel")
desynch_factor=0
} else if (n_neuron==6) {
SOMr = 1.0
SOMrC = 1.0
PVr = 1.0
PVrC = 1.0
ECrC = 1.0
CA3rC = 1.0
sprint(my_string,"PVdel")
desynch_factor=0
}
print "\nRunning ",my_string," case"
sprint(temp_dir, "Simulation_Results/%s/Trial_%d/Run_%d",my_string,n_trials,n_runs)
sprint(temp_mkdir, "mkdir -p %s", temp_dir)
system(temp_mkdir)
TINIT = 400
STARTDEL = 500
THETA = 125
GAMMA = 25
duration = 115
SIMDUR = TINIT + (THETA*duration) + STARTDEL/10
nplf = 41
ndend = 8
ndendca3 = 6
nplf_mod = nplf
probability = 0.50
scale = 1
npcell = 130*scale
naacell = ceiling(2*scale * PVr)
nbcell = ceiling(8*scale * PVr)
nbscell = ceiling(2*scale * PVr)
nolm = ceiling(2*scale * SOMr)
nvipcck = 1*scale
nvipcr = 4*scale
nvipcrnvm = 1*scale
nCA3 = nplf*ndendca3
nEC = nplf*ndend
nSEP = 10
nNOISE = 1000
print "Number of AACs: ", naacell, " Factor: ", PVrC
print "Number of BCs: ", nbcell, " Factor: ", PVrC
print "Number of BSCs: ", nbscell, " Factor: ", PVrC
print "Number of OLMs: ", nolm, " Factor: ", SOMrC
ncell = npcell+naacell+nbcell+nbscell+nolm+nvipcck+nvipcr
nstim = nCA3+nEC+nSEP+nNOISE
ntot = ncell+nstim
strdef tmpdir
sprint(tmpdir, "make_inputs_linear_track/Inputs_linear_rand_stops_noisy_jitterEC_%d", desynch_factor)
if (4<=n_neuron<=7) {
print "Desynchronized CA3 and EC inputs by ",desynch_factor, " ms"
} else {
print "Synchronized CA3 and EC inputs by ",desynch_factor, " ms"
}
objref index_vecEC
index_vecEC = new Vector(nEC)
for k = 0, nEC-1 {
index_vecEC.x[k] = k
}
objref flEC[nEC], vspkEC[nEC], vecstimEC[nEC]
strdef tmpstring
for (i=0; i < nEC; i = i+1) {
flEC[i] = new File()
sprint(tmpstring, "%s/run_%d/g%d_EC.txt", tmpdir, n_runs, index_vecEC.x[i])
flEC[i].ropen(tmpstring)
vspkEC[i] = new Vector()
vspkEC[i].scanf(flEC[i])
flEC[i].close()
}
objref index_vecCA3
index_vecCA3 = new Vector(nCA3)
for k = 0, nCA3-1 {
index_vecCA3.x[k] = k
}
objref flCA3[nCA3], vspkCA3[nCA3], vecstimCA3[nCA3]
strdef tmpstring2
for (i=0; i < nCA3; i = i+1) {
flCA3[i] = new File()
sprint(tmpstring2, "%s/run_%d/g%d_CA3.txt", tmpdir, n_runs, index_vecCA3.x[i])
flCA3[i].ropen(tmpstring2)
vspkCA3[i] = new Vector()
vspkCA3[i].scanf(flCA3[i])
flCA3[i].close()
}
objref index_vecNOISE
index_vecNOISE = new Vector(nNOISE)
for k = 0, nNOISE-1 {
index_vecNOISE.x[k] = k
}
objref flNOISE[nNOISE], vspkNOISE[nNOISE], vecstimNOISE[nNOISE]
strdef tmpstring3
for (i=0; i < nNOISE; i = i+1) {
flNOISE[i] = new File()
sprint(tmpstring3, "background_noise/rate5/run_%d/noise_%d.txt", n_runs, index_vecNOISE.x[i])
flNOISE[i].ropen(tmpstring3)
vspkNOISE[i] = new Vector()
vspkNOISE[i].scanf(flNOISE[i])
flNOISE[i].close()
}
iPC = 0
iAAC = npcell
iBC = npcell+naacell
iBSC = npcell+naacell+nbcell
iOLM = npcell+naacell+nbcell+nbscell
iVCCK = npcell+naacell+nbcell+nbscell+nolm
iVCR = npcell+naacell+nbcell+nbscell+nolm+nvipcck
iCA3 = npcell+naacell+nbcell+nbscell+nolm+nvipcck+nvipcr
iEC = npcell+naacell+nbcell+nbscell+nolm+nvipcck+nvipcr+nCA3
iSEP = npcell+naacell+nbcell+nbscell+nolm+nvipcck+nvipcr+nCA3+nEC
iNOISE = npcell+naacell+nbcell+nbscell+nolm+nvipcck+nvipcr+nCA3+nEC+nSEP
f1 = 36
EC_PC = ndend
EC_AAC = round(970 / f1 * ECrC)
EC_BC = round(150 / f1 * ECrC)
EC_BSC = round(864 / f1 * ECrC)
EC_VCCK = round(300 / f1 * ECrC)
EC_VCR = round(1118 / f1 * ECrC)
CA3_PC = ndendca3
CA3_AAC = round(8340 / f1 * CA3rC)
CA3_BC = round(12094 / f1 * CA3rC)
CA3_BSC = round(11564 / f1 * CA3rC)
CA3_OLM = round(2000 / f1 * CA3rC)
CA3_VCCK = round(4000 / f1 * CA3rC)
CA3_VCR = round(5000 / f1 * CA3rC)
SEP_BC = nSEP
SEP_AAC = nSEP
SEP_BSC = nSEP
SEP_OLM = nSEP
SEP_VCCK = nSEP
SEP_VCR = nSEP
PC_PC = round(197/f1)
PC_AAC = round(486/f1)
PC_BC = round(1272/f1)
PC_BSC = round(1098/f1)
PC_OLM = round(7137/f1)
PC_VCCK = round(4137/f1)
PC_VCR = round(4137/f1)
VCCK_PC = round( 104 / f1 )
VCCK_AAC = round( 96 / f1 )
VCR_BC = round( 96 / f1 )
VCR_OLM = round( 390 / f1 )
OLM_PC = round( 80 / f1 * SOMrC )
OLM_AAC = round( 80 / f1 * SOMrC )
AAC_PC = round( 36 / f1 * PVrC )
BC_PC = round( 187 / f1 * PVrC )
BSC_PC = round( 100 / f1 * PVrC )
BC_AAC = round( 39 / f1 * PVrC )
BC_BC = round( 39 / f1 * PVrC )
BC_BSC = round( 39 / f1 * PVrC )
BC_VCCK = round( 38 / f1 * PVrC )
BSC_AAC = round( 160 / f1 * PVrC )
BSC_BC = round( 160 / f1 * PVrC )
BSC_BSC = round( 160 / f1 * PVrC )
BSC_OLM = round( 390 / f1 * PVrC )
BSC_VCCK = round( 160 / f1 * PVrC )
Ecell2Pcell_weight = 3.0e-4
Ecell2Pcell_delay = 1.0
CA3cell2Pcell_weight = 3.0e-4
CA3cell2Pcell_delay = 1.0
Ecell2AAcell_weight = 1.56e-4
Ecell2AAcell_delay = 1.0
Ecell2Bcell_weight = 0.169e-4
Ecell2Bcell_delay = 1.0
Ecell2BScell_weight = 2.34e-4
Ecell2BScell_delay = 1.0
Ecell2VCCKcell_weight = 4.68e-4
Ecell2VCCKcell_delay = 1.0
Ecell2VCRcell_weight = 3.9e-4
Ecell2VCRcell_delay = 1.0
CA3cell2AAcell_weight = 1.872e-4
CA3cell2AAcell_delay = 1.0
CA3cell2Bcell_weight = 4.862e-4
CA3cell2Bcell_delay = 1.0
CA3cell2BScell_weight = 2.925e-4
CA3cell2BScell_delay = 1.0
CA3cell2OLMcell_weight = 1.638e-4
CA3cell2OLMcell_delay = 1.0
CA3cell2VCCKcell_weight = 1.5015e-4
CA3cell2VCCKcell_delay = 1.0
CA3cell2VCRcell_weight = 1.365e-4
CA3cell2VCRcell_delay = 1.0
factor1 = 1.8
Pcell2Pcell_weight = 4.2e-3
Pcell2Pcell_delay = 1.0
AAcell2Pcell_weight = 2.07e-3
AAcell2Pcell_delay = 1.0
Bcell2Pcell_weight = 3.6e-4
Bcell2Pcell_delay = 1.0
BScell2Pcell_weight = 9.18e-4
BScell2Pcell_GABAB_weight = 9.18e-4
BScell2Pcell_delay = 1.0
OLMcell2Pcell_weight = 5.4e-4
OLMcell2Pcell_GABAB_weight = 5.4e-4
OLMcell2Pcell_delay = 1.0
VCCKcell2Pcell_weight = 1.8e-4
VCCKcell2Pcell_delay = 1.0
Pcell2AAcell_weight = 4.0e-5
Pcell2AAcell_delay = 1.0
Pcell2Bcell_weight = 7.7e-4
Pcell2Bcell_delay = 1.0
Pcell2BScell_weight = 1.9e-3
Pcell2BScell_delay = 1.0
Pcell2OLMcell_weight = 2.0e-4
Pcell2OLMcell_delay = 1.0
Pcell2VCCKcell_weight = 5.0e-4
Pcell2VCCKcell_delay = 1.0
Pcell2VCRcell_weight = 5.0e-4
Pcell2VCRcell_delay = 1.0
factor2 = 1.1
Bcell2AAcell_weight = 1.32e-4
Bcell2AAcell_delay = 1.0
BScell2AAcell_weight = 6.6e-4
BScell2AAcell_delay = 1.0
OLMcell2AAcell_weight = 1.32e-4
OLMcell2AAcell_delay = 1.0
VCCKcell2AAcell_weight = 7.7e-4
VCCKcell2AAcell_delay = 1.0
Bcell2Bcell_weight = 1.76e-3
Bcell2Bcell_delay = 1.0
BScell2Bcell_weight = 9.9e-3
BScell2Bcell_delay = 1.0
OLMcell2Bcell_weight = 1.21e-3
OLMcell2Bcell_delay = 1.0
VCRcell2Bcell_weight = 4.95e-2
VCRcell2Bcell_delay = 1.0
Bcell2BScell_weight = 3.19e-3
Bcell2BScell_delay = 1.0
BScell2BScell_weight = 5.61e-4
BScell2BScell_delay = 1.0
OLMcell2BScell_weight = 1.21e-4
OLMcell2BScell_delay = 1.0
VCCKcell2BScell_weight = 7.7e-4
VCCKcell2BScell_delay = 1.0
BScell2OLMcell_weight = 1.76e-5
BScell2OLMcell_delay = 1.0
OLMcell2OLMcell_weight = 1.056e-3
OLMcell2OLMcell_delay = 1.0
VCRcell2OLMcell_weight = 1.386e-3
VCRcell2OLMcell_delay = 1.0
VCCKcell2VCCKcell_weight = 4.95e-4
VCCKcell2VCCKcell_delay = 1.0
BScell2VCCKcell_weight = 8.8e-4
BScell2VCCKcell_delay = 1.0
OLMcell2VCCKcell_weight = 1.32e-3
OLMcell2VCCKcell_delay = 1.0
Bcell2VCCKcell_weight = 1.32e-3
Bcell2VCCKcell_delay = 1.0
iEC_PC = 0
iECN_PC = 6
iCA3_PC = 12
iCA3N_PC = 18
iCA3_PCB = 24
iCA3N_PCB = 30
iBC_PC = 36
iVCCK_PC = 37
iAAC_PC = 38
iOLM_PC = 39
iBSC_PC = 55
iBSCb_PC = 71
iPC_PC = 83
iEC_AAC = 0
iCA3_AAC = 2
iPC_AAC = 6
iBC_AAC = 8
iBSC_AAC = 9
iOLM_AAC = 11
iVCCK_AAC = 13
iSEP_AAC = 14
iEC_BC = 0
iCA3_BC = 2
iPC_BC = 6
iBC_BC = 8
iBSC_BC = 9
iOLM_BC = 11
iVCR_BC = 13
iSEP_BC = 14
iEC_BSC = 0
iCA3_BSC = 2
iPC_BSC = 6
iBC_BSC = 8
iBSC_BSC = 9
iOLM_BSC = 11
iVCCK_BSC = 13
iSEP_BSC = 14
iPC_OLM = 0
iCA3_OLM = 2
iBSC_OLM = 4
iOLM_OLM = 6
iVCR_OLM = 8
iSEP_OLM = 9
iEC_VCCK = 0
iCA3_VCCK = 2
iPC_VCCK = 6
iBC_VCCK = 8
iBSC_VCCK = 9
iOLM_VCCK = 11
iVCCK_VCCK = 13
iSEP_VCCK = 14
iEC_VCR = 0
iCA3_VCR = 2
iPC_VCR = 6
iSEP_VCR = 8
SEPNUM = 10000
SEPSTART = STARTDEL
SEPINT = 20.0
SEPNOISE = 0.4
SEPBINT = 2*THETA/3
SEPBLEN = THETA/3
SEPWGTA = 2.0e-4
SEPWGTB = 8.0e-5
SEPWGTBS = 8.0e-4
SEPWGTO = 0.1e-6
SEPWGTV = 6.0e-4
SEPWGTVR = 2.0e-4
SEPDEL = 1.0
EWGT = 6.18e-4
ENWGT = 6.18e-4
EDEL = 400
IDEL = 350
EC_NOISE = 20
CA3_NOISE = 20
IN_NOISE = 10
connect_random_low_start_ = 1
objref cells, nclist, ncslist, ncelist
objref ranlist, ranlist2
objref stims, stimlist
objref gidvec
proc mknet_init() {
print "Make cells..."
mkcells()
print "Make SEP inputs..."
mkinputs()
mcell_ran4_init(connect_random_low_start_)
nclist = new List()
}
proc mknet() {
print "Connect cells..."
if (n_neuron != 8) {
print "Connect EC inputs... to PCs"
connectcellsEC(npcell, iPC, nEC, iEC, EC_PC, iEC_PC, iEC_PC+5, Ecell2Pcell_delay, Ecell2Pcell_weight)
connectcellsEC(npcell, iPC, nEC, iEC, EC_PC, iECN_PC, iECN_PC+5, Ecell2Pcell_delay, Ecell2Pcell_weight)
}
if (n_neuron!=9) {
print "Connect CA3 inputs... to PCs"
connectcellsCA3(npcell, iPC, nCA3, iCA3, CA3_PC, iCA3_PC, iCA3_PC+5, CA3cell2Pcell_delay, CA3cell2Pcell_weight)
connectcellsCA3(npcell, iPC, nCA3, iCA3, CA3_PC, iCA3N_PC, iCA3N_PC+5, CA3cell2Pcell_delay, CA3cell2Pcell_weight)
connectcellsCA3(npcell, iPC, nCA3, iCA3, CA3_PC, iCA3_PCB, iCA3_PCB+5, CA3cell2Pcell_delay, CA3cell2Pcell_weight)
connectcellsCA3(npcell, iPC, nCA3, iCA3, CA3_PC, iCA3N_PCB, iCA3N_PCB+5, CA3cell2Pcell_delay, CA3cell2Pcell_weight)
}
print "Connect PCs... to PCs"
connectcells(npcell, iPC, npcell, iPC, PC_PC, iPC_PC, iPC_PC, Pcell2Pcell_delay, Pcell2Pcell_weight)
print "Connect Background activity... to PCs"
connectcells_noise(npcell, iPC, nNOISE, iNOISE, EC_NOISE, iEC_PC, iEC_PC+5, EDEL, EWGT)
connectcells_noise(npcell, iPC, nNOISE, iNOISE, EC_NOISE, iECN_PC, iECN_PC+5, EDEL, ENWGT)
connectcells_noise(npcell, iPC, nNOISE, iNOISE, CA3_NOISE, iCA3_PC, iCA3_PC+5, EDEL, EWGT )
connectcells_noise(npcell, iPC, nNOISE, iNOISE, CA3_NOISE, iCA3N_PC, iCA3N_PC+5, EDEL, ENWGT )
connectcells_noise(npcell, iPC, nNOISE, iNOISE, CA3_NOISE, iCA3_PCB, iCA3_PCB+5, EDEL, EWGT )
connectcells_noise(npcell, iPC, nNOISE, iNOISE, CA3_NOISE, iCA3N_PCB, iCA3N_PCB+5, EDEL, ENWGT )
connectcells_noise(npcell, iPC, nNOISE, iNOISE, IN_NOISE, iBC_PC, iBC_PC, EDEL, ENWGT )
}
proc mknet_AAC() {
print "Connect Inputs... to AACs"
connectcells(naacell, iAAC, nEC, iEC, EC_AAC, iEC_AAC, iEC_AAC+1, Ecell2AAcell_delay, Ecell2AAcell_weight)
connectcells(naacell, iAAC, nCA3, iCA3, CA3_AAC, iCA3_AAC, iCA3_AAC+3, CA3cell2AAcell_delay, CA3cell2AAcell_weight)
connectcells(naacell, iAAC, npcell, iPC, PC_AAC, iPC_AAC, iPC_AAC+1, Pcell2AAcell_delay, Pcell2AAcell_weight)
connectcells(naacell, iAAC, nSEP, iSEP, SEP_AAC, iSEP_AAC, iSEP_AAC+3, SEPDEL, SEPWGTA)
print "Connect AACs... to cells"
connectcells(npcell, iPC, naacell, iAAC, AAC_PC, iAAC_PC, iAAC_PC, AAcell2Pcell_delay, AAcell2Pcell_weight)
}
proc mknet_BC() {
print "Connect Inputs... to BCs"
connectcells(nbcell, iBC, nEC, iEC, EC_BC, iEC_BC, iEC_BC+1, Ecell2Bcell_delay, Ecell2Bcell_weight)
connectcells(nbcell, iBC, nCA3, iCA3, CA3_BC, iCA3_BC, iCA3_BC+3, CA3cell2Bcell_delay, CA3cell2Bcell_weight)
connectcells(nbcell, iBC, npcell, iPC, PC_BC, iPC_BC, iPC_BC+1, Pcell2Bcell_delay, Pcell2Bcell_weight)
connectcells(nbcell, iBC, nSEP, iSEP, SEP_BC, iSEP_BC, iSEP_BC+3, SEPDEL, SEPWGTB)
print "Connect BCs... to cells"
connectcells(npcell, iPC, nbcell, iBC, BC_PC, iBC_PC, iBC_PC, Bcell2Pcell_delay, Bcell2Pcell_weight)
connectcells(naacell, iAAC, nbcell, iBC, BC_AAC, iBC_AAC, iBC_AAC, Bcell2AAcell_delay, Bcell2AAcell_weight)
connectcells(nbcell, iBC, nbcell, iBC, BC_BC, iBC_BC, iBC_BC, Bcell2Bcell_delay, Bcell2Bcell_weight)
connectcells(nbscell, iBSC, nbcell, iBC, BC_BSC, iBC_BSC, iBC_BSC, Bcell2BScell_delay, Bcell2BScell_weight)
connectcells(nvipcck, iVCCK, nbcell, iBC, BC_VCCK, iBC_VCCK, iBC_VCCK, Bcell2VCCKcell_delay, Bcell2VCCKcell_weight)
}
proc mknet_BSC() {
print "Connect Inputs... to BSCs"
connectcells(nbscell, iBSC, nEC, iEC, EC_BSC, iEC_BSC, iEC_BSC+1, Ecell2BScell_delay, Ecell2BScell_weight)
connectcells(nbscell, iBSC, nCA3, iCA3, CA3_BSC, iCA3_BSC, iCA3_BSC+3, CA3cell2BScell_delay, CA3cell2BScell_weight)
connectcells(nbscell, iBSC, npcell, iPC, PC_BSC, iPC_BSC, iPC_BSC+1, Pcell2BScell_delay, Pcell2BScell_weight)
connectcells(nbscell, iBSC, nSEP, iSEP, SEP_BSC, iSEP_BSC, iSEP_BSC+3, SEPDEL, SEPWGTBS)
print "Connect BSCs... to cells"
connectcells(npcell, iPC, nbscell, iBSC, BSC_PC/4, iBSC_PC, iBSC_PC+7, BScell2Pcell_delay, BScell2Pcell_weight)
connectcells(npcell, iPC, nbscell, iBSC, BSC_PC/4, iBSC_PC+8, iBSC_PC+15, BScell2Pcell_delay, BScell2Pcell_GABAB_weight)
connectcells(npcell, iPC, nbscell, iBSC, BSC_PC/4, iBSCb_PC, iBSCb_PC+5, BScell2Pcell_delay, BScell2Pcell_weight)
connectcells(npcell, iPC, nbscell, iBSC, BSC_PC/4, iBSCb_PC+6, iBSCb_PC+11, BScell2Pcell_delay, BScell2Pcell_GABAB_weight)
connectcells(naacell, iAAC, nbscell, iBSC, BSC_AAC, iBSC_AAC, iBSC_AAC+1, BScell2AAcell_delay, BScell2AAcell_weight)
connectcells(nbcell, iBC, nbscell, iBSC, BSC_BC, iBSC_BC, iBSC_BC+1, BScell2Bcell_delay, BScell2Bcell_weight)
connectcells(nbscell, iBSC, nbscell, iBSC, BSC_BSC, iBSC_BSC, iBSC_BSC+1, BScell2BScell_delay, BScell2BScell_weight)
connectcells(nolm, iOLM, nbscell, iBSC, BSC_OLM, iBSC_OLM, iBSC_OLM+1, BScell2OLMcell_delay, BScell2OLMcell_weight)
connectcells(nvipcck, iVCCK, nbscell, iBSC, BSC_VCCK, iBSC_VCCK, iBSC_VCCK+1, BScell2VCCKcell_delay, BScell2VCCKcell_weight)
}
proc mknet_OLM() {
print "Connect Inputs... to OLMs"
connectcells(nolm, iOLM, npcell, iPC, PC_OLM, iPC_OLM, iPC_OLM+1, Pcell2OLMcell_delay, Pcell2OLMcell_weight)
connectcells(nolm, iOLM, nCA3, iCA3, CA3_OLM, iCA3_OLM, iCA3_OLM+1, CA3cell2OLMcell_delay, CA3cell2OLMcell_weight)
connectcells(nolm, iOLM, nSEP, iSEP, SEP_OLM, iSEP_OLM, iSEP_OLM+1, SEPDEL, SEPWGTO)
print "Connect OLMs... to cells"
connectcells(npcell, iPC, nolm, iOLM, OLM_PC/2, iOLM_PC, iOLM_PC+7, OLMcell2Pcell_delay, OLMcell2Pcell_weight)
connectcells(npcell, iPC, nolm, iOLM, OLM_PC/2, iOLM_PC+8, iOLM_PC+15, OLMcell2Pcell_delay, OLMcell2Pcell_GABAB_weight)
}
proc mknet_VIPCCK() {
print "Connect Inputs... to VIPCCKs"
connectcells(nvipcck, iVCCK, nEC, iEC, EC_VCCK, iEC_VCCK, iEC_VCCK+1, Ecell2VCCKcell_delay, Ecell2VCCKcell_weight)
connectcells(nvipcck, iVCCK, nCA3, iCA3, CA3_VCCK, iCA3_VCCK, iCA3_VCCK+3, CA3cell2VCCKcell_delay, CA3cell2VCCKcell_weight)
connectcells(nvipcck, iVCCK, npcell, iPC, PC_VCCK, iPC_VCCK, iPC_VCCK+1, Pcell2VCCKcell_delay, Pcell2VCCKcell_weight)
connectcells(nvipcck, iVCCK, nSEP, iSEP, SEP_VCCK, iSEP_VCCK, iSEP_VCCK+3, SEPDEL, SEPWGTV)
print "Connect VIPCCKs... to cells"
connectcells(npcell, iPC, nvipcck, iVCCK, VCCK_PC, iVCCK_PC, iVCCK_PC, VCCKcell2Pcell_delay, VCCKcell2Pcell_weight)
}
proc mknet_VIPCR() {
print "Connect Inputs... to VIPCRs"
connectcells(nvipcr, iVCR, nEC, iEC, EC_VCR, iEC_VCR, iEC_VCR+1, Ecell2VCRcell_delay, Ecell2VCRcell_weight)
connectcells(nvipcr, iVCR, nCA3, iCA3, CA3_VCR, iCA3_VCR, iCA3_VCR+3, CA3cell2VCRcell_delay, CA3cell2VCRcell_weight)
connectcells(nvipcr, iVCR, npcell, iPC, PC_VCR, iPC_VCR, iPC_VCR+1, Pcell2VCRcell_delay, Pcell2VCRcell_weight)
connectcells(nvipcr, iVCR, nSEP, iSEP, SEP_VCR, iSEP_VCR, iSEP_VCR+3, SEPDEL, SEPWGTVR)
connectcells(nbcell, iBC, nvipcr, iVCR, VCR_BC, iVCR_BC, iVCR_BC, VCRcell2Bcell_delay, VCRcell2Bcell_weight)
connectcells(nolm, iOLM, nvipcr, iVCR, VCR_OLM, iVCR_OLM, iVCR_OLM, VCRcell2OLMcell_delay, VCRcell2OLMcell_weight)
}
proc mkcells() {local i,j localobj cell, nc, nil
cells = new List()
ranlist = new List()
ranlist2 = new List()
gidvec = new Vector()
for i=0, ntot-1 {
if (i < iAAC) {
cell = new PyramidalCell()
} else if (i < iBC) {
cell = new AACell()
} else if (i < iBSC) {
cell = new BasketCell()
} else if (i < iOLM) {
cell = new BistratifiedCell()
} else if (i < iVCCK) {
cell = new OLMCell()
} else if (i < iVCR) {
cell = new VIPCCKCell()
} else if (i < iCA3) {
cell = new VIPCRCell()
} else if (i < iEC) {
cell = new StimCellCA3(vspkCA3[i-iCA3])
} else if (i < iSEP) {
cell = new StimCellEC(vspkEC[i-iEC])
} else if (i < iNOISE) {
cell = new BurstCell()
} else {
cell = new StimCellNOISE(vspkNOISE[i-iNOISE])
}
cells.append(cell)
ranlist.append(new RandomStream(i+seed1))
ranlist2.append(new RandomStream(i+seed2))
gidvec.append(i)
}
}
proc connectcells() {local i, j, gid, nsyn, r localobj syn, nc, rs
for i=0, cells.count-1 {
gid = gidvec.x[i]
if (gid >= $2 && gid < $1+$2) {
rs = ranlist.object(i)
rs.start()
for nsyn=0, $5-1 {
r = rs.r.discunif($4, $4+$3-1)
if (r != gid) {
j = rs.r.discunif($6, $7)
syn = cells.object(i).pre_list.object(j)
nc = cells.object(r).connect2target(syn)
nc.delay = $8
nc.weight = $9
nclist.append(nc)
}
}
}
}
}
proc connectcells_noise() {local i, j, gid, nsyn, r, rnd localobj syn, nc, rs, rand
rand = new Random(seed2)
for i=0, cells.count-1 {
gid = gidvec.x[i]
if (gid >= $2 && gid < $1+$2) {
rs = ranlist2.object(i)
rs.start()
for nsyn=0, $5-1 {
r = rs.r.discunif($4, $4+$3-1)
j = rs.r.discunif($6, $7)
syn = cells.object(i).pre_list.object(j)
nc = cells.object(r).connect2target(syn)
rnd = rand.uniform(0,2)
nc.delay = $8*rnd
nc.weight = $9
nclist.append(nc)
}
}
}
}
proc connectcellsEC() {local i, j, gid, nsyn, r, r1, r2, r3, r4, r5, jj, rconv1 localobj syn, nc, rs, rconvobj1, save_conv_input1, save_conv_input2
save_conv_input1 = new File()
save_conv_input2 = new File()
sprint(temp_save1,"%s/input_plcs.txt", temp_dir)
sprint(temp_save2,"%s/input_nonplcs.txt", temp_dir)
rconvobj1 = new Random(seed1)
save_conv_input1.wopen(temp_save1)
save_conv_input2.wopen(temp_save2)
r1 = 0
r2 = 0
r3 = 0
for i=0, cells.count-1 {
gid = gidvec.x[i]
if (gid >= $2 && gid < $1+$2) {
rconv1 = rconvobj1.uniform(0,1)
if (rconv1 <= probability) {
rs = ranlist.object(i)
rs.start()
if (r1 == 1) {
r1 = 0
r2 += 1
}
cnt = $5*r2
r1 += 1
if (r2>=nplf_mod) {
r3 = rs.r.discunif(0, nplf_mod)
cnt = $5*r3
}
if (r2<nplf_mod) {
save_conv_input1.printf("%d, %d\n",gid,r2)
} else {
save_conv_input1.printf("%d, %d\n",gid,r3)
}
for j = $6, $7 {
syn = cells.object(i).pre_list.object(j)
nc = cells.object(cnt+$4).connect2target(syn)
nc.delay = $8
nc.weight = $9
nclist.append(nc)
cnt += 1
}
for jj = 0,1 {
r4 = rs.r.discunif($6, $7)
syn = cells.object(i).pre_list.object(r4)
nc = cells.object(cnt+$4).connect2target(syn)
nc.delay = $8
nc.weight = $9
nclist.append(nc)
cnt += 1
}
for jj = 0,1 {
r4 = rs.r.discunif($6, $7)
syn = cells.object(i).pre_list.object(r4)
r5 = rs.r.discunif($4, $4+$3-1)
nc = cells.object(r5).connect2target(syn)
nc.delay = $8
nc.weight = $9*0.5
nclist.append(nc)
}
} else {
rs = ranlist.object(i)
rs.start()
save_conv_input2.printf("%d, %d\n",gid, r)
for j = $6, $7 {
r = rs.r.discunif($4, $4+$3-1)
syn = cells.object(i).pre_list.object(j)
nc = cells.object(r).connect2target(syn)
nc.delay = $8
nc.weight = $9*0.1
nclist.append(nc)
}
}
}
}
save_conv_input1.close()
save_conv_input2.close()
}
proc connectcellsCA3() {local i, j, gid, nsyn, r, r1, r2, r3, cnt, jj, rconv1 localobj syn, nc, rs, rconvobj1
rconvobj1 = new Random(seed1)
r1 = 0
r2 = 0
r3 = 0
for i=0, cells.count-1 {
gid = gidvec.x[i]
if (gid >= $2 && gid < $1+$2) {
rconv1 = rconvobj1.uniform(0,1)
if (rconv1 <= probability) {
rs = ranlist.object(i)
rs.start()
if (r1 == 1) {
r1 = 0
r2 += 1
}
cnt = $5*r2
r1 += 1
if (r2>=nplf_mod) {
r3 = rs.r.discunif(0, nplf_mod)
cnt = $5*r3
}
nrnd_syn = 5
for j = $6, $7-nrnd_syn {
syn = cells.object(i).pre_list.object(j)
nc = cells.object(cnt+$4).connect2target(syn)
nc.delay = $8
nc.weight = $9
nclist.append(nc)
cnt += 1
}
for j = $6+nrnd_syn, $7 {
r = rs.r.discunif(0, nplf_mod)
cnt = $5*r
syn = cells.object(i).pre_list.object(j)
nc = cells.object(cnt+$4).connect2target(syn)
nc.delay = $8
nc.weight = $9
nclist.append(nc)
}
} else {
rs = ranlist.object(i)
rs.start()
for j = $6, $7 {
r = rs.r.discunif($4, $4+$3-1)
syn = cells.object(i).pre_list.object(j)
nc = cells.object(r).connect2target(syn)
nc.delay = $8
nc.weight = $9*0.1
nclist.append(nc)
}
}
}
}
}
proc mkinputs() {local i, r1 localobj stim, rs, robj
for i=0, cells.count-1 {
gid = gidvec.x[i]
if (gid >= iSEP && gid < ntot-nNOISE) {
robj = ranlist2.object(i)
robj.start()
robj.r.discunif(0, SEPNUM)
r1 = robj.repick()
stim = cells.object(i).stim
rs = ranlist2.object(i)
stim.number = r1
stim.start = SEPSTART
stim.interval = SEPINT
stim.noise = SEPNOISE
stim.burstint = SEPBINT
stim.burstlen = SEPBLEN
stim.noiseFromRandom(rs.r)
rs.r.negexp(1)
rs.start()
}
}
}
mknet_init()
mknet()
if (n_neuron!=11) {
mknet_AAC()
mknet_BC()
mknet_BSC()
}
if (n_neuron!=10) {
mknet_OLM()
}
mknet_VIPCCK()
mknet_VIPCR()
objref pvsoma[npcell]
objref vBC[nbcell], vAAC[naacell], vBSC[nbscell], vOLM[nolm], vVCCK[nvipcck], vVCR[nvipcr]
proc vrecord() {local i, gid
print "Record example voltage traces..."
for i=0, cells.count-1 {
gid = gidvec.x[i]
if (gid>=iPC && gid < iPC+npcell) {
pvsoma[gid-iPC] = new Vector()
pvsoma[gid-iPC].record(&cells.object(i).soma.v(0.5))
}
if (gid>=iAAC && gid < iAAC+naacell) {
vAAC[gid-iAAC] = new Vector()
vAAC[gid-iAAC].record(&cells.object(i).soma.v(0.5))
}
if (gid>=iBC && gid < iBC+nbcell) {
vBC[gid-iBC] = new Vector()
vBC[gid-iBC].record(&cells.object(i).soma.v(0.5))
}
if (gid>=iBSC && gid < iBSC+nbscell) {
vBSC[gid-iBSC] = new Vector()
vBSC[gid-iBSC].record(&cells.object(i).soma.v(0.5))
}
if (gid>=iOLM && gid < iOLM+nolm) {
vOLM[gid-iOLM] = new Vector()
vOLM[gid-iOLM].record(&cells.object(i).soma.v(0.5))
}
if (gid>=iVCCK && gid < iVCCK+nvipcck) {
vVCCK[gid-iVCCK] = new Vector()
vVCCK[gid-iVCCK].record(&cells.object(i).soma.v(0.5))
}
if (gid>=iVCR && gid < iVCR+nvipcr) {
vVCR[gid-iVCR] = new Vector()
vVCR[gid-iVCR].record(&cells.object(i).soma.v(0.5))
}
}
}
vrecord()
strdef fstem, path
sprint(fstem,"%s/Trial_%d_Run_%d",temp_dir,n_trials,n_runs)
tstop = SIMDUR
dt = 0.1
steps_per_ms = 10
celsius = 34
run()
objref fo
strdef fno
proc vout() { local i, j, gid, cnt
for j=0, cells.count-1 {
gid = gidvec.x[j]
cnt = 0
if (gid >= iPC && gid < iPC+npcell) {
sprint(fno,"%s_pvsoma_%d.dat", fstem, gid-iPC)
fo = new File(fno)
fo.wopen()
for i=0, pvsoma[gid-iPC].size-1 {
fo.printf("%g\n", pvsoma[gid-iPC].x[i])
}
fo.close()
}
if (gid >= iAAC && gid < iAAC+naacell) {
sprint(fno,"%s_aacell_%d.dat", fstem, gid-iAAC)
fo = new File(fno)
fo.wopen()
for i=0, vAAC[gid-iAAC].size-1 {
fo.printf("%g\n", vAAC[gid-iAAC].x[i])
}
fo.close()
}
if (gid >= iBC && gid < iBC+nbcell) {
sprint(fno,"%s_bcell_%d.dat", fstem, gid-iBC)
fo = new File(fno)
fo.wopen()
for i=0, vBC[gid-iBC].size-1 {
fo.printf("%g\n", vBC[gid-iBC].x[i])
}
fo.close()
}
if (gid >= iBSC && gid < iBSC+nbscell) {
sprint(fno,"%s_bscell_%d.dat", fstem, gid-iBSC)
fo = new File(fno)
fo.wopen()
for i=0, vBSC[gid-iBSC].size-1 {
fo.printf("%g\n", vBSC[gid-iBSC].x[i])
}
fo.close()
}
if (gid >= iOLM && gid < iOLM+nolm) {
sprint(fno,"%s_olm_%d.dat", fstem, gid-iOLM)
fo = new File(fno)
fo.wopen()
for i=0, vOLM[gid-iOLM].size-1 {
fo.printf("%g\n", vOLM[gid-iOLM].x[i])
}
fo.close()
}
if (gid >= iVCCK && gid < iVCCK+nvipcck) {
sprint(fno,"%s_vipcck_%d.dat", fstem, gid-iVCCK)
fo = new File(fno)
fo.wopen()
for i=0, vVCCK[gid-iVCCK].size-1 {
fo.printf("%g\n", vVCCK[gid-iVCCK].x[i])
}
fo.close()
}
if (gid >= iVCR && gid < iVCR+nvipcr) {
sprint(fno,"%s_vipcr_%d.dat", fstem, gid-iVCR)
fo = new File(fno)
fo.wopen()
for i=0, vVCR[gid-iVCR].size-1 {
fo.printf("%g\n", vVCR[gid-iVCR].x[i])
}
fo.close()
}
}
}
vout()
print "Job is done without Errors."