Olfactory bulb cluster formation (Migliore et al. 2010)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:127995
Functional roles of distributed synaptic clusters in the mitral-granule cell network of the olfactory bulb.
Reference:
1 . Migliore M, Hines ML, McTavish TS, Shepherd GM (2010) Functional roles of distributed synaptic clusters in the mitral-granule cell network of the olfactory bulb. Front Integr Neurosci 4:122 [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: 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 K;
Gap Junctions:
Receptor(s): AMPA;
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Action Potential Initiation; Short-term Synaptic Plasticity; Olfaction;
Implementer(s): Hines, Michael [Michael.Hines at Yale.edu]; Migliore, Michele [Michele.Migliore at Yale.edu];
Search NeuronDB for information about:  Olfactory bulb main mitral GLU cell; Olfactory bulb main interneuron granule MC GABA cell; AMPA; I Na,t; I K;
/
migliore2010
README
ampanmda.mod
fi.mod
kamt.mod *
kdrmt.mod *
naxn.mod *
ThreshDetect.mod *
.hg_archival.txt
6.2.3.2203.spk
allsynhinton.hoc *
clear.hoc *
connect.hoc
granule.hoc
iterator.hoc
lptiter.hoc
mgrs.hoc
mitral.hoc
mosinit.hoc
net-5mt-100-900.hoc
odors.txt
parinit.hoc
pattern.hoc
perfrun.hoc
show.hoc
somesyn.hoc *
start.hoc
start.ses *
stim-odors-AB-seq.hoc
weight_movie.hoc *
weight-forfig3-bulb1.dat
weightsave.hoc
                            
// write weight file, read weight file, initialize weights
// weight file format is
//nweight
//t
//srcgid targid s w   : nweight of these
//any number of above two

////////create a weight file
weight_start_ = 1e9
weight_interval_ = 1e9
objref fih_weight_, weight_file_
proc weight_snapshots() {local i, nw   localobj f
	weight_file_ = new File($s1)
	f = weight_file_
	weight_start_ = $2
	weight_interval_ = $3
	fih_weight_ = new FInitializeHandler(2, "w1_()")
	nw = 0
	for i=0, mgrs_list.count-1 {
		if (mgrs_list.object(i).mexist) { nw += 1 }
		if (mgrs_list.object(i).gexist) { nw += 1 }
	}
	nw = pc.allreduce(nw,1)
	if (pc.id == 0) {
		f.wopen()
		f.printf("%d\n", nw)
		f.close()
	}
}

proc w1_() { cvode.event(weight_start_, "w2_()") }

proc w2_() {local i  localobj f
	f = weight_file_
	for pnm.serialize() {
		f.aopen()
		if (pc.id == 0) {
			f.printf("%g\n", t)
		}
		for i=0, mgrs_list.count-1 {
			f.printf("%s\n", mgrs_list.object(i).ws_str().s)
		}
		f.close()
	}
	cvode.event(t + weight_interval_, "w2_()")
}
//////////// end of create a weight file

/////////// initialize weight from first group of a weight file
objref fih_weight_init_, weight_init_file_
proc weight_initialize() {
	weight_init_file_ = new File($s1)
	// after NET_RECEIVE INITIAL
	fih_weight_init_ = new FInitializeHandler(1, "w3_()")
}

proc w3_() {local i, nw, srcgid, targid, s, w, sgid \
    localobj f, map, newmap, mgrs, p, nc, syn, ncl, str
	str = new String()
	f = weight_init_file_
	f.ropen()
	nw = f.scanvar()
	f.scanvar() // discard t
	p = new PythonObject()
	nrnpython("newmap = lambda key, value : {key:value}")
	map = p.newmap(-1,0)
	for i=0, nw - 1 {
		srcgid = f.scanvar
		targid = f.scanvar
		s = f.scanvar
		w = f.scanvar
		sgid = syn_gid(srcgid, targid)
//		if (pc.gid_exists(sgid)) {// correct even if multisplit
			// no way at present to efficiently derive the
			// MGRS from the srcgid, targid but we know it
			// exists. So save data in a Python map and
			// retrieve next loop
			map.update(p.newmap(sgid, s))
//printf("map %d %d %d %d\n", srcgid, targid, ncell, s)
//		}
	}
	f.close()
	// sweep mgrs_list
    if (1 || mgrs_list.count == 0) { // must be a synapse movie
	ncl = new List("NetCon")
	for i=0, ncl.count-1 {
		nc = ncl.object(i)
		syn = nc.syn
		if (object_id(syn) == 0) { continue }
		classname(syn, str.s)
		if (strcmp(str.s, "FastInhib") != 0 && strcmp(str.s, "AmpaNmda") != 0) {
			continue
		}
		sgid = syn_gid(syn.ggid, syn.mgid)
		if (sgid == syn.srcgid) {
			sgid = syn_gid(syn.mgid, syn.ggid)
		}
		s = map.__getitem__(sgid)
//printf("%d %d %d %d %d %d\n", i, syn.ggid, syn.mgid, syn.srcgid, sgid, s)
		nc.weight[1] = s
		nc.weight[2] = syn.plast(s)*nc.weight[0]
	}
    }else{ // a normal run with real cells
	for i=0, mgrs_list.count-1 {
		mgrs = mgrs_list.object(i)
		if (pc.gid_exists(mgrs.md_gid)) { // mitral detector means fi exists
			s = map.__getitem__(mgrs.md_gid)
//printf("%d %d %g\n", mgrs.granule_gid, mgrs.mitral_gid, s)
			mgrs.set_sm(s)
		}
		if (pc.gid_exists(mgrs.gd_gid)) {
			s = map.__getitem__(mgrs.gd_gid)
//printf("%d %d %g\n", mgrs.mitral_gid, mgrs.granule_gid, s)
			mgrs.set_sg(s)
		}
	}
    }
}