Parametric computation and persistent gamma in a cortical model (Chambers et al. 2012)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:144579
Using the Traub et al (2005) model of the cortex we determined how 33 synaptic strength parameters control gamma oscillations. We used fractional factorial design to reduce the number of runs required to 4096. We found an expected multiplicative interaction between parameters.
Reference:
1 . Chambers JD, Bethwaite B, Diamond NT, Peachey T, Abramson D, Petrou S, Thomas EA (2012) Parametric computation predicts a multiplicative interaction between synaptic strength parameters that control gamma oscillations. Front Comput Neurosci 6:53 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network; Axon; Synapse; Channel/Receptor; Dendrite;
Brain Region(s)/Organism:
Cell Type(s): Neocortex L5/6 pyramidal GLU cell; Neocortex L2/3 pyramidal GLU cell; Neocortex V1 interneuron basket PV GABA cell; Neocortex fast spiking (FS) interneuron; Neocortex spiny stellate cell; Neocortex spiking regular (RS) neuron; Neocortex spiking low threshold (LTS) neuron;
Channel(s): I A; I K; I K,leak; I K,Ca; I Calcium; I_K,Na;
Gap Junctions: Gap junctions;
Receptor(s): GabaA; AMPA; NMDA;
Gene(s):
Transmitter(s): Gaba; Glutamate;
Simulation Environment: NEURON;
Model Concept(s): Oscillations; Parameter sensitivity;
Implementer(s): Thomas, Evan [evan at evan-thomas.net]; Chambers, Jordan [jordandchambers at gmail.com];
Search NeuronDB for information about:  Neocortex L5/6 pyramidal GLU cell; Neocortex L2/3 pyramidal GLU cell; Neocortex V1 interneuron basket PV GABA cell; GabaA; AMPA; NMDA; I A; I K; I K,leak; I K,Ca; I Calcium; I_K,Na; Gaba; Glutamate;
/
FRBGamma
cells
data
hoc
mod
net
README
balanal.hoc *
balcomp.hoc *
cell_templates.hoc *
des2runs.py
EFP2PSD.m
EFPgen.m
evan.hoc
finit.hoc *
fortmap.hoc *
FRBGamm.val
FRBGamma.des
gidcell.hoc *
manage_setup.hoc
singleoutput.m
spkplt.hoc *
synstrengthdef.hoc
                            
setuptime = startsw()

one_tenth_ncell = 1
use_gap = 0
use_ectopic = 0
use_inject = 0
default_delay=.05
awake = 1
use_load_balance = 0

load_balance_phase = 0

{load_file("nrngui.hoc")}
{load_file("hoc/defvar.hoc")}
{load_file("fortmap.hoc")}
{load_file("hoc/parlib.hoc")}
gidvec = new Vector()

focus = 1

iterator pcitr() {local i1, i2
	$&1 = 0
	$&2 = focus
	iterator_statement
}

proc gid_distribute() {
print "gid_distribute ", focus
	pc.set_gid2node(focus, pc.id)
}

{load_file("finit.hoc")}
ranseedbase = 1
serial = 0 // override serial set in parlib.hoc
pmesg = 1 && (pc.id == 0)
small_model = 0 // 0 for full model, set to 1 for 40 cells each type
use_traubexact = 1
{load_file("hoc/traubcon.hoc")}

// turn off/on all tables
proc activate_tables() {
	usetable_ar = $1
	usetable_cal = $1
	usetable_cat_a = $1
	usetable_cat = $1
	usetable_k2 = $1
	usetable_ka = $1
	usetable_ka_ib = $1
	usetable_kc = $1
	usetable_kc_fast = $1
	usetable_kdr = $1
	usetable_kdr_fs = $1
	usetable_km = $1
//	usetable_naf2 = $1
//	usetable_naf = $1
//	usetable_naf_tcr = $1
	usetable_nap = $1
//	usetable_napf = $1
//	usetable_napf_spinstell = $1
//	usetable_napf_tcr = $1
}

// til the shift bug in the mod files are fixed (table depends on range variable)
if (1) {
usetable_naf2 = 0
usetable_naf = 0
usetable_naf_tcr = 0
usetable_napf = 0
usetable_napf_spinstell = 0
usetable_napf_tcr = 0
}

gfac_AMPA = 1
gfac_NMDA = 0
gfac_GABAA = 1

{load_file("cell_templates.hoc")}
use_p2c_net_connections = 1
{load_file("net/network_specification_interface.hoc")}
if (!serial) {load_file("hoc/parlib2.hoc")}
{load_file("net/serial_or_par_wrapper.hoc")}

