3D model of the olfactory bulb (Migliore et al. 2014)

 Download zip file 
Help downloading and running models
Accession:151681
This entry contains a link to a full HD version of movie 1 and the NEURON code of the paper: "Distributed organization of a brain microcircuit analysed by three-dimensional modeling: the olfactory bulb" by M Migliore, F Cavarretta, ML Hines, and GM Shepherd.
Reference:
1 . Migliore M, Cavarretta F, Hines ML, Shepherd GM (2014) Distributed organization of a brain microcircuit analyzed by three-dimensional modeling: the olfactory bulb. Front Comput Neurosci 8:50 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network; Channel/Receptor; Dendrite;
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): NMDA; Glutamate; Gaba;
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Pattern Recognition; Activity Patterns; Bursting; Temporal Pattern Generation; Oscillations; Synchronization; Active Dendrites; Detailed Neuronal Models; Synaptic Plasticity; Action Potentials; Synaptic Integration; Unsupervised Learning; Olfaction;
Implementer(s): Hines, Michael [Michael.Hines at Yale.edu]; Migliore, Michele [Michele.Migliore at Yale.edu]; Cavarretta, Francesco [francescocavarretta at hotmail.it];
Search NeuronDB for information about:  Olfactory bulb main mitral GLU cell; Olfactory bulb main interneuron granule MC GABA cell; NMDA; Glutamate; Gaba; I Na,t; I A; I K;
/
bulb3d
readme.html
ampanmda.mod *
distrt.mod *
fi.mod *
kamt.mod *
kdrmt.mod *
naxn.mod *
ThreshDetect.mod *
all2all.py *
balance.py *
bindict.py
BulbSurf.py
colors.py *
common.py
complexity.py *
custom_params.py *
customsim.py
destroy_model.py *
determine_connections.py
distribute.py *
fig7.py
fixnseg.hoc *
getmitral.py
gidfunc.py *
glom.py
granule.hoc *
granules.py
input-odors.txt *
loadbalutil.py *
lpt.py *
mayasyn.py
mgrs.py
misc.py
mitral.hoc *
mitral_dend_density.py
mkmitral.py
modeldata.py *
multisplit_distrib.py *
net_mitral_centric.py
odordisp.py *
odors.py *
odorstim.py
params.py
parrun.py
realgloms.txt *
runsim.py
split.py *
util.py *
weightsave.py *
                            
from colors import palette as nrncolors
try:
    from enthought.traits.ui.api import Handler
    from enthought.traits.ui.api import UIInfo
except:
    from traitsui.api import Handler
    from traitsui.api import UIInfo
class OdorHandler(Handler):
    
    def __init__(self, fig, bulb, glomval):
        from copy import copy
        self.__glomval = copy(glomval)
        self.__fig = fig; self.__bulb = bulb

        # create method for every odor
        code = "def _show%g(self, info): self.show(%g)"
        for i in range(len(self.__bulb.real_h)):
            x = code % (i, i)
            compcode = {}
            exec x.strip() in compcode
            name = '_show%g' % i
            setattr(self.__class__, name, compcode[name])
            
    # clean the glomerulus
    def clean(self):
        for i in range(len(self.__bulb.real_h)):
            self.__bulb.real_h[i].property.color = (1., 0., 0.)
        self.__fig.scene.render()


    def _clean(self, info): self.clean()
    def _setview(self, info): self.setview()

    # set best view for the camera
    def setview(self):
        # set the camera
        self.__fig.scene.camera.position = [ -294.68175837,  2301.60733878,  5760.60463821 ]
        self.__fig.scene.camera.focal_point = [  972.90044282,  1081.82497137,   -90.96137608 ]
        self.__fig.scene.camera.view_angle = 30.
        self.__fig.scene.camera.view_up = [ 0.04971769,  0.97984323, -0.19348226 ]
        self.__fig.scene.render()
        
    # color gloms
    def show(self, i):
        for j, x in enumerate(self.__glomval[i]):
            self.__bulb.real_h[j].property.color = nrncolors[x]
        self.__fig.scene.render()

def OdorsInput(fname):
    odorlbl = []; glomval = []
    f = open(fname, 'r')

    minval = 100.; maxval = -1.

    line = f.readline()
    while line:
        token = line.split()

        # labels
        lbl = token[0].replace('_', ' ')
        odorlbl.append(lbl)

        # glom values
        vals = []
        for i in range(1, len(token)):
            vals.append(float(token[i]))
        _min = min(vals)
        _max = max(vals)
        if _min < minval: minval = _min
        if _max > maxval: maxval = _max
        glomval.append(vals)
        
        line = f.readline()
    f.close()


    # normalization for a best visualization of colors
    for i in range(len(glomval)):
        for j in range(len(glomval[i])):
            glomval[i][j] -= minval
            glomval[i][j] /= (maxval - minval)
            glomval[i][j] = int(glomval[i][j] * (len(nrncolors) - 1))
    return odorlbl, glomval

def initOdorsDisp(fname, fig, bulb):
    odorlbl, glomval = OdorsInput(fname)
    try:
        from enthought.traits.ui.menu import Action, MenuBar, Menu, Separator # create odor list
    except:
        from traitsui.menu import Action, MenuBar, Menu, Separator # create odor list


    menu = Menu(name='Odors') 
    for i, name in enumerate(odorlbl): menu.append(Action(name=name, action='_show%g' % i))
    #menu.append(Separator())
    menu1 = Menu(name='View') 
    menu1.append(Action(name='Set View as Vinci\'s', action='_setview'))
    menu1.append(Action(name='Clean gloms', action='_clean'))
    return MenuBar(menu, menu1), OdorHandler(fig, bulb, glomval)