A single column thalamocortical network model (Traub et al 2005)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:45539
To better understand population phenomena in thalamocortical neuronal ensembles, we have constructed a preliminary network model with 3,560 multicompartment neurons (containing soma, branching dendrites, and a portion of axon). Types of neurons included superficial pyramids (with regular spiking [RS] and fast rhythmic bursting [FRB] firing behaviors); RS spiny stellates; fast spiking (FS) interneurons, with basket-type and axoaxonic types of connectivity, and located in superficial and deep cortical layers; low threshold spiking (LTS) interneurons, that contacted principal cell dendrites; deep pyramids, that could have RS or intrinsic bursting (IB) firing behaviors, and endowed either with non-tufted apical dendrites or with long tufted apical dendrites; thalamocortical relay (TCR) cells; and nucleus reticularis (nRT) cells. To the extent possible, both electrophysiology and synaptic connectivity were based on published data, although many arbitrary choices were necessary.
Reference:
1 . Traub RD, Contreras D, Cunningham MO, Murray H, LeBeau FE, Roopun A, Bibbig A, Wilent WB, Higley MJ, Whittington MA (2005) Single-column thalamocortical network model exhibiting gamma oscillations, sleep spindles, and epileptogenic bursts. J Neurophysiol 93:2194-232 [PubMed]
2 . Traub RD, Contreras D, Whittington MA (2005) Combined experimental/simulation studies of cellular and network mechanisms of epileptogenesis in vitro and in vivo. J Clin Neurophysiol 22:330-42 [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: Neocortex; Thalamus;
Cell Type(s): Thalamus geniculate nucleus/lateral principal GLU cell; Thalamus reticular nucleus GABA cell; Neocortex U1 L6 pyramidal corticalthalamic GLU cell; Neocortex U1 L2/6 pyramidal intratelencephalic GLU cell; Neocortex fast spiking (FS) interneuron; Neocortex spiking regular (RS) neuron; Neocortex spiking low threshold (LTS) neuron;
Channel(s): I Na,p; I Na,t; I L high threshold; I T low threshold; I A; I K; I M; I h; I K,Ca; I Calcium; I A, slow;
Gap Junctions: Gap junctions;
Receptor(s): GabaA; AMPA; NMDA;
Gene(s):
Transmitter(s):
Simulation Environment: NEURON; FORTRAN;
Model Concept(s): Activity Patterns; Bursting; Temporal Pattern Generation; Oscillations; Simplified Models; Epilepsy; Sleep; Spindles;
Implementer(s): Traub, Roger D ;
Search NeuronDB for information about:  Thalamus geniculate nucleus/lateral principal GLU cell; Thalamus reticular nucleus GABA cell; Neocortex U1 L2/6 pyramidal intratelencephalic GLU cell; Neocortex U1 L6 pyramidal corticalthalamic GLU cell; GabaA; AMPA; NMDA; I Na,p; I Na,t; I L high threshold; I T low threshold; I A; I K; I M; I h; I K,Ca; I Calcium; I A, slow;
Files displayed below are from the implementation
/
nrntraub
hoc
balcomp.hoc *
defvar.hoc *
lbcreate.hoc *
mscreate.hoc *
parlib.hoc
parlib2.hoc *
traubcon.hoc *
traubcon_net.hoc *
                            
objref netstims, netstim_netcons, netstim_randoms, netstim_syns
netstims = new List()
netstim_syns = new List()
netstim_netcons = new List()
netstim_randoms = new List()
netstim_random_seedoffset = ranseedbase + pnm.ncell // increment by number of Cells
splitbit = 2^28

func targetcomp_exists() {local spgid
	if (load_balance_phase == 3 || load_balance_phase == 7) {
		spgid = thishost_gid($1)
		if (spgid < 0) { return -1 }
		if (pc.gid_exists(spgid)) {
			if (section_exists("comp", $2, pc.gid2obj(spgid))) {
				return spgid
			}
		}
	}else{
		if (pc.gid_exists($1)) {
			return $1
		}
	}
	return -1
}

func target_exists() {local spgid
	if (load_balance_phase == 3 || load_balance_phase == 7) {
		spgid = thishost_gid($1)
		if (spgid < 0) { return -1 }
		if (pc.gid_exists(spgid)) {
			return spgid
		}
	}else{
		if (pc.gid_exists($1)) {
			return $1
		}
	}
	return -1
}

proc par_netstim_create() {local gid  localobj cell, syn, nc, ns, r
	if (!use_ectopic) { return }
	if ((gid = targetcomp_exists($1, $2)) >= 0) {
		cell = pc.gid2obj(gid)
		cell.comp[$2] {syn = new PulseSyn(.5)}
		netstim_syns.append(syn)
		syn.amp = $3
		ns = new S_NetStim()
		ns.pp.interval = $4
		netstims.append(ns)
		nc = new NetCon(ns.pp, syn)
		netstim_netcons.append(nc)
		nc.delay = 0
		r = new Random()
		r.negexp(1)
//		r.Isaac64(netstim_random_seedoffset + netstim_base_)
		r.MCellRan4(netstim_random_seedoffset + 1000*netstim_base_)
		ns.pp.noiseFromRandom(r)
		netstim_randoms.append(r)
	}
	netstim_base_ += 1
}

begintemplate gGap
proc init() {
	execerror("gGap not available. use gGapPar instead.", "")
}
endtemplate gGap

objref par_gaps
par_gaps = new List()
gap_src_gid = 2

objref rangap
if (one_tenth_ncell) {
	rangap = new Random()
	rangap.MCellRan4(1)
	rangap.uniform(0,1)
	ranfrac=.1
}

proc par_gap_create() { local gid
	if (!use_gap) { return }
	if (object_id(rangap)) {
		if (rangap.repick() > ranfrac) { return }
	}
	gap_src_gid += 2
	if ((gid = targetcomp_exists($1, $2)) >= 0) {
		par_gap_create1(gid, $2, gap_src_gid + 1, gap_src_gid, $5)
	}
	if ((gid = targetcomp_exists($3, $4)) >= 0) {
		par_gap_create1(gid, $4, gap_src_gid, gap_src_gid + 1, $5)
	}
}
proc par_gap_create1() {localobj c, g
	c = pc.gid2obj($1)
	c.comp[$2] {
		g = new gGapPar(.5)
		par_gaps.append(g)
		pc.target_var(g, &g.vgap, $3)
		pc.source_var(&v(.5), $4)
		g.g = $5
	}
}

icdel0_ = 0
cdel0_ = 0

func nc_append() {local targid, comp  localobj cell, syn, s
	targid = target_exists($2)
	if ($5 <= 0) {
//		if (targid >= 0) {
//			print pc.id, $1, $2, targid, $3, $4, $5, " ", pc.gid2obj(targid)
//		}
		if (icdel0_ == 0) if ((pc.gid_exists($1)!=0) != (targid != 0)) {
if (pmesg) print "Notice: Requesting an interprocessor connection delay of 0"
			icdel0_ = 1
		}
		if (cdel0_ == 0) {
if (pmesg) print "Notice: Requesting a connection delay of 0. Setting those to 1ms."
			cdel0_ = 1
		}
		$5 = 1
	}
	if ($5 < mindelay_) if (pc.gid_exists($1) == 0) if (targid >= 0) {
		mindelay_ = $5
	}

	if (targid >= 0) {
		cell = pc.gid2cell(targid)
		syn = cell.synlist.object($3)
		s = new String()
		classname(syn, s.s)
		if (strcmp(s.s, "GABAA") == 0) {
			syn.e = vgaba.x[cell.type]
		}
		// for debugging :need to switch the debug lines in
		// ampa.mod, traub_nmda.mod, and gabaa.mod
	    if (0) {
		syn.get_loc
		comp = -1
		sscanf(secname(), "%*[^0-9]%*d%*[^0-9]%d",&comp)
		pop_section()
		syn.srcgid = $1
		syn.targid = $2
		syn.synid = $3
		syn.comp = comp
	    }
	}
	if (targid >= 0) {
		return pnm.nc_append($1, targid, $3, $4, $5)
	}else{
		return -1
	}
}

proc set_const_curr_inj() {local i, gid  localobj c, clmp
	if (!use_inject) { return }
	for i = 1, $2 if ((gid = targetcomp_exists($1+i, 1)) >= 0) {
		c = pc.gid2obj(gid)
		c.comp[1] clmp = new IClamp_const(0.5)
		clmp.amp = $o3.x[i]
		iclamp_const_list.append(clmp)
	}
}