// This is a fully wired network that functions with 500 GCs and 1 PP input
//With spike raster and  write to file 
// Auto init and run

load_file("nrngui.hoc")
secondorder=2 
tstep=0
period=2
dt=0.1
tstop=2000	//1500

// define network size
ngcell = 1000            //500
nbcell = 12              //6
nmcell = 30              //15
nhcell = 12                
npp = 1         //1024
sync= ngcell+nbcell+nmcell+nhcell
sproutNumber = 20
InhNet = 1	
TC=0.5	
IPSCmod=1     //0.7 
Spr=1
mcKILL=4
hcKILL=2
//BCinput =0.5		// decreses GC to BC conductance to avoid BC depol block



// Define EPSCs---- using:
//- an Exp2Syn object (parameters tau1 -rise, tau2 -decay, 
// time constant [ms] and e - rev potential [mV]
// delay [ms] and weight -variablr betw 0 and 1 [1 corresponding to 1 'S]

create acell_home_
access acell_home_

//***********************************************************************************************
//Defining granule cell
objref Gcell[ngcell]


	begintemplate GranuleCell


ndend1=4
ndend2=4
public  pre_list, connect_pre, subsets, is_art, is_connected
public  vbc2gc, vmc2gc, vhc2gc, vgc2bc, vbc2bc, vmc2bc, vhc2bc, vgc2mc, vbc2mc, vmc2mc, vhc2mc, vgc2hc, vmc2hc
public soma, gcdend1, gcdend2
public all, gcldend, pdend, mdend, ddend, ngcld

//nst=10
	//objectvar stim[nst]
//double stimdur[nst], stimdel[nst], stimamp[nst]
public stim, stimdur, stimamp, stimdel
objref stim, stimdur, stimamp, stimdel
create soma, gcdend1[ndend1], gcdend2[ndend2]
objref syn, pre_list, fl, vcl, fl_list
public fl, E_i, fl_list


proc init() {
	pre_list = new List()
	fl_list = new List()
	subsets()
	gctemp()
	synapse()
}
objref all, gcldend, pdend, mdend, ddend, ngcld
proc subsets(){ local i
	objref all, gcldend, pdend, mdend, ddend, ngcld
	all = new SectionList()
		soma all.append()
		for i=0, 3 gcdend1 [i] all.append()
		for i=0, 3 gcdend2 [i] all.append()

	gcldend  = new SectionList()
		gcdend1 [0] gcldend.append()
		gcdend2 [0] gcldend.append()

	pdend  = new SectionList()
		gcdend1 [1] pdend.append()
		gcdend2 [1] pdend.append()

	mdend  = new SectionList()
		gcdend1 [2] mdend.append()
		gcdend2 [2] mdend.append()

	ddend  = new SectionList()
		gcdend1 [3] ddend.append()
		gcdend2 [3] ddend.append()

	ngcld  = new SectionList()
		gcdend1 [1] ngcld.append()
		gcdend2 [1] ngcld.append()
		gcdend1 [2] ngcld.append()
		gcdend2 [2] ngcld.append()
		gcdend1 [3] ngcld.append()
		gcdend2 [3] ngcld.append()

}
proc gctemp() {

	soma {nseg=1 L=16.8 diam=16.8} // changed L & diam
		
	gcdend1 [0] {nseg=1 L=50 diam=3}
	for i = 1, 3	gcdend1 [i] {nseg=1 L=150 diam=3}

	gcdend2 [0] {nseg=1 L=50 diam=3}
	for i = 1, 3	gcdend2 [i] {nseg=1 L=150 diam=3}	 	

    
	forsec all {
		insert ccanl
	catau_ccanl = 10
	caiinf_ccanl = 5.e-6
	Ra=210
	}

	soma {insert ichan2  //ildikos ichan
	gnatbar_ichan2=0.12  //original 0.030 to .055 
	gkfbar_ichan2=0.016  //original 0.015
	gksbar_ichan2=0.006
		insert borgka
	gkabar_borgka=0.012
		insert nca  // HAV-N- Ca channel
	gncabar_nca=0.002  // check to modify- original 0.004
		insert lca 
	glcabar_lca=0.005
		insert cat
	gcatbar_cat=0.000037
		insert gskch
	gskbar_gskch=0.001
		insert cagk
	gkbar_cagk=0.0006
	gl_ichan2 = 0.00004
	cm=1

} 

		forsec gcldend {insert ichan2
	gnatbar_ichan2=0.018  //original 0.015
	gkfbar_ichan2=0.004
	gksbar_ichan2=0.006
		insert nca  // HAV-N- Ca channel
	gncabar_nca=0.003  // check to modify- original 0.004
		insert lca 
	glcabar_lca=0.0075
		insert cat
	gcatbar_cat=0.000075
		insert gskch
	gskbar_gskch=0.0004
		insert cagk
	gkbar_cagk=0.0006
	gl_ichan2 = 0.00004
	cm=1}
		
		forsec pdend {insert ichan2
	gnatbar_ichan2=0.013
	gkfbar_ichan2=0.004
	gksbar_ichan2=0.006
		insert nca  // HAV-N- Ca channel
	gncabar_nca=0.001  // check to modify- original 0.004
		insert lca 
	glcabar_lca=0.0075
		insert cat
	gcatbar_cat=0.00025
		insert gskch
	gskbar_gskch=0.0002
		insert cagk
	gkbar_cagk=0.001
	gl_ichan2 = 0.000063
	cm=1.6
	}
		
	 	forsec mdend {insert ichan2
	gnatbar_ichan2=0.008
	gkfbar_ichan2=0.001
	gksbar_ichan2=0.006
		insert nca  // HAV-N- Ca channel
	gncabar_nca=0.001  // check to modify- original 0.004
		insert lca 
	glcabar_lca=0.0005
		insert cat
	gcatbar_cat=0.0005
		insert gskch
	gskbar_gskch=0.0
		insert cagk
	gkbar_cagk=0.0024
	gl_ichan2 = 0.000063

	cm=1.6}

		forsec ddend {insert ichan2
	gnatbar_ichan2=0.0
	gkfbar_ichan2=0.001
	gksbar_ichan2=0.008
		insert nca  // HAV-N- Ca channel
	gncabar_nca=0.001  // check to modify- original 0.004
		insert lca 
	glcabar_lca=0.0
		insert cat
	gcatbar_cat=0.001
		insert gskch
	gskbar_gskch=0.0
		insert cagk
	gkbar_cagk=0.0024
	gl_ichan2 = 0.000063
	cm=1.6}
		
	
	connect gcdend1[0](0), soma(1)
	connect gcdend2[0](0), soma(1)
	for i=1,3 {
	connect gcdend1[i](0), gcdend1[i-1](1)
	}
	for i=1,3 {
	connect gcdend2[i](0), gcdend2[i-1](1)
	}


	forsec all {enat = 45 ekf = -90 eks = -90  ek=-90  elca=130 etca=130	 esk=-90
		 el_ichan2 =-70

		cao_ccanl=2 }  // make catau slower70e-3 	cao=2 cai=50.e-6 

		}
	proc connect_pre() {  // $o1 target point process, $o2 returned NetCon
	soma $o2 = new NetCon (&v(1), $o1)
	//alternative statement		$o1.soma pre_list.append(new NetCon(soma.v(1),syn,0,Delsyn,0))
	}

	objref syn
	proc synapse() {
	gcdend1[3] syn = new Exp2Syn(0.5) // PP syn based on Greg and Staley	0
	syn.tau1 = 1.5	syn.tau2 = 5.5	syn.e = 0
	pre_list.append(syn)

	gcdend2[3] syn = new Exp2Syn(0.5) // PPsyn based on Greg and Staley	1
	syn.tau1 = 1.5	syn.tau2 = 5.5	syn.e = 0
	pre_list.append(syn)

	gcdend1[1] syn = new Exp2Syn(0.5) // MC syn *** Estimated			2
	syn.tau1 = 1.5	syn.tau2 = 5.5	syn.e = 0
	pre_list.append(syn)

	gcdend2[1] syn = new Exp2Syn(0.5) // MC syn   *** Estimated			3
	syn.tau1 = 1.5	syn.tau2 = 5.5	syn.e = 0
	pre_list.append(syn)

	gcdend1[3] syn = new Exp2Syn(0.5) // HIPP  syn based on Harney and Jones corrected for temp	4
	syn.tau1 = 0.5	syn.tau2 = 6	syn.e = -70
	pre_list.append(syn)

	gcdend2[3] syn = new Exp2Syn(0.5) // HIPP syn based on Harney and Jones corrected for temp	5
	syn.tau1 = 0.5	syn.tau2 = 6	syn.e = -70
	pre_list.append(syn)

	soma syn = new Exp2Syn(0.5) // BC  syn syn based on Bartos	6
	syn.tau1 = 0.26	syn.tau2 = 5.5	syn.e = -70
	pre_list.append(syn)

	gcdend1[1] syn = new Exp2Syn(0.5) // Sprouted Syn*************	7
	syn.tau1 = 1.5	syn.tau2 = 5.5	syn.e = 0
	pre_list.append(syn)

	gcdend2[1] syn = new Exp2Syn(0.5) // Sprouted Syn*********	8
	syn.tau1 = 1.5	syn.tau2 = 5.5	syn.e = 0
	pre_list.append(syn)


// Total of 7 synapses per GC 0,1 PP; 	2,3 MC;	4,5 HIPP and 	6 BC	7,8 Sprout
	}
	func is_art() { return 0 }

	endtemplate GranuleCell
// ************************************************************************************************************
objref Bcell[nbcell]

	begintemplate BasketCell
ndend1=4
ndend2=4
ndend3=4
ndend4=4

public  pre_list, connect_pre, subsets, is_art, is_connected
public vbc2gc, vmc2gc, vhc2gc, vgc2bc, vbc2bc, vmc2bc, vhc2bc, vgc2mc, vbc2mc, vmc2mc, vhc2mc, vgc2hc, vmc2hc
public soma, bcdend1, bcdend2, bcdend3, bcdend4
public all, adend, bdend, cdend, ddend
create soma, bcdend1[ndend1], bcdend2[ndend2], bcdend3[ndend3], bcdend4[ndend4]

objref syn, pre_list, fl, vcl, fl_list
public fl, E_i, fl_list

nst=10
	objectvar stim[nst]
double stimdur[nst], stimdel[nst], stimamp[nst]
public stim, stimdur, stimamp, stimdel

objref syn
proc init() {
	pre_list = new List()
	fl_list = new List()
	subsets()
	temp()
	synapse()
	}

objref all, adend, bdend, cdend, ddend

