xopen("init.hoc")
xopen("auto_fitting.ses")

/*
xpanel("Injection site")
xbutton("Blue cell", "injSoma_b()")
xbutton("Red cell", "injSoma_r()")
xpanel()
*/


objref run_cycle_vec
objref Rm_b_vec, Rm_r_vec, Cm_b_vec, Cm_r_vec, Ra_b_vec, Ra_r_vec, GgjBR_vec, GgjRB_vec
objref Inj_blue_error_vec, Att_red_error_vec, summa_inj_blue_error_vec, Inj_red_error_vec, Att_blue_error_vec, summa_inj_red_error_vec

objref dataMatrix, dataFile

proc auto_fitting(){

	run_cycle_vec = new Vector()

	Rm_b_vec = new Vector()
	Rm_r_vec = new Vector()
	Cm_b_vec = new Vector()
	Cm_r_vec = new Vector()
	Ra_b_vec = new Vector()
	Ra_r_vec = new Vector()
	GgjBR_vec = new Vector()
	GgjRB_vec = new Vector()
	
	Inj_blue_error_vec = new Vector()
	Att_red_error_vec = new Vector()
	summa_inj_blue_error_vec = new Vector()
	Inj_red_error_vec = new Vector()
	Att_blue_error_vec = new Vector()
	summa_inj_red_error_vec = new Vector()

	for(it_count=0; it_count<$1; it_count+=1){
	
		injSoma_b()
		MulRunFitter[0].prun()
		
		run_cycle_vec.append(it_count+1)
		
		Rm_b_vec.append(user_Rm_b/1000)
		Cm_b_vec.append(user_cm_b)
		Ra_b_vec.append(user_Ra_b)
		GgjBR_vec.append(gapWeight)
		Inj_blue_error_vec.append(MulRunFitter[0].p.pf.generatorlist.object(0).gen.efun())
		Att_red_error_vec.append(MulRunFitter[0].p.pf.generatorlist.object(1).gen.efun())
		summa_inj_blue_error_vec.append(MulRunFitter[0].p.pf.generatorlist.object(0).gen.efun() + MulRunFitter[0].p.pf.generatorlist.object(1).gen.efun())
		
		injSoma_r()
		MulRunFitter[1].prun()
		
		Rm_r_vec.append(user_Rm_r/1000)
		Cm_r_vec.append(user_cm_r)
		Ra_r_vec.append(user_Ra_r)
		GgjRB_vec.append(gapWeight)
		Inj_red_error_vec.append(MulRunFitter[1].p.pf.generatorlist.object(0).gen.efun())
		Att_blue_error_vec.append(MulRunFitter[1].p.pf.generatorlist.object(1).gen.efun())
		summa_inj_red_error_vec.append(MulRunFitter[1].p.pf.generatorlist.object(0).gen.efun() + MulRunFitter[1].p.pf.generatorlist.object(1).gen.efun())
		
		print (it_count+1), "/", $1, "iterations DONE"
	}
	
	dataMatrix = new Matrix()
	
	dataMatrix.resize(run_cycle_vec.size, 15)
	dataMatrix.setcol(0, run_cycle_vec)
	dataMatrix.setcol(1, Rm_b_vec)
	dataMatrix.setcol(2, Cm_b_vec)
	dataMatrix.setcol(3, Ra_b_vec)
	dataMatrix.setcol(4, GgjBR_vec)
	dataMatrix.setcol(5, Inj_blue_error_vec)
	dataMatrix.setcol(6, Att_red_error_vec)
	dataMatrix.setcol(7, summa_inj_blue_error_vec)
	dataMatrix.setcol(8, Rm_r_vec)
	dataMatrix.setcol(9, Cm_r_vec)
	dataMatrix.setcol(10, Ra_r_vec)
	dataMatrix.setcol(11, GgjRB_vec)
	dataMatrix.setcol(12, Inj_red_error_vec)
	dataMatrix.setcol(13, Att_blue_error_vec)
	dataMatrix.setcol(14, summa_inj_red_error_vec)
	
	dataFile = new File()
	
	strdef dataFileName
	
	sprint(dataFileName, "FittingResults_Ra=%g.dat", user_Ra_r)
	dataFile.wopen(dataFileName)
	dataMatrix.fprint(dataFile, " %g")
	dataFile.close()
	
	print "Finished, data saved"
}


objref Ra_range_vec

proc repeated_auto_fitting(){

	Ra_range_vec = new Vector()
	Ra_range_vec.append(75, 92, 100, 125, 150)

	for(k=0; k<Ra_range_vec.size(); k+=1){

		user_Ra_r = Ra_range_vec.x[k]
		user_Ra_b = Ra_range_vec.x[k]
		
		print "Ra = ", user_Ra_b

		auto_fitting(3)
	}
}

//repeated_auto_fitting()