/* ----------------------------------------------------------------
    Define the Axon Geometry
    
    Layer 5 cortical pyramidal cell has a long unmyelinated axon!
    Similar to Mainen et al (Neuron, 1995)
------------------------------------------------------------------*/ 

n_myelin = 14  // number of myelins and nodes
create ais[2],hill,nakeaxon,myelin[2],node[2]  // forward declaration

proc create_axon() {

  create ais[10],hill,nakeaxon,myelin[n_myelin],node[n_myelin]
  
  // Acquire the equivalent diameter of soma
  soma {  equiv_diam = sqrt(area(0.5)*nseg/(4*PI))  }   // "*nseg" is needed !!
  if (numarg()) equiv_diam = $1
  
  // Set axonal diameters
  diamAis=equiv_diam/10
  diamNakeAxon=equiv_diam/12  
  diamMyelin=diamAis*1.
  diamNode=diamAis*0.75    // nodes are thinner than axon

  // Initial segment

hill {                                          
    L = 10                          
    nseg = 10                           
    diam(   0   :   0.25    ) =     6   :   3.8
    diam(   0.25    :   0.5 ) =     3.8 :   2.8
    diam(   0.5 :   0.75    ) =     2.8 :   1.7
    diam(   0.75    :   1   ) =     1.7 :   1.3
                                
  }                         
                
                            
for i=0,9 ais[i] {                 
    L = 5
    nseg = 10
    diam = 1.22
  }

/* diameters in the original Hu-model
ais[0]  {                       
    diam(   0   :   1   ) =     1.7 :   1.5
    }                       
                            
ais[1]  {                       
    diam(   0   :   1   ) =     1.5 :   1.22
    }         
*/

/* MM: changed diameters of ais[0] and ais[1] to avoid the discontinuity at the hill-ais boundary */

ais[0]  {  
    diam(   0   :   1   ) =     1.3 :   1.22
    }
    
    
  // Unmylined axon
  nakeaxon {                
    L = 400
    nseg = 100
    diam = diamNakeAxon
  }

  // Myelinated axon with nodes of Ranvier
  for i=0,n_myelin-1 {
    myelin[i] {         // myelin element
      nseg = 5
      L = 100
      diam = diamMyelin    
    }
    node[i] {           // nodes of Ranvier
      nseg = 1
      L = 1           
      diam = diamNode     
    }
  }

  // Connecting
  
  soma connect hill(0), axonOnSoma       // dend11 -> soma(0) -> soma(1) -> hill
  hill connect ais[0] (0), 1      // hill -> ais[0]
  for i=0,8 ais[i] {              // ais[0] -> ... -> ais[9]
    connect ais[i+1] (0), 1
  }
  ais[9] connect nakeaxon(0), 1        // ais[9] -> nakeaxon
  nakeaxon connect myelin[0] (0), 1    // nakeaxon -> myelin[0]
  myelin[0] connect node[0](0), 1            // myelin[0] -> node[0]
  for i=1,n_myelin-1  {                    // (myelin[0] node[0]) -> ... -> (myelin[n_myelin] node[n_myelin]) 
      node[i-1] connect myelin[i](0), 1 
      myelin[i] connect node[i](0), 1
  }

}