proc subsets() { local i

	objref all, adend, bdend, cdend, ddend
	all = new SectionList()

     		soma all.append()
		bcdend1[0] all.append()
		bcdend2[0] all.append()
		bcdend3[0] all.append()
		bcdend4[0] all.append()

		bcdend1[1] all.append()
		bcdend2[1] all.append()
		bcdend3[1] all.append()
		bcdend4[1] all.append()

		bcdend1[2] all.append()
		bcdend2[2] all.append()
		bcdend3[2] all.append()
		bcdend4[2] all.append()

		bcdend1[3] all.append()
		bcdend2[3] all.append()
		bcdend3[3] all.append()
		bcdend4[3] all.append()


	adend  = new SectionList()
		for i=0,3{
		bcdend1 [i] adend.append()}

	bdend  = new SectionList()
		for i=0,3{
		bcdend2 [i] adend.append()}

	cdend  = new SectionList()
		for i=0,3{
		bcdend3 [i] adend.append()}

	ddend  = new SectionList()
		for i=0,3{
		bcdend4 [i] adend.append()}

}

proc temp() {
	soma {nseg=1 L=20 diam=15} // changed L & diam
	bcdend1 [0] {nseg=1 L=75 diam=4}	
	bcdend2 [0] {nseg=1 L=75 diam=3}
	bcdend3 [0] {nseg=1 L=75 diam=2}
 	bcdend4 [0] {nseg=1 L=75 diam=1}

	bcdend1 [1] {nseg=1 L=75 diam=4}
	bcdend2 [1] {nseg=1 L=75 diam=3}
	bcdend3 [1] {nseg=1 L=75 diam=2}
	bcdend4 [1] {nseg=1 L=75 diam=1}
 		 
	bcdend1 [2] {nseg=1 L=50 diam=4} 	
	bcdend2 [2] {nseg=1 L=50 diam=3}
	bcdend3 [2] {nseg=1 L=50 diam=2}
	bcdend4 [2] {nseg=1 L=50 diam=1} 
	
	bcdend1 [3] {nseg=1 L=50 diam=4}
	bcdend2 [3] {nseg=1 L=50 diam=3}
	bcdend3 [3] {nseg=1 L=50 diam=2}
	bcdend4 [3] {nseg=1 L=50 diam=1} 	


	forsec all {
		insert ccanl
	catau_ccanl = 10
	caiinf_ccanl = 5.e-6
		insert borgka
	gkabar_borgka=0.00015
		insert nca  // HAV-N- Ca channel
	gncabar_nca=0.0008   //check to modify- original 0.004
		insert lca 
	glcabar_lca=0.005
		insert gskch
	gskbar_gskch=0.000002
		insert cagk
	gkbar_cagk=0.0002
		insert tonic
    g_tonic =  0.00001     //10uS
    e_tonic = -74
	}

	soma {insert ichan2  //ildikos ichan
	gnatbar_ichan2=0.12  //original 0.030 to .055 
	gkfbar_ichan2=0.013  //original 0.015
	gl_ichan2 = 0.00018
	cm=1.4
	} 

	forsec adend {insert ichan2
	gnatbar_ichan2=0.12  //original 0.015
	gkfbar_ichan2=0.013
	gl_ichan2 = 0.00018
	cm=1.4
	}		
	forsec bdend {insert ichan2
	gnatbar_ichan2=0.0
	gkfbar_ichan2=0.00
	gl_ichan2 = 0.00018
	cm=1.4}
		
	forsec cdend {insert ichan2
	gnatbar_ichan2=0.0
	gkfbar_ichan2=0.00
	gl_ichan2 = 0.00018
	cm=1.4}

	forsec ddend {insert ichan2
	gnatbar_ichan2=0.0
	gkfbar_ichan2=0.00
	gl_ichan2 = 0.00018
	cm=1.4}

	connect bcdend1[0](0), soma(1)
	connect bcdend1[1](0), soma(1)
	connect bcdend1[2](0), soma(0)
	connect bcdend1[3](0), soma(0)
	
	connect bcdend2[0](0), bcdend1[0](1)
	connect bcdend2[1](0), bcdend1[1](1)
	connect bcdend2[2](0), bcdend1[2](1)
	connect bcdend2[3](0), bcdend1[3](1)
	
	connect bcdend3[0](0), bcdend2[0](1)
	connect bcdend3[1](0), bcdend2[1](1)
	connect bcdend3[2](0), bcdend2[2](1)
	connect bcdend3[3](0), bcdend2[3](1)

	connect bcdend4[0](0), bcdend3[0](1)
	connect bcdend4[1](0), bcdend3[1](1)
	connect bcdend4[2](0), bcdend3[2](1)
	connect bcdend4[3](0), bcdend3[3](1)

		forsec all {Ra=100}
	forsec all {enat = 55 ekf = -90  ek=-90  elca=130	esk=-90
		 el_ichan2 =-75
		cao_ccanl=2 }  // make catau slower70e-3 	cao=2 cai=50.e-6 

		}

	objref syn  
	proc synapse() {

	bcdend4 [0] syn = new Exp2Syn(0.5)	//PP(AMPA) syn to apical dist dend Dingledine '95          0
	syn.tau1 = 2	syn.tau2 = 6.3	syn.e = 0 // *** check Tau rise 2ms is the rise time
	pre_list.append(syn)  

	bcdend4 [1] syn = new Exp2Syn(0.5)	//PP(AMPA) syn to apical dist dend Dingledine '95		1
	syn.tau1 = 2	syn.tau2 = 6.3	syn.e = 0  // *** check Tau rise 2ms is the rise time	
      pre_list.append(syn)

	bcdend1 [0] syn = new Exp2Syn(0.5)	//GC(AMPA) syn to prox dend Geiger '97				2
	syn.tau1 = .3	syn.tau2 = .6	syn.e = 0   // original syn.e = 0
	pre_list.append(syn)

	bcdend1 [1] syn = new Exp2Syn(0.5)	//GC(AMPA) syn to prox dend Geiger '97				3
	syn.tau1 = .3	syn.tau2 = .6	syn.e = 0 // original syn.e = 0
	pre_list.append(syn)

	bcdend1 [3] syn = new Exp2Syn(0.5)	//GC(AMPA) syn to prox dend Geiger '97				4
	syn.tau1 = .3	syn.tau2 = .6	syn.e = 0 // original syn.e = 0
	pre_list.append(syn)

	bcdend1 [2] syn = new Exp2Syn(0.5)	//GC(AMPA) syn to prox dend Geiger '97				5
	syn.tau1 = .3	syn.tau2 = .6	syn.e = 0 // original syn.e = 0
	pre_list.append(syn)

	bcdend2 [0] syn = new Exp2Syn(0.5)	//MC(AMPA) syn to apical IML dend					6
	syn.tau1 = 0.9	syn.tau2 = 3.6	syn.e = 0 // *** Estimated based on CA3>BC min stim Dingledine '95
	pre_list.append(syn)

	bcdend2 [1] syn = new Exp2Syn(0.5)	//MC(AMPA) syn to apical IML dend					7
	syn.tau1 = 0.9	syn.tau2 = 3.6	syn.e = 0 // *** Estimated based on CA3>BC min stim Dingledine '95
	pre_list.append(syn)

	bcdend2 [0] syn = new Exp2Syn(0.5)	//BC(GABA) syn to apical IML dend Bartos				8
	syn.tau1 = 0.16		syn.tau2 = 1.8	syn.e = -74
	pre_list.append(syn)

	bcdend2 [1] syn = new Exp2Syn(0.5)	//BC(GABA) syn to apical IML dend Bartos				9
	syn.tau1 = 0.16		syn.tau2 = 1.8	syn.e = -74
	pre_list.append(syn)

	bcdend4 [0] syn = new Exp2Syn(0.5)	//HIPP(GABA) syn to apical distal dend 				10
	syn.tau1 = 0.4	syn.tau2 = 5.8	syn.e = -74 // *** Estimated as HIPP>GC
	pre_list.append(syn)

      bcdend4 [1] syn = new Exp2Syn(0.5)	//HIPP(GABA) syn to apical distal dend 				11
	syn.tau1 = 0.4	syn.tau2 = 5.8	syn.e = -74 // *** Estimated as HIPP>GC
	pre_list.append(syn)

//******************************Tonic GABA synapses**************

	bcdend3[0] syn = new Exp2Syn(0.5) // TONIC GABA synapse based on Rossi evoked data from cerebellum  12
	syn.tau1 = 7	syn.tau2 = 200	syn.e = -74
	pre_list.append(syn)
	
	bcdend3[1] syn = new Exp2Syn(0.5) // TONIC GABA synapse based on Rossi evoked data from cerebellum	13
	syn.tau1 = 7	syn.tau2 = 200	syn.e = -74
	pre_list.append(syn)
	
	bcdend3[2] syn = new Exp2Syn(0.5) // TONIC GABA synapse based on Rossi evoked data from cerebellum	14
	syn.tau1 = 7	syn.tau2 = 200	syn.e = -74
	pre_list.append(syn)
	
	bcdend3[3] syn = new Exp2Syn(0.5) // TONIC GABA synapse based on Rossi evoked data from cerebellum	15
	syn.tau1 = 7	syn.tau2 = 200	syn.e = -74
	pre_list.append(syn)
	
	bcdend2[0] syn = new Exp2Syn(0.5) // TONIC GABA synapse based on Rossi evoked data from cerebellum	16
	syn.tau1 = 7	syn.tau2 = 200	syn.e = -74
	pre_list.append(syn)
	
	bcdend2[1] syn = new Exp2Syn(0.5) // TONIC GABA synapse based on Rossi evoked data from cerebellum	17
	syn.tau1 = 7	syn.tau2 = 200	syn.e = -74
	pre_list.append(syn)
	
	bcdend2[2] syn = new Exp2Syn(0.5) // TONIC GABA synapse based on Rossi evoked data from cerebellum	18
	syn.tau1 = 7	syn.tau2 = 200	syn.e = -74
	pre_list.append(syn)
	
	bcdend2[3] syn = new Exp2Syn(0.5) // TONIC GABA synapse based on Rossi evoked data from cerebellum	19
	syn.tau1 = 7	syn.tau2 = 200	syn.e = -74
	pre_list.append(syn)

	
// Total of 12 synapses 	0,1 PP; 	2-5 GC; 	6,7 MC; 	8,9 BC; 	10,11 HIPP 
	}

	proc connect_pre() {  // $o1 target point process, $o2 returned NetCon
	soma $o2 = new NetCon (&v(1), $o1) 
			//$o1.soma pre_list.append(new NetCon(soma.v(1),syn,0,Delsyn,0)) alternative statement
	}
	func is_art()  { return 0 }
	endtemplate BasketCell

//***********************************************************************************************************
objref Mcell[nmcell]

	begintemplate MossyCell
ndend1=4
ndend2=4
ndend3=4
ndend4=4

