CA1 pyramidal neuron: synaptically-induced bAP predicts synapse location (Sterratt et al. 2012)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:144490
This is an adaptation of Poirazi et al.'s (2003) CA1 model that is used to measure BAP-induced voltage and calcium signals in spines after simulated Schaffer collateral synapse stimulation. In the model, the peak calcium concentration is highly correlated with soma-synapse distance under a number of physiologically-realistic suprathreshold stimulation regimes and for a range of dendritic morphologies. There are also simulations demonstrating that peak calcium can be used to set up a synaptic democracy in a homeostatic manner, whereby synapses regulate their synaptic strength on the basis of the difference between peak calcium and a uniform target value.
Reference:
1 . Sterratt DC, Groen MR, Meredith RM, van Ooyen A (2012) Spine calcium transients induced by synaptically-evoked action potentials can predict synapse location and establish synaptic democracy. PLoS Comput Biol 8:e1002545 [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): Hippocampus CA1 pyramidal GLU cell;
Channel(s): I Na,t; I L high threshold; I T low threshold; I A; I K; I M; I Mixed; I R; I_AHP;
Gap Junctions:
Receptor(s): AMPA; NMDA;
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Dendritic Action Potentials; Synaptic Plasticity;
Implementer(s): Sterratt, David ; Groen, Martine R [martine.groen at gmail.com];
Search NeuronDB for information about:  Hippocampus CA1 pyramidal GLU cell; AMPA; NMDA; I Na,t; I L high threshold; I T low threshold; I A; I K; I M; I Mixed; I R; I_AHP;
/
bpap
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 *
newshiftsyn.exe *
num-rec.h *
salloc.hoc *
shiftsyn-init_bg.hoc *
shiftsyn-initA.hoc *
spikecount.hoc *
tune-epsps.hoc *
vector-distance.hoc *
verbose-system.hoc *
                            
// This function is used to calculate the AMPA coductance values 
// such that a single pulse stimulus gives rise to a 5mV local depolarization 
// at every synapse location along the cell (each synapse has both an AMPA and an NMDA mechanism).
// AMPA values for each location tested, along the sections tested are saved in the tune_epsp_list
// written by Terrence Brannon, last modified by Yiota Poirazi, July 2001, poirazi@LNC.usc.edu

strdef fast_file
strdef sec_str, recstr, tuning_code
objref epsp_glu, epsp_nmda, vmvec, epsp_ic, tmpvec

proc tune_epsp_fast () { 
//  printf("proc tune_epsp_fast (%s.v(%g))\n", secname(), $2)

  R = $2                 //  synapse location
  epsp_glu  = new GLU(R)
  epsp_nmda = new NMDA(R)
  tuned = 0             //  initial values before tuning
  old_GMAX = 0
 
  while (!tuned) {

   epsp_glu.gmax  = GMAX     // previously calculated maximum AMPA conductance
   epsp_nmda.gmax = GMAX*NMDA_AMPA_RATIO  // maximum NMDA conductance 

   fakecell {                            // single shock current injection to a fake cell
     epsp_ic = new IClamp(0.5)           
     epsp_ic.amp = 1
     epsp_ic.dur = 1
     epsp_ic.del = 0.1*tstop
   }

   setpointer epsp_glu.pre,  epsp_ic.i
   setpointer epsp_nmda.pre, epsp_ic.i

   tmpvec = new Vector(tstop/dt)
   sprint(recstr, "tmpvec.record(&%s.v(%g))", secname(), R) // record depolarization at synapse
   execute1(recstr)
   init()
   run()

   vmvec = tmpvec.c
   // test if resulting depolarization is closed to the desired value (5mV)

   if (epsilon_equal(vmvec.max(),desired_voltage,$3)) {
     tuned = 1  // if yes, stop         
     printf("\t\tTUNED.\n")

   } else {     // if no, update the GMAX value and test again

     diffa = desired_voltage-BASELINE
     diffb = vmvec.max()-BASELINE
     ratio = diffa/diffb
     GMAX = GMAX*ratio

     print "\t\tnew GMAX: ", GMAX
 }
 }

 sprint(tuning_code,"%s tune_epsp_list.append(new EPSPTuning(\"%s\",%f,%f,1))", secname(), secname(), x, GMAX)
 $o4.printf("%s\n", tuning_code)

}

// test if difference between desired and actual voltage is smaller than epsilon

func epsilon_equal() {
  printf("epsilon_equal(%f,%f,%f)\n", $1,$2,$3)
  diff = ($1-$2)
  if (abs(diff) < $3) {
    return(1)
  } else {
    return(0)
  }
}