begintemplate BC

ndend1=4
ndend2=4
ndend3=4
ndend4=4

public  pre_list, connect2target, 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 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, adend, bdend, cdend, ddend

proc subsets() { local i
	objref all, adend, bdend, cdend, ddend
	all = new SectionList()
	soma all.append()
	for i=0, 3 bcdend1 [i] all.append()
	for i=0, 3 bcdend2 [i] all.append()
	for i=0, 3 bcdend3 [i] all.append()
	for i=0, 3 bcdend4 [i] all.append()

	adend  = new SectionList()
	bcdend1 [0] adend.append()
	bcdend2 [0] adend.append()
	bcdend3 [0] adend.append()
	bcdend4 [0] adend.append()

	bdend  = new SectionList()
	bcdend1 [1] bdend.append()
	bcdend2 [1] bdend.append()
	bcdend3 [1] bdend.append()
	bcdend4 [1] bdend.append()

	cdend  = new SectionList()
	bcdend1 [2] cdend.append()
	bcdend2 [2] cdend.append()
	bcdend3 [2] cdend.append()
	bcdend4 [2] cdend.append()

	ddend  = new SectionList()
	bcdend1 [3] ddend.append()
	bcdend2 [3] ddend.append()
	bcdend3 [3] ddend.append()
	bcdend4 [3] ddend.append()
}

proc temp() {

	soma {nseg=1 L=20 diam=15} // changed L & diam
		
	bcdend1 [0] {nseg=1 L=75 diam=4}	// bcdend 1 and 2 are apical
	bcdend1 [1] {nseg=1 L=75 diam=3}
	bcdend1 [2] {nseg=1 L=75 diam=2}
 	bcdend1 [3] {nseg=1 L=75 diam=1}

	bcdend2 [0] {nseg=1 L=75 diam=4}
	bcdend2 [1] {nseg=1 L=75 diam=3}
	bcdend2 [2] {nseg=1 L=75 diam=2}
	bcdend2 [3] {nseg=1 L=75 diam=1}
 		 
	bcdend3 [0] {nseg=1 L=50 diam=4} 	// bcdend 3 and 4 are basal
	bcdend3 [1] {nseg=1 L=50 diam=3}
	bcdend3 [2] {nseg=1 L=50 diam=2}
	bcdend3 [3] {nseg=1 L=50 diam=1} 
	
	bcdend4 [0] {nseg=1 L=50 diam=4}
	bcdend4 [1] {nseg=1 L=50 diam=3}
	bcdend4 [2] {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
	}

	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
	}

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


	connect bcdend1[0](0), soma(1)
	connect bcdend2[0](0), soma(1)
	connect bcdend3[0](0), soma(0)
	connect bcdend4[0](0), soma(0)
	for i=1,3 {
		connect bcdend1[i](0), bcdend1[i-1](1)
	}
	for i=1,3 {
		connect bcdend2[i](0), bcdend2[i-1](1)
	}
	for i=1,3 {
		connect bcdend3[i](0), bcdend3[i-1](1)
	}
	for i=1,3 {
		connect bcdend4[i](0), bcdend4[i-1](1)
	}


//for i=0,0 {
//stimdel[i]=1000
//stimdur[i]=200
//stimamp[i]=0.5

/* 0.4 stim when we want the cell to fire with regular spikes */

//soma stim[i] = new IClamp(0.5)
//stim.del[i]=stimdel[i]
//stim.dur[i]=stimdur[i]
//stim.amp[i]=stimamp[i]
//}
}

objref syn_  
proc synapse() {

	bcdend1 [3] 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_)

	bcdend2 [3] 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
	pre_list.append(syn_)

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

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

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

	bcdend1 [1] 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_)

	bcdend1 [1] syn_ = new Exp2Syn(0.5)	//BC(GABA) syn_ to apical IML dend Bartos		8
	syn_.tau1 = 0.16		
	syn_.tau2 = 1.8	
	syn_.e = -70
	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 = -70
	pre_list.append(syn_)

	bcdend1 [3] syn_ = new Exp2Syn(0.5)	//HIPP(GABA) syn_ to apical distal dend 			10
	syn_.tau1 = 0.4	
	syn_.tau2 = 5.8	
	syn_.e = -70 // *** Estimated as HIPP>GC
	pre_list.append(syn_)

	bcdend2 [3] syn_ = new Exp2Syn(0.5)	//HIPP(GABA) syn_ to apical distal dend 			11
	syn_.tau1 = 0.4	
	syn_.tau2 = 5.8	
	syn_.e = -70 // *** Estimated as HIPP>GC
	pre_list.append(syn_)
	
  	soma syn_ = new MyExp2Syn(0.5)  		// GABA-A	Septum					12
    	syn_.tau1 = 1
    	syn_.tau2 = 8
    	syn_.e = -75
    	pre_list.append(syn_)	
    		

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

obfunc connect2target() { localobj nc //$o1 target point process, optional $o2 returned NetCon
  	soma nc = new NetCon(&v(1), $o1)
  	nc.threshold = -10
  	if (numarg() == 2) { $o2 = nc } // for backward compatibility
  	return nc
}

func is_art()  { return 0 }

endtemplate BC