Reciprocal regulation of rod and cone synapse by NO (Kourennyi et al 2004)

 Download zip file 
Help downloading and running models
Accession:64216
We constructed models of rod and cone photoreceptors using NEURON software to predict how changes in Ca channels would affect the light response in these cells and in postsynaptic horizontal cells.
Reference:
1 . Kourennyi DE, Liu XD, Hart J, Mahmud F, Baldridge WH, Barnes S (2004) Reciprocal modulation of calcium dynamics at rod and cone photoreceptor synapses by nitric oxide. J Neurophysiol 92:477-83 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell;
Brain Region(s)/Organism:
Cell Type(s): Retina photoreceptor cone GLU cell;
Channel(s): I Chloride; I K; I h; I K,Ca; I Calcium; I Potassium;
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s): NO;
Simulation Environment: NEURON;
Model Concept(s): Calcium dynamics; Vision;
Implementer(s): Kourennyi, Dmitri E [dek at case.edu]; Liu, Xiaodong [xliu22 at jhmi.edu];
Search NeuronDB for information about:  Retina photoreceptor cone GLU cell; I Chloride; I K; I h; I K,Ca; I Calcium; I Potassium; NO;
begintemplate VectorPlay
public b, g, vx, vy, sname, set_vec, oldval, con1
objref b, g, this, vx, vy, sc
strdef sname, tstr

i=0
oldval=0

proc init() {
	have_name = 0
	is_con = 0
	state = 0
	sc = new SymChooser("Variable Name to Play into")
	build()
	if (numarg() == 0) {
		sprint(tstr, "%s", this)
		b.map(tstr)
	}
}

proc build() {
	sname = "Choose Variable Name in Graph menu"
	b = new VBox()
	b.ref(this)
	b.save("save()")
	b.intercept(1)
	xpanel("", 1)
	xstatebutton("Connected", &state, "con()")
	xvarlabel(sname)
	xpanel()
	g = new Graph()
	b.intercept(0)
	g.menu_action("Variable Name", "varname()")
	g.menu_action("Vector from Clipboard", "clipboard()")
}

proc varname() {
	if (sc.run()) {
		have_name = 1
		sc.text(sname)
	}
	con1(is_con)
}

proc clipboard() {
	sprint(tstr, "%s.set_vec(hoc_obj_[1], hoc_obj_[0])", this)
	if(execute1(tstr) == 0) {
continue_dialog("No data in the Vector clipboard.")
        }else{
		con1(is_con)
	}
}

proc set_vec() {
	vx = $o1.c
	vy = $o2.c
	vy.plot(g, vx)
}

proc con() {
	if (!have_name) {
		continue_dialog("Choose Variable name (see Graph Menu)")
		state = 0
	}else if (!object_id(vy)) {
		continue_dialog("Choose Vector from Clipboard (see Graph Menu)")
		state = 0
	}else{
		con1(state)
	}		
}

proc con1() {
	if (object_id(vy)) {
		if (is_con) {
			vy.play_remove()
			sprint(tstr, "%s = %g", sname, oldval)
			execute(tstr)
			is_con = 0
			state = 0
		}
		if ($1) {
			sprint(tstr, "%s.vy.play(&%s, %s.vx)", this, sname, this)
			if (execute1(tstr)) {
				sprint(tstr, "%s.oldval = %s", this, sname)
				execute(tstr)
				is_con = 1
				state = 1
			}else{
				continue_dialog("Invalid Variable name")
			}
		}
	}
}

proc save() {local i
	b.save("load_file(\"vplay.hoc\")\n}\n{")
	b.save("ocbox_=new VectorPlay(1)")
	b.save("}\n{object_push(ocbox_)}")

	if (object_id(vy)) {
		sprint(tstr, "vy = new Vector(%d)", vy.size)
		b.save(tstr)
		sprint(tstr, "vx = new Vector(%d)", vx.size)
		b.save(tstr)
		sprint(tstr, "for i=0,%d { vx.x[i]=fscan() vy.x[i]=fscan()}",\
			vx.size-1)
		b.save(tstr)
		for i=0, vx.size-1 {   
			sprint(tstr, "%g %g", vx.x[i], vy.x[i])
			b.save(tstr)
		}
		b.save("{vy.plot(g, vx)}")
	}

	sprint(tstr, "{sname = \"%s\"  have_name = %d  con1(%d)}",\
		 sname, have_name, is_con)
	b.save(tstr)

	b.save("{object_pop()}\n{")
	g.save_name("ocbox_.g", 1)
	b.save("ocbox_ = ocbox_.b")
}

endtemplate VectorPlay

objref tobj

proc makeVectorPlay() {
	tobj = new VectorPlay()
	objref tobj
}

Loading data, please wait...