objref fihprog_

objref pattern_, tvec_, idvec_
objref cell, typeflag
load_file("clear.hoc")
typeflag = new Vector(14)
pattern_ = new PatternStim()

proc pattern() {
	clipboard_retrieve("out.spk")
	tvec_ = hoc_obj_[1].c
	idvec_ = hoc_obj_[0].c
	pattern_.play(tvec_, idvec_)
}

proc fakeout() {local i, gid, th
	if ($1 != 0) { th = 1e9 } else { th = 0 }
	pattern_.fake_output = $1
	for pcitr (&i, &gid) {
		pnm.pc.threshold(gid, th)
	}
}		

proc reload() {local i, st, dtsav  localobj ncl
	dtsav=dt
	st = startsw()
	clear()
	focus = $1
	load_file(1, "net/groucho.hoc")
	define_shape()
	want_all_spikes()
	mkhist(50)

	if (pc.id == 0) fihprog_ = new FInitializeHandler("progress()")
	if (use_traubexact) {
		load_file("hoc/traubcon_net.hoc")
		reset_connection_coefficients()
	}
	st = startsw() - st
	cell = cells.object(0)
	fakeout(1)
	typeflag.fill(0) typeflag.x[cell.type] = 1
	dt=dtsav
	ncl = pnm.nclist
	for i=0, ncl.count-1 if (ncl.object(i).delay == .05) ncl.object(i).delay=0
	if (pc.id == 0) {print "reload time: ", st }
}
reload(focus)

proc progress() {
//	print "t=",t
	cvode.event(t+1, "progress()")
}


cvode_active(1)

setuptime = startsw() - setuptime
if (pc.id == 0) {print "SetupTime: ", setuptime}

steps_per_ms = 50
dt = .01
secondorder = 2
if (serial) {
	tstop = 10
}else{
	tstop = 10
}

load_file("gidcell.ses")

tf = 100
objref gm, synmat[3]
proc rdat() {local numcomp  localobj s, f
	s = new String()
	classname(cell, s.s)
	sprint(s.s, "../p2c/data/GROUCHO110.%s", s.s)
	print s.s
//	gm = new Matrix(999,8)
	gm = new Matrix(10*tf-1,2)
	f = new File()
	f.ropen(s.s)
	gm.scanf(f, gm.nrow, gm.ncol)
	gm.getcol(1).line(Graph[0], gm.getcol(0), 2, 1)
    if (0) {
	gm.getcol(5).line(Graph[1], gm.getcol(0), 2, 1)
	gm.getcol(6).line(Graph[1], gm.getcol(0), 3, 1)
	gm.getcol(7).line(Graph[1], gm.getcol(0), 4, 1)
    }
    if (1) {
	f = new File()
	numcomp=0 forsec cell.all numcomp += 1
	synmat[2] = new Matrix(10*tf-1, numcomp+1)
	classname(cell, s.s)
	sprint(s.s, "../p2c/data/gaba_%s.dat", s.s)
	f.ropen(s.s)
	synmat[2].scanf(f, synmat[2].nrow, synmat[2].ncol)

	synmat[0] = new Matrix(10*tf-1, numcomp+1)
	classname(cell, s.s)
	sprint(s.s, "../p2c/data/ampa_%s.dat", s.s)
	f.ropen(s.s)
	synmat[0].scanf(f, synmat[0].nrow, synmat[0].ncol)

	synmat[1] = new Matrix(10*tf-1, numcomp+1)
	classname(cell, s.s)
	sprint(s.s, "../p2c/data/nmda_%s.dat", s.s)
	f.ropen(s.s)
	synmat[1].scanf(f, synmat[0].nrow, synmat[0].ncol)
    }
}
rdat()
pattern()

proc another() {
	reload($1)
	Graph[0].erase
	rdat()
}

//clipboard_retrieve("../p2c/data/ampa.dat")
//hoc_obj_.line(Graph[1], hoc_obj_[1], 2, 1) 
//clipboard_retrieve("../p2c/data/nmda.dat")
//hoc_obj_.line(Graph[1], hoc_obj_[1], 2, 1) 

