Balance of excitation and inhibition (Carvalho and Buonomano 2009)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:125689
" ... Here, theoretical analyses reveal that excitatory synaptic strength controls the threshold of the neuronal input-output function, while inhibitory plasticity alters the threshold and gain. Experimentally, changes in the balance of excitation and inhibition in CA1 pyramidal neurons also altered their input-output function as predicted by the model. These results support the existence of two functional modes of plasticity that can be used to optimize information processing: threshold and gain plasticity."
Reference:
1 . Carvalho TP, Buonomano DV (2009) Differential effects of excitatory and inhibitory plasticity on synaptically driven neuronal input-output functions. Neuron 61:774-85 [PubMed]
Citations  Citation Browser
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):
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON; MATLAB;
Model Concept(s): Synaptic Integration;
Implementer(s):
COMMENT

THIS IS THE MORE EFFICIENT VERSION of EPSPPlas.
Since short-term plasticity, and the synaptic dynamics is the same
for all the presynaptic terminals of a neuron, we can calculate these
parameters presynaptically, and then pass them to each synapse model.

For computational efficiency it is obviously better to process the release
parameters in the presynaptic mechanism, rather than do the same calculations
in each synaptic mechanism.  The problem is the synaptic delay.  
To deal with this problem I have created a history (histR, histG) of the 
synaptic conductances, that are accessed by the synaptic mechanisms. The vector 
index accessed corresponds to the delay.
In the vector the first index (0) is always the current time step.
Thus if dt = 0.1 to implement a delay of 1ms you should setpointer:
setpointer syn.R_1, IN[0].soma.histR_ExIAF[10]
for a zero ms delay
setpointer syn.R_1, IN[0].soma.histR_ExIAF[0]



ENDCOMMENT


INDEPENDENT {t FROM 0 TO 1 WITH 1 (ms)}

NEURON { 
:    NONSPECIFIC_CURRENT i
   SUFFIX IPlasSom
	RANGE C, lastrelease, lastspike, releaseat, Delay
	GLOBAL Cdur, Deadtime		
	GLOBAL Alpha, Beta 
	RANGE  gaba, R0, R1, Rinf, Rtau 
   :SHORT-TERM PLASTICITY
   GLOBAL U, trec, tfac
   RANGE  R, u, RG 

} 
 
UNITS {
	(nA) = (nanoamp)
	(mV) = (millivolt)
	(umho) = (micromho)
	(mM) = (milli/liter)
}

STATE {
	nmda				: fraction of open NMDA channels
	R_2
}

PARAMETER {

	Cdur	= 1	  (ms)		: transmitter duration (rising phase) 
	Deadtime = 1  (ms)		: mimimum time between release events
	Delay = 0.6

	Alpha = 0.5		(/ms mM)	: 0.5 forward (binding) rate 
	Beta = 0.25		(/ms)		: 0.25 backward (unbinding) rate 
 
	:::%%% Values based on Basket Cell/type F2 from Gupta, Wang, Markram (2000)
	tfac = 20     (ms)		: this value should be close to 0 for no facilitation 
	trec = 700		 (ms) 	: recovery from depression time constant 
	U = 0.25 						: percent of transmitter released on first pulse
	
}


ASSIGNED { 
 
	dt		 (ms)
	v		 (mV)		: postsynaptic voltage
	i 		 (nA)		: current = g*(v - Erev)
	C		 (mM)		: transmitter concentration 
 
	gaba
	R0				: open channels at start of release
	R1				: open channels at end of release
	Rinf			: steady state channels open
	Rtau	(ms)		: time constant of channel binding
		 
	lastrelease	(ms)		: time of last spike 
	lastspike	(ms) 
	releaseat

	R				: Releasable pool 
	u				: for running value of U 
	
}

INITIAL {
	C = 0
	R1 = 0

	gaba = 0
	lastrelease = -9e4 
	lastspike   = -9e4 
	releaseat   = -9e4 
 
	R = 1 
	u = U 
 
}

BREAKPOINT {
    SOLVE release
:    SOLVE update
}

PROCEDURE release() { LOCAL q
    :will crash if user hasn't set pre with the connect statement
	:FIND OUT THERE WAS A SPIKE 
	q = (t - lastspike)		: time since last release ended 
						 
	if (q > Deadtime) {		: ready for another release? 
		if (v > 0) {		: spike occured? 
			lastspike = t 
			releaseat = t + Delay 
		} 
	} 
 	: CALCULATE RELEASE PARAMETERS 
	q = (t - lastrelease -Cdur)			: time since last spike with delay 
	if (q > Deadtime) {          : start release 
		if (t > releaseat - dt/2 && t < releaseat + dt/2) { 
			lastrelease = t 
     		u = u*(exptable(-q/tfac)) + U*(1-u*exptable(-q/tfac)) 
			R = R*(1 - u)*exptable(-q/trec) + 1 - exptable(-q/trec)		 
			C = R*u				: start new release, turn on 
			Rinf = C*Alpha / (C*Alpha + Beta) 
			Rtau = 1 / ((Alpha * C) + Beta) 
			R0 = gaba
		}	 						 
	} else if (q < 0) {			: still releasing? 
		: do nothing 
	} else if (C > 0) {			: in dead time after release, turn off 
		C = 0. 
		R1 = gaba 
	} 

	if (C > 0) {				: transmitter being released? 
	   gaba = Rinf + (R0 - Rinf) * exptable (- (t - lastrelease) / Rtau) 
	} else {					: no release occuring 
  	   gaba = R1 * exptable (- Beta * (t - (lastrelease + Cdur))) 
	} 

	VERBATIM
	return 0;
	ENDVERBATIM
} 


FUNCTION exptable(x) { 
	TABLE  FROM -10 TO 10 WITH 2000
 
	if ((x > -10) && (x < 10)) {
		exptable = exp(x)
	} else {
		exptable = 0.
	}
}