CA1 pyramidal neuron: as a 2-layer NN and subthreshold synaptic summation (Poirazi et al 2003)

 Download zip file 
Help downloading and running models
Accession:20212
We developed a CA1 pyramidal cell model calibrated with a broad spectrum of in vitro data. Using simultaneous dendritic and somatic recordings, and combining results for two different response measures (peak vs. mean EPSP), two different stimulus formats (single shock vs. 50 Hz trains), and two different spatial integration conditions (within vs. between-branch summation), we found the cell's subthreshold responses to paired inputs are best described as a sum of nonlinear subunit responses, where the subunits correspond to different dendritic branches. In addition to suggesting a new type of experiment and providing testable predictions, our model shows how conclusions regarding synaptic arithmetic can be influenced by an array of seemingly innocuous experimental design choices.
References:
1 . Poirazi P, Brannon T, Mel BW (2003) Arithmetic of subthreshold synaptic summation in a model CA1 pyramidal cell. Neuron 37:977-87 [PubMed]
2 . Poirazi P, Brannon T, Mel BW (2003) Pyramidal neuron as two-layer neural network. Neuron 37:989-99 [PubMed]
3 . Poirazi P, Brannon T, Mel BW (2003ab-sup) Online Supplement: About the Model Neuron 37 Online:1-20
4 . Polsky A, Mel BW, Schiller J (2004) Computational subunits in thin dendrites of pyramidal cells. Nat Neurosci 7:621-7 [PubMed]
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): Hippocampus CA1 pyramidal GLU cell;
Channel(s): I Na,p; I Na,t; I L high threshold; I T low threshold; I A; I K; I M; I h; I K,Ca; I Calcium;
Gap Junctions:
Receptor(s): GabaA; GabaB; NMDA; Glutamate;
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Action Potential Initiation; Activity Patterns; Dendritic Action Potentials; Active Dendrites; Influence of Dendritic Geometry; Detailed Neuronal Models; Action Potentials; Depression; Delay;
Implementer(s): Poirazi, Panayiota [poirazi at imbb.forth.gr];
Search NeuronDB for information about:  Hippocampus CA1 pyramidal GLU cell; GabaA; GabaB; NMDA; Glutamate; I Na,p; I Na,t; I L high threshold; I T low threshold; I A; I K; I M; I h; I K,Ca; I Calcium;
/
CA1_multi
lib
basic_graphics.hoc *
basic-graphics.hoc *
choose-secs.hoc *
current-balance.hoc *
cut-sections.hoc *
deduce-ratio.hoc *
find-gmax.hoc *
GABA_shiftsyn.hoc *
GABA_shiftsyn_bg.hoc *
ken.h *
map-segments-to-3d.hoc *
maxmin.hoc *
mod_func.c *
newshiftsyn.c *
newshiftsyn.exe *
num-rec.h *
salloc.hoc *
shiftsyn-init_bg.hoc *
shiftsyn-initA.hoc *
shiftsyn-initA.hoc~ *
spikecount.hoc *
tune-epsps.hoc *
vector-distance.hoc *
verbose-system.hoc *
                            
// Given a reference point (ie, soma), an apex point, and a point of
// interest, (POI), this function returns the distance from the reference point to
// the POI. These three points are vectors with x,y,z as their values
// written by Terrence Brannon, last modified by Yiota Poirazi, July 2001, poirazi@LNC.usc.edu

objref RP, POI, APEX

proc pvec() {
  printf("%s: \t", $s1)
  $o2.printf("%f ")
}

proc pvecs() {
  pvec("RP", RP)
  pvec("APEX",APEX)
  pvec("POI",POI)
}

proc clear_vecs() {
  RP=new Vector()
  APEX=new Vector()
  POI=new Vector()
}

objref vhold
vhold=new Vector()

func vector_distance() { local adjustment
//  print "func vector_distance() {"

  clear_vecs()
  
  RP=$o1.c
  APEX=$o2.c
  POI=$o3.c
  adjustment = $4

//  pvecs()

  // Subtract Psoma: Qapex = Papex - Psoma. Therefore Qsoma=0,0,0

  APEX.sub(RP)
  POI.sub(RP)
    RP.sub(RP)

//    pvecs()

  // Normalize Qapex, Creating Uapex

  vhold=APEX.c
  vhold.mul(vhold)
  APEX_BAR=sqrt(vhold.sum())

//  printf("APEX_BAR: %f\n", APEX_BAR)

  APEX.div(APEX_BAR)

//  pvec("UAPEX", APEX)

  // Find length of projection of Qdend onto Uapex

  H = POI.dot(APEX) + adjustment
  
  H=abs(H)

  return(H)
}

objref fvd_vec
strdef fvd_str
func find_vector_distance() {

  fvd_vec=new Vector()
  sprint(fvd_str, "access %s", $s1)
  execute1(fvd_str)
  
  vcreate2(fvd_vec,0)
  
  return(vector_distance(vRP,vAPEX,fvd_vec,adjustment))
}

func find_vector_distance_precise() {

  fvd_vec=new Vector()
  sprint(fvd_str, "access %s", $s1)
  execute1(fvd_str)
  
  vcreate3(fvd_vec,$2)
  
  return(vector_distance(vRP,vAPEX,fvd_vec,adjustment))
}

proc vcreate() {
  $o1.append(x3d(0))
  $o1.append(y3d(0))
  $o1.append(z3d(0))
}

proc vcreate2() {
  $o1.append(x3d($2))
  $o1.append(y3d($2))
  $o1.append(z3d($2))
}

proc vcreate3() {
  $o1.append(x_d3($2))
  $o1.append(y_d3($2))
  $o1.append(z_d3($2))
}

Loading data, please wait...