Ih tunes oscillations in an In Silico CA3 model (Neymotin et al. 2013)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:151282
" ... We investigated oscillatory control using a multiscale computer model of hippocampal CA3, where each cell class (pyramidal, basket, and oriens-lacunosum moleculare cells), contained type-appropriate isoforms of Ih. Our model demonstrated that modulation of pyramidal and basket Ih allows tuning theta and gamma oscillation frequency and amplitude. Pyramidal Ih also controlled cross-frequency coupling (CFC) and allowed shifting gamma generation towards particular phases of the theta cycle, effected via Ih’s ability to set pyramidal excitability. ..."
Reference:
1 . Neymotin SA, Hilscher MM, Moulin TC, Skolnick Y, Lazarewicz MT, Lytton WW (2013) Ih tunes theta/gamma oscillations and cross-frequency coupling in an in silico CA3 model. PLoS One 8:e76285 [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 CA3 pyramidal cell; Hippocampus CA3 interneuron basket cell; Hippocampus CA3 stratum oriens lacunosum-moleculare interneuron;
Channel(s): I Na,t; I A; I K; I K,leak; I h; I K,Ca; I Sodium; I Potassium;
Gap Junctions:
Receptor(s): GabaA; AMPA; NMDA; Glutamate;
Gene(s): HCN1; HCN2;
Transmitter(s): Gaba; Glutamate;
Simulation Environment: NEURON; Python;
Model Concept(s): Oscillations; Brain Rhythms; Conductance distributions; Multiscale;
Implementer(s): Lazarewicz, Maciej [mlazarew at gmu.edu]; Neymotin, Sam [samn at neurosim.downstate.edu];
Search NeuronDB for information about:  Hippocampus CA3 pyramidal cell; Hippocampus CA3 interneuron basket cell; GabaA; AMPA; NMDA; Glutamate; I Na,t; I A; I K; I K,leak; I h; I K,Ca; I Sodium; I Potassium; Gaba; Glutamate;
/
ca3ihdemo
readme.txt
CA3ih.mod
CA3ika.mod
CA3ikdr.mod
CA3ina.mod
caolmw.mod *
HCN1.mod
icaolmw.mod *
iholmw.mod
ihstatic.mod
kcaolmw.mod *
kdrbwb.mod *
misc.mod *
MyExp2SynBB.mod *
MyExp2SynNMDABB.mod *
nafbwb.mod *
stats.mod *
vecst.mod *
aux_fun.inc *
declist.hoc *
decmat.hoc *
decnqs.hoc *
decvec.hoc *
default.hoc *
drline.hoc *
geom.py
grvec.hoc *
init.hoc
labels.hoc *
local.hoc *
misc.h *
network.py
nqs.hoc *
nrnoc.hoc *
params.py
pyinit.py *
pywrap.hoc
run.py
sim.py
simctrl.hoc *
stats.hoc *
syncode.hoc *
xgetargs.hoc *
                            
# $Id: geom.py,v 1.38 2012/11/09 21:00:26 samn Exp $ 

from pyinit import *
h.celsius = 37

h.load_file("pywrap.hoc")

class Synapse:
	def __init__(self, sect, loc, tau1, tau2, e):
		self.syn		= h.MyExp2SynBB(loc, sec=sect)
		self.syn.tau1	= tau1
		self.syn.tau2	= tau2
		self.syn.e		= e 
		
class SynapseNMDA:
	def __init__(self, sect, loc, tau1, tau2, tau1NMDA, tau2NMDA, r, e):
		self.syn			= h.MyExp2SynNMDABB(loc, sec=sect)
		self.syn.tau1		= tau1
		self.syn.tau2		= tau2
		self.syn.tau1NMDA	= tau1NMDA
		self.syn.tau2NMDA	= tau2NMDA 
		self.syn.r			= r
		self.syn.e			= e 
		
###############################################################################
#
# General Cell
#
###############################################################################
class Cell:
	"General cell"
	
	def __init__(self,x,y,z,id):
		self.x=x
		self.y=y
		self.z=z
		self.id=id
		self.all_sec = []
		self.add_comp('soma',False)
		self.set_morphology()
		self.set_conductances()
		self.set_synapses()
		self.set_inj()
		self.calc_area()
		
	def set_morphology(self):
		pass
			
	def set_conductances(self):
		pass
		
	def set_synapses(self):
		pass
		
	def set_inj(self):
		self.somaInj = h.IClamp(0.5, sec=self.soma)	
		
	def add_comp(self, name, rec):
		self.__dict__[name] = h.Section()
		self.all_sec.append(self.__dict__[name])
		# Record voltage
		if rec:
			self.__dict__[name+"_volt"] = h.Vector(int(h.tstop/h.dt)+1)
			self.__dict__[name+"_volt"].record(self.__dict__[name](0.5)._ref_v)
	
	def plot_volt(self, name, fig=1):
		figure(fig)
		volt = self.__dict__[name+"_volt"].to_python()
		plot(arange(len(volt))*h.dt, volt)

	def clear_volt(self):
		self.soma_volt.resize(0)
		
	def calc_area(self):
		self.total_area = 0
		self.n = 0
		for sect in self.all_sec:
			self.total_area += h.area(0.5,sec=sect)
			self.n+=1
			
###############################################################################
#
# Basket Cell -- Bwb
#
###############################################################################

class Bwb(Cell):
	"Basket cell"
	
	def set_morphology(self):
		total_area = 10000 # um2
		self.soma.nseg  = 1
		self.soma.cm    = 1      # uF/cm2
		diam = sqrt(total_area) # um
		L    = diam/pi  # um
			
		h.pt3dclear(sec=self.soma)
		h.pt3dadd(self.x, self.y, self.z,   diam, sec=self.soma)
		h.pt3dadd(self.x, self.y, self.z+L, diam, sec=self.soma)
			
	def set_conductances(self):
		self.soma.insert('pas')
		self.soma.e_pas = -65     # mV
		self.soma.g_pas = 0.1e-3  # S/cm2 
	  
		self.soma.insert('Nafbwb')
		self.soma.insert('Kdrbwb')

		self.soma.insert('HCN1')
		self.soma(0.5).HCN1.htaufactor = 1
		self.soma(0.5).HCN1.gbar = 0.0001 * 0.2 # (0.074 / 0.175) * 0.5
	   
	def set_synapses(self):
		self.somaAMPAf 	= Synapse(sect=self.soma, loc=0.5, tau1=0.05, tau2=5.3, e=0)
		self.somaGABAf 	= Synapse(sect=self.soma, loc=0.5, tau1=0.07, tau2=9.1, e=-80)
		self.somaGABAss	= Synapse(sect=self.soma, loc=0.5, tau1=20,   tau2=40, e=-80)#only for septal input
		self.somaNMDA 	= SynapseNMDA(sect=self.soma, loc=0.5, tau1=0.05, tau2=5.3, tau1NMDA=15, tau2NMDA=150, r=1, e=0)
		
###############################################################################
#
# OLM Cell -- Ow
#
###############################################################################
class Ow(Cell):
	"OLM cell"
   
	def set_morphology(self):
		total_area = 10000 # um2
		self.soma.nseg  = 1
		self.soma.cm    = 1      # uF/cm2
		diam = sqrt(total_area) # um
		L    = diam/pi  # um

		h.pt3dclear(sec=self.soma)
		h.pt3dadd(self.x, self.y, self.z,   diam, sec=self.soma)
		h.pt3dadd(self.x, self.y, self.z+L, diam, sec=self.soma)
	
	def set_conductances(self):
		self.soma.insert('pas')
		self.soma.e_pas = -65     # mV
		self.soma.g_pas = 0.1e-3  # S/cm2 

		self.soma.insert('Nafbwb')
		self.soma.insert('Kdrbwb')
		self.soma.insert('Iholmw')
		# self.soma.insert('HCN1')
		# self.soma.insert('HCN2')
		self.soma.insert('Caolmw')
		self.soma.insert('ICaolmw')
		self.soma.insert('KCaolmw')

	def set_synapses(self):
		self.somaGABAf 	= Synapse(sect=self.soma, loc=0.5, tau1=0.07, tau2=9.1, e=-80)
		self.somaAMPAf 	= Synapse(    sect=self.soma, loc=0.5, tau1=0.05, tau2=5.3, e=0)
		self.somaGABAss	= Synapse(    sect=self.soma, loc=0.5, tau1=20,	  tau2=40, e=-80)#only for septal input
		self.somaNMDA 	= SynapseNMDA(sect=self.soma, loc=0.5, tau1=0.05, tau2=5.3, tau1NMDA=15, tau2NMDA=150, r=1, e=0)
		
###############################################################################
#
# Pyramidal Cell -- KopAdr
#
###############################################################################
class PyrAdr(Cell):
	"Pyramidal cell"

	def set_morphology(self):
		self.add_comp('Bdend',True)
		self.add_comp('Adend1',False)
		self.add_comp('Adend2',False)
		self.add_comp('Adend3',True)

		h.pt3dclear(sec=self.soma)
		h.pt3dadd(self.x, self.y, self.z,          20, sec=self.soma)
		h.pt3dadd(self.x, self.y, self.z+20,       20, sec=self.soma)

		h.pt3dclear(sec=self.Bdend)
		h.pt3dadd(self.x, self.y, self.z,          2, sec=self.Bdend)
		h.pt3dadd(self.x, self.y, self.z-200,      2, sec=self.Bdend)

		h.pt3dclear(sec=self.Adend1)
		h.pt3dadd(self.x, self.y, self.z+20,       2, sec=self.Adend1)
		h.pt3dadd(self.x, self.y, self.z+20+150,   2, sec=self.Adend1)

		h.pt3dclear(sec=self.Adend2)
		h.pt3dadd(self.x, self.y, self.z+20+150,   2, sec=self.Adend2)
		h.pt3dadd(self.x, self.y, self.z+20+150*2, 2, sec=self.Adend2)

		h.pt3dclear(sec=self.Adend3)
		h.pt3dadd(self.x, self.y, self.z+20+150*2, 2, sec=self.Adend3)
		h.pt3dadd(self.x, self.y, self.z+20+150*3, 2, sec=self.Adend3)

		self.Bdend.connect(self.soma,      0, 0)
		self.Adend1.connect(self.soma,   0.5, 0)
		self.Adend2.connect(self.Adend1,   1, 0)
		self.Adend3.connect(self.Adend2,   1, 0)

	def clear_volt(self):
		self.soma_volt.resize(0)
		self.Bdend_volt.resize(0)
		self.Adend3_volt.resize(0)

	def set_conductances(self):
		for sect in self.all_sec:
			sect.insert('pas')
			sect(0.5).pas.g = 0.0000357
			sect.insert('nacurrent')
			sect.insert('kacurrent')
			sect.insert('kdrcurrent')
			sect.insert('hcurrent')
			# sect.insert('HCN2')
			sect(0.5).pas.e = -70     # mV
			sect.cm = 1
			sect.Ra = 150
			# sect(0.5).HCN2.v50 = -92
			# sect(0.5).HCN2.gbar = 0.0007

		self.Adend1(0.5).nacurrent.ki = 0.5
		self.Adend1(0.5).kacurrent.g  = 0.072
		self.Adend1(0.5).hcurrent.v50 = -82
		self.Adend1(0.5).hcurrent.gbar   = 0.0002
		
		self.Adend2(0.5).nacurrent.ki = 0.5
		self.Adend2(0.5).kacurrent.g  = 0
		self.Adend2(0.5).kacurrent.gd = 0.120
		self.Adend2(0.5).hcurrent.v50 = -90
		self.Adend2(0.5).hcurrent.gbar   = 0.0004
		
		self.Adend3(0.5).cm           = 2
		self.Adend3(0.5).pas.g        = 0.0000714
		self.Adend3(0.5).nacurrent.ki = 0.5
		self.Adend3(0.5).kacurrent.g  = 0
		self.Adend3(0.5).kacurrent.gd = 0.200		
		self.Adend3(0.5).hcurrent.v50 = -90
		self.Adend3(0.5).hcurrent.gbar   = 0.0007
		
		self.Bdend(0.5).nacurrent.ki  = 1

	def set_synapses(self):
		self.somaGABAf 	 = Synapse(    sect=self.soma,   loc=0.5, tau1=0.07, tau2=9.1, 	  e=-80)
		self.somaAMPAf 	 = Synapse(    sect=self.soma,   loc=0.5, tau1=0.05, tau2=5.3, 	   e=0)
		self.BdendAMPA   = Synapse(    sect=self.Bdend,  loc=1.0, tau1=0.05, tau2=5.3,     e=0)
		self.BdendNMDA   = SynapseNMDA(sect=self.Bdend,  loc=1.0, tau1=0.05, tau2=5.3, tau1NMDA=15, tau2NMDA=150, r=1, e=0)
		self.Adend2GABAs = Synapse(	   sect=self.Adend2, loc=0.5, tau1=0.2,  tau2=20,   e=-80)
		self.Adend3GABAf = Synapse(	   sect=self.Adend3, loc=0.5, tau1=0.07, tau2=9.1,   e=-80)
		self.Adend3AMPAf = Synapse(	   sect=self.Adend3, loc=0.5, tau1=0.05, tau2=5.3,    e=0)
		self.Adend3NMDA  = SynapseNMDA(sect=self.Adend3, loc=0.5, tau1=0.05, tau2=5.3, tau1NMDA=15, tau2NMDA=150, r=1, e=0)