Spike Initiation in Neocortical Pyramidal Neurons (Mainen et al 1995)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:8210
This model reproduces figure 3A from the paper Mainen ZF, Joerges J, Huguenard JR, Sejnowski TJ (1995). Please see the paper for detail whose full text is available at http://www.cnl.salk.edu/~zach/methods.html Email Zach Mainen for questions: mainen@cshl.org
Reference:
1 . Mainen ZF, Joerges J, Huguenard JR, Sejnowski TJ (1995) A model of spike initiation in neocortical pyramidal neurons. Neuron 15:1427-39 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell;
Brain Region(s)/Organism:
Cell Type(s): Myelinated neuron;
Channel(s): I Na,p; I K;
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Action Potential Initiation; Dendritic Action Potentials; Active Dendrites; Influence of Dendritic Geometry; Detailed Neuronal Models; Axonal Action Potentials;
Implementer(s): Mainen, Zach [Mainen at cshl.edu];
Search NeuronDB for information about:  I Na,p; I K;

// --------------------------------------------------------------
// Select which dendrites get na/kd channels
// --------------------------------------------------------------

n_axon_seg = 5
// n_axon_seg = 25
create myelin[n_axon_seg],node[n_axon_seg]

objectvar active, apical, basal, distal, dend, axon

soma distance()

dend = new SectionList()
forsec "dend" dend.append()

// distal dendrites
distal = new SectionList()
forsec "dend9" if (distance(0) > 550) distal.append()

// apical
apical = new SectionList()
forsec "dend9" apical.append()

// basal dendrites
basal = new SectionList()
forsec "dend" basal.append()
forsec apical basal.remove()

axon = new SectionList()
hill axon.append()
iseg axon.append()
forsec "myelin" axon.append()
forsec "node" axon.append()

// active sections
active = new SectionList()
forall active.append()
forsec "myelin" active.remove()



// --------------------------------------------------------------
// Other geometry-specific locations
// --------------------------------------------------------------

objref dsite
dend9[76] dsite = new SectionRef()
site_loc = 0.5  // distance = 416 um

// synapses

objref synloc
synloc = new SectionList()
forsec distal synloc.append()


  // along ap
objref path
path = new SectionList()

dend9[76] path.append()
dend9[72] path.append()
dend9[68] path.append()
dend9[62] path.append()
dend9[56] path.append()
dend9[50] path.append()
dend9[48] path.append()
dend9[38] path.append()
dend9[30] path.append()
dend9[24] path.append()
dend9[8] path.append()
dend9[0] path.append()


// oblique
objref oblique
oblique = new SectionList()
forsec apical oblique.append()
forsec distal oblique.remove()
forsec path oblique.remove()

      
// --------------------------------------------------------------
// correct diameter of apical
// --------------------------------------------------------------


double x[199],y[199],z[199],d[199]
proc diam_interp() {  local d0,d1

  d0 = $1
  d1 = $2
  
  for i=0,n3d()-1 {
    x[i]=x3d(i)  y[i]=y3d(i)  z[i]=z3d(i)  
  }
  if (numarg() > 2) {
    n = $3
  } else {
    n = n3d()
  }
  max = n3d()		      
  pt3dclear()
  for i=0,n-1 {
    pt3dadd(x[i],y[i],z[i],i/n*d1+(1-i/n)*d0)
  }
  for i=n,max-1 {
    pt3dadd(x[i],y[i],z[i],i/n*d1+(1-i/n)*d0)
  }
}

proc shrink() {  local factor

  factor = $1

  n = n3d()		        
  for i=0,n-1 {
    x[i]=x3d(i)  y[i]=y3d(i)  z[i]=z3d(i)  d[i]=diam3d(i)
  }

  pt3dclear()
  for i=0,n-1 {
    pt3dadd(x[i]*factor,y[i]*factor,z[i]*factor,d[i]*factor)
  }
}

// --------------------------------------------------------------
// discretization
// --------------------------------------------------------------

max_len_dend = 50
forsec dend {
    n = L / max_len_dend
    if (n < 1) n = 1
    nseg = n+1
}

// give more segments to path

max_len_path = 10
forsec path {
    n = L / max_len_path
    if (n < 1) n = 1
    nseg = n+1
}


      
// --------------------------------------------------------------
// Axon geometry
// --------------------------------------------------------------

  // hillock
  // hillock is only a few microns long (2-4) and tapered diam from 4 to 1-2 um
  // then initial segment follows, can be 100-150 um long with diam of ~ 1 um
  // myelin starts after initial segment

  // initial segment
  // Farinas & DeFelipe J Comp Neurol 1991: 
  //                L                 diam
  // cocallosal     21.6 +- 4.10      1.06 +- 0.18
  // ispsilateral   22.24 +- 1.58     1.06 +- 0.12

  hill { 		
    L = 10
    nseg = 10
    diam(0:1) = 4:1     // taper
  }

  iseg {		// initial segment between hillock + myelin
     L = 15
     nseg = 10
//     for(x) diam(x) = 3.5*exp(-(x*L+hill.L)/5)+.5
     diam = 1
  }

  // construct myelinated axon with nodes of ranvier
  for i=0,n_axon_seg-1 {
    myelin[i] {		// myelin element
      nseg = 25
      L = 100
      diam = 1.5	  
    }
    node[i] {		// nodes of Ranvier
      nseg = 1
      L = 1.0		
      diam = 1.0	// nodes are thinner than axon
    }
  }


  iseg connect myelin[0](0), 1
  myelin[0] connect node[0](0), 1

  for i=0,n_axon_seg-2  { 
      node[i] connect myelin[i+1](0), 1 
      myelin[i+1] connect node[i+1](0), 1
  }

access soma


      
// --------------------------------------------------------------
// Spines
// --------------------------------------------------------------


fold_spines = 0
spine_area = 0.83 // um^2  -- Harris

// spines per linear um
// Larkman (1991) JCN
sd_apical = 6.3
sd_oblique = 1.5
sd_basal = 1.43
sd_distal = 0.91

proc add_spines() { local a
  spine_dens = $2
  forsec $o1 {
    a =0
    for(x) a=a+area(x)

    if (fold_spines) {
      // Folding factor
      // Jack et al (1989), Marjor et al (1994)
      F = (L*spine_area*spine_dens + a)/a

      L = L * F^(2/3)
      for(x) diam(x) = diam(x) * F^(1/3)
    } else {
      F = 1 + L*spine_area*spine_dens/a
      cm = c_m * F
      g_pas = F/rm
    }
  }
}