// movie for the mitral and granule synapse weights associated with
// the mitral or granule cell gid
create w_movie_section
w_movie_section {delete_section()}
objref keepsyn, movie_ncl, w_grph_, w_grph_handle_, w_box_
{load_file("pattern.hoc")}
w_clear_ignore = 0

proc clear_weight_movie() {
	if (w_clear_ignore) { return }
	objref w_box_, w_grph_handle_, w_grph_, movie_ncl, keepsyn
	if (section_exists("w_movie_section")) {
		w_movie_section { delete_section() }
	}	
}

proc synonly() {local i  localobj mg, syn, nc, nil
	clear_weight_movie()
	create w_movie_section
	w_movie_section { insert pas g_pas = 1e9 e_pas = -65 }
	keepsyn = new List()
	movie_ncl = new List()
    if (argtype(1) == 0) {
	for i=0, mgrs_list.count-1 {
		mg = mgrs_list.object(i)
		if ($1 == -1 || mg.mitral_gid == $1 || mg.granule_gid == $1) {
			w_movie_section mg.fi.loc(.5)
			keepsyn.append(mg.fi)
			w_movie_section mg.ampanmda.loc(.5)
			keepsyn.append(mg.ampanmda)
		}
	}
    }else{ // synsel list
	for i=0, $o1.count-1 {
		mg = $o1.object(i)
		w_movie_section mg.fi.loc(.5)
		keepsyn.append(mg.fi)
		w_movie_section mg.ampanmda.loc(.5)
		keepsyn.append(mg.ampanmda)
	}
	$o1.remove_all()
    }
	mg = nil
	w_clear_ignore = 1
	clear()
	w_clear_ignore = 0
	for i=0, keepsyn.count-1 {
		syn = keepsyn.object(i)
		nc = pc.gid_connect(syn.srcgid, syn)
		nc.weight[0] = 1
		nc.delay = 1
		movie_ncl.append(nc)
	}
}

proc weight_movie() {localobj s
	synonly($1)
	w_box_ = new VBox()
	w_box_.intercept(1)
	w_grph_ = new Graph()
	w_grph_handle_ = new FInitializeHandler("cvode.event(0, \"show_weight()\")")
	s = new String()
	if ($1 < nmitral) {
		w_use_x = 1
		sprint(s.s, "Synapses associated with Mitral gid %d\n", $1)
	}else{
		w_use_x = 0
		sprint(s.s, "Synapses associated with Granule gid %d\n", $1)
	}
	w_grph_.size(0, w_use_x*len + (1 - w_use_x)*(nmitral-1), 0, 1)
	w_box_.intercept(0)
	w_box_.map(s.s, 400, 250, 700, 250)
	stdinit()
}

proc show_weight() {local i, x, w  localobj g
	g = w_grph_
	g.erase()
	for i=0, movie_ncl.count-1 {
		if (w_use_x) {
			x = keepsyn.object(i).x
		}else{
			x = keepsyn.object(i).mgid
		}
		w = movie_ncl.object(i).weight[2]
		if (i%2) {
			g.mark(x, w, "S", 8, 2, 1)
		}else{
			g.mark(x, w, "s", 10, 3, 2)
		}
	}
	cvode.event(t+100, "show_weight()")
}

{load_file("allsynhinton.hoc")}
proc allsyn() {
	synonly(-1)
	w_box_ = new AllSynHinton(movie_ncl)
	stdinit()
}

{load_file("somesyn.hoc")}
proc somesyn() {
	synonly($o1)
	w_box_ = new SomeSyn(movie_ncl)
	stdinit()
}