3D olfactory bulb: operators (Migliore et al, 2015)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:168591
"... Using a 3D model of mitral and granule cell interactions supported by experimental findings, combined with a matrix-based representation of glomerular operations, we identify the mechanisms for forming one or more glomerular units in response to a given odor, how and to what extent the glomerular units interfere or interact with each other during learning, their computational role within the olfactory bulb microcircuit, and how their actions can be formalized into a theoretical framework in which the olfactory bulb can be considered to contain "odor operators" unique to each individual. ..."
Reference:
1 . Migliore M, Cavarretta F, Marasco A, Tulumello E, Hines ML, Shepherd GM (2015) Synaptic clusters function as odor operators in the olfactory bulb. Proc Natl Acad Sci U S A 112:8499-504 [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:
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): AMPA; NMDA; Gaba;
Gene(s):
Transmitter(s): Gaba; Glutamate;
Simulation Environment: NEURON; Python;
Model Concept(s): Activity Patterns; Dendritic Action Potentials; Active Dendrites; Synaptic Plasticity; Action Potentials; Synaptic Integration; Unsupervised Learning; Sensory processing; Olfaction;
Implementer(s): 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; AMPA; NMDA; Gaba; I Na,t; I A; I K; Gaba; Glutamate;
/
figure1eBulb3D
readme.html
ampanmda.mod *
distrt.mod *
fi.mod *
fi_stdp.mod *
kamt.mod *
kdrmt.mod *
naxn.mod *
ThreshDetect.mod *
.hg_archival.txt
all2all.py *
balance.py *
bindict.py
binsave.py
binspikes.py
BulbSurf.py
catfiles.sh
colors.py *
common.py
complexity.py *
custom_params.py *
customsim.py
destroy_model.py *
determine_connections.py
distribute.py *
falsegloms.txt
fixnseg.hoc *
g37e1i002.py
gidfunc.py *
Glom.py *
granule.hoc *
granules.py
grow.py
input-odors.txt *
loadbalutil.py *
lpt.py *
m2g_connections.py
mayasyn.py
mgrs.py
misc.py
mitral.hoc *
mkdict.py
mkmitral.py
modeldata.py *
multisplit_distrib.py *
net_mitral_centric.py
odordisp.py *
odors.py *
odorstim.py
params.py
parrun.py
realgloms.txt *
realSoma.py *
runsim.py
spike2file.hoc *
split.py *
util.py *
vrecord.py
weightsave.py *
                            
begintemplate Mitral

// ls - long secondary dendrites 

public soma, priden, secden, tuftden, hillock, initialseg
public all, secdens, tufts, dendritic, somatic, somden, external_syn, synls, ncls
public dampa, nsecden, ntuft
public position, x, y, z


create soma, priden, secden[2], tuftden[1], hillock, initialseg

forall {Ra = 150}

objref dendritic, somatic, somden, synodor, external_syn, all, secdens, tufts, axonal
objref dampa, synls, ncls

proc init() {


  
	synls = new List()
	synls.remove_all()
	ncls = new List()
	ncls.remove_all()

	nsecden = 2
	ntuft = 1
	subsets()
	topol()
	geometry()
	segments()
        
	memb()
	x = y = z = 0 // only change via position
}

proc createsec() {
	nsecden = $1
	ntuft = $2
  
	synls.remove_all()
	ncls.remove_all()

	create soma, priden, secden[nsecden], tuftden[ntuft], hillock, initialseg
}

proc subsets() {
	all = new SectionList()
	forall all.append()
	
	secdens = new SectionList()
	forsec "secden" secdens.append()

	tufts = new SectionList()
	forsec "tuftden" tufts.append()

	dendritic = new SectionList()
	forsec "priden" dendritic.append()
	forsec secdens dendritic.append()
	forsec tufts dendritic.append()

	somatic = new SectionList()
	soma somatic.append

	axonal = new SectionList()
	hillock axonal.append
	initialseg axonal.append

//	somden = new SectionList()
//	forsec somatic somden.append()
//	forsec dendritic somden.append()
}