public  pre_list, connect_pre, subsets, is_art, is_connected
public vbc2gc, vmc2gc, vhc2gc, vgc2bc, vbc2bc, vmc2bc, vhc2bc, vgc2mc, vbc2mc, vmc2mc, vhc2mc, vgc2hc, vmc2hc
public soma, mcdend1, mcdend2, mcdend3, mcdend4
create soma, mcdend1[ndend1], mcdend2[ndend2], mcdend3[ndend3], mcdend4[ndend4]
public all, adend, bdend, cdend, ddend
objref syn, pre_list, fl
nst=10
	objectvar stim[nst]
double stimdur[nst], stimdel[nst], stimamp[nst]
public stim, stimdur, stimamp, stimdel


objref syn
proc init() {
	pre_list = new List()
	subsets()
	temp()
	synapse()
}

objref all, pdend, ddend

proc subsets() { local i
	objref all, pdend, ddend
	all = new SectionList()
		soma all.append()
		for i=0, 3 mcdend1 [i] all.append()
		for i=0, 3 mcdend2 [i] all.append()
		for i=0, 3 mcdend3 [i] all.append()
		for i=0, 3 mcdend4 [i] all.append()

	pdend  = new SectionList()
		mcdend1 [0] pdend.append()
		mcdend2 [0] pdend.append()
		mcdend3 [0] pdend.append()
		mcdend4 [0] pdend.append()

	ddend  = new SectionList()
		for i=1, 3 mcdend1 [i] ddend.append()
		for i=1, 3 mcdend2 [i] ddend.append()
		for i=1, 3 mcdend3 [i] ddend.append()
		for i=1, 3 mcdend4 [i] ddend.append()
	
}

proc temp() {

	soma {nseg=1 L=20 diam=20} // changed L & diam
		
	mcdend1 [0] {nseg=1 L=50 diam=5.78}
	mcdend1 [1] {nseg=1 L=50 diam=4}
	mcdend1 [2] {nseg=1 L=50 diam=2.5}
 	mcdend1 [3] {nseg=1 L=50 diam=1}

	mcdend2 [0] {nseg=1 L=50 diam=5.78}
	mcdend2 [1] {nseg=1 L=50 diam=4}
	mcdend2 [2] {nseg=1 L=50 diam=2.5}
	mcdend2 [3] {nseg=1 L=50 diam=1}
 		 
	mcdend3 [0] {nseg=1 L=50 diam=5.78}
	mcdend3 [1] {nseg=1 L=50 diam=4}
	mcdend3 [2] {nseg=1 L=50 diam=2.5}
	mcdend3 [3] {nseg=1 L=50 diam=1} 
	
	mcdend4 [0] {nseg=1 L=50 diam=5.78}
	mcdend4 [1] {nseg=1 L=50 diam=4}
	mcdend4 [2] {nseg=1 L=50 diam=2.5}
	mcdend4 [3] {nseg=1 L=50 diam=1} 	

    
	forsec all {
		insert ccanl
	catau_ccanl = 10
	caiinf_ccanl = 5.e-6
		insert borgka
	gkabar_borgka=0.00001
		insert nca  // HAV-N- Ca channel
	gncabar_nca=0.00008  // check to modify- original 0.004
		insert lca 
	glcabar_lca=0.0006
		insert gskch
	gskbar_gskch=0.016
		insert cagk
	gkbar_cagk=0.0165
		insert hyperde3
	ghyfbar_hyperde3=0.000005
	ghysbar_hyperde3=0.000005
	}

	soma {insert ichan2  //ildikos ichan
	gnatbar_ichan2=0.12  //original 0.030 to .055 
	gkfbar_ichan2=0.0005  //original 0.015
	gl_ichan2 = 0.000011
	cm=0.6} 

	forsec pdend {insert ichan2
	gnatbar_ichan2=0.12  //original 0.015
	gkfbar_ichan2=0.0005
	gl_ichan2 = 0.000044
	cm=2.4}
		
	forsec ddend {insert ichan2
	gnatbar_ichan2=0.0
	gkfbar_ichan2=0.00
	gl_ichan2 = 0.000044
	cm=2.4}
		
	connect mcdend1[0](0), soma(1)
	connect mcdend2[0](0), soma(1)
	connect mcdend3[0](0), soma(0)
	connect mcdend4[0](0), soma(0)
	for i=1,3 {connect mcdend1[i](0), mcdend1[i-1](1)}
	for i=1,3 {connect mcdend2[i](0), mcdend2[i-1](1)}
	for i=1,3 {connect mcdend3[i](0), mcdend3[i-1](1)}
	for i=1,3 {connect mcdend4[i](0), mcdend4[i-1](1)}

	forsec all {Ra=100}
	forsec all {enat = 55 ekf = -90  ek=-90  esk=-90 elca=130
		ehyf=-40 ehys=-40
		 el_ichan2 =-59

		cao_ccanl=2 }  // make catau slower70e-3 	cao=2 cai=50.e-6 


		}
	objref syn  
	proc synapse() {

	mcdend1 [3] syn = new Exp2Syn(0.7)	//PP(AMPA) syn to dist dend similar to PP to GC
	syn.tau1 = 1.5	syn.tau2 = 5.5	syn.e = 0
	pre_list.append(syn)

	mcdend2 [3] syn = new Exp2Syn(0.7)	//PP(AMPA) syn to dist dend similar to PP to GC
	syn.tau1 = 1.5	syn.tau2 = 5.5	syn.e = 0
	pre_list.append(syn)

	mcdend3 [3] syn = new Exp2Syn(0.7)	//PP(AMPA) syn to dist dend similar to PP to GC
	syn.tau1 = 1.5	syn.tau2 = 5.5	syn.e = 0
	pre_list.append(syn)

	mcdend4 [3] syn = new Exp2Syn(0.7)	//PP(AMPA) syn to dist dend similar to PP to GC
	syn.tau1 = 1.5	syn.tau2 = 5.5	syn.e = 0
	pre_list.append(syn)

	mcdend1 [0] syn = new Exp2Syn(0.5)	//GC(AMPA) syn to prox dend similar to GC>CA3 Jonas '93
	syn.tau1 = 0.5	syn.tau2 = 6.2	syn.e = 0
	pre_list.append(syn)

	mcdend2 [0] syn = new Exp2Syn(0.5)	//GC(AMPA) syn to prox dend similar to GC>CA3 Jonas '93
	syn.tau1 = 0.5	syn.tau2 = 6.2	syn.e = 0
	pre_list.append(syn)

	mcdend3 [0] syn = new Exp2Syn(0.5)	//GC(AMPA) syn to prox dend similar to GC>CA3 Jonas '93
	syn.tau1 = 0.5	syn.tau2 = 6.2	syn.e = 0
	pre_list.append(syn)

	mcdend4 [0] syn = new Exp2Syn(0.5)	//GC(AMPA) syn to prox dend similar to GC>CA3 Jonas '93
	syn.tau1 = 0.5	syn.tau2 = 6.2	syn.e = 0
	pre_list.append(syn)

	mcdend1 [0] syn = new Exp2Syn(0.5)	//MC(AMPA) syn to prox dend similar to CA#>CA3 Aaron
	syn.tau1 = 0.45 	syn.tau2 =2.2	syn.e = 0
	pre_list.append(syn)

	mcdend2 [0] syn = new Exp2Syn(0.5)	//MC(AMPA) syn to prox dend similar to CA#>CA3 Aaron
	syn.tau1 = 0.45	syn.tau2 = 2.2		syn.e = 0
	pre_list.append(syn)

	mcdend3 [0] syn = new Exp2Syn(0.5)	//MC(AMPA) syn to prox dend similar to CA#>CA3 Aaron
	syn.tau1 = 0.45	syn.tau2 = 2.2	syn.e = 0
	pre_list.append(syn)

	mcdend4 [0] syn = new Exp2Syn(0.5)	//MC(AMPA) syn to prox dend similar to CA#>CA3 Aaron
	syn.tau1 = 0.45	syn.tau2 = 2.2	syn.e = 0
	pre_list.append(syn)

	soma syn = new Exp2Syn(0.5)	//BC(GABA) syn to prox dend based on BC>CA3 Bartos PNAS (mice)
	syn.tau1 = 0.3	syn.tau2 = 3.3	syn.e = -70
	pre_list.append(syn)

	mcdend1 [2] syn = new Exp2Syn(0.5)	//HIPP(GABA) syn to prox dend based on Hilar>GC Harney&Jones
	syn.tau1 = .5	syn.tau2 = 6		syn.e = -70
	pre_list.append(syn)

	mcdend2 [2] syn = new Exp2Syn(0.5)	//HIPP(GABA) syn to prox dend based on Hilar>GC Harney&Jones
	syn.tau1 = .5	syn.tau2 = 6		syn.e = -70
	pre_list.append(syn)

	mcdend3 [2] syn = new Exp2Syn(0.5)	//HIPP(GABA) syn to prox dend based on Hilar>GC Harney&Jones
	syn.tau1 = .5	syn.tau2 = 6		syn.e = -70
	pre_list.append(syn)

	mcdend4 [2] syn = new Exp2Syn(0.5)	//HIPP(GABA) syn to prox dend based on Hilar>GC Harney&Jones
	syn.tau1 = .5	syn.tau2 = 6	syn.e =-70
	pre_list.append(syn)

	

// Total of 17 synapses 	0-3 PP; 	4-7 GC; 	8-11 MC; 	12 BC; 	13-16 HIPP 
	}

	proc connect_pre() {  // $o1 target point process, $o2 returned NetCon
	soma $o2 = new NetCon (&v(1), $o1)
	}

	func is_art()  { return 0 }

	endtemplate MossyCell

//**************************************************************************************************
objref Hcell[nhcell]

	begintemplate HIPPCell

ndend1=3
ndend2=3
ndend3=3
ndend4=3
public  pre_list, connect_pre, subsets, is_art, is_connected
public vbc2gc, vmc2gc, vhc2gc, vgc2bc, vbc2bc, vmc2bc, vhc2bc, vgc2mc, vbc2mc, vmc2mc, vhc2mc, vgc2hc, vmc2hc
public soma, hcdend1, hcdend2, hcdend3, hcdend4
create soma, hcdend1[ndend1], hcdend2[ndend2], hcdend3[ndend3], hcdend4[ndend4]
public all, pdend, ddend
objref syn, pre_list
nst=10
	objectvar stim[nst]
double stimdur[nst], stimdel[nst], stimamp[nst]
public stim, stimdur, stimamp, stimdel


objref syn
proc init() {
	pre_list = new List()
	subsets()
	temp()
	synapse()
}

objref all, pdend, ddend

