Synchrony by synapse location (McTavish et al. 2012)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:144054
This model considers synchrony between mitral cells induced via shared granule cell interneurons while taking into account the spatial constraints of the system. In particular, since inhibitory inputs decay passively along the lateral dendrites, this model demonstrates that an optimal arrangement of the inhibitory synapses will be near the cell bodies of the relevant mitral cells.
Reference:
1 . McTavish TS, Migliore M, Shepherd GM, Hines ML (2012) Mitral cell spike synchrony modulated by dendrodendritic synapse location. Front Comput Neurosci 6:3 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network; Neuron or other electrically excitable cell;
Brain Region(s)/Organism: Olfactory bulb;
Cell Type(s): Olfactory bulb main mitral GLU cell; Olfactory bulb main interneuron granule MC GABA cell;
Channel(s): I Na,t; I A; I K;
Gap Junctions:
Receptor(s): GabaB; AMPA; NMDA;
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Synchronization; Olfaction;
Implementer(s): McTavish, Thomas S [thomas.mctavish at yale.edu];
Search NeuronDB for information about:  Olfactory bulb main mitral GLU cell; Olfactory bulb main interneuron granule MC GABA cell; GabaB; AMPA; NMDA; I Na,t; I A; I K;
/
mctavish_syncbylocation
src
ampanmda.mod
fi.mod
kamt.mod
kdrmt.mod
naxn.mod
ThreshDetect.mod *
allsynhinton.hoc *
analysis.py
animtest.py
antest.ses *
bulbspikes.py
clear.hoc
connect.hoc
control.ses
default.hoc
granule.hoc *
hinton.hoc
init.hoc *
iterator.hoc *
lptiter.hoc
mgrs.hoc
michele_movie.hoc
mitral.hoc
mosinit.hoc
net.hoc
param.hoc
params.py
parinit.hoc
pattern.hoc
perfrun.hoc
show.hoc
showw.hoc
somesyn.hoc *
sortspike *
split.hoc
start.hoc
start.ses
stimodors.hoc
subset.hoc
subset_control.ses *
synweightsnapshot.py
viewspikes.hoc
viewspikes1.hoc
weight_movie.hoc
weightsave.hoc
                            
{load_file("nrngui.hoc")}
{load_file("mitral.hoc")}
{load_file("granule.hoc")}

celsius = 35
objref nil, pc
pc = new ParallelContext()

// line of num_mitral mitral cells distributed from position 0 to net_spatial_len.
// No wrap-around. Each mitral cell assumed to have two
// secondary dendrites along the line with length len.

//network size parameters
//change following in param.hoc
//net_spatial_len = 1000 // size of the linear domain, mitral positions range from 0 to net_spatial_len
//secdenlen = 1000 // mitral secden length
//num_granule = 1000 // distributed uniformly over the linear domain
//num_mitral = 100 // distributed uniformly over the linear domain
// positions of mitral and granule cells
objref mitral_x, granule_x
mitral_x = new Vector()
granule_x = new Vector()
for i=0, num_mitral - 1 {
	mitral_x.append(100+i*200)
}
for i=0, num_granule - 1 {
	granule_x.append((i+.5)*net_spatial_len/num_granule)
}

num_mitral=mitral_x.size

// networksize assigned variables
// see comment on global GIDs assigned to cells

num_mitral_begin = 0
num_granule_begin = num_mitral_begin + num_mitral
ncell = num_granule_begin + num_granule

{load_file("mgrs.hoc")}
{load_file("connect.hoc")}

// for more accurate complexity when splitting
// (prior to creation)
// $1 gid, $2 right or left
func how_many_syn_on_secden(){local n, xm, i, xg, delta, g  localobj sp
	if (object_id(sparse_connection_matrix_) == 0) {
		sparse_connections()
	}
	sp = sparse_connection_matrix_
	xm = mitral_x.x[$1]
	n = 0
	for i = 0, sp.sprowlen($1) - 1 {
		sp.spgetrowval($1, i, &g)
		xg = granule_x.x[i]
		delta = xg - xm
		if ($2 == 0) { // right secden
			if (delta > 0 && delta < secdenlen) {
				n += 1
			}
		}else{ // left secden
			if (delta < 0 && delta > -secdenlen) {
				n += 1
			}
		}
	}
	return n
}
func how_many_syn_on_granule() {local i, n, xg, xm  localobj c //$1 is gid
	c = g2m_connections($1)
	return c.size

	xg = granule_x.x[$1]
	n = 0
	for i=0, num_mitral-1 {
		xm = mitral_x.x[i]
		if (abs(xm - xg) < secdenlen) {
			n += 1
		}
	}
	return n
}
// if iterator does not exist load the default one.
if (!name_declared("cell_gids")) { load_file("iterator.hoc") }

//variables
// each cpu will have its own cell objects

objref cells  //mitrals and granules on this cpu
cells = new List()

// for initialization
Vrest=-65
proc init() {
	finitialize(Vrest)
	forall {
		if (ismembrane("nax")) {
			e_pas=v+(ina+ik)/g_pas
		} else if (ismembrane("k_ion")){
			e_pas=v+ik/g_pas
		}
	}
	fcurrent()
	cvode.re_init()
	frecord_init()
}

//parallel network object

// distribute GIDs and create cells

proc create_cells() { local gid, pgid, i, j, nm   localobj cell, nc
    for cell_gids(&pgid, &i) {   //iterator returns changed value of address &gid in each loop
	pc.set_gid2node(pgid, pc.id) //here the return value of iterator (gid) is used
    }
    for cell_gids(&pgid, &i) { 
	gid = basegid(pgid)
	// if a piece exists do not create again
	if (piecegid(gid) != pgid) { continue }
	if (gid < num_mitral) {
	    cell = new Mitral()
	    cell.position(mitral_x.x[gid], gid*20, 0)
	    for j=0,1 cell.secden[j].L = secdenlen
	    splitmitral(gid, cell) // also associates base and piece gids
	} else {
	    cell = new Granule()
	    cell.position(granule_x.x[gid-num_granule_begin], -100, 0)
	    cell.soma nc = new NetCon(&v(.5),nil)
	    pc.cell(gid, nc)
	}
	cells.append(cell)
//	print pc.id, gid, cell
 
    }
    if (is_split) { pc.multisplit() }
}

proc mknet() {
	create_cells()
	connect_cells()
}

//load_file("control_net_graphics.hoc")
//load_file("control_net3.hoc")
//for i=0, mgrs_list.count-1 mgrs_list.object(i).pr()