back=0

//////// load needed templates////////////
if(!back){ load_file("nrngui.hoc")               }
if(!back){ load_file("template/ObliquePath.hoc") }
if(!back){ load_file("template/BasalPath.hoc"  ) }

objref econ,f1,f2,f3,ss,cvode
f1= new File()
f2= new File()
f3= new File()
ss=new SaveState()                                                                  
cvode = new CVode(1)
x=cvode.active(1)

restart=0
v_init=-70

strdef morphology_location, morpho_path, ObliqueTrunkSection, BasalTrunkSection
objref vRP, vAPEX

proc xopen_morphology(){
	sprint(morpho_path,"%s/%s",morphology_location,$s1)
	xopen(morpho_path)
}

// Carmen
morphology_location = "pc2b"
ObliqueTrunkSection = "trunk[17]"
BasalTrunkSection   = "trunk[7]"

xopen_morphology("cell.hoc")				//reads morpholofy from the file
xopen_morphology("cell-analysis-simple.hoc") //reads simplified version of CA 


			// --------------- Creating lists-----------------

xopen("lib/TP-lib.hoc")
Tip_sections(apical_non_trunk_list,apical_trunk_list,"Apical")		
objref apical_tip_list
apical_tip_list=TP_list							// Apical Tip list

print "apical_tip_list"
apical_tip_list.printnames()
print  "END apical_tip_list"

objref tmp_pl[num_tips],pl[num_tips],opl[num_tips],degree_apical_tip,peri_trunk_list
objref bl[num_tips],obl[num_tips],degree_basal_tip
xopen("lib/Oblique-lib.hoc")
oblique_sections(apical_tip_list,apical_trunk_list,num_tips)		// apical dendrite path lists and degree of tips

xopen("lib/vector-distance.hoc")

//-----------------------------------------------------------------------------------------------------
printf("Setting up cell\n")                                         // load cell-setup to
xopen("cell_setup_pc2b_control.hoc") 
//load_file("atolscalekd.ses")                                            // specify all mechanisms, membrane properties etc


///////////////////Load File//////////////////////

// if(!back) { load_file("w_soma_cap.ses") } 


/*cvode_active(1)*/

//////   Spike counter//////////

// objref apc, v1

// proc insert_APC() {
// 	apc = new APCount(0.5)
// 	apc.thresh = $1
// 	v1 = new Vector()
// 	apc.record(v1)
// }

// proc init() {
// 	if(restart){
// 		f1.ropen("statekdsoma")
// 		ss.fread(f1)
// 		f1.close
// 		finitialize(v_init)
// 		ss.restore()
// 		t=0
// 		fcurrent()
// 		cvode.re_init()
// 	} else {
// 		finitialize(v_init)
// 		fcurrent()
// 	}
// }

            
////////////////////Main///////////////////

// nsyn=10
// objref  s[nsyn], rsyn[nsyn], nc[nsyn]
// objref rsynmda[nsyn], ncnmda[nsyn]

// objref rect,recv,reci,savv,savi,savt
// objref tvec,ampvec,iclamp
// objref savtotcurr, savtotna16a, savtottrpm4, totcurr, totna16a, tottrpm4
// strdef cmd

// i=0
// forall{
// 	for(x){
	
// 	sprint(cmd,"%s%d","objref totcurrentpart",i)
// 	execute(cmd)
	
	
// 	if(ismembrane("ican")){
// 			sprint(cmd,"%s%d","objref tottrpm4apart",i)
// 			execute(cmd)
// 			}
	
// 	if(ismembrane("na16a")){
// 			sprint(cmd,"%s%d","objref totna16apart",i)
// 			execute(cmd)
// 			}		
	
// 	i=i+1
// 	}
// }
// proc main(){

// 	recv =new Vector()
// 	rect =new Vector()
// 	reci =new Vector()
	
// 	i=0
// 	forall{
// 		for(x){
		
// 		sprint(cmd,"%s%d%s","totcurrentpart",i,"=new Vector()")
// 		execute(cmd)
		
		
// 		if(ismembrane("ican")){
// 				sprint(cmd,"%s%d%s","tottrpm4apart",i,"=new Vector()")
// 				execute(cmd)
// 				}
		
// 		if(ismembrane("na16a")){
// 				sprint(cmd,"%s%d%s","totna16apart",i,"=new Vector()")
// 				execute(cmd)
// 				}		

		
// 		i=i+1
// 		}
// 	}

// 	//tol=cvode.atolscale(&soma.v(0.5),1e-5)
// 	period=95.75
// 	phase0=67.8234
// 	dur=3
// 	amp2=0.0
// 	tstop= 16000

// 	in=0

// 	th=-14
// 	access soma
// 	insert_APC(th)

