A two-layer biophysical olfactory bulb model of cholinergic neuromodulation (Li and Cleland 2013)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:149739
This is a two-layer biophysical olfactory bulb (OB) network model to study cholinergic neuromodulation. Simulations show that nicotinic receptor activation sharpens mitral cell receptive field, while muscarinic receptor activation enhances network synchrony and gamma oscillations. This general model suggests that the roles of nicotinic and muscarinic receptors in OB are both distinct and complementary to one another, together regulating the effects of ascending cholinergic inputs on olfactory bulb transformations.
Reference:
1 . Li G, Cleland TA (2013) A two-layer biophysical model of cholinergic neuromodulation in olfactory bulb. J Neurosci 33:3037-58 [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 periglomerular GABA cell; Olfactory bulb main interneuron granule MC GABA cell;
Channel(s): I Na,p; I L high threshold; I T low threshold; I A; I M; I h; I K,Ca; I CAN; I Sodium; I Calcium; I Potassium; I_Ks; I Cl, leak; I Ca,p;
Gap Junctions:
Receptor(s): Nicotinic; GabaA; Muscarinic; AMPA; NMDA;
Gene(s):
Transmitter(s): Acetylcholine;
Simulation Environment: NEURON; MATLAB;
Model Concept(s): Sensory processing; Sensory coding; Neuromodulation; Olfaction;
Implementer(s): Li, Guoshi [guoshi_li at med.unc.edu];
Search NeuronDB for information about:  Olfactory bulb main mitral GLU cell; Olfactory bulb main interneuron periglomerular GABA cell; Olfactory bulb main interneuron granule MC GABA cell; Nicotinic; GabaA; Muscarinic; AMPA; NMDA; I Na,p; I L high threshold; I T low threshold; I A; I M; I h; I K,Ca; I CAN; I Sodium; I Calcium; I Potassium; I_Ks; I Cl, leak; I Ca,p; Acetylcholine;
/
ACh_ModelDB
data
Input
Readme.txt
cadecay.mod *
cadecay2.mod *
Caint.mod *
Can.mod *
CaPN.mod *
CaT.mod *
GradeAMPA.mod *
GradeGABA.mod *
GradNMDA.mod *
hpg.mod *
kAmt.mod *
KCa.mod *
KDRmt.mod *
kfasttab.mod *
kM.mod *
KS.mod *
kslowtab.mod *
LCa.mod *
nafast.mod *
NaP.mod *
Naxn.mod *
Nicotin.mod *
nmdanet.mod *
OdorInput.mod *
Background.hoc
Connect.hoc
GC_def.hoc
GC_save.hoc *
GC_Stim.hoc
Input.hoc
MC_def.hoc
MC_save.hoc
MC_Stim.hoc
mod_func.c
mosinit.hoc
nrniv.exe.stackdump
OB.hoc
Parameter.hoc
PG_def.hoc
PG_save.hoc *
PG_Stim.hoc
SaveData.hoc
tabchannels.dat *
tabchannels.hoc
                            
//======================================================================
//               Specify Network Connectivity
//======================================================================

strdef outfilepath, filename
outfilepath = "Connection/"

objref outfile, outfile1, outfile2
outfile   = new File()
outfile1  = new File()
outfile2  = new File()

  for k = 0, nGran-1 {
		sprint(filename, "%sGC%d",outfilepath, k)
		outfile2.wopen(filename)
		outfile2.printf("This GC connects to the following MCs\n")
		outfile2.close()
   }

objref ru, rn
ru = new Random(seedU)
rn = new Random(seedN)

null = ru.uniform(0, 1)

if (NICOTIN == 0) { 
    gnic_MC = 0.0e-3  // 
    gnic_PG = 0.0e-3  
   } else {
    gnic_MC = 1.0e-3   // Maximal density of the nicotinc current in MC, in mS/cm2
    gnic_PG = 15.0e-3  // Maximal density of the nicotinc current in PG, in mS/cm2 
   }
   
   
//================== Creat cells ================================
objref mit[nMit], pg[nPG], gran[nGran]
// MC
for i = 0, nMit-1 {    
	  seed = i
      mit[i] = new Mitral(gnic_MC)
}

// PG
for i = 0, nPG-1 {
      pg[i] = new PGcell(gnic_PG)
}

// GC
if (NTCE==0) {
    for i = 0, nGran-1 {
      gran[i] = new Granule(MUSCARIN)
    }
}

//=========================================================================
//              Connection between MCs and  PGs
//=========================================================================
objref m2pAMPA[nMit], m2pNMDA[nMit], p2m[nMit]

for i=0, nMit-1 {
    // AMPA synapses
	AMPAgmax = Wm2p*AMPAgmaxPG
    pg[i].gemmbody m2pAMPA[i] = new gradAMPA(0.5)	
	setpointer    m2pAMPA[i].vpre, mit[i].tuft.v(0.5) 
	m2pAMPA[i].gmax  = AMPAgmax  
    m2pAMPA[i].alpha = AMPAalpha 
    m2pAMPA[i].beta  = AMPAbeta  	
    m2pAMPA[i].thetasyn = AMPAact
	m2pAMPA[i].sigma = AMPAsigma
    m2pAMPA[i].e = AMPArev 
    
    // NMDA synapses
	NMDAgmax = Wm2p*NMDAgmaxPG 
    pg[i].gemmbody m2pNMDA[i] = new gradNMDA(0.5)	
	setpointer    m2pNMDA[i].vpre, mit[i].tuft.v(0.5) 
	m2pNMDA[i].gmax  = NMDAgmax  
    m2pNMDA[i].alpha = NMDAalpha 
    m2pNMDA[i].beta  = NMDAbeta  	
    m2pNMDA[i].thetasyn = NMDAact
	m2pNMDA[i].sigma = NMDAsigma
    m2pNMDA[i].e = NMDArev 	
	
	// GABAA synapses
	GABAAgmax = Wp2m*GABAAgmaxPG
    mit[i].tuft p2m[i] = new gradGABA(0.5)	
	setpointer     p2m[i].vpre, pg[i].gemmbody.v(0.5) 
	p2m[i].gmax  = GABAAgmax  
    p2m[i].alpha = GABAAalpha 
    p2m[i].beta  = GABAAbeta  	
    p2m[i].thetasyn = GABAAact
	p2m[i].sigma = GABAAsigma
    p2m[i].e = GABAArev 

}



//========================================================================
//              Connection between MCs and GCs
//========================================================================
 
 objref NC
 NC = new Vector()

 objref m2gAMPA[nMit][nGran], m2gNMDA[nMit][nGran], g2m[nMit][nGran]

 null = ru.uniform(0, 1)

 outfile.wopen("Connection/MC2GC")
 outfile1.wopen("Connection/Ngc")  // File to store the number of GC inputs to each MC

if (NTCE==0) { 
 
 for i=0, nMit-1 {
    
	count = 0
	Z = 0          // for the pointer 
	
	outfile.printf("From the MC cell%d:\n", i)	
	
    for k = 0, nGran-1 {
	   
		Pr = ru.repick()
		if (Pr<= P) {
		
		d = ru.repick()*LL  // The point of inhibitory synapitc contact
                            // on MC lateral dend is randomly decided (varied from 0 to 500 um)
		
		sprint(filename, "%sGC%d",outfilepath, k)
		outfile2.aopen(filename)
		outfile2.printf("MC%d\n", i)
		outfile2.printf("%f\n",d)
		outfile2.close()
        		
		// AMPA synapses
		AMPAgmax = Wm2g*AMPAgmaxGC
        gran[k].gemmbody m2gAMPA[i][Z] = new gradAMPA(0.5)	
	    setpointer    m2gAMPA[i][Z].vpre, mit[i].dend.v(d/LL) 
	    m2gAMPA[i][Z].gmax  = AMPAgmax  
        m2gAMPA[i][Z].alpha = AMPAalpha 
        m2gAMPA[i][Z].beta  = AMPAbeta  	
        m2gAMPA[i][Z].thetasyn = AMPAact
	    m2gAMPA[i][Z].sigma = AMPAsigma
        m2gAMPA[i][Z].e = AMPArev
	
        // NMDA synapses
 		NMDAgmax = Wm2g*NMDAgmaxGC       
		gran[k].gemmbody m2gNMDA[i][Z] = new gradNMDA(0.5)	
	    setpointer    m2gNMDA[i][Z].vpre, mit[i].dend.v(d/LL) 
        m2gNMDA[i][Z].gmax  = NMDAgmax   
        m2gNMDA[i][Z].alpha = NMDAalpha
        m2gNMDA[i][Z].beta  = NMDAbeta	
        m2gNMDA[i][Z].thetasyn = NMDAact
	    m2gNMDA[i][Z].sigma = NMDAsigma
        m2gNMDA[i][Z].e = NMDArev	
		
		// Graded inhibtion
        GABAAgmax = Wg2m*GABAAgmaxGC
		mit[i].dend g2m[i][Z] = new gradGABA(d/LL)	
	    setpointer  g2m[i][Z].vpre, gran[k].gemmbody.v(0.5)
        g2m[i][Z].gmax  = GABAAgmax   
        g2m[i][Z].alpha = GABAAalpha
        g2m[i][Z].beta  = GABAAbeta
        g2m[i][Z].thetasyn = GABAAact
	    g2m[i][Z].sigma = GABAAsigma
        g2m[i][Z].e = GABAArev
		
		Z = Z + 1
        count = count + 1	
		outfile.printf("GC%d; ", k)
		
		if ( count/5-int(count/5) == 0){
		   outfile.printf("\n")
		}
		//outfile.aopen("Connection/MC2GC")
    
      }
    
    }
	NC.append(count)
	outfile.printf("\n%d\n\n", count)
	outfile1.printf("%d\n", count)
	//outfile.close()	 
 }
  	
 outfile.close()
 outfile1.close()  
 
 Ntotal = NC.sum()
 print "\nTotal number of MC-GC projection is\n"
 print Ntotal	 

 print "\nThe average number of GC inputs per MC is\n"
 print Ntotal/nMit
 print "\nThe average number of MC inputs per GC is\n"
 print Ntotal/nGran
 print "\n"	 

}