//L2/3 V1 pyramidal neuron

//Passive Properties

celsius = 37
v_init =-79
if (ablated) {
	v_init=-79 //! Adjusted to -79 in accordance with validation parameters

} else {
	v_init=-79
	if (valcrit == -99) {v_init=v_init} // allows adjustment of resting potential for validation/testing purposes
}

// The "ablated" and "cut_basal" conditions are never used in this paper.
if (ablated) {
	Rm=11000
} else {
	if (cut_basal) { 
		if (dend_id2==dend_id1) {
			Rm =11750
		} else {
			Rm=13000
		}
	} else {
		Rm=11000  // This is the Rm that is actively in use.
	}
}

Ri =100
Cm =1
for i=0, all.count()-1 {
	access all.o(i).sec
	insert pas 
	g_pas = 1/Rm
	Ra=Ri
	}
for i=0, somatic.count()-1 {
	access somatic.o(i).sec
	cm=Cm
}

for i=0, basal.count()-1 {
	access basal.o(i).sec
	cm=Cm*2
}

if (!ablated) {
	for i=0, apical.count()-1 {
		access apical.o(i).sec
		cm=Cm*2
	}
}

//-------------------------------------------------------
//add active properties
//-------------------------------------------------------   
proc init_active_params(){
	Ek = -80
	Ena = 60
	Eca = 140
	vshift_na = -5//-5
	vshift_ca = 0
	
	ca_factor=0.2
	gna_soma =1000*1.1*0.459		    //Smith Hausser
	gkv_soma = 100	*0.5			    //Smith Hausser
	gkm_soma = 2.2	*1.27			    //Smith,Hausser
	gka_soma = 0.003 	*1.8		    //5% of dendrites-Burkhalter et al. 2006 
	gkca_soma =3 *0.1	*7		        //Smith Hausser
	gca_soma = 0.5	*0.5*ca_factor		//Cho,2006
	git_soma = 0.0003 *0.5	*ca_factor	//Cho,2006

	gna_dend = 600    *1.1*0.459
	gkv_dend = 3	*0.5
	gkm_dend = 1	*1.27
	gka_dend = 0.06	    	*1.8
	gkca_dend = 3 	*0.1	*7
	gca_dend = 0.5 *0.5*ca_factor
	git_dend = 0.0003 *0.5*ca_factor
}

proc init_active(){
	access soma
	distance()
	for i=0, somatic.count()-1 {
		access somatic.o(i).sec
		insert na          
		gbar_na = gna_soma 

		insert kv          gbar_kv = gkv_soma
		
		insert km          gbar_km = gkm_soma
		insert kap	   gbar_kap= gka_soma
		insert kca         gbar_kca = gkca_soma
		insert ca          gbar_ca = gca_soma 
		insert it          gbar_it = git_soma   //T-type calcium, CaT.mod
		insert cad
	}
	
	for i=0, basal.count()-1 {
		access basal.o(i).sec
		insert na          gbar_na = gna_dend*bnf2 // bnf2 rescales basal sodium conductances globally   
	
		insert kv          gbar_kv = gkv_dend
	
		insert km          gbar_km = gkm_dend
		insert kca         gbar_kca = gkca_dend
		insert kap	   gbar_kap= gka_dend
		if (diam>0.8) { 		//Tuft-Burkhalter et al. 2006
			gbar_kap= gka_dend*0.1
		} else {
			gbar_kap= gka_dend	
		}
		insert ca         
		insert it   
		for (x) {  
			xdist = distance(x)    
			gbar_ca = gca_dend+(0.002*xdist*gca_dend)
			gbar_it = git_dend+(0.002*xdist*git_dend)
		}
		       
		insert cad
	}
	
	if (!ablated) {
	for i=0, apical.count()-1 {
		access apical.o(i).sec
		insert na          gbar_na = gna_dend*anf2 // anf2 rescales apical sodium conductances globally
		
		insert kv          gbar_kv = gkv_dend	

		insert km          gbar_km = gkm_dend
		insert kca         gbar_kca = gkca_dend
		insert kap
		if (diam>0.8) { 		//Tuft-Burkhalter et al. 2006
			gbar_kap= gka_dend*0.1
		} else {
			gbar_kap= gka_dend	
		}

		insert ca 
		insert it  
		for (x) {  
			xdist = distance(x)    
			if (xdist>260) {
				gbar_ca = gca_dend*0.4		//Cho et al. 2006
				gbar_it = git_dend*0.4
				
			} else {
				gbar_ca = gca_dend*(0.9846*sin((0.008758*xdist)+0.8656))
				gbar_it = git_dend*(0.9846*sin((0.008758*xdist)+0.8656))
			}


		}
		
		insert cad
	}
	}
	for i=0, all.count()-1 {all.o(i).sec if(ismembrane("k_ion"))  {ek = Ek}}
	for i=0, all.count()-1 {all.o(i).sec if(ismembrane("na_ion")) {ena = Ena}}
	for i=0, all.count()-1 {
		access all.o(i).sec 
		if(ismembrane("ca_ion")) {
			ion_style("ca_ion",0,1,0,0,0)
			vshift_ca = 0
		}
	}
}


init_active_params()  
init_active()	
  
xopen("current-balance.hoc")
current_balance(v_init)