proc subsets() { local i
	objref all, pdend, ddend
	all = new SectionList()
		soma all.append()
		for i=0, 2 hcdend1 [i] all.append()
		for i=0, 2 hcdend2 [i] all.append()
		for i=0, 2 hcdend3 [i] all.append()
		for i=0, 2 hcdend4 [i] all.append()

	pdend  = new SectionList()
		hcdend1 [0] pdend.append()
		hcdend2 [0] pdend.append()
		hcdend3 [0] pdend.append()
		hcdend4 [0] pdend.append()

	ddend  = new SectionList()
		for i=1, 2 hcdend1 [i] ddend.append()
		for i=1, 2 hcdend2 [i] ddend.append()
		for i=1, 2 hcdend3 [i] ddend.append()
		for i=1, 2 hcdend4 [i] ddend.append()
}

proc temp() {

	soma {nseg=1 L=20 diam=10} // changed L & diam
		
	hcdend1 [0] {nseg=1 L=75 diam=3}
	hcdend1 [1] {nseg=1 L=75 diam=2}
	hcdend1 [2] {nseg=1 L=75 diam=1}

	hcdend2 [0] {nseg=1 L=75 diam=3}
	hcdend2 [1] {nseg=1 L=75 diam=2}
	hcdend2 [2] {nseg=1 L=75 diam=1}
 		 
	hcdend3 [0] {nseg=1 L=50 diam=3}
	hcdend3 [1] {nseg=1 L=50 diam=2}
	hcdend3 [2] {nseg=1 L=50 diam=1}
	
	hcdend4 [0] {nseg=1 L=50 diam=3}
	hcdend4 [1] {nseg=1 L=50 diam=2}
	hcdend4 [2] {nseg=1 L=50 diam=1}	

    
	forsec all {
		insert ccanl
	catau_ccanl = 10
	caiinf_ccanl = 5.e-6
		insert borgka
	gkabar_borgka=0.0008
		insert nca  // HAV-N- Ca channel
	gncabar_nca=0.0  //0005  check to modify- original 0.004
		insert lca
	glcabar_lca=0.0015
		insert gskch
	gskbar_gskch=0.003
		insert cagk
	gkbar_cagk=0.003
		insert hyperde3
	ghyfbar_hyperde3=0.000015
	ghysbar_hyperde3=0.000015
	}

	soma {insert ichan2  //ildikos ichan
	gnatbar_ichan2=0.2  //original 0.030 to .055 
	gkfbar_ichan2=0.006  //original 0.015
	gl_ichan2 = 0.000036
	cm=1.1} 

	forsec pdend {insert ichan2
	gnatbar_ichan2=0.2  //original 0.015
	gkfbar_ichan2=0.006
	gl_ichan2 = 0.000036
	cm=1.1}
		
	forsec ddend {insert ichan2
	gnatbar_ichan2=0.0
	gkfbar_ichan2=0.00
	gl_ichan2 = 0.000036
	cm=1.1}

	connect hcdend1[0](0), soma(1)
	connect hcdend2[0](0), soma(1)
	connect hcdend3[0](0), soma(0)
	connect hcdend4[0](0), soma(0)
	for i=1,2 {connect hcdend1[i](0), hcdend1[i-1](1)}
	for i=1,2 {connect hcdend2[i](0), hcdend2[i-1](1)}
	for i=1,2 {connect hcdend3[i](0), hcdend3[i-1](1)}
	for i=1,2 {connect hcdend4[i](0), hcdend4[i-1](1)}

	forsec all {Ra=100}
	forsec all {enat = 55 ekf = -90  ek=-90  esk=-90 elca=130
		 el_ichan2 =-70.45	ehyf=-40 ehys=-40
		cao_ccanl=2 }  // make catau slower70e-3 	cao=2 cai=50.e-6 

		}

	objref syn  
	proc synapse() {

	hcdend1 [0] syn = new Exp2Syn(0.5)	//GC(AMPA) syn to prox dend similar to GC>BC
	syn.tau1 = .3	syn.tau2 = .6	syn.e = 0
	pre_list.append(syn)

	hcdend2 [0] syn = new Exp2Syn(0.5)	//GC(AMPA) syn to prox dend similar to GC>BC
	syn.tau1 = .3	syn.tau2 = .6	syn.e = 0
	pre_list.append(syn)

	hcdend3 [0] syn = new Exp2Syn(0.5)	//GC(AMPA) syn to prox dend similar to GC>BC
	syn.tau1 = .3 syn.tau2 = .6	syn.e = 0
	pre_list.append(syn)

	hcdend4 [0] syn = new Exp2Syn(0.5)	//GC(AMPA) syn to prox dend similar to GC>BC
	syn.tau1 = .3	syn.tau2 = .6	syn.e = 0
	pre_list.append(syn)

	hcdend1 [1] syn = new Exp2Syn(0.5)	//MC(AMPA) syn to mid dend similar to CA3>int Aaron
	syn.tau1 = .9	syn.tau2 = 3.6	syn.e = 0 //*** Assumed data at physio temp
	pre_list.append(syn)

	hcdend2 [1] syn = new Exp2Syn(0.5)	//MC(AMPA) syn to mid dend similar to CA3>int Aaron
	syn.tau1 = 0.9	syn.tau2 = 3.6	syn.e = 0 //*** Assumed data at physio temp
	pre_list.append(syn)

	hcdend3 [1] syn = new Exp2Syn(0.5)	//MC(AMPA) syn to mid dend similar to CA3>int Aaron
	syn.tau1 = 0.9	syn.tau2 = 3.6	syn.e = 0  //*** Assumed data at physio temp
	pre_list.append(syn)

	hcdend4 [1] syn = new Exp2Syn(0.5)	//MC(AMPA) syn to mid dend similar to CA3>int Aaron
	syn.tau1 = 0.9		syn.tau2 = 3.6 	syn.e = 0  //*** Assumed data at physio temp
	pre_list.append(syn)

// Total of 12 synapses 	0-3 PP; 	4-7 GC; 	8-11 MC	
	}

	proc connect_pre() {  // $o1 target point process, $o2 returned NetCon
	soma $o2 = new NetCon (&v(1), $o1)
	}

	func is_art()  { return 0 }


	endtemplate HIPPCell
//************************************************************************************************************
objref PPSt[npp]

	begintemplate PPstim
	public pp, connect_pre, is_art, acell
	create acell
	objref pp

	proc init() {
		actemp() 		
	}
		proc actemp() {
				acell pp = new NetStim(.5)
				pp.interval = 20          //100
				pp.number = 1             //1
				pp.start = 2001
				pp.noise = 0
				}

	func is_art() {return 1}
	proc connect_pre() {acell $o2 = new NetCon(pp, $o1)}
	endtemplate PPstim
//*************************************************************
//*************************************************************
objref SYSt[sync]

	begintemplate SYstim

	public pp, connect_pre, is_art
	external acell_home_
	objref pp

	proc init() {
		actemp() 		
	}
		proc actemp() {
				acell_home_ pp = new NetStim(.5)
				pp.interval = 400
				pp.number = 20
				pp.start = 10
				pp.noise = 0.7
				}

	func is_art() {return 1}
	proc connect_pre() {$o2 = new NetCon(pp, $o1)}

	endtemplate SYstim


//###############################################################################################################
	
// NETWORK SPECIFICATION INTERFACE
	for i=0, ngcell-1 {Gcell[i] = new GranuleCell(i)}
	for i=0, nbcell-1 {Bcell[i] = new BasketCell(i)}
	for i=0, nmcell-1 {Mcell[i] = new MossyCell(i)}
	for i=0, nhcell-1 {Hcell[i] = new HIPPCell(i)}
	for i =0, npp-1 {PPSt[i] = new PPstim(i)}
	for i =0, sync-1 {SYSt[i] = new SYstim(i)}


objref nclist, netcon, cells, net_c, net_d, net_gr,  net_bc,  net_mc,  net_hc,  vbc2gc, vmc2gc, vhc2gc
{  cells = new List()
nclist = new List()
}
 func cell_append() {cells.append($o1) 
	return cells.count -1}

func nc_append() {

	if ($3 >= 0 )	{
		cells.object($1).connect_pre(cells.object($2).pre_list.object($3),netcon)
		netcon.weight = $4	netcon.delay = $5	netcon.threshold = $6
	} 
	nclist.append(netcon)
	return nclist.count-1
		}

func is_connected() {local i, c
	c=0
	for i=0, nclist.count-1 {
	net_c= nclist.object(i)
	if (($o1 == net_c.postcell())  && ($o2 == net_c.precell())) {c=1}
}
return c
}

objref vbc2gc, vmc2gc, vhc2gc, vgc2bc, vbc2bc, vmc2bc, vhc2bc, vgc2mc, vbc2mc, vmc2mc, vhc2mc, vgc2hc, vmc2hc,vgc2gc
objref killMC, killHC
	{
	vgc2bc = new Vector(nbcell, 0)
	vbc2bc = new Vector(nbcell, 0)
	vmc2bc = new Vector(nbcell, 0)
	vhc2bc = new Vector(nbcell, 0)

	vgc2mc = new Vector(nmcell, 0)
	vbc2mc = new Vector(nmcell, 0)
	vmc2mc = new Vector(nmcell, 0)
	vhc2mc = new Vector(nmcell, 0)


	vgc2hc = new Vector(nhcell, 0)
	vmc2hc = new Vector(nhcell, 0)

	vbc2gc = new Vector(ngcell, 0)
	vmc2gc = new Vector(ngcell, 0)
	vhc2gc = new Vector(ngcell, 0)
	vgc2gc = new Vector(ngcell, 0)

	killMC = new Vector(mcKILL, -1)
	killHC = new Vector(hcKILL, -1)
	}

//initiating randm number generator

objref rdsynb, rdsyna, rdgc2hc, rdgc2bc, rdgc2mc, rdbc2gc, rdbc2bc, rdbc2mc, deadMC, deadHC, rdgap, rddend
objref rdmc2gc1, rdmc2gc2, rdmc2bc, rdmc2mc, rdmc2mc1, rdmc2hc, rdhc2gc, rdhc2bc, rdhc2mc, rdgc2gc
/*ropen("/proc/uptime")		// get a seed  that is changing based on the processing time
	 {			
 	rseed = fscan()		// so simulation will not start with the same seed
	ropen()		
	}*/
rseed=53641.34
//************************************GC***********************************************
rdgc2bc = new Random(rseed)			// use for syn.connections 
proc new_rdgc2bc() {rdgc2bc.discunif(-1,1)}
new_rdgc2bc()
rdgc2mc = new Random(rseed)			// use for syn.connections 
proc new_rdgc2mc() {rdgc2mc.discunif(0,2)}
new_rdgc2mc()
rdgc2hc = new Random(rseed)			// use for syn.connections 
proc new_rdgc2hc() {rdgc2hc.discunif(-2 , 2)}
new_rdgc2hc()
rdgc2gc = new Random(rseed)			// use for syn.connections 
proc new_rdgc2gc() {rdgc2gc.discunif(-50, 50)}
new_rdgc2gc()

