//xopen("$(NEURONHOME)/lib/hoc/noload.hoc") 

v_init = -75
tstop = 80 
dt = 0.01
celsius = 37
create acell_home_
access acell_home_
nsyn1=4

//  Single compartment cell 
begintemplate Grc
objref synlist, syn1[1],ampa1[1]
objref stim0
public soma, syn1,ampa1, stim0
public synlist, connect2target
create soma 
proc init(){
nsyn =$1
objectvar syn1[nsyn],ampa1[nsyn]
synlist= new List()
soma { 
nseg = 1 
	diam = 9.76 
	L = 9.76 
	cm = 1
	Ra = 100
Area = PI*diam*L*1e-8

insert pas 
g_pas=4.11e-4
e_pas=-75
stim0 = new VClamp(0.5)
for i=0, nsyn-1 {
syn1[i]=new GrC_Gludif2(0.5)
ampa1[i] = new AMPA_D2(0.5)//DCO kinetic scheme
//ampa1[i] = new AMPA_D4(0.5)  DOC kinetic scheme
setpointer ampa1[i].pglu, syn1[i].glu
}
}
for i=0, nsyn-1 {
 synlist.append(syn1[i])
}
}
proc connect2target(){soma $o2=new NetCon(&v(1),$o1)}
endtemplate Grc
begintemplate S1Gen
public pp, connect2target
external acell_home_
objref pp
proc init(){
acell_home_ pp= new SpGen2(0.5)}
proc connect2target(){$o2=new NetCon(pp,$o1)}
endtemplate S1Gen
ncells=1
nmossy=4
objref Mossy[nmossy],GrCell[ncells]
GrCell[0] = new Grc(nsyn1)
for i=0, nmossy -1 { 
Mossy[i]= new S1Gen()
}
objref cells, nclist, netcon
{cells = new List()  nclist = new List()}
func cell_append() {cells.append($o1)  
	return cells.count - 1 }
func nc_append() {//srcindex, tarcelindex, synindex
cells.object($1).connect2target(cells.object($2).synlist.object($3),netcon)
netcon.weight = $4   netcon.delay = $5
nclist.append(netcon)
return nclist.count - 1
}
//Network instantiation
for i=0, nmossy-1{
    cell_append(Mossy[i])
}
cell_append(GrCell[0])
for i=0, nsyn1-1 {
nc_append(i, 4, i,  1,0)
}

load_proc("nrnmainmenu") 
nrnmainmenu() 
xopen("grcparam.hoc")
xopen("mossy.hoc") 
xopen("post2men.hoc")
xopen("premenu.hoc")
load_file("init2dif.ses")
xopen("fig7or12.hoc")

finitialize(v_init)