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 GLU cell; Olfactory bulb main interneuron granule MC GABA cell; Olfactory bulb main interneuron granule TC GABA 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 GABA cell; Olfactory bulb main tufted middle GLU cell; Olfactory bulb main interneuron granule TC GABA 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
                            
from neuron import h
from grow import *

# write a single section on hoc

def _writeSection(fw, points, secname):

    MAXPOINTS = 199

    fw.write(secname + " {\n\tpt3dclear()\n")



    for i in range(len(points)):

        if i > 0 and not (i % MAXPOINTS):

            fw.write("}\n\n" + secname + " {\n")



        fw.write("\tpt3dadd(")

        

        fw.write(str(points[i][0]))

        for j in range(1, 4):

            fw.write(", " + str(points[i][j]))

            

        fw.write(")\n")

    fw.write("}\n\n")



# write nrn in fw

def _saveNeuron(fw, nrn, somaName, apicName, dendName, tuftName):



    # write creates on file

    def writeCreate(fw, name, N):

        if N <= 0:

            return

        

        fw.write("create " + name)

        if N > 1:

            fw.write("[" + str(N) + "]")

        fw.write("\n")



    # write connection string

    def writeConn(fw, sonName, parentName, ison, iparent, x):

        fw.write("connect " + sonName)

        if ison >= 0:

            fw.write("[" + str(ison) + "]")

        fw.write("(0), " + parentName)

        if iparent >= 0:

            fw.write("[" + str(iparent) + "]")

        fw.write("(" + str(x) + ")\n")



    # create for the section!

    writeCreate(fw, somaName, 1)





    # write soma

    _writeSection(fw, nrn.soma.points, somaName)

    fw.write("\n\n\n")

    # write apical
    if nrn.apic:

        writeCreate(fw, apicName, 1)

        _writeSection(fw, nrn.apic.points, apicName)

        fw.write("\n\n\n")
        
        writeConn(fw, apicName, somaName, -1, -1, .5)

    

    # write tuft
    if len(nrn.tuft) > 0 :
        writeCreate(fw, tuftName, len(nrn.tuft))
        for x in nrn.tuft:
            _writeSection(fw, x.points, tuftName + "[" + str(x.index) + "]")

        fw.write("\n\n\n")
        for x in nrn.tuft: writeConn(fw, tuftName, apicName, x.index, -1, 1)




    # write dendrites
    if len(nrn.dend) > 0:
        writeCreate(fw, dendName, len(nrn.dend))
        for x in nrn.dend:
            _writeSection(fw, x.points, dendName + "[" + str(x.index) + "]")
        fw.write("\n\n\n")
        # make connections
        for x in nrn.dend:
            if x.parent == nrn.soma:
                writeConn(fw, dendName, somaName, x.index, -1, .5)
            else:
                writeConn(fw, dendName, dendName, x.index, x.parent.index, 1)
        fw.write("\n\n\n\n\n\n")



# save neurons

def saveNeurons(nrns, fname):

    fw = open(fname, "w")
    fw.write("load_file(\"nrngui.hoc\")\r\n")
    if type(nrns) == list:

        for i in range(len(nrns)):

            n = str(i)

            _saveNeuron(fw, nrns[i], "soma" + n, "apic" + n, "dend" + n, "tuft" + n)

    else:

        _saveNeuron(fw, nrns, "soma", "apic", "dend", "tuft")

    fw.close()



# show the network

def genNetwork(gloms, fname):

    fw = open(fname, "w")

    fw.write("load_file(\"nrngui.hoc\")\n")

    for g in gloms:

        for i in range(Nmitral_per_glom):

            mid = g * Nmitral_per_glom + i

            nrn = genMitral(mid)

            print "mitral ", mid

            

            stmid = str(mid)

            _saveNeuron(fw, nrn, "soma" + stmid, "apic" + stmid, "dend" + stmid, "tuft" + stmid)    

    fw.close()



# return gloms

def getGloms(gloms):

    newgloms = []

    for g in gloms:

        for i in range(Nmitral_per_glom):

            mid = g * Nmitral_per_glom + i

            newgloms += [ genMitral(mid) ]

            print "mitral ", mid



    return newgloms



# show glomerulus



# generate mitrals

def genMitrals(mids, fname):

    fw = open(fname, "w")

    fw.write("load_file(\"nrngui.hoc\")\n")

    for g in mids:

        nrn = genMitral(g)

        print "mitral ", g

            

        stmid = str(g)

        _saveNeuron(fw, nrn, "soma" + stmid, "apic" + stmid, "dend" + stmid, "tuft" + stmid)    

    fw.close()

# sampling
def sampleMitral(fname):
    r = ranstream(0, 2)
    mids = []
    for i in range(len(glomsCoords)):
        mids.append(i * Nmitral_per_glom + int(r.discunif(0, 4)))
    genMitrals(mids, fname)

#n=[]


#for i in [ 100, 150, 300]:
#n.append(genMitral(100))
#saveNeurons(n, "test.hoc")
#h.load_file("test.hoc")
#h.load_file("select.hoc")
#h.load_file("nrngui.hoc")
#from mkmitral import *

#for i in range(127):
#    print i
#   n.append(mkmitral(i*5))

#h.load_file("select.hoc")
#m = mkmitral(82)
#h.load_file("select.hoc")