//************************************BC***********************************************
rdbc2gc = new Random(rseed)			// use for syn.connections 
proc new_rdbc2gc() {rdbc2gc.discunif(-70, 70)}
new_rdbc2gc()
rdbc2bc = new Random(rseed)			// use for syn.connections 
proc new_rdbc2bc() {rdbc2bc.discunif(-1, 1)}
new_rdbc2bc()
rdbc2mc = new Random(rseed)			// use for syn.connections 
proc new_rdbc2mc() {rdbc2mc.discunif(-3, 3)}
new_rdbc2mc()
rdgap = new Random(rseed)                            
proc new_rdgap() {rdgap.discunif(-1,1)}    // use for gap junc
new_rdgap()
rddend = new Random(rseed)                            
proc new_rddend() {rddend.discunif(0,3)}    
new_rddend()
//*************************************MC********************************************
deadMC = new Random(rseed)			// use for syn.connections 
proc new_deadMC() {deadMC.discunif(ngcell+nbcell, ngcell+nbcell+nmcell-1)}
new_deadMC()

for i= 0, mcKILL-1 {
MC = deadMC.repick()
if (killMC.contains(MC) == 0) {
killMC.x[i] = MC
} else {i -=1}
}
rdmc2gc1 = new Random(rseed)			// use for syn.connections 
proc new_rdmc2gc1() {rdmc2gc1.discunif(25, 175)}
new_rdmc2gc1()
rdmc2gc2 = new Random(rseed)			// use for syn.connections 
proc new_rdmc2gc2() {rdmc2gc2.discunif(-175, -25)}
new_rdmc2gc2()
rdmc2bc = new Random(rseed)			// use for syn.connections 
proc new_rdmc2bc() {rdmc2bc.discunif(-3,3)}
new_rdmc2bc()
rdmc2mc = new Random(rseed)			// use for syn.connections 
proc new_rdmc2mc() {rdmc2mc.discunif(ngcell+nbcell, ngcell+nbcell+nmcell-1)}
new_rdmc2mc()
rdmc2mc1 = new Random(rseed)			// use for syn.connections 
proc new_rdmc2mc1() {rdmc2mc1.discunif(-3, 3)}
new_rdmc2mc1()
rdmc2hc = new Random(rseed)			// use for syn.connections 
proc new_rdmc2hc() {rdmc2hc.discunif(-2, 2)}
new_rdmc2hc()
//*************************************HC********************************************
deadHC = new Random(rseed)			// use for syn.connections 
proc new_deadHC() {deadHC.discunif(ngcell+nbcell+nmcell, ngcell+nbcell+nmcell+nhcell-1)}
new_deadHC()

for i= 0, hcKILL-1 {
HC = deadHC.repick()
if(killHC.contains(HC) == 0) {
print HC
killHC.x[i] = HC
} else {i -=1}
}
rdhc2gc = new Random(rseed)			// use for syn.connections 
proc new_rdhc2gc() {rdhc2gc.discunif(-130, 130)}
new_rdhc2gc()
rdhc2bc = new Random(rseed)			// use for syn.connections 
proc new_rdhc2bc() {rdhc2bc.discunif(-2, 2)}
new_rdhc2bc()
rdhc2mc = new Random(rseed)			// use for syn.connections 
proc new_rdhc2mc() {rdhc2mc.discunif(-2, 2)}
new_rdhc2mc()

//*********************************************************************************

rdsyna = new Random(rseed)		// initialize random distr.
proc new_rdsyna() {rdsyna.discunif(0, 1)}
new_rdsyna()

rdsynb = new Random(rseed)		// initialize random distr.
proc new_rdsynb() {rdsynb.discunif(0, 3)}
new_rdsynb()

//	NETWORK INITIATION
	for i = 0, ngcell-1 {cell_append(Gcell[i])} // cells 0-4 GCs
	for i = 0, nbcell-1 {cell_append(Bcell[i])} // cells 5-6 BC
	for i = 0, nmcell-1 {cell_append(Mcell[i])} // cell 7 MC
	for i = 0, nhcell-1 {cell_append(Hcell[i])} // cell 8 HC
	for i = 0, npp-1 {cell_append(PPSt[i])}	// cell 9 PP
	for i = 0, sync-1 {cell_append(SYSt[i])}	

//********************************************Preforant Path  synaptic connections ************************************************
      objref randomVector, connectionFile
proc initPP() { local i,j
for i=450,550  {	
	nc_append(ngcell+nbcell+nmcell+nhcell, i, 0, 2e-2, 3, 10)  // Gcell[3] to Bcell[1]
	nc_append(ngcell+nbcell+nmcell+nhcell, i, 1, 2e-2, 3, 1)  // Gcell[3] to Bcell[1]
		}
	for j= 1005,1006 { 
	nc_append(ngcell+nbcell+nmcell+nhcell, j, 0, 0.5e-2, 3, 10)  // Gcell[3] to Bcell[1]
	nc_append(ngcell+nbcell+nmcell+nhcell, j, 1, 0.5e-2, 3, 10)  // Gcell[3] to Bcell[1]
	}
	}

//******************************************************************************************

//**************Sync Stim connections connections ******************************
objref randomVector, connectionFile

proc initSY() { local i,j
		for j=0, ngcell-1 {	
	nc_append(j+ngcell+nbcell+nmcell+nhcell+npp, j, 0, 2e-2, 3, 10)  // Gcell[3] to Bcell[1]
	nc_append(j+ngcell+nbcell+nmcell+nhcell+npp, j, 1, 2e-2, 3, 1)  // Gcell[3] to Bcell[1]
	}

	for i= ngcell, ngcell+nbcell-1 { 
	nc_append(i+ngcell+nbcell+nmcell+nhcell+npp, i, 0, 0.25e-2, 3, 10)  // Gcell[3] to Bcell[1]
	nc_append(i+ngcell+nbcell+nmcell+nhcell+npp, i, 1, 0.25e-2, 3, 10)  // Gcell[3] to Bcell[1]
	}
	
}
//******************************************************************************************

//******************************************************************
randomVector = new Vector(ngcell)
connectionFile = new File()
connectionFile.wopen("./connections.dat")

//**************Granule Cell post synaptic connections ******************************
proc initGcell() { local i,j

for  i=0, ngcell-1 {
	connectionFile.printf("%d\t",i)
        vectorIndex = 0
	randomVector.resize(nbcell)
	for k = 0, randomVector.size-1 {randomVector.x[k]=0}
	while (randomVector.sum < 2) {
	if (i < 84) { a=0}
	if ((i > 83) && (i < 166)) { a=1}
	if ((i > 165) && (i < 252)) { a=2}
	if ((i > 251) && (i < 336)) { a=3}
	if ((i > 335) && (i < 420)) { a=4}
	if ((i > 419) && (i < 500)) { a=5}
	if ((i > 499) && (i < 582)) {a=6}
	if ((i > 581) && (i < 663)) {a=7}
	if ((i > 662) && (i < 745)) {a=8}
	if ((i > 744) && (i < 827)) {a=9}
	if ((i > 826) && (i < 909)) {a=10}
	if ((i > 908) && (i < 1000)){a=11}


	 Gauz3 = rdgc2bc.repick()
	if (a+Gauz3 > nbcell-1) {npost = a+Gauz3-nbcell }
	if (a+Gauz3 < 0) {npost = a+Gauz3+nbcell} 
	if ((a+Gauz3 > -1) && (a+Gauz3 < nbcell)) {npost = a+Gauz3}
	if ((randomVector.x[npost] == 0) && (vgc2bc.x[npost] < 175)) {
	   randomVector.x[npost] += 1
	   vgc2bc.x[npost] += 1
	}
	dbr = rdsynb.repick()
	}
	for k = 0, randomVector.size-1 {
	    if (randomVector.x[k] == 1) {
	       nc_append(i, ngcell+k, dbr+2, 4.7e-3, .8, 10)  
	       connectionFile.printf("%d\t",ngcell+k)
	    }
	}    

	randomVector.resize(nmcell)
	for k = 0, randomVector.size-1 {randomVector.x[k]=0}
	while (randomVector.sum < 1) {
	if (i < 100) { a=0}
	if ((i > 99) && (i < 200)) { a=1}
	if ((i > 199) && (i < 300)) { a=2}
	if ((i > 299) && (i < 400)) { a=3}
	if ((i > 399) && (i < 500)) { a=4}
	if ((i > 499) && (i < 600)) { a=5}
	if ((i > 599) && (i < 700)) { a=6}
	if ((i > 699) && (i < 800)) { a=7}
	if ((i > 799) && (i < 900)) { a=8}
	if ((i > 899) && (i < 1000)) { a=9}
	b=a*3
	 npost = rdgc2mc.repick()
	if ((randomVector.x[npost+b] == 0) && (vgc2mc.x[npost+b] < 38)) {
	   randomVector.x[npost+b] += 1
	   vgc2mc.x[npost+b] += 1
	}
	dbr = rdsynb.repick()
	}
	for k = 0, randomVector.size-1 {
	if ((randomVector.x[k] == 1)&& (killMC.contains(ngcell+nbcell+k) == 0)) {
	    	nc_append(i, ngcell+nbcell+k, dbr+4, 0.2e-3, 1.5, 10)  
	       connectionFile.printf("%d\t",ngcell+nbcell+k)
	    }
	}

	randomVector.resize(nhcell)
	for k = 0, randomVector.size-1 {randomVector.x[k]=0}
	while (randomVector.sum < 3) {
	if (i < 84) { a=0}
	if ((i > 83) && (i < 166)) {a=1}
	if ((i > 165) && (i < 252)) {a=2}
	if ((i > 251) && (i < 336)) {a=3}
	if ((i > 335) && (i < 420)) {a=4}
	if ((i > 419) && (i < 500)) {a=5}
	if ((i > 499) && (i < 582)) {a=6}
	if ((i > 581) && (i < 663)) {a=7}
	if ((i > 662) && (i < 745)) {a=8}
	if ((i > 744) && (i < 827)) {a=9}
	if ((i > 826) && (i < 909)) {a=10}
	if ((i > 908) && (i < 1000)){a=11}

	 Gauz3 = rdgc2hc.repick()
	if (a+Gauz3 > nhcell-1) {npost = a+Gauz3-nhcell }
	if (a+Gauz3 < 0) {npost = a+Gauz3+nhcell} 
	if ((a+Gauz3 > -1) && (a+Gauz3 < nhcell)) {npost = a+Gauz3}
	if ((randomVector.x[npost] == 0) && (vgc2hc.x[npost] < 275)) {
	   randomVector.x[npost] += 1
	   vgc2hc.x[npost] += 1
	}
	dbr = rdsynb.repick()
	}
	for k = 0, randomVector.size-1 {
	    if (randomVector.x[k] == 1) {
	    	nc_append(i, ngcell+nbcell+nmcell+k, dbr, 0.5e-3, 1.5, 10)  
	       connectionFile.printf("%d\t",ngcell+nbcell+nmcell+k)
	    }
	}

//	print npost, dbr

	randomVector.resize(ngcell)
	for k = 0, randomVector.size-1 {randomVector.x[k]=0}
	while (randomVector.sum < sproutNumber) {
	Gauz3 = rdgc2gc.repick()
	if (i+Gauz3 > ngcell-1) {npost = i+Gauz3-ngcell }
	if (i+Gauz3 < 0) {npost = i+Gauz3+ngcell} 
	if ((i+Gauz3 > -1) && (i+Gauz3 < ngcell)) {npost = i+Gauz3}
	if ((randomVector.x[npost] == 0) && (vgc2gc.x[npost] < sproutNumber + 0.15*sproutNumber + 8)) {
	   randomVector.x[npost] += 1
	   vgc2gc.x[npost] += 1
	}
	dbr = rdsyna.repick()
	}
	for k = 0, randomVector.size-1 {
	    if (randomVector.x[k] == 1) {
	       nc_append(i, k, dbr+7, Spr*2e-3, .8, 10)   // (i, k, dbr+7, 2e-6, .8, 10)
	       connectionFile.printf("%d\t",k)
	    }
	}
	
print i
connectionFile.printf("-1\n")
}
}
//**************Basket Cell post synaptic connections ******************************

