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;
#!/usr/local/bin/python

#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#
# NOTICE OF COPYRIGHT AND OWNERSHIP OF SOFTWARE
#
# Copyright 2007, The University Of Pennsylvania
# 	School of Engineering & Applied Science.
#   All rights reserved.
#   For research use only; commercial use prohibited.
#   Distribution without permission of Maciej T. Lazarewicz not permitted.
#   mlazarew@seas.upenn.edu
#
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

import csv
import sys
import random

#===================================================================================================
#
# Make sure that the input contains three integer numbers representing the sizes of cell subpopulations 
#
#===================================================================================================
#try:

#	int(sys.argv[1])
#	int(sys.argv[2])
#	int(sys.argv[3])

#except Exception:

#	print "Needs three parameters: Npyr, Nbask, Nolm"	
#	exit()

#===================================================================================================
#
# Load description files
#
#===================================================================================================
synapses_file = "parameters/synapses.par"
cells_file    = "parameters/cells.par"

def CommentStripper (iterator):
     for line in iterator:
         if line.strip()[:2] == '//':
             continue
         if not line.strip():
             continue
         yield line

# Synapses
reader = csv.reader (CommentStripper (open (synapses_file)))
synapsesList = list(reader)

# Cells
reader = csv.reader (CommentStripper (open (cells_file)))
cellsList2 = list(reader)
cellsList = []

# Conver the number of cells to int
for x in cellsList2:
	cellsList.append([ x[0], int(x[1])])
	
#===================================================================================================
#
# Convert the cells from List to List of Dictionaries 
#
#===================================================================================================
# add to the firs cell on th list (default pyramidal cell) one passive cell
cellsList[0][1] += 1

cellsN = dict(cellsList)


#===================================================================================================
#
# Convert the synapses from List to List of Dictionaries 
#
#===================================================================================================
fields = ['preCell', 'postCell', 'synName', 'tao1', 'tao2', 'Erev', 'modFileName', 'synLocSec', 'synLoc', 'Npre', 'gmax', 'delay', 'r']

# Produce a list of dictionary
synapses = []
globalID = -1
for syn in synapsesList:
	d = {}
	for field, val in map(None, fields, syn):

		try:
			d[field]=float(val)
			if(d[field]==int(d[field])):
				d[field] = int(d[field])
			
		except ValueError:
		
			d[field]=val.strip()
	
	globalID+=1
	d['globalID'] = globalID
	synapses.append(d)

Nsyn = len(synapses)

#for i in synapses: print i


#===================================================================================================
#
# Generate GIDs for all neuronal pools
#
#===================================================================================================
GID = {}
count = 0
for cell in cellsN:
	GID[cell] = range(count, count+cellsN[cell])
	count = count + cellsN[cell]

#===================================================================================================
#
# Generate for each instance of synapse for each GID from the postsynaptic pool, 
# the sample of Npre GIDs from the presynaptic pool
#
#===================================================================================================

f=open('parameters/conn.dat', 'w')

# Loop over all instances of synapses
for syn in synapses:
	
	# Loop over all poststnaptic GIDs
	for postGID in GID[syn['postCell']]:
	
		# Generate the sample from the presynaptic GIDs
		# if Npre== -1 mean that all presynaptic neurons will be connected to postsynaptic one 
		if syn['Npre']==-1:
		
			pre = GID[syn['preCell']]
		
		else:
		
			if syn['Npre'] > len(GID[syn['preCell']]):
			
				print "##################################\n\n\n\n\n"
				print "ERROR: too many presynaptic connections\n\n\n\n\n"
				print "##################################\n\n\n\n\n"
				
				exit()
				
			pre = random.sample(GID[syn['preCell']], syn['Npre'] )
		
		# Save the data into the file
		for i in pre:
			
			f.write("%d, %d, %d, %s, %s, %s\n" % (i, postGID, syn['globalID'], syn['preCell'], syn['postCell'], syn['synName']) )
			
f.close()