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;
load_file("nrngui.hoc")
load_file("vplaym.hoc")
load_file("about.hoc")


//soma
create soma
access soma

soma{
 nseg=1
 diam=10  //um
 L=10/PI  //um
 cm=16  // 1uF/cm2
 //Ra, the axial resistance used to connect sections together [34.5 ohm-cm]
 //100 um2 area (i_vc graphs on same scale as ina)
 
 insert CPR
 insert Kv
}



//Place and Hidden the PrintWindowManager
{pwman_place(0,0,0)}

{
xpanel("soma(0 - 1) (Parameters)", 0)
xlabel("soma(0 - 1) (Parameters)")
xlabel("nseg = 1")
soma.L = 3.1831
xvalue("L","soma.L", 1,"", 0, 0 )
soma.diam = 10
xvalue("diam","soma.diam", 1,"", 0, 0 )
soma.cm = 16
xvalue("cm","soma.cm", 1,"", 0, 0 )
soma.gCabar_CPR = 4.92
xvalue("gCabar_CPR","soma.gCabar_CPR", 1,"", 0, 0 )
soma.eCa_CPR = 40
xvalue("eCa_CPR","soma.eCa_CPR", 1,"", 0, 0 )
soma.aoCa_CPR = 0.0031
xvalue("aoCa_CPR","soma.aoCa_CPR", 1,"", 0, 0 )
soma.VhalfCa_CPR = -16.6
xvalue("VhalfCa_CPR","soma.VhalfCa_CPR", 1,"", 0, 0 )
soma.SCa_CPR = 5.7
xvalue("SCa_CPR","soma.SCa_CPR", 1,"", 0, 0 )
soma.ghbar_CPR = 4.9
xvalue("ghbar_CPR","soma.ghbar_CPR", 1,"", 0, 0 )
soma.eh_CPR = -32
xvalue("eh_CPR","soma.eh_CPR", 1,"", 0, 0 )
soma.aoh_CPR = 0.00164
xvalue("aoh_CPR","soma.aoh_CPR", 1,"", 0, 0 )
soma.Vhalfh_CPR = -56
xvalue("Vhalfh_CPR","soma.Vhalfh_CPR", 1,"", 0, 0 )
soma.Sh_CPR = -5.33
xvalue("Sh_CPR","soma.Sh_CPR", 1,"", 0, 0 )
soma.eCl_CPR = -45
xvalue("eCl_CPR","soma.eCl_CPR", 1,"", 0, 0 )
soma.gClbar_CPR = 6.5
xvalue("gClbar_CPR","soma.gClbar_CPR", 1,"", 0, 0 )
soma.SCl_CPR = 0.09
xvalue("SCl_CPR","soma.SCl_CPR", 1,"", 0, 0 )
soma.FactorCaI_CPR = 0.45
xvalue("FactorCaI_CPR","soma.FactorCaI_CPR", 1,"", 0, 0 )
soma.eKca_CPR = -80
xvalue("eKca_CPR","soma.eKca_CPR", 1,"", 0, 0 )
soma.gKcabar_CPR = 0.5
xvalue("gKcabar_CPR","soma.gKcabar_CPR", 1,"", 0, 0 )
soma.gl_CPR = 0.01
xvalue("gl_CPR","soma.gl_CPR", 1,"", 0, 0 )
soma.el_CPR = 0
xvalue("el_CPR","soma.el_CPR", 1,"", 0, 0 )
soma.gCGMP_CPR = 0
xvalue("gCGMP_CPR","soma.gCGMP_CPR", 1,"", 0, 0 )
soma.eCGMP_CPR = 0.8
xvalue("eCGMP_CPR","soma.eCGMP_CPR", 1,"", 0, 0 )
soma.gKvbar_Kv = 2
xvalue("gKvbar_Kv","soma.gKvbar_Kv", 1,"", 0, 0 )
soma.eKv_Kv = -80
xvalue("eKv_Kv","soma.eKv_Kv", 1,"", 0, 0 )
xpanel(107,58)
}

//Control Panel
{
xpanel("RunControl", 0)
v_init = -39.6 //mV
xvalue("Init","v_init", 1,"stdinit()", 1, 1 )
xbutton("Init & Run"," myrun()")
t = 0
xvalue("t","t", 2 )
tstop = 1024*5-1
xvalue("Tstop","tstop", 1,"tstop_changed()", 0, 1 )
dt = 10
xvalue("dt","dt", 1,"setdt()", 0, 1 )
steps_per_ms = 0.1
xvalue("Points plotted/ms","steps_per_ms", 1,"setdt()", 0, 1 )
realtime = 0
xvalue("Real Time","realtime", 0,"", 0, 1 )
I=20
xvalue("I (pA)","I",1,"", 0, 1)
//xvalue("scale (pA)","scale",1,"", 0, 1)
xpanel(440,120)
}

//Current Injection
objectvar stim
soma stim = new IClamp(0.5)
stim.del=0
stim.dur=tstop
stim.amp=10  // in nA units


//plot the curves