proc topol() {local i  localobj s
	if (numarg() > 0) if ($1 == 0) { // do not connect secondary dendrites
	}else{ // connect all secondary dendrites to soma (no branching)
		for i =0, nsecden-1 {
			connect secden[i](0), soma(.5)
		}
	}
	connect priden(0), soma(1)
	for i =0, ntuft-1 {
		connect tuftden[i](0), priden(1)
	}

	connect hillock(0), soma(0)
	connect initialseg(0), hillock(1)
}

proc segments() {local i, dx
	/*dx = 20
	soma.nseg= 1
	priden.nseg = int(priden.L/dx)+1
	forsec tufts nseg = int(L/dx)+1
	forsec secdens nseg = int(L/dx)+1*/
	soma.nseg = 1
	priden {
		if(n3d() > 1) nseg = n3d() - 1
	}
	forsec tufts {
		if(n3d() > 1) nseg = n3d() - 1
	}
	forsec secdens {
		if(n3d() > 1) nseg = n3d() - 1
	}
	initialseg.nseg = 3
	hillock.nseg = 3
}

proc geometry() {local i
	basic_shape()
	soma { L = 25  diam = 20 }
	priden { L = 300  diam = 3 }
//	forsec tufts {rallbranch=20 L=300  diam(0:1)=.4:.4 }
	forsec tufts {L=300  diam(0:1)=.4:.4 }
	forsec secdens { L=1000  diam=2 }
	initialseg{ L=30  diam=1.5}
	hillock { L=5  diam(0:1) = soma.diam(0) : initialseg.diam(0) }
	//define_shape()
}
	
proc basic_shape() {
  soma {pt3dclear() pt3dadd(0, 0, 0, 1) pt3dadd(0, 1, 0, 1)}
  priden {pt3dclear() pt3dadd(0, 0, 0, 1) pt3dadd(0, 1, 0, 1)}
  forsec tufts {pt3dclear() pt3dadd(0, 0, 0, 1) pt3dadd(0, 1, 0, 1)}
  secden[0] {pt3dclear() pt3dadd(0, 0, 0, 1) pt3dadd(1, 0, 0, 1)}
  secden[1] {pt3dclear() pt3dadd(0, 0, 0, 1) pt3dadd(-1, 0, 0, 1)}
  hillock {pt3dclear() pt3dadd(0, 0, 0, 1) pt3dadd(0, -1, 0, 1)}
  initialseg {pt3dclear() pt3dadd(0, 0, 0, 1) pt3dadd(0, -1, 0, 1)}
}

proc memb() { local x

	totarea=0
	forall {
		insert pas
		insert nax  insert kamt insert kdrmt
		Ra=150
		for (x) {totarea=totarea+area(x)}
		cm = 0.7
		g_pas = 1/10000
		e_pas = -65
		ek = -90
		ena = 50
	}
	forsec dendritic {
		gbar_nax = 0.04
		sh_nax=10
	 	gbar_kdrmt = 0.001
		gbar_kamt = 0.004
		}

	forsec axonal {
        g_pas = 1/1000
        gbar_nax = 0.8
		sh_nax = 0
        gbar_kamt = 0.08
        gbar_kdrmt = 0.001
	}       

	forsec somatic {
        gbar_nax = 0.04
		sh_nax = 0
        gbar_kamt = 0.004
        gbar_kdrmt = 0.001
	}       

	for i=0,ntuft-1 tuftden[i] {
//		priden {
		synodor = new Exp2Syn(0.1)
		synodor.e=0
		synodor.tau1 = 20
		synodor.tau2 = 200
		synls.append(synodor)
	}
        soma {
                external_syn = new Exp2Syn(.5)
                external_syn.e=0
                external_syn.tau1 = 5
                external_syn.tau2 = 50  
       }

}

proc position() { local i
  soma for i = 0, n3d()-1 {
    pt3dchange(i, $1-x+x3d(i), $2-y+y3d(i), $3-z+z3d(i), diam3d(i))
  }
  x = $1  y = $2  z = $3
}

endtemplate Mitral