/*----------------------------------------------------------------------------

	demo file for first order kinetic synapse mechanism
	---------------------------------------------------

	This file provides a simulation of glutamaterergic EPSP's in a 
	passive compartment.  A presyaptic compartment (PRE) is created and 
	contains Hodgkin-Huxley Na/K currents for generating action potentials.
	A current pulse is injected in PRE to elicit a train of spikes.
	For each spike an EPSP is generated in the postsynaptic compartment
	(POST).  The number of presynaptic spikes can be adjusted by changing
        the pulse duration (stim.dur).

	Whole-cell recorded postsynaptic currents mediated by NMDA receptors
	(Hessler et al., Nature 366: 569-572, 1993) were used to estimate the 
	parameters of the present simulations; the fit was performed using a 
	simplex algorithm (see Destexhe, A., Mainen, Z.F. and Sejnowski, T.J.
	Fast kinetic models for simulating AMPA, NMDA, GABA(A) and GABA(B) 
	receptors.  In: Computation and Neural Systems, Vol. 4, Kluwer 
	Academic Press, in press, 1995). The voltage-dependence of the Mg2+
	block of the NMDA was modeled by an instantaneous function, assuming 
	that Mg2+ binding was very fast (see Jahr & Stevens, J. Neurosci 10:
	1830-1837, 1990; Jahr & Stevens, J. Neurosci 10: 3178-3182, 1990).

	To see the voltage-dependence of the NMDA response, play with different
	values of the resting membrane potential (e_pas in POST).


	Alain Destexhe, The Salk Institute, 1994

----------------------------------------------------------------------------*/



//----------------------------------------------------------------------------
//  load and define general graphical procedures
//----------------------------------------------------------------------------

// xopen("$(NEURONHOME)/lib/hoc/stdrun.hoc")
load_file("nrngui.hoc")

objectvar g[20]			// max 20 graphs
ngraph = 0

proc addgraph() { local ii	// define subroutine to add a new graph
				// addgraph("variable", minvalue, maxvalue)
	ngraph = ngraph+1
	ii = ngraph-1
	g[ii] = new Graph()
	g[ii].size(0,tstop,$2,$3)
	g[ii].xaxis()
	g[ii].yaxis()
	g[ii].addvar($s1,1,0)
	g[ii].save_name("graphList[0].")
	graphList[0].append(g[ii])
}

// nrnmainmenu()			// create main menu
nrncontrolmenu()		// crate control menu



//----------------------------------------------------------------------------
//  general parameters
//----------------------------------------------------------------------------

dt=0.025
tstop = 150
runStopAt = tstop
steps_per_ms = 1/dt
celsius = 36
v_init = -70



//----------------------------------------------------------------------------
//  create compartments and insert passive properties
//----------------------------------------------------------------------------

create PRE,POST
forall {
  diam=10
  L=10
  insert pas
  g_pas=1/5000
  e_pas=v_init
}



//----------------------------------------------------------------------------
//  insert presynaptic mechanisms
//----------------------------------------------------------------------------

access PRE		// insert Hodgk-Hux. Na+ and K+ currents for spikes
insert hh2
ek = -90
gnabar_hh2 = 0.1
gkbar_hh2 = 0.03

objectvar stim		// insert current injection

PRE stim = new IClamp(.5)	  // command for version nrn3a8 or newer
// PRE stim = new PulseStim(.5)	  // command for older NEURON versions

stim.del = 10
stim.dur = 2		// 2 ms for single psp, 10 ms for train of psps
stim.amp = 0.1




//----------------------------------------------------------------------------
//  insert postsynaptic mechansisms
//----------------------------------------------------------------------------

objectvar c
c = new NMDA()			// create synapse
POST c.loc(0.5)			// assign postsynaptic compartment
setpointer c.pre, PRE.v(0.5)	// assign presynaptic compartment

Cmax_NMDA	= 1	//	(mM)	 max transmitter concentration
Cdur_NMDA	= 1	//	(ms)	 transmitter duration (rising phase)
Alpha_NMDA	= 0.072	//	(/ms mM) forward (binding) rate
Beta_NMDA	= 0.0066 //	(/ms)	 backward (unbinding) rate
Erev_NMDA	= 0	//	(mV)	 reversal potential
Prethresh_NMDA	= 0 	//	(mV)	 voltage level nec for release
Deadtime_NMDA	= 1	//	(ms)	 mimimum time between release events
mg_NMDA		= 1	//	(mM)	 external Mg++ concentration
c.gmax		= 0.001 //	(umho)	 maximum conductance



//----------------------------------------------------------------------------
//  add graphs
//----------------------------------------------------------------------------

addgraph("PRE.v(0.5)",-90,40)
addgraph("c.C",0,1)
g[1].addvar("c.R",1,0)
addgraph("c.i",-0.005,0.00001)
addgraph("POST.v(0.5)",v_init-5,v_init+20)