High frequency oscillations in a hippocampal computational model (Stacey et al. 2009)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:135902
"... Using a physiological computer model of hippocampus, we investigate random synaptic activity (noise) as a potential initiator of HFOs (high-frequency oscillations). We explore parameters necessary to produce these oscillations and quantify the response using the tools of stochastic resonance (SR) and coherence resonance (CR). ... Our results show that, under normal coupling conditions, synaptic noise was able to produce gamma (30–100 Hz) frequency oscillations. Synaptic noise generated HFOs in the ripple range (100–200 Hz) when the network had parameters similar to pathological findings in epilepsy: increased gap junctions or recurrent synaptic connections, loss of inhibitory interneurons such as basket cells, and increased synaptic noise. ... We propose that increased synaptic noise and physiological coupling mechanisms are sufficient to generate gamma oscillations and that pathologic changes in noise and coupling similar to those in epilepsy can produce abnormal ripples."
Reference:
1 . Stacey WC, Lazarewicz MT, Litt B (2009) Synaptic noise and physiological coupling generate high-frequency oscillations in a hippocampal computational model. J Neurophysiol 102:2342-57 [PubMed]
Citations  Citation Browser
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): Hippocampus CA1 pyramidal GLU cell; Hippocampus CA3 pyramidal GLU cell; Hippocampus CA1 interneuron oriens alveus GABA cell; Hippocampus CA1 basket cell;
Channel(s): I Na,t; I A; I K; I h;
Gap Junctions: Gap junctions;
Receptor(s): GabaA; AMPA; NMDA;
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Oscillations;
Implementer(s): Lazarewicz, Maciej [mlazarew at gmu.edu]; Stacey, William [wstacey at med.umich.edu];
Search NeuronDB for information about:  Hippocampus CA1 pyramidal GLU cell; Hippocampus CA3 pyramidal GLU cell; Hippocampus CA1 interneuron oriens alveus GABA cell; GabaA; AMPA; NMDA; I Na,t; I A; I K; I h;
/
SRandCRnet
data
library
mod
parameters
templates
readme.txt
mosinit.hoc
netrun.hoc
                            

strdef cmd
objref pr


gapstyle=1  //change this number as I change the parameters such as gmax, gap junctions, or recurrents, number of 
//signal cells, etc


pyrthr=100  //this is the threshold at which pyramidal cells will have a noise event at each 0.5 ms
	//  the TGnet.tem will compare if a uniformly distributed number from 0-100 is > this threshold
basketthr=100   //noise threshold for basket cells
basktopyrgmax=5.5   //not used
pyrgapgmax =0.005   //not used
sigfreq=16    //frequency in Hz of the input signal
realrunFlag=1
singlerunFlag=0
noiserunFlag=0
Tstop   = 1000   //how many ms long this simulation will run

{load_file("nrngui.hoc") }
{load_file("stdrun.hoc")}
{load_file("stdlib.hoc")} 
{load_file("netparmpi.hoc")}    //this gets loaded, but it was never run in parallel--several functions are not
// parallel-safe
{load_file("./templates/TGnet.tem")}    //this is the main network creation

proc init() {  

	{pr.setScatteredVoltages(-85, -60)}   //randomly starts each cell at different start voltages
  	finitialize() 
  	finitialize() 
}




celsius = 34
iteration=0
{cvode.active(0)}

