Synchrony by synapse location (McTavish et al. 2012)

 Download zip file   Auto-launch 
Help downloading and running models
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.
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]
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;
Simulation Environment: NEURON;
Model Concept(s): Synchronization; Olfaction;
Implementer(s): McTavish, Thomas S [thomas.mctavish at];
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;
if (!name_declared("is_split")) {execute("is_split = 0")}

splitbit = 6e8
func basegid() {
	// from piece gid, return base gid
	return $1 % splitbit
func piecegid() {
	// from base gid return -1 if no piece on this cpu, otherwise
	// the piece gid
	// note that if several pieces of a mitral cell exist on this
	// cpu, then the smallest gid is returned
	if (pc.gid_exists($1)) {
		return $1
	}else if (pc.gid_exists($1 + splitbit)) {
		return $1 + splitbit
	}else if (pc.gid_exists($1 + 2*splitbit)) {
		return $1 + 2*splitbit
		return -1
obfunc gid2piece() {local sgid  localobj nil
	// from base gid return nil if no piece, otherwise
	// the cell piece object
	// note that a cell object may contain 1, 2, or 3 mitral pieces
	sgid = piecegid($1)
	if (sgid >= 0) {
		return pc.gid2cell(sgid)
		return nil

func exists() {localobj cell
	cell = gid2piece($1)
	if (object_id(cell)) if (section_exists($s2, cell)) {
		return 1
	return 0

// split a mitral cell ($1 gid, $o2 whole cell) into three pieces
// destroy the pieces not on this cpu
// and connect pieces with multisplit
// arg is the base gid
proc splitmitral() {localobj cell, sl, nil
	if ($1 >= num_mitral) return // it is a granule
	cell = $o2
	if (is_split == 0) {
		//cell.axon pc.cell($1, new NetCon(&v(1), nil), 1)
		cell.soma pc.cell($1, new NetCon(&v(.5), nil), 1)
		// do not split
	// split
	cell.secden[0] disconnect()
	cell.secden[1] disconnect()
	// destroy what is not supposed to exist on this cpu
	if (!pc.gid_exists($1 + splitbit)) {
		cell.secden[0] delete_section()
	if (!pc.gid_exists($1 + 2*splitbit)) {
		cell.secden[1] delete_section()
	if (!pc.gid_exists($1)) {
		sl = new SectionList()
		cell.soma sl.wholetree()
		forsec sl {
	// multisplit connect using the base gid
	// also associate the split gids with the cell object
	if (pc.gid_exists($1))cell.soma {
		pc.multisplit(.5, $1)
		//cell.axon pc.cell($1, new NetCon(&v(1), nil), 1)
		pc.cell($1, new NetCon(&v(.5), nil), 1)
	if (pc.gid_exists($1 + splitbit)) cell.secden[0] {
		pc.multisplit(0, $1)
		pc.cell($1 + splitbit, new NetCon(&v(.5), nil), 0)
	if (pc.gid_exists($1 + 2*splitbit)) cell.secden[1] {
		pc.multisplit(0, $1)
		pc.cell($1 + 2*splitbit, new NetCon(&v(.5), nil), 0)

Loading data, please wait...