proc initBcell() { local i,j, u, v, w
u=0
v=0
w=0

for  i=0, nbcell-1 {
	connectionFile.printf("%d\t",i)
	
	randomVector.resize(ngcell)
	for k = 0, randomVector.size-1 {randomVector.x[k]=0}
	while (randomVector.sum < 100) {
	Gauz3 = rdbc2gc.repick()
	if (i*83+41+Gauz3 > ngcell-1) {npost = i*83+41+Gauz3-ngcell }
	if (i*83+41+Gauz3 < 0) {npost = i*83+41+Gauz3+ngcell} 
	if ((i*83+41+Gauz3 > -1) && (i*83+41+Gauz3 < ngcell)) {npost = i*83+41+Gauz3}
	if ((randomVector.x[npost] == 0) && (vbc2gc.x[npost] < 2)) {
	   randomVector.x[npost] += 1
	   vbc2gc.x[npost] += 1
	}
	}
	for k = 0, randomVector.size-1 {
	    if (randomVector.x[k] == 1) {
	    	nc_append(i+ngcell, k, 6, 1.6e-3, .85, 0)      //(i+ngcell, k, 6, 1.6e-3, .85, 10)  
		print "Connecting ",i+ngcell," to ",k," ****************** ",randomVector.sum
	       connectionFile.printf("%d\t",k)
	    }
	}

	randomVector.resize(nbcell)
	for k = 0, randomVector.size-1 {randomVector.x[k]=0}
	while (randomVector.sum < 2) {
	Gauz3  = rdbc2bc.repick()
	if (i+Gauz3 > nbcell-1) {npost = i+Gauz3-nbcell }
	if (i+Gauz3 < 0) {npost = i+Gauz3+nbcell} 
	if ((i+Gauz3 >-1) && (i+Gauz3 < nbcell)) {npost = i+Gauz3}
	if ((randomVector.x[npost] == 0) && (vbc2bc.x[npost] < 3)) {
	   randomVector.x[npost] += 1
	   vbc2bc.x[npost] += 1
	}
	dbr = rdsyna.repick()
	}
	for k = 0, randomVector.size-1 {
	    if (randomVector.x[k] == 1) {
	    	nc_append(i+ngcell, k+ngcell, dbr+8, 7.6e-3, .8, 0)   // (i+ngcell, k+ngcell, dbr+8, 7.6e-3, .8, 10)
		print "Connecting ",i+ngcell," to ",k+ngcell
	       connectionFile.printf("%d\t",k+ngcell)
		
		//print "starting tonic connect" bc to bc
		u=k+ngcell
		v=u+1
		w=u-1
		r=0.5*TC
		if (v > 1011) {v = v-1}
		if (w < 1000) {w = w+1}
		nc_append(i+ngcell, v, 12, r*0.2e-3, 2, 10) 
		nc_append(i+ngcell, v, 13, r*0.2e-3, 2, 10) 
		nc_append(i+ngcell, v, 14, r*0.1e-3, 4, 10)
		nc_append(i+ngcell, v, 15, r*0.1e-3, 4, 10)
		nc_append(i+ngcell, v, 16, r*0.1e-3, 4, 10)
		nc_append(i+ngcell, v, 17, r*0.1e-3, 4, 10)
		nc_append(i+ngcell, v, 18, r*0.05e-3, 8, 10)
		nc_append(i+ngcell, v, 19, r*0.05e-3, 8, 10)

		nc_append(i+ngcell, u, 12, TC*0.2e-3, 2, 10) 
		nc_append(i+ngcell, u, 13, TC*0.2e-3, 2, 10) 
		nc_append(i+ngcell, u, 14, TC*0.1e-3, 4, 10)
		nc_append(i+ngcell, u, 15, TC*0.1e-3, 4, 10)
		nc_append(i+ngcell, u, 16, TC*0.1e-3, 4, 10)
		nc_append(i+ngcell, u, 17, TC*0.1e-3, 4, 10)
		nc_append(i+ngcell, u, 18, TC*0.05e-3, 8, 10)
		nc_append(i+ngcell, u, 19, TC*0.05e-3, 8, 10)

		nc_append(i+ngcell, w, 12, r*0.2e-3, 2, 10) 
		nc_append(i+ngcell, w, 13, r*0.2e-3, 2, 10) 
		nc_append(i+ngcell, w, 14, r*0.1e-3, 4, 10)
		nc_append(i+ngcell, w, 15, r*0.1e-3, 4, 10)
		nc_append(i+ngcell, w, 16, r*0.1e-3, 4, 10)
		nc_append(i+ngcell, w, 17, r*0.1e-3, 4, 10)
		nc_append(i+ngcell, w, 18, r*0.05e-3, 8, 10)
		nc_append(i+ngcell, w, 19, r*0.05e-3, 8, 10)
		connectionFile.printf("%d\t",k)

	    }
	}
	randomVector.resize(nmcell)
	for k = 0, randomVector.size-1 {randomVector.x[k]=0}
	while (randomVector.sum < 5) {
	Gauz3 = rdbc2mc.repick()
	if (i*2+2+Gauz3 > nmcell-1) {npost = i*2+2+Gauz3-nmcell }
	if (i*2+2+Gauz3 < 0) {npost = i*2+2+Gauz3+nmcell} 
	if ((i*2+2+Gauz3 >-1) && (i*2+2+Gauz3 < nmcell)) {npost = i*2+2+Gauz3}
//print npost	 
	if ((randomVector.x[npost] == 0) && (vbc2mc.x[npost] < 3)) {
	   randomVector.x[npost] += 1
	   vbc2mc.x[npost] += 1
	}
	}

	for k = 0, randomVector.size-1 {
	if ((randomVector.x[k] == 1)&& (killMC.contains(ngcell+nbcell+k) == 0)) {
	    	nc_append(i+ngcell, k+ngcell+nbcell, 12, 1.5e-3, 1.5, 0)  //(i+ngcell, k+ngcell+nbcell, 12, 1.5e-3, 1.5, 10)  
		print "Connecting ",i+ngcell," to ",k+ngcell+nbcell
	       connectionFile.printf("%d\t",ngcell+nbcell+k)
	    }
	}
print i
connectionFile.printf("-1\n")
}
}


//**************Mossy Cell post synaptic connections ******************************

proc initMcell() {local i,j

for  i=0, nmcell-1 {
	if (killMC.contains(ngcell+nbcell+i) == 0) {
	connectionFile.printf("%d\t",i)
	if (i < 3) { y=0}
	if ((i > 2) && (i < 6)) { y=1}
	if ((i > 5) && (i < 9)) { y=2}
	if ((i > 8) && (i < 12)) { y=3}
	if ((i > 11) && (i < 15)) { y=4}
	if ((i > 14) && (i < 18)) { y=5}
	if ((i > 17) && (i < 21)) { y=6}
	if ((i > 20) && (i < 24)) { y=7}
	if ((i > 23) && (i < 27)) { y=8}
	if ((i > 26) && (i < 30)) { y=9}

	print "I got here 2"
	randomVector.resize(ngcell)
	for k = 0, randomVector.size-1 {randomVector.x[k]=0}
	while (randomVector.sum < 100) {
	Gauz1 = rdmc2gc1.repick()

	if (i*33+17+Gauz1 > ngcell-1) {
	 npost1 = i*33+17+Gauz1-ngcell
	} else {npost1 =i*33+17+Gauz1}

	print "I got here 3 ******************** ", randomVector.sum
	if ((randomVector.x[npost1] == 0) && (vmc2gc.x[npost1] < 7)) {
	   randomVector.x[npost1] += 1
	   vmc2gc.x[npost1] += 1
	}
	dbr = rdsyna.repick()
	}
	print "I got here 4"
	for k = 0, randomVector.size-1 {
	    if (randomVector.x[k] == 1) {
	    	nc_append(i+ngcell+nbcell, k, dbr+2, 0.3e-3, 3, 10)  
		print "Connecting ",i+ngcell+nbcell," to ",k
	       connectionFile.printf("%d\t",k)
}
}

	randomVector.resize(ngcell)
	for k = 0, randomVector.size-1 {randomVector.x[k]=0}
	while (randomVector.sum < 100) {
	Gauz2 = rdmc2gc2.repick()
	if (i*33+17+Gauz2 < 0) {
	 npost2 =i*33+17+Gauz2+ngcell
	} else {npost2 =i*33+17+Gauz2}
	if ((randomVector.x[npost2] == 0) && (vmc2gc.x[npost2] < 7)) {
	   randomVector.x[npost2] += 1
	   vmc2gc.x[npost2] += 1
	}
	dbr = rdsyna.repick()
	}
	for k = 0, randomVector.size-1 {
	    if (randomVector.x[k] == 1) {
	    	nc_append(i+ngcell+nbcell, k, dbr+2, 0.3e-3, 3, 10)  
	       connectionFile.printf("%d\t",k)
}
}

	randomVector.resize(nbcell)
	for k = 0, randomVector.size-1 {randomVector.x[k]=0}
	while (randomVector.sum < 1) {
	Gauz3 = rdmc2bc.repick()
	if (y+Gauz3 > nbcell-1) {npost = y+Gauz3-nbcell}
	if (y+Gauz3 < 0) {npost = y+Gauz3+nbcell} 
	if ((y+Gauz3 > -1) && (y+Gauz3 < nbcell)) {npost = y+Gauz3}
	if ((randomVector.x[npost] == 0) && (vmc2bc.x[npost] < 4) && (Gauz3 != 0)) {
	   randomVector.x[npost] += 1
	   vmc2bc.x[npost] += 1
	}
	dbr = rdsyna.repick()
	}
	for k = 0, randomVector.size-1 {
	    if (randomVector.x[k] == 1) {
	    	nc_append(i+ngcell+nbcell, ngcell+k, dbr+6, 0.3e-3, 3, 10) 
	       connectionFile.printf("%d\t",k+ngcell)
}
}

	randomVector.resize(nmcell)
	for k = 0, randomVector.size-1 {randomVector.x[k]=0}
	while (randomVector.sum < 3) {
	Gauz3 = rdmc2mc1.repick()
//print Gauz3
	if (i+Gauz3 > nmcell-1) {npost = i+Gauz3-nmcell }
	if (i+Gauz3 < 0) {npost = i+Gauz3+nmcell} 
	if ((i+Gauz3 >-1) && (i+Gauz3 < nmcell)) {npost = i+Gauz3}
//print npost
	if ((randomVector.x[npost] == 0) && (vmc2mc.x[npost] < 4) && (Gauz3 != 0)) {
	   randomVector.x[npost] += 1
	   vmc2mc.x[npost] += 1
	}
	dbr = rdsynb.repick()
	}
	for k = 0, randomVector.size-1 {
	    if ((randomVector.x[k] == 1)&& (killMC.contains(ngcell+nbcell+k) == 0)) {
	    	nc_append(i+ngcell+nbcell, k+ngcell+nbcell, dbr+8, 0.5e-3, 2, 10)  
	       connectionFile.printf("%d\t",k+ngcell+nbcell)
		
}
}

	randomVector.resize(nhcell)
	for k = 0, randomVector.size-1 {randomVector.x[k]=0}
	while (randomVector.sum < 2) {
	Gauz3 = rdmc2hc.repick()
	if (y+Gauz3 > nhcell-1) {npost = y+Gauz3-nhcell}
	if (y+Gauz3 < 0) {npost = y+Gauz3+nhcell} 
	if ((y+Gauz3 > -1) && (y+Gauz3 < nhcell)) {npost = y+Gauz3}
	if ((randomVector.x[npost] == 0) && (vmc2hc.x[npost] < 7) && (Gauz3 != 0)) {
	   randomVector.x[npost] += 1
	   vmc2hc.x[npost] += 1
	}
	dbr = rdsynb.repick()
	}
	for k = 0, randomVector.size-1 {
	    if ((randomVector.x[k] == 1)&& (killHC.contains(ngcell+nbcell+nmcell+k) == 0)) {
	    	nc_append(i+ngcell+nbcell, ngcell+nbcell+nmcell+k, dbr+4, 0.2e-3, 3, 10)  
	       connectionFile.printf("%d\t",k+ngcell+nbcell+nmcell)
		}
	}

print i
connectionFile.printf("-1\n")
}
}
}
//******************************************************************************************
//**************HIPP Cell post synaptic connections ******************************


