Parallel odor processing by mitral and middle tufted cells in the OB (Cavarretta et al 2016, 2018)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:240116
"[...] experimental findings suggest that MC and mTC may encode parallel and complementary odor representations. We have analyzed the functional roles of these pathways by using a morphologically and physiologically realistic three-dimensional model to explore the MC and mTC microcircuits in the glomerular layer and deeper plexiform layers. [...]"
Reference:
1 . Cavarretta F, Burton SD, Igarashi KM, Shepherd GM, Hines ML, Migliore M (2018) Parallel odor processing by mitral and middle tufted cells in the olfactory bulb. Sci Rep 8:7625 [PubMed]
2 . Cavarretta F, Marasco A, Hines ML, Shepherd GM, Migliore M (2016) Glomerular and Mitral-Granule Cell Microcircuits Coordinate Temporal and Spatial Information Processing in the Olfactory Bulb. Front Comput Neurosci 10:67 [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 tufted middle cell; Olfactory bulb main interneuron granule MC cell; Olfactory bulb main interneuron granule TC cell; Olfactory bulb (accessory) mitral cell; Olfactory bulb main tufted cell external; Olfactory bulb short axon cell;
Channel(s): I A; I Na,t; I_Ks; I K;
Gap Junctions: Gap junctions;
Receptor(s): AMPA; GabaA; NMDA;
Gene(s):
Transmitter(s): Glutamate; Gaba;
Simulation Environment: NEURON;
Model Concept(s): Action Potentials; Action Potential Initiation; Active Dendrites; Long-term Synaptic Plasticity; Synaptic Integration; Synchronization; Pattern Recognition; Spatio-temporal Activity Patterns; Temporal Pattern Generation; Sensory coding; Sensory processing; Olfaction;
Implementer(s): Cavarretta, Francesco [francescocavarretta at hotmail.it]; Hines, Michael [Michael.Hines at Yale.edu];
Search NeuronDB for information about:  Olfactory bulb main interneuron granule MC cell; Olfactory bulb main tufted middle cell; Olfactory bulb main interneuron granule TC cell; GabaA; AMPA; NMDA; I Na,t; I A; I K; I_Ks; Gaba; Glutamate;
/
modeldb-bulb3d
sim
ampanmda.mod
distrt.mod *
fi.mod
fi_stdp.mod *
gap.mod
Gfluct.mod
kamt.mod
kdrmt.mod
ks.mod
naxn.mod
orn.mod
ThreshDetect.mod *
all.py
all2all.py *
assembly.py
balance.py *
bindict.py
binsave.py
binspikes.py
blanes.hoc
blanes.py
blanes_exc_conn.txt
blanes6.dic
bulb3dtest.py
cancel.py
catfiles.sh
cellreader.py
cellwriter.py
cfg27.py
common.py
complexity.py *
convertdic.py
destroy_model.py
determine_connections.py
distribute.py *
dsac.py
Eta.txt *
fillgloms.py
fixnseg.hoc *
g_conn_stats.py
gapjunc.py
gen_weights.py
geodist.py
geodist.txt
getmitral.py
gidfunc.py
GJ.py
gj_nrn.hoc
Glom.py *
granule.hoc
granules.py
graphmeat.py
grow.py
growdef.py *
growout.py
job
Kod.txt *
lateral_connections.py
loadbalutil.py *
lpt.py *
mcgrow.py
MCrealSoma.py *
mgrs.py
misc.py
mitral.hoc
mkassembly.py
mkmitral.py
modeldata.py
mtgrow.py
MTrealSoma.py
MTrealSoma2.py
mtufted.hoc
multisplit_distrib.py
net_mitral_centric.py
Nod.txt *
odors.py
odorstim.py
odstim2.txt *
pad.txt *
params.py
parrun.py
pathdist.py
realgloms.txt *
runsim.py
spike2file.hoc *
spk2weight.py
split.py
subsetsim.py
test_complexity.py
txt2bin.py
util.py *
vrecord.py
weightsave.py
                            
dict_file_name = 'giddict.bin'

gid_dict = {}
ggid_dict = {}
mgid_dict = {}


def init():
    global dict_file_name
    try:
        from sys import argv
        dict_file_name = argv[argv.index('-dict') + 1]
        load(dict_file_name)
    except Exception:
        pass
        
def load(fname = None):
    gid_dict.clear()
    ggid_dict.clear()
    mgid_dict.clear()
    global dict_file_name
    if fname:
        dict_file_name = fname

    def add(dic, key, addkey, *arg):
        # make set
        try:
            s = dic[key]
        except KeyError:
            s = set()
            if addkey:
                s.add(key)
            dic.update({ key:s })

        # update
        s.update(set(arg))
        
            

    # read file
    if dict_file_name.endswith('.txt'):
        f = open(dict_file_name, 'r')
        line = f.readline()
        while line:
            # read line
            tk = line.split()
            
            # gid
            gid = int(tk[0])

            if gid % 2:
                ggid = int(tk[1])
                arc = float(tk[3])
                entry = (ggid, arc)
                if gid_dict.has_key(gid + 1):
                    entry = gid_dict[gid + 1] + entry
                    gid_dict[gid + 1] = entry
                    add(mgid_dict, entry[0], True, gid, entry[3])
                else:
                    gid_dict.update({ gid:entry })
                    
                # add to granule dict
                add(ggid_dict, ggid, False, gid)
            else:
                entry = (int(tk[1]), int(tk[2]), float(tk[3]))
                try:
                    entry_odd = gid_dict[gid - 1]
                    entry += entry_odd
                    del gid_dict[gid - 1]
                    # mgid dict add
                    add(mgid_dict, entry[0], True, gid, entry_odd[0])
                except KeyError:
                    pass
                gid_dict.update({ gid:entry })
                
            line = f.readline()
        f.close()
    else:
        from struct import unpack
        f = open(dict_file_name, 'rb')
        rec = f.read(22)
        while rec:
            # read one record
            mg_gid, mgid, isec, xm, ggid, xg = unpack('>LLHfLf', rec)
            gid_dict.update({ mg_gid:(mgid, isec, xm, ggid, 0, xg) })
            add(ggid_dict, ggid, False, mg_gid - 1)
            add(mgid_dict, mgid, True, mg_gid, ggid)
            rec = f.read(22)
        f.close()

def query(gid, verbrec=False):
    from params import Nmitral as nmitral, gid_granule_begin
    from granules import Ngranule
    
    if gid < nmitral:
        descr = 'Mitral soma %d' % gid
        isec = -1
        x = 0.
    elif gid >= gid_granule_begin and gid < (gid_granule_begin + Ngranule):
        descr = 'Granule soma %d' % gid
        isec = 0
        x = 0.
    elif gid % 2:
        info = gid_dict[gid + 1]
        descr = 'Granule %d(%.3g)-%d' % ((info[2], info[4], gid))
        gid = info[3]
        isec = 0
        x = info[4]
    else:
        info = gid_dict[gid]
        descr = 'Mitral %d[%d](%.3g)-%d' % (info[:3] + (gid, ))
        gid, isec, x = info[:3]

        
    if verbrec:
        print descr
        print '\n if you want use on vrecord write this params'
        print '\t (' + str(gid) + ', ' + str(isec) + ', ' + str(x) + ')'
        
    return gid, isec, x, descr


def mknetwork(gloms=[]):
    gid_dict.clear()
    mgid_dict.clear()
    ggid_dict.clear()
    from m2g_connections import determine_glom_connections as dgc
    import params
    import mgrs
    from common import rank, nhost
    if len(gloms) == 0: gloms = range(params.Ngloms)
    for glomid in gloms:
#        if glomid % nhost != rank:
#            continue
            
        ci = dgc(glomid)
#        print 'glom=%d done' % glomid
        for _ci in ci:
            mgid = _ci[0]
            ggid = _ci[3]

            if not mgid_dict.has_key(mgid):
                gids = []
                mgid_dict.update({ mgid:gids })
            else:
                gids = mgid_dict[mgid]

            syngid = mgrs.mgrs_gid(_ci[0], _ci[3])

            gids.append(ggid)
            gids.append(syngid)

            gid_dict.update({ syngid:_ci })

            if not ggid_dict.has_key(ggid):
                gids = []
                ggid_dict.update({ ggid:gids })
            else:
                gids = ggid_dict[ggid]

            gids.append(syngid - 1)
        #print 'glom=%d done' % glomid

def save(filename):
    from struct import pack
    fo = open(filename, 'w')
    for gid, ci in gid_dict.items():
        fo.write(pack('>LLHfLf', gid, ci[0], ci[1], ci[2], ci[3], ci[5]))
    fo.close()
            
        
        
init()

if __name__ == '__main__':
    from sys import argv
    from params import Nmitral as nmitral, gid_granule_begin
    from granules import Ngranule

    if '-query' in argv:
        try:
            query(int(argv[-1]), True)
        except:
            print 'gid ', argv[-1], ' not found'
        
    quit()