// 	f3.wopen("spike.dat")
// 	current=0.0 // 0.18
// 	del=50
// 	npulse = 10
// 	pulsdur = 1000
// 	pulsamp =  0.36
// 		starttime = 13000
//         curbase = 0.09

// 	soma {
// 		iclamp = new IClamp( 0.5 )
// 		tvec	= new Vector(5 )
// 		ampvec = new Vector(5 )
// 	}

// 	iclamp.del = 0
// 	iclamp.dur = 1e9
// 		tvec.x[0 ] = 0
// 		tvec.x[1 ] = starttime
// 		tvec.x[2 ] = starttime + pulsdur
// 		tvec.x[3 ] = starttime + 2*pulsdur
// 		tvec.x[4 ] = tstop
// 		ampvec.x[0  ] = curbase
// 		ampvec.x[1  ] = curbase
// 		ampvec.x[2  ] = curbase + pulsamp
// 		ampvec.x[3  ] = curbase
// 		ampvec.x[4  ] = curbase
// 	ampvec.play(&iclamp.amp,tvec,1)
	
// 	access soma[0]
// 	recv.record(&v(0.5))
// 	rect.record(&t)
// 	reci.record(&iclamp.i)
	
	
// 	i=0
// 	forall{
// 		for(x){
		
// 		sprint(cmd,"%s%d%s%s%s%f%s","totcurrentpart",i,".record(&",secname(),".i_cap(",x,"))")
// 		execute(cmd)
		
		
// 		if(ismembrane("ican")){
// 				sprint(cmd,"%s%d%s%s%s%f%s","tottrpm4apart",i,".record(&",secname(),".itrpm4_ican(",x,"))")
// 				execute(cmd)
// 				}
		
// 		if(ismembrane("na16a")){
// 				sprint(cmd,"%s%d%s%s%s%f%s","totna16apart",i,".record(&",secname(),".ina_na16a(",x,"))")
// 				execute(cmd)
// 				}		

		
// 		i=i+1
// 		}
// 	}
	

// 	//////////////run//////////////////////// 
// 	run()
// 	/////////////////////////////////////

// 	savv= new File()
// 	savt= new File()
// 	savi = new File()

// 	savv.wopen("v.txt")
// 	savt.wopen("time.txt")
// 	savi.wopen("i.txt")
	
// 	recv.printf(savv)
// 	rect.printf(savt)
// 	reci.printf(savi)
	
// 	savv.close
// 	savt.close
// 	savi.close
	
// 	totcurr=new Vector(rect.size())
// 	totna16a=new Vector(rect.size())
// 	tottrpm4=new Vector(rect.size())
	
// 	i=0
// 	forall{
// 		for(x){
		
// 		sprint(cmd,"%s%d%s%f%s","totcurrentpart",i,".mul(area(",x,")*1e-8)")
// 		execute(cmd)
// 		sprint(cmd,"%s%d%s","totcurr.add(totcurrentpart",i,")")
// 		execute(cmd)
		
// 		if(ismembrane("ican")){
// 				sprint(cmd,"%s%d%s%f%s","tottrpm4apart",i,".mul(area(",x,")*1e-8)")
// 				execute(cmd)
// 				sprint(cmd,"%s%d%s","tottrpm4.add(tottrpm4apart",i,")")
// 				execute(cmd)
// 				}
		
// 		if(ismembrane("na16a")){
// 				sprint(cmd,"%s%d%s%f%s","totna16apart",i,".mul(area(",x,")*1e-8)")
// 				execute(cmd)
// 				sprint(cmd,"%s%d%s","totna16a.add(totna16apart",i,")")
// 				execute(cmd)
// 				}		

		
// 		i=i+1
// 		}
// 	}
	
// 	savtotcurr= new File()
// 	savtotna16a= new File()
// 	savtottrpm4 = new File()

// 	savtotcurr.wopen("totcurr.txt")
// 	savtotna16a.wopen("totna16a.txt")
// 	savtottrpm4.wopen("tottrpm4.txt")
	
// 	totcurr.printf(savtotcurr)
// 	totna16a.printf(savtotna16a)
// 	tottrpm4.printf(savtottrpm4)
	
// 	savtotcurr.close
// 	savtotna16a.close
// 	savtottrpm4.close
	
	
// 	// print the spike number 
// 	if(!back) printf("\n Current: %.4f nA | # Spikes: %d\n", current,  apc.n)
// 	if(!back) printf("___________________\n")
// 	v1.printf(f3)

// 	f3.close
// 	f2.wopen("state.new")
// 	ss.save
// 	ss.fwrite(f2)
// 	f2.close
// }


// main()
/********    end file    ******/