CA1 pyramidal neuron: Dendritic Na+ spikes are required for LTP at distal synapses (Kim et al 2015)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:184054
This model simulates the effects of dendritic sodium spikes initiated in distal apical dendrites on the voltage and the calcium dynamics revealed by calcium imaging. It shows that dendritic sodium spike promotes large and transient calcium influxes via NMDA receptor and L-type voltage-gated calcium channels, which contribute to the induction of LTP at distal synapses.
Reference:
1 . Kim Y, Hsu CL, Cembrowski MS, Mensh BD, Spruston N (2015) Dendritic sodium spikes are required for long-term potentiation at distal synapses on hippocampal pyramidal neurons. Elife [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell; Synapse; Channel/Receptor; Dendrite;
Brain Region(s)/Organism: Hippocampus;
Cell Type(s): Hippocampus CA1 pyramidal GLU cell;
Channel(s): I L high threshold; I K; Ca pump; I Sodium;
Gap Junctions:
Receptor(s): AMPA; NMDA;
Gene(s):
Transmitter(s): Glutamate;
Simulation Environment: NEURON;
Model Concept(s): Dendritic Action Potentials; Ion Channel Kinetics; Active Dendrites; Detailed Neuronal Models; Synaptic Plasticity; Long-term Synaptic Plasticity; Synaptic Integration; Calcium dynamics; Conductance distributions;
Implementer(s): Cembrowski, Mark S [cembrowskim at janelia.hhmi.org]; Hsu, Ching-Lung [hsuc at janelia.hhmi.org];
Search NeuronDB for information about:  Hippocampus CA1 pyramidal GLU cell; AMPA; NMDA; I L high threshold; I K; I Sodium; Ca pump; Glutamate;
/
fullMorphCaLTP8
fullMorphCaLTP8
calH.mod
cdp.mod
id.mod
kad.mod *
kap.mod *
kdr.mod *
na3.mod *
nmdaSyn.mod
spgen2.mod
analyseTBSCC.hoc
channelParameters.hoc
displayPanels.hoc
doTBSStimCC.hoc
getVoltageIntegral.hoc
init.hoc
initializationAndRun.hoc
morphology_ri06.nrn *
naceaxon.nrn *
plotTBSCC.hoc
preallocate.hoc
resetNSeg.hoc *
runTBSCC.hoc
seclists.hoc
start.hoc
                            
///////////////////////////////////////////////////////////////////////////////
// PEAK ANALYSIS FOR SYNAPTIC LOCATIONS
///////////////////////////////////////////////////////////////////////////////

// for unsorted responses

objref voltACSFPeak,voltDrugPeak
objref nmdaACSFPeak,nmdaDrugPeak,ogbACSFPeak,ogbDrugPeak

voltACSFPeak = new Vector(numSyn)
voltDrugPeak = new Vector(numSyn)
nmdaACSFPeak = new Vector(numSyn)
nmdaDrugPeak = new Vector(numSyn)
ogbACSFPeak = new Vector(numSyn)
ogbDrugPeak = new Vector(numSyn)

for m=1,numSyn{
	voltACSFPeak.x[m-1] = voltACSF[m-1].max
	voltDrugPeak.x[m-1] = voltDrug[m-1].max
	nmdaACSFPeak.x[m-1] = nmdaACSF[m-1].min
	nmdaDrugPeak.x[m-1] = nmdaDrug[m-1].min
	
	Peak = ogbACSF[m-1].max                     
	Baseline = ogbACSF[m-1].min
	ogbACSFPeak.x[m-1] = Peak - Baseline	       
	Peak = ogbDrug[m-1].max
	Baseline = ogbDrug[m-1].min
	ogbDrugPeak.x[m-1] = Peak - Baseline
}

// for sorted responses

objref voltACSFPeakSort,voltDrugPeakSort
objref nmdaACSFPeakSort,nmdaDrugPeakSort,ogbACSFPeakSort,ogbDrugPeakSort

voltACSFPeakSort = new Vector(numSyn)
voltDrugPeakSort = new Vector(numSyn)
nmdaACSFPeakSort = new Vector(numSyn)
nmdaDrugPeakSort = new Vector(numSyn)
ogbACSFPeakSort = new Vector(numSyn)
ogbDrugPeakSort = new Vector(numSyn)

for m=1,numSyn{
	curInd = inputDistsSortX.x[m-1]             // retrieve original indices for making the responses sorted (sorted by distance)	                                            
	
	voltACSFPeakSort.x[m-1] = voltACSFPeak.x[curInd]
	voltDrugPeakSort.x[m-1] = voltDrugPeak.x[curInd]
	nmdaACSFPeakSort.x[m-1] = nmdaACSFPeak.x[curInd]
	nmdaDrugPeakSort.x[m-1] = nmdaDrugPeak.x[curInd]
	ogbACSFPeakSort.x[m-1] = ogbACSFPeak.x[curInd]
	ogbDrugPeakSort.x[m-1] = ogbDrugPeak.x[curInd]	
}


//////////////////////////////////////////////////////////////////////////////
// PEAK ANALYSIS FOR RANDOM LOCATIONS
/////////////////////////////////////////////////////////////////////////////

// for unsorted responses

objref voltACSFBPeak,voltDrugBPeak,ogbACSFBPeak,ogbDrugBPeak

voltACSFBPeak = new Vector(numScan)
voltDrugBPeak = new Vector(numScan)
ogbACSFBPeak = new Vector(numScan)
ogbDrugBPeak = new Vector(numScan)

for m=1,numScan{
	voltACSFBPeak.x[m-1] = voltACSFB[m-1].max
	voltDrugBPeak.x[m-1] = voltDrugB[m-1].max
	
	Peak = ogbACSFB[m-1].max                     
	Baseline = ogbACSFB[m-1].min
	ogbACSFBPeak.x[m-1] = Peak - Baseline	       
	Peak = ogbDrugB[m-1].max
	Baseline = ogbDrugB[m-1].min
	ogbDrugBPeak.x[m-1] = Peak - Baseline
}

// for sorted responses

objref voltACSFBPeakSort,voltDrugBPeakSort,ogbACSFBPeakSort,ogbDrugBPeakSort
voltACSFBPeakSort = new Vector(numScan)
voltDrugBPeakSort = new Vector(numScan)
ogbACSFBPeakSort = new Vector(numScan)
ogbDrugBPeakSort = new Vector(numScan)

for m=1,numScan{
	curInd = randDistsSortX.x[m-1]
	
	voltACSFBPeakSort.x[m-1] = voltACSFBPeak.x[curInd]
	voltDrugBPeakSort.x[m-1] = voltDrugBPeak.x[curInd]
	ogbACSFBPeakSort.x[m-1] = ogbACSFBPeak.x[curInd]
	ogbDrugBPeakSort.x[m-1] = ogbDrugBPeak.x[curInd]
	
}


//////////////////////////////////////////////////////////////////////////////
// INTEGRAL ANALYSIS FOR SYNAPTIC LOCATIONS
//////////////////////////////////////////////////////////////////////////////

// LOAD NECESSARY FUNCTIONS
{
	load_file("getVoltageIntegral.hoc")  
}
	
// for unsorted responses

objref voltACSFInt,voltDrugInt
objref nmdaACSFInt,nmdaDrugInt,ogbACSFInt,ogbDrugInt

voltACSFInt = new Vector(numSyn)
voltDrugInt = new Vector(numSyn)
nmdaACSFInt = new Vector(numSyn)
nmdaDrugInt = new Vector(numSyn)
ogbACSFInt = new Vector(numSyn)
ogbDrugInt = new Vector(numSyn)

for m=1,numSyn{
	voltACSFInt.x[m-1] = getVoltageIntegral(voltACSF[m-1],dt,tBaseline,tstop)
	voltDrugInt.x[m-1] = getVoltageIntegral(voltDrug[m-1],dt,tBaseline,tstop)
	nmdaACSFInt.x[m-1] = getVoltageIntegral(nmdaACSF[m-1],dt,tBaseline,tstop)
	nmdaDrugInt.x[m-1] = getVoltageIntegral(nmdaDrug[m-1],dt,tBaseline,tstop)
	ogbACSFInt.x[m-1] = getVoltageIntegral(ogbACSF[m-1],dt,tBaseline,tstop)
	ogbDrugInt.x[m-1] = getVoltageIntegral(ogbDrug[m-1],dt,tBaseline,tstop)
}

// for sorted responses

objref voltACSFIntSort,voltDrugIntSort
objref nmdaACSFIntSort,nmdaDrugIntSort,ogbACSFIntSort,ogbDrugIntSort

voltACSFIntSort = new Vector(numSyn)
voltDrugIntSort = new Vector(numSyn)
nmdaACSFIntSort = new Vector(numSyn)
nmdaDrugIntSort = new Vector(numSyn)
ogbACSFIntSort = new Vector(numSyn)
ogbDrugIntSort = new Vector(numSyn)

for m=1,numSyn{
	curInd = inputDistsSortX.x[m-1]
	
	voltACSFIntSort.x[m-1] = voltACSFInt.x[curInd]
	voltDrugIntSort.x[m-1] = voltDrugInt.x[curInd]
	nmdaACSFIntSort.x[m-1] = nmdaACSFInt.x[curInd]
	nmdaDrugIntSort.x[m-1] = nmdaDrugInt.x[curInd]
	ogbACSFIntSort.x[m-1] = ogbACSFInt.x[curInd]
	ogbDrugIntSort.x[m-1] = ogbDrugInt.x[curInd]
}


////////////////////////////////////////////////////////////////////////////
// INTEGRAL ANALYSIS FOR RANDOM LOCATIONS
////////////////////////////////////////////////////////////////////////////

// for unsorted responses

objref voltACSFBInt,voltDrugBInt,ogbACSFBInt,ogbDrugBInt

voltACSFBInt = new Vector(numScan)
voltDrugBInt = new Vector(numScan)
ogbACSFBInt = new Vector(numScan)
ogbDrugBInt = new Vector(numScan)

for m=1,numScan{
	voltACSFBInt.x[m-1] = getVoltageIntegral(voltACSFB[m-1],dt,tBaseline,tstop)
	voltDrugBInt.x[m-1] = getVoltageIntegral(voltDrugB[m-1],dt,tBaseline,tstop)
	ogbACSFBInt.x[m-1] = getVoltageIntegral(ogbACSFB[m-1],dt,tBaseline,tstop)
	ogbDrugBInt.x[m-1] = getVoltageIntegral(ogbDrugB[m-1],dt,tBaseline,tstop)
}

// for sorted responses

objref voltACSFBIntSort,voltDrugBIntSort,ogbACSFBIntSort,ogbDrugBIntSort
voltACSFBIntSort = new Vector(numScan)
voltDrugBIntSort = new Vector(numScan)
ogbACSFBIntSort = new Vector(numScan)
ogbDrugBIntSort = new Vector(numScan)

for m=1,numScan{
	curInd = randDistsSortX.x[m-1]
	
	voltACSFBIntSort.x[m-1] = voltACSFBInt.x[curInd]
	voltDrugBIntSort.x[m-1] = voltDrugBInt.x[curInd]
	ogbACSFBIntSort.x[m-1] = ogbACSFBInt.x[curInd]
	ogbDrugBIntSort.x[m-1] = ogbDrugBInt.x[curInd]	
}


////////////////////////////////////////////////////////////////////////////
// RATIO ANALYSIS
////////////////////////////////////////////////////////////////////////////

// Recording from the apical trunk

{
	dend1 = getVoltageIntegral(dendACSF,dt,tBaseline,tstop)
	dend2 = getVoltageIntegral(dendDrug,dt,tBaseline,tstop)
	dendIntRatio = dend2/dend1
}

// [Ca]OGB

objref ogbRatioPeakSort, ogbRatioIntSort
objref ogbRatioBPeakSort, ogbRatioBIntSort
objref foo1, foo2, foo3, foo4
ogbRatioPeakSort = new Vector(numSyn)
ogbRatioIntSort = new Vector(numSyn)
ogbRatioBPeakSort = new Vector(numScan)
ogbRatioBIntSort = new Vector(numScan)
foo1 = new Vector(numSyn)
foo2 = new Vector(numSyn)
foo3 = new Vector(numScan)
foo4 = new Vector(numScan)

{	
	foo1.copy(ogbDrugPeakSort)   
	ogbRatioPeakSort = foo1.div(ogbACSFPeakSort)
	foo2.copy(ogbDrugIntSort)
	ogbRatioIntSort = foo2.div(ogbACSFIntSort)
	
	foo3.copy(ogbDrugBPeakSort)
	ogbRatioBPeakSort = foo3.div(ogbACSFBPeakSort)
	foo4.copy(ogbDrugBIntSort)
	ogbRatioBIntSort = foo4.div(ogbACSFBIntSort)
}

// Mean and Standard deviation
objref ogbRatioPeakMeanVec,ogbRatioPeakSDVec
objref ogbRatioIntMeanVec,ogbRatioIntSDVec
objref ogbRatioBPeakMeanVec,ogbRatioBPeakSDVec
objref ogbRatioBIntMeanVec,ogbRatioBIntSDVec

	ogbRatioPeakMeanVec = new Vector(1)
	ogbRatioPeakSDVec = new Vector(1)
	ogbRatioIntMeanVec = new Vector(1)
	ogbRatioIntSDVec = new Vector(1)
	ogbRatioBPeakMeanVec = new Vector(1)
	ogbRatioBPeakSDVec = new Vector(1)
	ogbRatioBIntMeanVec = new Vector(1)
	ogbRatioBIntSDVec = new Vector(1)

{	
	ogbRatioPeakMeanVec.x[0] = ogbRatioPeakSort.mean()
	ogbRatioPeakSDVec.x[0] = ogbRatioPeakSort.stdev()
	ogbRatioIntMeanVec.x[0] = ogbRatioIntSort.mean()
	ogbRatioIntSDVec.x[0] = ogbRatioIntSort.stdev()
	
	ogbRatioBPeakMeanVec.x[0] = ogbRatioBPeakSort.mean()
	ogbRatioBPeakSDVec.x[0] = ogbRatioBPeakSort.stdev()
	ogbRatioBIntMeanVec.x[0] = ogbRatioBIntSort.mean()
	ogbRatioBIntSDVec.x[0] = ogbRatioBIntSort.stdev()
}

Loading data, please wait...