objref gg
gg = Graph[1]
which = 1
func am() {local g
	g = 0
	forsec cell.all if (ismembrane("ampa1_ion")) {
		g += iampa1*area(0.5)/100
	}
	return g
}
func nm() {local g
	g = 0
	forsec cell.all if (ismembrane("nmda1_ion")) {
		g += inmda1*area(0.5)/100
	}
	return g
}
func ga() {local g
	g = 0
	forsec cell.all if (ismembrane("gaba1_ion")) {
		g += igaba1*area(0.5)/100
	}
	return g
}

func f() {local g
//   cell.comp[which] if (ismembrane("ampa1_ion")) {
//    g = iampa1*area(0.5)/100
   cell.comp[which] if (ismembrane("gaba1_ion")) {
    g = igaba1*area(0.5)/100
   }
   return g
}

proc pw() {
   gg.erase()
   which = $1
   gm = $o2
   gm.getcol(which).line(gg, gm.getcol(0), 2, 1)
}

/* some useful idioms
objref a
a = cell.synlist
for i=0, a.count-1 if (a.o(i).comp == 3) print i, a.o(i), a.o(i).srcgid

objref b
b = pnm.nclist
for i=0,b.count-1 if (b.o(i).syn.comp == 3) print i, b.o(i), b.o(i).syn

for i=0,b.count-1 b.o(i).threshold = 1000
*/

proc mk_another_panel() {local i  localobj s1, s2, base
	s1 = new String()
	s2 = new String()
	base = new Vector(14)
	base.x[0] = 1
	for i=0, 12 {
		sprint(s1.s, "hoc_ac_ = num_%s", typename[i].s)
		execute(s1.s)
		base.x[i+1] = base.x[i] + hoc_ac_
	}
	xpanel("Make a different cell")
	for i=0, 13 {
		sprint(s2.s, "another(%d)", base.x[i])
		sprint(s1.s, "%s %d", typename[i].s, base.x[i])
		xcheckbox(s1.s, &typeflag.x[i], s2.s)
	}
	xpanel(0)
}
mk_another_panel()

seewhich = 0
seetype = 0 // ampa,nmda,gaba
objref syntrajeclist[3], tsyn
proc synsim() { local i, j  localobj vv, gn, gf, r, rr
	for i=0,2 { syntrajeclist[i] = new List() }
	gn = syntrajeclist[seetype]
	gf = synmat[seetype]
	i = 1
	tsyn = new Vector()
	cell.comp[1] {tsyn.record(&t)}
	for i=1, gf.ncol-1 cell.comp[i] {
		insert ampa1_ion
		insert gaba1_ion
		insert nmda1_ion
		vv = new Vector()
		vv.record(&iampa1(.5))
		syntrajeclist[0].append(vv)
		vv = new Vector()
		vv.record(&inmda1(.5))
		syntrajeclist[1].append(vv)
		vv = new Vector()
		vv.record(&igaba1(.5))
		syntrajeclist[2].append(vv)
	}
	stdinit()
	continuerun(100)
	rr = new Vector()
	for i=1, gf.ncol-1 cell.comp[i] for j=0, 2{
		syntrajeclist[j].object(i-1).mul(area(0.5)/100)
	}
	for i=0, gn.count-1 {
		r = gn.object(i).c.interpolate(gf.getcol(0), tsyn)
		rr.append(r.sub(gf.getcol(i+1)).sumsq)
	}
	i = rr.max_ind
	print i, rr.x[i]
	see(i+1, seetype)
}

proc see() {localobj gn, gf, s
   s = new String()
   gg.erase_all()
   seewhich = $1
   seetype = $2
   if (seetype > 2) {seetype = 2}
   if (seetype < 0) {seetype = 0}
   gf = synmat[seetype]
   gn = syntrajeclist[seetype]
   if (seewhich > gn.count) {seewhich = gn.count-1}
   if (seewhich < 1) { seewhich = 1 }
   if (seetype == 0) { s.s = "AMPA" }
   if (seetype == 1) { s.s = "NMDA" }
   if (seetype == 2) { s.s = "GABAA" }
   cell.comp[seewhich] { sprint(s.s,"%s at %s",s.s, secname()) }
   gg.label(.5,.8,s.s,2,1,0,0,1)
   gf.getcol(seewhich).line(gg, gf.getcol(0), 2, 1)
   gn.object(seewhich-1).line(gg, tsyn) 
}


proc mksee() {
	xpanel("compare synapse conductance")
	xvalue("AMPA=0 NMDA=1 GABAA=2", "seetype", 1, "see(seewhich, seetype)")
	xvalue("which", "seewhich", 1, "see(seewhich, seetype)")
	xpanel()
}

load_file("vclampg.hoc")