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]
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 cell; Olfactory bulb main interneuron granule MC 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 cell; Olfactory bulb main interneuron granule MC 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 *
                            
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

Loading data, please wait...