proc initHcell() { local i,j

 for  i=0, nhcell-1 {
   if (killHC.contains(ngcell+nbcell+nmcell+i) == 0) {	

	connectionFile.printf("%d\t",i)
	
	randomVector.resize(ngcell)
	for k = 0, randomVector.size-1 {randomVector.x[k]=0}
	while (randomVector.sum < 160) {
	Gauz3 = rdhc2gc.repick()

	if (i*83+41+Gauz3 > ngcell-1) {npost = i*83+41+Gauz3-ngcell }
	if (i*83+41+Gauz3 < 0) {npost = i*83+41+Gauz3+ngcell} 
	if ((i*83+41+Gauz3 > -1) && (i*83+41+Gauz3 < ngcell)) {npost = i*83+41+Gauz3}

	if ((randomVector.x[npost] == 0) && (vhc2gc.x[npost] < 3)) {
	   randomVector.x[npost] += 1
	   vhc2gc.x[npost] += 1
	}
	dbr = rdsyna.repick()
	}
	for k = 0, randomVector.size-1 {
	    if (randomVector.x[k] == 1) {

for z= 0, InhNet-1 {
	Drand=rdmc2hc.repick()
	Drand=Drand*0.05
	dbr = rdsyna.repick()
	    	nc_append(i+ngcell+nbcell+nmcell, k, dbr+4, IPSCmod*0.5e-3, 1.6, 10)	    	
	}
connectionFile.printf("%d\t",k)

}
}

	randomVector.resize(nbcell)
	for k = 0, randomVector.size-1 {randomVector.x[k]=0}
	while (randomVector.sum < 4) {
	Gauz3 = rdhc2bc.repick()
	if (i+Gauz3 > nbcell-1) {npost = i+Gauz3-nbcell}
	if (i+Gauz3 < 0) {npost = i+Gauz3+nbcell} 
	if ((i+Gauz3 > -1) && (i+Gauz3 < nbcell)) {npost = i+Gauz3}
	if ((randomVector.x[npost] == 0) && (vhc2bc.x[npost] < nbcell-1)) {
	   randomVector.x[npost] += 1
	   vhc2bc.x[npost] += 1
	}
	dbr = rdsyna.repick()
	}
	for k = 0, randomVector.size-1 {
	    if (randomVector.x[k] == 1) {
	    	nc_append(i+ngcell+nbcell+nmcell, k+ngcell, dbr+10, 0.5e-3, 1.6, 10)  
	       connectionFile.printf("%d\t",k+ngcell)
//print "starting tonic connect" hipp to bc
		u=k+ngcell
		v=u+1
		w=u-1
		r=0.5*TC
		if (v > 1011) {v = v-1}
		if (w < 1000) {w = w+1}
		nc_append(i+ngcell+nbcell+nmcell, v, 12, r*0.05e-3, 2, 10) 
		nc_append(i+ngcell+nbcell+nmcell, v, 13, r*0.05e-3, 2, 10) 
		nc_append(i+ngcell+nbcell+nmcell, v, 14, r*0.005e-3, 4, 10)
		nc_append(i+ngcell+nbcell+nmcell, v, 15, r*0.005e-3, 4, 10)
		nc_append(i+ngcell+nbcell+nmcell, v, 16, r*0.005e-3, 4, 10)
		nc_append(i+ngcell+nbcell+nmcell, v, 17, r*0.005e-3, 4, 10)
		nc_append(i+ngcell+nbcell+nmcell, v, 18, r*0.001e-3, 8, 10)
		nc_append(i+ngcell+nbcell+nmcell, v, 19, r*0.001e-3, 8, 10)

		nc_append(i+ngcell+nbcell+nmcell, u, 12, TC*0.05e-3, 2, 10) 
		nc_append(i+ngcell+nbcell+nmcell, u, 13, TC*0.05e-3, 2, 10) 
		nc_append(i+ngcell+nbcell+nmcell, u, 14, TC*0.005e-3, 4, 10)
		nc_append(i+ngcell+nbcell+nmcell, u, 15, TC*0.005e-3, 4, 10)
		nc_append(i+ngcell+nbcell+nmcell, u, 16, TC*0.005e-3, 4, 10)
		nc_append(i+ngcell+nbcell+nmcell, u, 17, TC*0.005e-3, 4, 10)
		nc_append(i+ngcell+nbcell+nmcell, u, 18, TC*0.001e-3, 8, 10)
		nc_append(i+ngcell+nbcell+nmcell, u, 19, TC*0.001e-3, 8, 10)

		nc_append(i+ngcell+nbcell+nmcell, w, 12, r*0.05e-3, 2, 10) 
		nc_append(i+ngcell+nbcell+nmcell, w, 13, r*0.05e-3, 2, 10) 
		nc_append(i+ngcell+nbcell+nmcell, w, 14, r*0.005e-3, 4, 10)
		nc_append(i+ngcell+nbcell+nmcell, w, 15, r*0.005e-3, 4, 10)
		nc_append(i+ngcell+nbcell+nmcell, w, 16, r*0.005e-3, 4, 10)
		nc_append(i+ngcell+nbcell+nmcell, w, 17, r*0.005e-3, 4, 10)
		nc_append(i+ngcell+nbcell+nmcell, w, 18, r*0.001e-3, 8, 10)
		nc_append(i+ngcell+nbcell+nmcell, w, 19, r*0.001e-3, 8, 10)
		connectionFile.printf("%d\t",k)

		}
		}

	randomVector.resize(nmcell)
	for k = 0, randomVector.size-1 {randomVector.x[k]=0}
	while (randomVector.sum < 4) {
	Gauz3 = rdhc2mc.repick()
//print Gauz3
	if (i*2+2+Gauz3 > nmcell-1) {npost = i*2+2+Gauz3-nmcell }
	if (i*2+2+Gauz3 < 0) {npost = i*2+2+Gauz3+nmcell} 
	if ((i*2+2+Gauz3 >-1) && (i*2+2+Gauz3 < nmcell)) {npost = i*2+2+Gauz3}
//print npost
	if ((randomVector.x[npost] == 0) && (vhc2mc.x[npost] < 2)) {
	   randomVector.x[npost] += 1
	   vhc2mc.x[npost] += 1
	}
	dbr = rdsynb.repick()
	}
	for k = 0, randomVector.size-1 {
	    if ((randomVector.x[k] == 1)&& (killMC.contains(ngcell+nbcell+k) == 0)) {
	    	nc_append(i+ngcell+nbcell+nmcell, k+ngcell+nbcell, dbr+13, 1.5e-3, 1, 10)  
	       connectionFile.printf("%d\t",k+ngcell+nbcell)
}
}

print i
connectionFile.printf("-1\n")
}
}
}
//*******************************************************************************************************

//*********************GAPS************************************

objref gaps[12]
for i=0,11{
gaps[i] = new Gap(0.5)
gaps[i].r = 100000
}

n=2
for i=0,5{
npost = rdgap.repick()
d = rddend.repick() 
m=n*i    //for bcells
x=n*i   //for gaps
post = npost+m
if (m == post){post +=1}                         //makes the gap junctions connected in between neighbouring cells    
if (post <= 0){post = nbcell-1}                                                        	  
Bcell[m].bcdend1[d] gaps[x].loc(0.5)
Bcell[post].bcdend1[d] gaps[x+1].loc(0.5)                                                      
setpointer gaps[x].vgap, Bcell[post].bcdend1[d].v(0.5)
setpointer gaps[x+1].vgap, Bcell[m].bcdend1[d].v(0.5)
}
//*********************************Print out Net cons***************************************************
strdef strvar
objref dfile
dfile = new File()

