//Record and save data

// Object declarations
//Record
total=100
objref PCv, Bv[total], Av[total], CBv[total], CAv[total], CPCv
//Save
objref vsoma, vapical[total], vbasal[total], ca_soma, ca_apical[total], ca_basal[total], save_tags_basal[7], save_tags_apical[43]
strdef temp_save


pt=0.5 //the point where the recording electrode touches the segment (0 - 1)
n=tstop/dt

// Record somatic voltage
proc rec_soma(){
	PCv=new Vector(n)
	if (curr_rec){
		soma PCv.record(&ina(0.5))
	}else{
		soma PCv.record(&v(0.5))
	} 
}

// Record dendritic voltage
proc rec_dend () {
	
	for i=0, basal.count()-1 {
		Bv[i]=new Vector(n)
		if (curr_rec){
			basal.o(i).sec Bv[i].record(&ina(pt))
		}else{
			basal.o(i).sec Bv[i].record(&v(pt))
		}
	}
	
	if (!ablated) {
		for i=0, apical.count()-1 {
			Av[i]=new Vector(n)
			if (curr_rec){
				apical.o(i).sec Av[i].record(&ina(pt))
			}else{
				apical.o(i).sec Av[i].record(&v(pt))
			}
		}
	}
}

// Record calcium current (unused)
proc rec_calcium(){
	
	for i=0, basal.count()-1 {
		CBv[i]=new Vector(n)
		basal.o(i).sec CBv[i].record(&cai(pt)) 
	}
	
	if (!ablated) {
		for i=0, apical.count()-1 {
			CAv[i]=new Vector(n)
			apical.o(i).sec CAv[i].record(&cai(pt))
		}
	}
	CPCv=new Vector(n)
	soma CPCv.record(&cai(pt)) 		
}

// Save somatic trace
proc save_soma () {
	vsoma = new File()		
	sprint(temp_save,"%s/soma.dat", temp_dir)
	vsoma.wopen(temp_save)
	for j=0, PCv.size()-1 { vsoma.printf ("%f\n",PCv.x[j])}
	vsoma.close()
}

// Save synaptic orientation preferences per dendritic segment, for the basal tree only (deprecated)
proc save_tags() {
	save_tags_apical = new File()		
	save_tags_apical.wopen(temp_save)
	for j=0, tags_apical_syns.size()-1 { save_tags_apical.printf ("%d\n",tags_apical_syns.x[j])}
	save_tags_apical.close()
	for pd=0, 4 { 
		save_tags_basal[pd] = new File()		
		//sprint(temp_save,"%s/tag_basal%d_%d.dat", temp_dir, pd, n_run+1)
		sprint(temp_save,"%s/tags/tag_basal%d.dat",temp_dir,pd)
		save_tags_basal[pd].wopen(temp_save)
		save_tags_basal[pd].printf ("%d\n",tag_dend_vec.x[pd])
		for j=0, tags_basal_syns[pd].size()-1 {save_tags_basal[pd].printf ("%d\n",tags_basal_syns[pd].x[j])}
		save_tags_basal[pd].close()
	}
}

// Save synaptic orientation preferences per dendritic segment
proc save_tags2() {
	for pd=0, 42 {
		save_tags_apical[pd] = new File()		
		sprint(temp_save,"%s/tag_apical%d.dat", temp_dir,pd)
		save_tags_apical[pd].wopen(temp_save)
		for j=0, apicaltags[pd].size()-1 { 
			save_tags_apical[pd].printf ("%d\n",apicaltags[pd].x[j])
		}
		save_tags_apical[pd].close()
		//print "Apical",pd
	}
	for pd=0, 6 { 
		save_tags_basal[pd] = new File()		
		sprint(temp_save,"%s/tag_basal%d.dat",temp_dir,pd)
		save_tags_basal[pd].wopen(temp_save)
		//save_tags_basal[pd].printf ("%d\n",tag_dend_vec.x[pd])
		for j=0, basaltags[pd].size()-1 {
			save_tags_basal[pd].printf ("%d\n",basaltags[pd].x[j])
		}
		save_tags_basal[pd].close()
		//print "Basal",pd
	}
}

// Save dendritic voltage traces
proc save_dend () {
	if (!ablated) {
		for i=0,apical.count()-1 {
			vapical[i] = new File()		
			sprint(temp_save,"%s/apical%d.dat", temp_dir,i)
			vapical[i].wopen(temp_save)
			for j=0, Av[i].size()-1 {vapical[i].printf ("%f\n",Av[i].x[j])}  //Changed Av.x[j] to Av[i].x[j]
			vapical[i].close()
		}
	
	}
	for i=0,basal.count()-1 {
		vbasal[i] = new File()		
		sprint(temp_save,"%s/basal%d.dat", temp_dir,i)  //Used to not take runs into account. Fixed (20/6)
		vbasal[i].wopen(temp_save)
		for j=0, Bv[i].size()-1 {vbasal[i].printf ("%f\n",Bv[i].x[j])}  //Changed Bv.x[j] to Bv[i].x[j]
		vbasal[i].close()
	}
}


// Save calcium current traces
proc save_calcium() {
	ca_soma = new File()		
	sprint(temp_save,"%s/ca_soma.dat", temp_dir)
	ca_soma.wopen(temp_save)
	for j=0, CPCv.size()-1 {ca_soma.printf ("%f\n",CPCv.x[j])}
	ca_soma.close()
	if (!ablated) {
		for i=0,apical.count()-1 {
			ca_apical[i] = new File()		
			sprint(temp_save,"%s/ca_apical%d.dat", temp_dir,i)
			ca_apical[i].wopen(temp_save)
			for j=0, CAv.size()-1 {ca_apical[i].printf ("%f\n",CAv.x[j])}
			ca_apical[i].close()
		}
	}
	for i=0,basal.count()-1 {
		ca_basal[i] = new File()		
		sprint(temp_save,"%s/ca_basal%d.dat", temp_dir,i)
		ca_basal[i].wopen(temp_save)
		for j=0, CBv.size()-1 {ca_basal[i].printf ("%f\n",CBv.x[j])}
		ca_basal[i].close()
	}
}