NMDA receptors enhance the fidelity of synaptic integration (Li and Gulledge 2021)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:266802
Excitatory synaptic transmission in many neurons is mediated by two co-expressed ionotropic glutamate receptor subtypes, AMPA and NMDA receptors, that differ in their kinetics, ion-selectivity, and voltage-sensitivity. AMPA receptors have fast kinetics and are voltage-insensitive, while NMDA receptors have slower kinetics and increased conductance at depolarized membrane potentials. Here we report that the voltage-dependency and kinetics of NMDA receptors act synergistically to stabilize synaptic integration of excitatory postsynaptic potentials (EPSPs) across spatial and voltage domains. Simulations of synaptic integration in simplified and morphologically realistic dendritic trees revealed that the combined presence of AMPA and NMDA conductances reduces the variability of somatic responses to spatiotemporal patterns of excitatory synaptic input presented at different initial membrane potentials and/or in different dendritic domains. This moderating effect of the NMDA conductance on synaptic integration was robust across a wide range of AMPA-to-NMDA ratios, and results from synergistic interaction of NMDA kinetics (which reduces variability across membrane potential) and voltage-dependence (which favors stabilization across dendritic location). When combined with AMPA conductance, the NMDA conductance balances voltage- and impedance-dependent changes in synaptic driving force, and distance-dependent attenuation of synaptic potentials arriving at the axon, to increase the fidelity of synaptic integration and EPSP-spike coupling across neuron state (i.e., initial membrane potential) and dendritic location of synaptic input. Thus, synaptic NMDA receptors convey advantages for synaptic integration that are independent of, but fully compatible with, their importance for coincidence detection and synaptic plasticity.
Reference:
1 . Li C, Gulledge AT (2021) NMDA receptors enhance the fidelity of synaptic integration eNeuro
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): Dentate gyrus granule GLU cell; Hippocampus CA3 pyramidal GLU cell;
Channel(s): I K; I Na,t;
Gap Junctions:
Receptor(s): AMPA; NMDA;
Gene(s):
Transmitter(s): Glutamate;
Simulation Environment: NEURON;
Model Concept(s): Synaptic Integration;
Implementer(s):
Search NeuronDB for information about:  Dentate gyrus granule GLU cell; Hippocampus CA3 pyramidal GLU cell; AMPA; NMDA; I Na,t; I K; Glutamate;
/* 
Uses the makeCell*.hoc files in parallel. Also the new ball and stick template.

This version of runParallel is for the new synapse trials (NMDA only), 12.21.17
*/

/************* Loading necessary files *********************/

xopen("makeSv.hoc")
load_file("RealThresh_Soma.hoc")
// Uses 50 um range for threshold test, and 50 ms width Gaussian.
// Assumes savestates are already made and in the folder. Use 'makeSavestates.hoc' for each machine

/************* The procs ****************/

strdef mcVS,ThName,fName,filename,togStr
objref savestate
proc mcVolt() { local voltInput,startS,thType,toggle,brInd localobj cell
	// Inputs:
	// $1 is v_init
	// $2 is starting seed
	// $3 is the threshold trial type (0 for somatic, 1 for dendritic)
	// $4 is the toggle (0 Both/1 AMPA/2 NMDA)
	// $5 is the branch index (1-10)

	voltInput = $1
	startS = $2
	thType = $3
	toggle = $4
	brInd = $5

	// Makes cell with desired voltage and length
	cell = new Cell(voltInput)
	v_init = voltInput

	savestate = new SaveState()
	savestate = loadSv(voltInput*-1)
		// Loads the savestate to a variable 'savestate'

	// Running the test
	runTh(cell,startS,brInd,thType,toggle)
}

proc runTh() { local nSpines,startS,brInd,sVT
	// $o1 is the cell
	// $2 is the starting seed for the trials
	// $3 is the branch index for the DGC (1-17)
	// $4 is 0 for somatic threshold, 1 for dendritic 
	// $5 is the usual 0 Both/1 AMPA/2 NMDA toggle

	startS = $2
	brInd = $3
	thToggle = $4
	toggle = $5

	if (toggle==0) togStr = "B"
	if (toggle==1) togStr = "A"
	if (toggle==2) togStr = "N"

	if (!thToggle) {
	// Somatic threshold
		init()
		sVT = $o1.soma.v(.5) + 5 // the soma voltage threshold
		sprint(ThName,"V%d_CA3%dBr%d_%sSoma.dat",v_init*-1,startS,brInd,togStr)
		ThreshSpaceS(50,50,brInd,10,toggle,ThName,"CA3Branches2.dat",startS*startS+2,sVT,$o1)	
			// Using CA3Branches2 because those are longer than Branches1

			// Inputs:
			// $1: locRange is the range to be uniformly sampled in space
			// $2: gaussTime is the width of the Gaussian to be sampled for timing
			// $3: branchNum is the column to be read in the spine index file.
			// $4: incrBy is the distance in microns each trial is separated by.
			// $5: toggle is the kind of synapse: 0 BOTH, 1 AMPA, 2 NMDA
			// $s6: filename.
			// $s7: name of the spine map file.
			// $8: seed
			// $9: soma threshold voltage
			// $o10: the cell
	} else {
	// Dendritic threshold
		init()
		sprint(ThName,"V%d_CA3%dBr%d_%sDend.dat",v_init*-1,startS,brInd,togStr)
		ThreshSpaceD(50,50,brInd,20,toggle,ThName,"CA3Branches2.dat",startS*startS+2,$o1)
			// Inputs:
			// $1: locRange is the range to be uniformly sampled in space
			// $2: gaussTime is the width of the Gaussian to be sampled for timing
			// $3: branchNum is the column to be read in the spine index file.
			// $4: incrBy is the distance in microns each trial is separated by.
			// $5: toggle is the kind of synapse: 0 BOTH, 1 AMPA, 2 NMDA
			// $s6: filename.
			// $s7: name of the spine map file.
			// $8: the seed
			// $o9: the cell
	}
}

proc init() { 
	// The right savestate must be loaded

  	finitialize(v_init)
    savestate.restore(1)
    t=0
    fcurrent()
    frecord_init()
}

obfunc loadSv() { localobj f,svstate
	// Loads the right savestate
	// $1 is the voltage*-1

	sprint(filename,"CA3stdstt%d.dat",$1)
	svstate = new SaveState()
	f = new File(filename)
	svstate.fread(f)
	return svstate
}

/************************************************************/
/**************** The actual script *************************/
/************************************************************/

	for vo_ind = 1,7 {	// Sets RMP from -55 (1) to -85 (7) mV
		for br_ind = 1,10 {	// sets the dendritic branch to test
			for tr_ind = 0,9 {	// Sets the number of stochastic patterns, typically 10
				for tog_ind = 0,2 {	// 0 = BOTH AMPA & NMDA, 1 = AMPA, 2 = NMDA
					mcVolt(((vo_ind*5)+50)*-1,tr_ind,0,tog_ind,br_ind)
					}
			}
		}
	}