proc saveNet(){ local i
	//dfile.wopen("/home/rob/testneuron/vijireview/NAI75s1")
dfile.wopen("N_25% -74 spill n tonic 10uS.txt")
	dfile.printf("Precell \tps.tcell \t Synapse \n")
	for i=0, nclist.count-1 {
	dfile.printf("%s\t%s\t%s\n", nclist.object[i].precell, nclist.object[i].postcell, nclist.object[i].syn)}

dfile.printf("TO BC\n GC \tBC \tMC \tHC \n")
for i= 0, nbcell-1 {dfile.printf("%d\t%d\t%d\t%d \n",  vgc2bc.x[i], vbc2bc.x[i], vmc2bc.x[i], vhc2bc.x[i])}
print "BCout"
dfile.printf("TO MC\n GC \tBC \tMC \tHC \n")
for i= 0, nmcell-1 {dfile.printf("%d\t%d\t%d\t%d\n",  vgc2mc.x[i], vbc2mc.x[i], vmc2mc.x[i], vhc2mc.x[i])}
print "MCout"
dfile.printf("TO HC \n GC\t MC\n")
for i= 0, nhcell-1 {dfile.printf("%d\t%d\n", vgc2hc.x[i], vmc2hc.x[i])}
print "HCout"
dfile.printf("TO GC\n BC\t MC\t HC\t GC\t \n")
for i= 0, ngcell-1 {dfile.printf("%d\t%d\t%d\t%d\n", vbc2gc.x[i], vmc2gc.x[i], vhc2gc.x[i], vgc2gc.x[i])}
print "GCout"
dfile.close("N_25% -74 spill n tonic 10uS.txt")
}

proc Chk(){
dfile.aopen("N_25% -74 spill n tonic 10uS.txt")
dfile.printf("tTC\tSpr\tsproutNumber\trseed\t")
	dfile.printf("Sprouting\t")
	dfile.printf("\n")
//dfile.printf("%f\t", cells.object[Vcell].fl_list.object[0].g_i0)
dfile.printf("%f\t", TC)
dfile.printf("%f\t", Spr)
dfile.printf("%f\t", sproutNumber)
dfile.printf("%f\t", rseed)
//dfile.printf("%f\t", cells.object[ngcell+nbcell+nmcell+1].fl_list.object[0].g_i0)
//dfile.printf("%f\t", InhNet)
dfile.printf("\n")
dfile.close("N_25% -74 spill n tonic 10uS.txt")
print TC, Spr, sproutNumber, rseed
}
//******************************************************************************************
strdef strmat
objref efile
efile = new File()

efile.wopen("M_25% -74 spill n tonic 10uS.txt")

	efile.printf("t\t")
	for i = 0, 49 {
	b = i*10
	efile.printf("%s\t", cells.object[b])}
	for i = 998, cells.count-npp-sync-1{
	efile.printf("%s\t", cells.object[i])}
	efile.printf("\n")
efile.close("M_25% -74 spill n tonic 10uS.txt")

proc sMatrix(){ local  j
	efile.aopen("M_25% -74 spill n tonic 10uS.txt")
	efile.printf("%f\t", t)
	for i = 0, 49 {
	b = i*10
	efile.printf("%f\t", cells.object[b].soma.v(0.5))}
	for j =1000, cells.count-npp-sync-1 {
	efile.printf("%f\t", cells.object[j].soma.v(0.5))}
	efile.printf("\n")
	efile.close("M_25% -74 spill n tonic 10uS.txt")}



strdef strvcell
objref gfile
gfile = new File()

gfile.wopen("IGABA soma 25% -74 spill n tonic 10uS.txt")
	gfile.printf("t\t")
for i=0,1{
	gfile.printf("%s\t", Bcell[i])}
	gfile.printf("\n")
gfile.close("IGABA soma 25% -74 spill n tonic 10uS.txt")
proc gMatrix(){ local  i
	gfile.aopen("IGABA soma 25% -74 spill n tonic 10uS.txt")
	gfile.printf("%f\t", t)
	for i = 0, 0 {
	gfile.printf("%f\t", Bcell[i].soma.igaba_tonic(0.5))}
	gfile.printf("\n")
	gfile.close("IGABA soma 25% -74 spill n tonic 10uS.txt")
	}

strdef strmat
objref jfile
jfile = new File()

jfile.wopen("gapcurrents_10uS_74.txt")
	jfile.printf("t\t")
for i = 0, 11 {
	jfile.printf("%s\t", Gap[i])}
	jfile.printf("\n")
jfile.close("gapcurrents_10uS_74.txt")

proc jMatrix(){ local  i
	jfile.aopen("gapcurrents_10uS_74.txt")
	jfile.printf("%f\t", t)
	for i = 0, 11 {
	jfile.printf("%f\t", Gap[i].i_gap)}
	jfile.printf("\n")
	jfile.close("gapcurrents_10uS_74.txt")
	}
objref  VmT
objref VmMat[cells.count-npp-sync]
VmT = new Vector()
for i=0, cells.count-npp-sync-1 {
	VmMat[i] = new Vector()
	}

proc VecMx() { local i
	VmT.append(t)
	for i=0, cells.count-npp-sync-1 {
		VmMat[i].append( cells.object[i].soma.v(0.5))
		}
	}
objref Spike[cells.count-1]
for i=0, cells.count-npp-sync-1 {
	Spike[i] = new Vector()
	}
strdef Spkstr
objref dfile
dfile = new File()

proc SpkMx() { local i, j
	k = 0
     	for i=0, cells.count-npp-sync-1 {
		Spike[i].spikebin(VmMat[i], 0)
		}
dfile.wopen("S_25% -74 spill n tonic 10uS.txt")

	while(k <  VmT.size) {
	for j = 0, cells.count-npp-sync-1 {
	if(Spike[j].x[k] != 0) {
	dfile.printf("%f\t%d\n", VmT.x[k], j)}
	}
	k +=1 }
dfile.close("S_25% -74 spill n tonic 10uS.txt")
	}


objref r_plt
proc initrPlt() {
	r_plt = new Graph(0)
	r_plt.size(0, tstop,0, cells.count-npp-sync)
	r_plt.label(0.95, 0.02, "ms")
	r_plt.label(0.01, 0.82, "neu")
	r_plt.view(0,0, tstop, cells.count-npp-sync,320,20,300,230)
}
 initrPlt()

proc plotAP() { local i, a
	a=1
 	r_plt.erase()
	while(j < cells.count-npp-sync-1) {
	for i = 0, VmT.size-1 {
	if ((j > ngcell-1)&&(j < ngcell+nbcell-1)) { a=2}
	if ((j > ngcell+nbcell-1)&&(j < ngcell+nbcell+nmcell-1)) { a=3 }
	if ((j > ngcell+nbcell+nmcell-1)&&(j < ngcell+nbcell+nmcell+nhcell-1)) { a=4}
	if (j > ngcell+nbcell+nmcell+nhcell-1) { a=5}
	if (Spike[j].x[i] == 1) {
	r_plt.mark(VmT.x[i], j, "T", 5, a, 1)}}
	j+=1}
	r_plt.flush()
	}
//################################################################################################
proc init() { local dtsav, temp, secsav
finitialize(v_init)
t = -1000
dtsav = dt
secondorder =0
dt= 10
	// if cvode is on, turn it off to do large fixed step
temp= cvode.active()
if (temp!=0) {cvode.active(0)}
while(t<-100) { fadvance() print t}
	//restore cvode if reqd
if (temp!=0) {cvode.active(1)}
dt = dtsav
secondorder =2
t = 0
if (cvode.active()){
cvode.re_init()
}else{
fcurrent()
}
//frecord_init()
}
proc continuerun() {local rt
	eventcount =0
	eventslow =1
	stoprun =0
	if (using_cvode_) {
	cvode.event($1)
	}
	while(t < $1 && stoprun == 0) {
	step()
	sMatrix()
gMatrix()
jMatrix()
	VecMx()
	rt = stopsw()
	if (rt > realtime) {
		realtime = rt
		if (!stdrun_quiet) fastflushPlot()
		doNotify()
		if (realtime == 2 && eventcount > 50) {
			eventslow = int(eventcount/50)+1
		}
		eventcount = 0
	}else{
		eventcount = eventcount +1
		if ((eventcount%eventslow) == 0) {
			doEvents()
		}
	}
	}
	flushPlot()
}

objectvar save_window_, rvp_
objectvar scene_vector_[4]
objectvar ocbox_, ocbox_list_, scene_, scene_list_
{ocbox_list_ = new List()  scene_list_ = new List()}

{
xpanel("RunControl", 0)
v_init = -60
xvalue("Init","v_init", 1,"stdinit()", 1, 1 )
xbutton("Init & Run","run()")
xbutton("Stop","stoprun=1")
runStopAt = 5
xvalue("Continue til","runStopAt", 1,"{continuerun(runStopAt) stoprun=1}", 1, 1 )
runStopIn = 1
xvalue("Continue for","runStopIn", 1,"{continuerun(t + runStopIn) stoprun=1}", 1, 1 )
xbutton("Single Step","steprun()")
t = 0
xvalue("t","t", 2 )
tstop = 3500	//1500
xvalue("Tstop","tstop", 1,"tstop_changed()", 0, 1 )
dt = 0.1
xvalue("dt","dt", 1,"setdt()", 0, 1 )
steps_per_ms = 10	//40
xvalue("Points plotted/ms","steps_per_ms", 1,"setdt()", 0, 1 )
xpanel(544,121)
}
{
save_window_ = new Graph(0)
save_window_.size(0,tstop,-80,40)
scene_vector_[2] = save_window_
{save_window_.view(0, -80, tstop, 120, 290, 470, 579.84, 208)}
graphList[0].append(save_window_)
save_window_.save_name("graphList[0].")
save_window_.addexpr("Gcell[450].soma.v(0.5)",1,1)
save_window_.addexpr("Gcell[0].soma.v(0.5)",1,1)

save_window_.addexpr("Bcell[1].soma.v(0.5)",2,1)
save_window_.addexpr("Mcell[0].soma.v(0.5)",3,1)
save_window_.addexpr("Hcell[0].soma.v(0.5)",4,1)

}
save_window_ = new Graph(0)
save_window_.size(0,1000,-2,2)
scene_vector_[3] = save_window_
{save_window_.view(0, -2, tstop, 120, 290, 470, 579.84, 208)}
graphList[1].append(save_window_)
save_window_.save_name("graphList[1].")
save_window_.addexpr("Bcell[0].bcdend4[0].igaba_tonic",2,1)
save_window_.addexpr("Bcell[0].soma.igaba_tonic",3,1)
save_window_.addexpr("Gap[0].i_gap",4)
proc rrun(){
run()
SpkMx()
Chk()
}

proc custom_init() {
initPP()
initSY() 
initGcell()
initBcell()
initMcell()
initHcell()
saveNet()
}

xpanel("Yu et al 2013")
  xbutton("Custom initialization", "{custom_init()}")
  xbutton("Custom run", "{rrun() plotAP()}")
xpanel()

objectvar scene_vector_[1]
{doNotify()}
//quit()