Role for short term plasticity and OLM cells in containing spread of excitation (Hummos et al 2014)

 Download zip file 
Help downloading and running models
Accession:168314
This hippocampus model was developed by matching experimental data, including neuronal behavior, synaptic current dynamics, network spatial connectivity patterns, and short-term synaptic plasticity. Furthermore, it was constrained to perform pattern completion and separation under the effects of acetylcholine. The model was then used to investigate the role of short-term synaptic depression at the recurrent synapses in CA3, and inhibition by basket cell (BC) interneurons and oriens lacunosum-moleculare (OLM) interneurons in containing the unstable spread of excitatory activity in the network.
References:
1 . Hummos A, Franklin CC, Nair SS (2014) Intrinsic mechanisms stabilize encoding and retrieval circuits differentially in a hippocampal network model. Hippocampus 24:1430-48 [PubMed]
2 . Hummos A, Nair SS (2017) An integrative model of the intrinsic hippocampal theta rhythm. PLoS One 12:e0182648 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network;
Brain Region(s)/Organism: Hippocampus;
Cell Type(s): Dentate gyrus granule GLU cell; Hippocampus CA3 pyramidal GLU cell; Hippocampus CA3 interneuron basket GABA cell; Hippocampus CA3 stratum oriens lacunosum-moleculare interneuron; Abstract Izhikevich neuron;
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s): Acetylcholine; Gaba; Glutamate;
Simulation Environment: NEURON;
Model Concept(s): Activity Patterns; Epilepsy; Storage/recall;
Implementer(s):
Search NeuronDB for information about:  Dentate gyrus granule GLU cell; Hippocampus CA3 pyramidal GLU cell; Hippocampus CA3 interneuron basket GABA cell; Acetylcholine; Gaba; Glutamate;
// Sets up the stimuli for experiments 0 and 2.  And contains a few functions that are necessary for delivering stimuli in general. 
objref pool
pool = new Vector(Totals.x(EC))
pool.indgen(0, 29, 1)

obfunc GenerateVector () { localobj picked
length = $1
picked = new Vector()

while (picked.size() < length) {
		r = rand.repick()
		t = int(r * (Totals.x(EC)))
			if (pool.contains(t)) {
				picked.append(t)
				pool.remove(pool.indwhere("==", t))
			}
			
	//	printf("picked %g length of picked is: %g \n", t, picked.size())
	}

	return(picked)
}


objref Stims
Stims = new List()
 

objref stim, nc[inpTotal * 20], netsyn[inpTotal * 20]

proc applyStim() { localobj localStim, localPat
	localStim = $o1
	localPat = $o2
	weight = $3
	
	for i = 0, localPat.size() -1 {
		inpCell[localPat.x(i)].soma netsyn[k] = new pyr2pyr(0.9)
	netsyn[k].initW = weight	//10.0
	netsyn[k].Wmax = weight	//10.0 //1.0
	nc[k] = new NetCon(stim,netsyn[k])
	nc[k].delay = 0
	nc[k].weight = 1 //0.2
  	
	//printf("applied stim to cell %g\n", localPat.x(i))
		k+=1 
	}

	
}
	
	objref Pat1, Pat2, Pat3
	Pat1 = new Vector()
	Pat1 = GenerateVector(10)
	
	Pat2 = new Vector()
	Pat2 = GenerateVector(10)
	
	Pat3 = new Vector()
	Pat3 = Pat1 ///
	
	
if (Experiment == 2) {
	///Stims /////////
StimCount = 21
StimSpace = tstop / StimCount
StimDurRatio = 250 / StimSpace
StimSpaceRatio = StimSpace / tstop


 k = 0
for j = 0, StimCount-1 { 
  stim= new NetStim(0.5)
  stim.interval = 80
  stim.start = j * (StimSpace)
  stim.number = (StimSpace * StimDurRatio) / stim.interval
	
	if (j < 11) {	
		if (j%2) {
			applyStim (stim, Pat1,15)	
		} else {
			applyStim (stim, Pat2, 15)
		}
		
	} else {		
		for h = 0, j - 10 -1 {
		Pat3.x(h) = Pat2.x(h)
		}
		applyStim(stim, Pat3, 15)
	}
Stims.append(stim)
}
}// if experiment


if (Experiment ==0) {
///Stims /////////
StimCount = 16
StimSpace = tstop / StimCount
StimDurRatio = 250 / StimSpace
StimSpaceRatio = StimSpace / tstop


for j = 0, StimCount-1 { 
 stim= new NetStim(0.5)
   stim.interval = 80
  stim.start = j * (StimSpace)
    stim.number = (StimSpace * StimDurRatio) / stim.interval
	
	if (j < 6) {	
		applyStim (stim, Pat1, 15)	
	
	} else {		
		for h = 0, j - 6 {
		Pat3.x(h) = Pat2.x(h)
		}
		applyStim(stim, Pat3, 15)
	}
	
	Stims.append(stim)
}
} //if experiment
	
	
	

	
	obfunc ReplaceNeurons() {localobj picked, before
number = $1
picked = new Vector()
before = new Vector()
before = $o2
picked = before

success = 0
	while (success < number) {
		r = rand.repick()
		t = int(r * (Totals.x(EC)))
			if (pool.contains(t)) {
				picked.x(success) = t
				pool.remove(pool.indwhere("==", t))
				success = success + 1
				//printf("replaced %g element with %g \n", success, t)
			}		
	}
return(picked)
}


obfunc ReplaceNeuron() {localobj picked, before
number = $1
picked = new Vector()
before = new Vector()
before = $o2
picked = before

success = 0
	while (success < 1) {
		r = rand.repick()
		t = int(r * (Totals.x(EC)))
			if (pool.contains(t)) {
				picked.x(number) = t
				pool.remove(pool.indwhere("==", t))
				//printf("replaced %g element with %g \n", success, t)
				success = success + 1
			}		
	}
return(picked)
}
	
	
	

Loading data, please wait...