//**********************       MOSSY CELL         ****************************************

// Mossy Cell template

// extracted from
// Dentate gyrus network model 
// Santhakumar V, Aradi I, Soltesz I (2005) J Neurophysiol 93:437-53 
// https://senselab.med.yale.edu/ModelDB/showModel.cshtml?model=51781&file=\dentategyrusnet2005\DG500_M7.hoc

// ModelDB file along with publication:
// Yim MY, Hanuschkin A, Wolfart J (2015) Hippocampus 25:297-308.
// http://onlinelibrary.wiley.com/doi/10.1002/hipo.22373/abstract

// modified by
// Abraham Nunes / 2022
// Man Yi Yim / 2015
// Alexander Hanuschkin / 2011

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

//to include steady state current injection
nst=1
objectvar stim[nst]
public stim
//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} 
		
	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 ka
	        gkabar_ka=1.650234883413953e-05              // fitted to Howard et al. 2007, previous 0.00001 Yim et al., 2015
		insert nca  
	        gncabar_nca=3.0246490314670187e-05           // fitted to Howard et al. 2007, previous 0.00008 Yim et al., 2015
		insert lca 
	        glcabar_lca=0.00017469257304634966           // fitted to Howard et al. 2007, previous 0.0006 Yim et al., 2015
		insert sk
	        gskbar_sk=0.022809187461813662               // fitted to Howard et al. 2007, previous 0.016 Yim et al., 2015
		insert bk
	        gkbar_bk=0.03039610718265275                 // fitted to Howard et al. 2007, previous 0.0165 Yim et al., 2015
		insert ih 
	        ghyfbar_ih=9.297236447233174e-07             // fitted to Howard et al. 2007, previous 0.000005 Yim et al., 2015
	        ghysbar_ih=5.9517273494970865e-06            // fitted to Howard et al. 2007, previous 0.000005 Yim et al., 2015
	}

	soma {insert ichan2
        gnatbar_ichan2=0.055866501682604486              // fitted to Howard et al. 2007, previous 0.12 Yim et al., 2015
        gkfbar_ichan2=0.0286296712742244                 // fitted to Howard et al. 2007, previous 0.0005 Yim et al., 2015
        gksbar_ichan2=0.014713327547369214               // added + fitted, Howard et al. 2007
        gl_ichan2 = 8.0500055186908e-06                  // fitted to Howard et al. 2007, previous 0.000011 Yim et al., 2015
        cm=0.6
        vshiftma_ichan2 = 58.5                           // fitted to Howard et al. 2007 + manual shift for excitability, previous 43 Yim et al., 2015
        vshiftmb_ichan2 = 27.03685981762697              // fitted to Howard et al. 2007, previous 15 Yim et al., 2015
        vshiftha_ichan2 = 124.5                          // fitted to Howard et al. 2007 + manual shift for excitability, previous 65 Yim et al., 2015
        vshifthb_ichan2 = 18.616547074320465             // fitted to Howard et al. 2007, previous 12.5 Yim et al., 2015
        vshiftnfa_ichan2 = 30.701653087965823            // fitted to Howard et al. 2007, previous 18 Yim et al., 2015
        vshiftnfb_ichan2 = 24.156010322453657            // fitted to Howard et al. 2007, previous 43 Yim et al., 2015
        vshiftnsa_ichan2 = 44.694885585078325            // fitted to Howard et al. 2007, previous 30 Yim et al., 2015
        vshiftnsb_ichan2 = 17.74053364029013             // fitted to Howard et al. 2007, previous 55 Yim et al., 2015
    }

	forsec pdend {insert ichan2
        gnatbar_ichan2=0.12
        gkfbar_ichan2=0.0005
        gksbar_ichan2=0.00015                           // added, Howard et al. 2007
        gl_ichan2 = 0.000044
        cm=2.4
        vshiftma_ichan2 = 43                           // value Yim et al. 2015
        vshiftmb_ichan2 = 15                           // value Yim et al. 2015
        vshiftha_ichan2 = 65                             // value Yim et al. 2015
        vshifthb_ichan2 = 12.5                          // value Yim et al. 2015
        vshiftnfa_ichan2 = 18                           // value Yim et al. 2015
        vshiftnfb_ichan2 = 43                           // value Yim et al. 2015
        vshiftnsa_ichan2 = 30                        // value Yim et al. 2015
        vshiftnsb_ichan2 = 55                         // value Yim et al. 2015
    }
		
	forsec ddend {insert ichan2
        gnatbar_ichan2=0.0
        gkfbar_ichan2=0.00
        gl_ichan2 = 0.000044
        cm=2.4
        vshiftma_ichan2 = 43                           // value Yim et al. 2015
        vshiftmb_ichan2 = 15                           // value Yim et al. 2015
        vshiftha_ichan2 = 65                             // value Yim et al. 2015
        vshifthb_ichan2 = 12.5                          // value Yim et al. 2015
        vshiftnfa_ichan2 = 18                           // value Yim et al. 2015
        vshiftnfb_ichan2 = 43                           // value Yim et al. 2015
        vshiftnsa_ichan2 = 30                        // value Yim et al. 2015
        vshiftnsb_ichan2 = 55                         // value Yim et al. 2015
    }
		
	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)}

	forall {Ra=100}
	forall {
        		ena     = 	50		        // ena was unified from enat=55 (BC, HIPP, MC) and enat=45 (GC) in Santhakumar et al. (2005) <ah>
                ek		=	-90		        // simplified ekf=eks=ek=esk; note the eK was erroneously reported as -105mV in the Yim et al. 2015 <ah>
			    ehyf		=	-40
			    ehys		=	-40
			    el_ichan2	= 	-59
                cao_ccanl	=	2
                elca        =  130}         // missing from Yim et al., but present in Santhakumar

}


//Defining synapses on to Mossy Cells
	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() {  
	soma $o2 = new NetCon (&v(1), $o1)
	}

func is_art()  { return 0 }

endtemplate MossyCell