Lateral dendrodenditic inhibition in the Olfactory Bulb (David et al. 2008)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:116094
Mitral cells, the principal output neurons of the olfactory bulb, receive direct synaptic activation from primary sensory neurons. Shunting inhibitory inputs delivered by granule cell interneurons onto mitral cell lateral dendrites are believed to influence spike timing and underlie coordinated field potential oscillations. Lateral dendritic shunt conductances delayed spiking to a degree dependent on both their electrotonic distance and phase of onset. Recurrent inhibition significantly narrowed the distribution of mitral cell spike times, illustrating a tendency towards coordinated synchronous activity. This result suggests an essential role for early mechanisms of temporal coordination in olfaction. The model was adapted from Davison et al, 2003, but include additional noise mechanisms, long lateral dendrite, and specific synaptic point processes.
Reference:
1 . David F, Linster C, Cleland TA (2008) Lateral dendritic shunt inhibition can regularize mitral cell spike patterning. J Comput Neurosci 25:25-38 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network; Neuron or other electrically excitable cell;
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 L high threshold; I A; I K; I K,Ca;
Gap Junctions:
Receptor(s): GabaA; AMPA;
Gene(s):
Transmitter(s):
Simulation Environment: NEURON; MATLAB;
Model Concept(s): Temporal Pattern Generation; Synchronization; Simplified Models; Active Dendrites; Olfaction;
Implementer(s):
Search NeuronDB for information about:  Olfactory bulb main mitral cell; Olfactory bulb main interneuron granule MC cell; GabaA; AMPA; I Na,t; I L high threshold; I A; I K; I K,Ca;
/
DendroDendriticInhibition
LongDendrite
cadecay.mod *
kA.mod *
kca.mod *
kfasttab.mod *
kM.mod *
kslowtab.mod *
lcafixed.mod *
nafast.mod *
nmdanet.mod *
shuntInhib.mod *
stim2.mod
bulb.hoc
experiment_fig1.hoc
experiment_fig2ace.hoc
fig1bde.dat
fig1bde.m
fig1bde.ses
fig1fg.m
fig1fg.ses
fig2ace.m
fig2ace.ses
granule.tem
init.hoc
input.hoc
mathslib.hoc *
mitral.tem
mosinit.hoc *
parameters_fig1.hoc
parameters_fig2ace.hoc
tabchannels.dat *
tabchannels.hoc
                            
// input.hoc
// Olfactory bulb network model: define procedures to set-up input
// Andrew Davison, The Babraham Institute, 2000.

strdef odourfile,inputfile
objref odour, inputarray
objref A, X, S
odour = new Vector(nof)
inputarray = new Matrix(nmitx,nmity)

proc set_no_input() {
  for i = 0, nmitx-1 {
    for j = 0, nmity-1 {
      inputarray.x[i][j] = 0.0
      input[i][j].amp = inputarray.x[i][j]
    }
  }
}


proc add_uniform_input() { local i,j // 2 args - min and max input
  for i = 0, nmitx-1 {
    for j = 0, nmity-1 {
      inputarray.x[i][j] += random.uniform($1,$2)
      input[i][j].amp = inputarray.x[i][j]
    }
  }
}


proc add_focal_input() {  // 4 args - max input, centre coords and half-width of spot
  for i = 0, nmitx-1 {
    for j = 0, nmity-1 {
      inputarray.x[i][j] += $1*exp(-2.77259*((i-$3)*(i-$3)+(j-$2)*(j-$2))/($2*$2))
      input[i][j].amp = inputarray.x[i][j]
      //print i,j,input[i][j].amp
    }
  }
}



proc generate_odour_matrix() { local i,j,r,ix,iy,k,l,min,max
  A = new Matrix(nglom,nof) 	// A is set here and should
                		// not be changed elsewhere
  S = new Matrix(nmitx,nmity)   // X and S are local
  X = new Vector(nglom)     	// matrices

  r = random.normal(0.0,0.5)

  // Generate original matrix
  for i = 0,nglom-1 for j = 0,nof-1 {
    r = random.repick()
    if (r < 0) {r = 0}
    A.x[i][j] = r
  }

  // Average to obtain similar responses of nearby glomeruli
  blur = 2

  for j = 0,nof-1 {
    X = A.getcol(j)
    for ix = 0,nmitx-1 for iy = 0,nmity-1 {
      S.x[ix][iy] = X.x[ix*nmity+iy]
    }
    for ix = 0,nmitx-1 for iy = 0,nmity-1 {
      X.x[ix*nmity+iy] = 0
      for k = -1,1 for l = -1,1 {
        kx = mod(ix+k,nmitx)
        ly = mod(iy+l,nmity)
        X.x[ix*nmity+iy] += ( S.x[kx][ly] * exp(-blur*sqrt(k^2+l^2)) )
      }
    }
    A.setcol(j,X)
  }

  max = arraymax(A)
  min = arraymin(A)
  print "min, max ",min,max
  for i=0,nglom-1 for j=0,nof-1 {
    A.x[i][j] += -min
  }
  A.muls(1/(max-min))
}


proc read_odour_file() {
  sprint(odourfile,"odour%d",$1)
  ropen(odourfile)
  for i = 0,nof-1 {
    odour.x[i] = fscan()
  }
  ropen()
  printf("Odour %d loaded:\n",$1)
  odour.printf("%6.3f")
}

proc map_odour_to_input() { local i,j // 2 args - odour vector and odour intensity
  X = A.mulv($o1)
  for i = 0, nmitx-1 {
    for j = 0, nmity-1 {
      inputarray.x[i][j] += $2 * X.x[i*nmity+j]
      input[i][j].amp = inputarray.x[i][j]
    }
  }
}

proc add_odour_input() { // 2 args - odour number and input intensity
  generate_odour_matrix()
  read_odour_file($1)
  map_odour_to_input(odour,$2)
}

proc add_fixed_input() { local i,j // 2 args - input vector and input intensity
  sprint(inputfile,"input%d",$1)
  ropen(inputfile)
  for i = 0, nmitx-1 {
    for j = 0, nmity-1 {
      inputarray.x[i][j] = fscan()
      input[i][j].amp = $2*inputarray.x[i][j]
    }
  }
  ropen()
  printf("Input %d loaded:\n",$1)
  inputarray.printf("%6.3f")
}

proc glomshock() { local i,j // 3 args - amplitude, delay and duration
  for i = 0, nmitx-1 {
    for j = 0, nmity-1 {
      inputarray.x[i][j] = $1
      input[i][j].amp = inputarray.x[i][j]
      input[i][j].del = $2
      input[i][j].dur = $3
    }
  }
}



Loading data, please wait...