proc DoRun() { localobj fo, fo1
{pr  = new TGnet()}

{pr.recordVoltages()}
if (noiserunFlag) {pr.recordnoise()}   //this is to record just the response of the noise, not the whole net

{pr.pnm.set_maxstep(0.01)}

{pr.pnm.want_all_spikes()}

runningTime = startsw()

stdinit()

//for SR, will use all five of the following. For CR, just the top
{pr.activeSynapsesRandom(Tstop, pyrthr, basketthr)}  // this is the main program function when just noise is added.
//{pr.signalSynapse(Tstop, 0, sigfreq, 1)}   // these four commands would also place a periodic signal at four pyramidal cells
///{pr.signalSynapse(Tstop, 0, sigfreq, 11)}  // $1 is duration, $2 is start time, $3 is frequency of stim, $4 is the cell number receiving the stim
//{pr.signalSynapse(Tstop, 0, sigfreq, 21)}
//{pr.signalSynapse(Tstop, 0, sigfreq, 31)}


{pr.pnm.psolve(Tstop)}   //solve the simulation


//below is a function to save files when I am recording from just one cell
//or check if this is a full "realrun" with the whole network
//or else just save a generic data file
	if (singlerunFlag) {pr.writesingleVoltage(basketthr,pyrthr,sigfreq)
		} else if (realrunFlag) {pr.writeVoltages(basketthr,pyrthr,gapstyle,sigfreq)
		} else {pr.writeVoltages()}

//now check if it is also recording the noise sources
	if (noiserunFlag) {pr.writenoise(pyrthr)}


	{pr.pnm.pc.runworker()}   //this was not doing anything at present
	runningTime = startsw() - runningTime
	iteration=iteration+1
	print "Running Time: ", runningTime, "iteration: ",iteration

//now will save a spike raster
	{pr.pnm.gatherspikes()}
	fo = new File()
	fo1= new File()
	sprint(cmd, "data/spikes.dat")
	{fo1.wopen(cmd)}
	sprint(cmd, "data/spikes_b%d_p%d_g%d_f%d.dat",basketthr,pyrthr,gapstyle,sigfreq)
	if (realrunFlag) {fo.wopen(cmd)}
   	for i=0, pr.pnm.spikevec.size-1 {
	if (realrunFlag) fo.printf("%-10.6lf, %d\n", pr.pnm.spikevec.x[i], pr.pnm.idvec.x[i])
	fo1.printf("%-10.6lf, %d\n", pr.pnm.spikevec.x[i], pr.pnm.idvec.x[i])
	}

if (realrunFlag) {fo.close()}
{fo1.close()}

{pr.pnm.pc.done()}

// now will save a history file for later use, to keep track of all files done
if (realrunFlag){
	{fo=new File()}
	{sprint(cmd, "spikes_b%d_p%d_g%d_f%d.dat",basketthr,pyrthr,gapstyle,sigfreq)}
	{fo.aopen("data/spikelog.dat")}
	{fo.printf("%s\n",cmd)}
	{fo.close()}
	{fo=new File()}
	{sprint(cmd, "sum_b%d_p%d_g%d_f%d.dat",basketthr,pyrthr,gapstyle,sigfreq)}
	{fo.aopen("data/sumlog.dat")}
	{fo.printf("%s\n",cmd)}
	{fo.close()}
	}

if (singlerunFlag){
	{fo=new File()}
	{sprint(cmd, "1_b%d_p%d_single_f%d.dat",basketthr,pyrthr,sigfreq)}
	{fo.aopen("data/singlelog.dat")}
	{fo.printf("%s\n",cmd)}
	{fo.close()}
	{fo=new File()}
	}

if (noiserunFlag){
	{fo=new File()}
	{sprint(cmd, "noise_b%d.dat",pyrthr)}
	{fo.aopen("data/noiselog.dat")}
	{fo.printf("%s\n",cmd)}
	{fo.close()}
	{fo=new File()}
	}


{pr.pnm.pc.gid_clear()}   //need to clear GIDs to reset the system
}



//this is how I do multiple runs.  
//from other testing I have determined that pyrthr 95 yields input noise of 0.008 nA2, 85 is 0.06 nA2, and 75 is 0.11 nA2
sigfreq=0
pyrthr=95
DoRun()
pyrthr=85
DoRun()
pyrthr=75
DoRun()

return()  //just forces a quit with an error


pyrthr=80
DoRun()
pyrthr=75
DoRun()
pyrthr=70
DoRun()
pyrthr=65
DoRun()
pyrthr=60
DoRun()


return()  //this return just forces a quit error to stop the function