objectvar save_window_, gObj
//the Display Window
{
 gObj= new VBox()
 gObj.intercept(1)
 save_window_ = new Graph(0)
 save_window_.size(0,tstop,-70,-30)
 save_window_.view(0,-70,tstop,40, 820,0,265, 250)
 graphList[0].append(save_window_)
 save_window_.addexpr("v(.5)", 2, 1)

 
 save_window_ = new Graph(0)
 save_window_.size(0,tstop,-70,-30)
 save_window_.view(0,0,tstop,40, 820,800, 265, 250)
 graphList[1].append(save_window_)
 save_window_.addexpr("soma.nCa_CPR( 0.5 )", 2,1)
 gObj.intercept(0)
 gObj.map("Graphs",820,0,0,0)
}


objectvar save_window_1, gObj1
//the Display Window
{

 gObj1= new VBox()
 
 gObj1.intercept(1)
 save_window_ = new Graph(0)
 save_window_1 = new Graph(0)
 save_window_1.size(0,tstop,-70,-30)
 save_window_1.view(0,0,tstop,40, 820,800, 265, 250)
 graphList[2].append(save_window_1)
 save_window_1.addexpr("soma.iCl( 0.5 )", 2,1)
 save_window_1.addexpr("soma.ih_CPR( 0.5 )", 1,1)
save_window_1.addexpr("soma.iKv( 0.5 )", 3,1)
save_window_1.addexpr("soma.iCa( 0.5 )", 4,1)
save_window_1.addexpr("soma.iKca( 0.5 )", 5,1)
save_window_1.addexpr("soma.il_CPR( 0.5 )", 6,1)
save_window_1.addexpr("soma.iCGMP_CPR( 0.5 )", 7,1)

 gObj1.intercept(0)
 
 gObj1.map("Graphs",720,0,0,0)
}

objectvar save_window_2, gObj2
{
 gObj2= new VBox()
 
 gObj2.intercept(1)
 save_window_ = new Graph(0)
 save_window_2 = new Graph(0)
 save_window_2.size(0,tstop,0.68,1.66)
 save_window_2.view(0, 0.68, tstop, 0.98, 303, 308, 299.2, 199.2)
 graphList[2].append(save_window_2)
 save_window_2.addexpr("Cas_CPR", 1,1,0.8, 0.9, 2)
 
 gObj2.intercept(0)
 
 gObj2.map("Graphs",720,0,0,0)

}






totalsteps=int(tstop/dt)+1

//Begin VectorPlay[1]
objectvar ocbox_
ocbox_=new VectorPlay(1)
ocbox_.vy = new Vector(totalsteps)
ocbox_.vx = new Vector(totalsteps)


//the photocurrent for the light response of cones

func pcurrent_cone() { local photocurrent
              tc=$1
scale=-I
a1	=0.0100
tau1	=60.0000
a2	=0.0600
s2	=120.0000
t2	=555.0000
a3	=0.7000
s3	=200.0000
t3	=1500.0000
s4	=80.0000
t4	=1200.0000
if (tc<=2000) photocurrent=I
if (tc>2000) {
	tc=tc-2000
	iexp1=(1+a1)*(1-exp(-tc/tau1))^3
	isigma2=-(a1+a2)/(1+exp(-(tc-t2)/s2))
	isigma3=-a3/((1+exp(-(tc-t3)/s3)))^1.3
	isigma4=-(1-a2-a3)/((1+exp(-(tc-t4)/s4)))^2
	inormal=iexp1+isigma2+isigma3+isigma4
	photocurrent=I+scale*inormal
	}
  return photocurrent*0.001  //the result is in nA
}  
  











//Apply Current
proc PlayInto() { local totalt,stept
totalt=$1
stept=$2

 
stim.dur=totalt
// resize the vx and vy vector according to the total length of the waveform
ocbox_.vy.resize(totalsteps)
ocbox_.vx.resize(totalsteps)

for (i=0;i<totalsteps;i=i+1) { ocbox_.vx.x[i]=i*stept  
ocbox_.vy.x[i]=pcurrent_cone(i*stept) } // time in ms
ocbox_.g.erase()
ocbox_.g.unmap()
//input into
ocbox_.vy.plot(ocbox_.g, ocbox_.vx)
ocbox_.sname = "IClamp[0].amp"
ocbox_.con1(1)
ocbox_.g.size(0,tstop,0,40)
}
//End VectorPlay[1]

object_push(ocbox_)
have_name = 1   //this is generated by save session, but how to realize it by
//handmade codes is still unsolved
//which should be solved, push/pop is to access into the private variables of
//the class
object_pop()


objref Vm,gVm, tempV
tempV= new Vector()
Vm = new Vector() // vector to record the voltage response
gVm= new Graph() // the graph to plot Vm
gVm.unmap()


 print tstop
// run the first time to construct the window for the figures
PlayInto(tstop,dt)
ocbox_.b.map("VectorPlay[1]", 424, 519, 306, 283)
run()

    
proc myrun() { local ii 
 totalsteps=int(tstop/dt)+1  //0:dt:tstop
 Vm.record(&v(0.5))
  
 PlayInto(tstop,dt)
 run()

 Vm.resize(totalsteps-2)

 gVm.erase()
 gVm.unmap()
 Vm.plot(gVm)
 gVm.size(0,Vm.size(),-39.9,-35.2)
 gVm.view(0, -39.9, Vm.size(), 4.7, 35, 138, 264.75, 250)

 doNotify()
}










Loading data, please wait...