load_file("nrngui.hoc")

objectvar ocbox_, ocbox_list_, scene_, scene_list_
objref sph

{ocbox_list_ = new List()  scene_list_ = new List()}

vplot=1
gplot=0
if (passive==0) stateplot=1
shapeplot=0
syngrp=0


//open RunControl and set defaults
{
xpanel("RunControl", 0)
xvalue("Init","v_init", 1,"stdinit()", 1, 1 )
xbutton("Init & Run","run()")
xbutton("Stop","stoprun=1")
xvalue("Continue til","runStopAt", 1,"{continuerun(runStopAt) stoprun=1}", 1, 1 )
xvalue("Continue for","runStopIn", 1,"{continuerun(t + runStopIn) stoprun=1}", 1, 1 )
xbutton("Single Step","steprun()")
xvalue("t","t", 2 )
xvalue("Tstop","tstop", 1,"tstop_changed()", 0, 1 )
xvalue("dt","dt", 1,"setdt()", 0, 1 )
xvalue("Points plotted/ms","steps_per_ms", 1,"setdt()", 0, 1 )
xvalue("Scrn update invl","screen_update_invl", 1,"", 0, 1 )
xvalue("Real Time","realtime", 0,"", 0, 1 )
xpanel(680,8)
}

load_file("pointgrp.hoc")
objref ms
//Begin PointProcessGroupManager
if (syngrp == 1) {

	if (verbosity > 1) printf("this should not happen\n")

	ocbox_ = new PointProcessGroupManager(0)

	object_push(ocbox_)

	ms = new MechanismStandard("AlphaSynapse")
	ms.set("onset", 150, 0)
	ms.set("tau", 0.1, 0)
	ms.set("gmax", 0, 0)
	ms.set("e", 0, 0)
	mnews("AlphaSynapse", ms)
	select(0)
	execute("Tines[510] ocbox_.move(0.5)")


	ms = new MechanismStandard("AlphaSynapse")
	ms.set("onset", 50, 0)
	ms.set("tau", 0.1, 0)
	ms.set("gmax", 0, 0)
	ms.set("e", 0, 0)
	mnews("AlphaSynapse", ms)
	select(1)
	execute("Tines[510] ocbox_.move(0.5)")

	object_pop() doNotify()


	ocbox_ = ocbox_.v1
	ocbox_.map("PointProcessGroupManager", 989, 29, 556.8, 295.68)

	objref ocbox_
} //End PointProcessGroupManager


objref grph0
objref scene_vector_[8]

if (vplot) {
	grph0 = new Graph(0)
	scene_vector_[5] = grph0
	{grph0.view(0, -69, 500, 40, 800, 400, 800, 350)}
	//(mleft, mbottom, mwidth, mheight, wleft,wtop, wwidth, wheight)
	// in a window with user-specified location (5th and 6th args) and size (last 2 args)
	graphList[0].append(grph0)
	//addplot(g,0)
	//g.size(0, 500, -80, -50)        // specify coordinate system for the canvas drawing area
	//g.simgraph()
	//g.family(1)
	grph0.addvar("Axon[20].v(0.5)", 4,1)
	grph0.addvar("Tines[621].v(0.5)", 2,1)
	grph0.addvar("Handle[10].v(0.5)", 1,1)
	grph0.addvar("FieldC[22].v(0.5)", 7,1)
	grph0.addvar("FieldB[28].v(0.5)", 5,1)
	grph0.addvar("MainTrunk[0].v(0.5)", 3,1)
// 	grph0.addvar("Tines[786].v(0.5)", 4,1)
	grph0.addvar("soma.v(0.5)", 6,1)
}

if (gplot) {
	grph0 = new Graph(0)
	scene_vector_[4] = grph0
	{grph0.view(0, 0, 500, 0.001, 50, 400, 700, 350)}
	//(mleft, mbottom, mwidth, mheight, wleft,wtop, wwidth, wheight)
	// in a window with user-specified location (5th and 6th args) and size (last 2 args)
	graphList[0].append(grph0)

	grph0.addvar("Tines[621].g_h(0.5)", 2,1)
	grph0.addvar("Tines[786].g_h(0.5)", 4,1)
	grph0.addvar("Tines[621].g_KD(0.5)", 2,1)
	grph0.addvar("Tines[786].g_KD(0.5)", 4,1)
}

if (stateplot) {
	grph0 = new Graph(0)
	scene_vector_[6] = grph0
	{grph0.view(0, 0, 500, 1, 50, 400, 700, 350)}
	//(mleft, mbottom, mwidth, mheight, wleft,wtop, wwidth, wheight)
	// in a window with user-specified location (5th and 6th args) and size (last 2 args)
	graphList[0].append(grph0)

	if (synCa<3) {
		grph0.addvar("Tines[621].n_h(0.5)", 1,1)
	} else if (synCa == 3) {
		grph0.addvar("Tines[621].n_hcn(0.5)", 1,1)
	} else {
		grph0.addvar("Tines[621].m_h_ca(0.5)", 1,1)
	}
	{Tines[621] tmp = ismembrane("NaP")}
	if (tmp) grph0.addexpr("Tines[621].g_NaP(0.5)/Tines[621].gmax_NaP(0.5)", 5,1)
	//if (synCa) grph0.addexpr("Tines[621].g_KCa(0.5)/Tines[621].gmax_KCa(0.5)", 1,1)
	//grph0.addvar("Tines[786].l_KD_ca2(0.5)", 2,1)
	//grph0.addvar("Tines[786.n_KD_ca2(0.5)", 5,1)
	//grph0.addexpr("Handle[0].cai(0.5)*100", 9, 1)
	grph0.addexpr("Handle[15].g_KCa/Handle[15].gmax_KCa", 9,1)
	Handle[15] if (ismembrane("CaT")) grph0.addexpr("Handle[15].g_CaT/Handle[15].gmax_CaT", 3,1)
	Handle[15] if (ismembrane("CaS")) grph0.addexpr("Handle[15].g_CaS/Handle[15].gmax_CaS", 1,1)
	grph0.addexpr("Handle[15].g_M/Handle[15].gmax_M", 6,1)

	if (synCa==1) {
	grph0.addexpr("Tines[621].g_KD_ca2(0.5)/Tines[621].gmax_KD_ca2(0.5)", 2,1)
	grph0.addexpr("Tines[786].g_KD_ca2(0.5)/Tines[786].gmax_KD_ca2(0.5)", 4,1)
	grph0.addexpr("Tines[614].g_KD_ca2(0.5)/Tines[614].gmax_KD_ca2(0.5)", 6,1)
	grph0.addexpr("Tines[380].g_KD_ca2(0.5)/Tines[380].gmax_KD_ca2(0.5)", 9,1)
	} else if (synCa==2){
	grph0.addexpr("Tines[621].g_KD_cn(0.5)/Tines[621].gmax_KD_cn(0.5)", 2,1)
	grph0.addexpr("Tines[786].g_KD_cn(0.5)/Tines[786].gmax_KD_cn(0.5)", 4,1)
	grph0.addexpr("Tines[614].g_KD_cn(0.5)/Tines[614].gmax_KD_cn(0.5)", 6,1)
	grph0.addexpr("Tines[380].g_KD_cn(0.5)/Tines[380].gmax_KD_cn(0.5)", 9,1)
	} else if (synCa==3){
	//grph0.addexpr("Tines[621].g_KD_ca3(0.5)/Tines[621].gmax_KD_ca3(0.5)", 2,1)
	grph0.addexpr("Tines[786].g_KD_ca3(0.5)/Tines[786].gmax_KD_ca3(0.5)", 4,1)
	} else if (synCa>3){
	grph0.addexpr("Tines[621].g_KD_cn2(0.5)/Tines[621].gmax_KD_cn2(0.5)", 2,1)
	grph0.addexpr("Tines[786].g_KD_cn2(0.5)/Tines[786].gmax_KD_cn2(0.5)", 4,1)
	//grph0.addexpr("Tines[614].g_KD_cn2(0.5)/Tines[614].gmax_KD_cn2(0.5)", 6,1)
	//grph0.addexpr("Tines[380].g_KD_cn2(0.5)/Tines[380].gmax_KD_cn2(0.5)", 9,1)
	} else if (synCa==0){
		grph0.addexpr("Tines[621].g_KD/Tines[621].gmax_KD", 4,1)
//		grph0.addexpr("Tines[621].g_KA/Tines[621].gmax_KA", 2,1)
// 		grph0.addexpr("Tines[614].g_KD(0.5)/Tines[614].gmax_KD(0.5)", 6,1)
// 		grph0.addexpr("Tines[380].g_KD(0.5)/Tines[380].gmax_KD(0.5)", 4,1)
	}
}

proc FieldAShapePlot() {local l,h
// FieldAShapePlot(variable, scale max, scale min)

	sph = new PlotShape(0)
	sph.size(60.6917,540.608,62.739,324.261)
	sph.variable($s1)
	l=0
	h=2e-3
	if (numarg()>1) h=$2
	if (numarg()>2) l=$3
	sph.scale(l,h)
	sph.show(0)
	sph.observe(FieldA)
	scene_vector_[3] = sph
	{sph.view(66, 100, 420, 230, 960, 10, 640, 350)}
	fast_flush_list.append(sph)
	sph.save_name("fast_flush_list.")
	sph.rotate(0,0,0,0.7,0,0)
	sph.exec_menu("Shape Plot")

}

proc FieldCShapePlot() {local l,h
// FieldCShapePlot(variable, scale max, scale min)

	sph = new PlotShape(0)
	sph.size(60.6917,540.608,62.739,324.261)
	// .size(mleft, mright, mbottom, mtop)
	sph.variable($s1)
	l=0
	h=1e-3
	if (numarg()>1) h=$2
	if (numarg()>2) l=$3
	sph.scale(l,h)
	sph.show(0)
	sph.observe(Ctines)
	scene_vector_[2] = sph
	{sph.view(65, 295, 140, 140, 60, 350, 420, 420)}
	//.view(mleft, mbottom, mwidth, mheight, sleft, stop, swidth, sheight)
	// m* are model coordinates, s* are screen pixel coordinates where 0,0 is the top left corner of screen
	fast_flush_list.append(sph)
	sph.save_name("fast_flush_list.")
	sph.exec_menu("Shape Plot")

}

if (shapeplot) {
	FieldAShapePlot("cai",2e-3,0)

}

// dt = 0.02
// steps_per_ms = 25
// screen_update_invl = 0.1

/*0 white
1 black
2 red
3 blue
4 green
5 orange
6 brown
7 violet
8 yellow
9 gray*/
/*

objectvar gi
gi = new Graph(0)
scene_vector_[6] = gi
{gi.view(-10, 0, 500, 0, 100, 300, 700, 300)}
graphList[0].append(gi)
gi.addvar("Tines[786].g_KD( 0.5 )", 1, 1, 0.8, 0.9, 2)
gi.addvar("Tines[786].g_h( 0.5 )", 3, 1, 0.8, 0.9, 2)
*/