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]
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 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 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 *
                            
// set the pointers for AMPA, NMDA, GABA_A or GABA_B synapses
// to a defined location

econ.xopen_library("Terrence","find-gmax")

proc salloc() { local nmdaR
// $o1 and $o2 are the first 2 arguments to this function
// They should be an AMPA and NMDA synapse or a
// GABA_A and GABA_B synapse

// .loc() places them at a normalized and segment-resolved position [0..1] 
// along the section	 

  $o1.loc($3)
  $o2.loc($3)

// here we call a library function to figure out the maximum AMPA
// conductance which should be used at this synapse based on synapse
// tunings calculated from a previously run tuning experiments

// this number will be anywhere from 0.5nS to 5nS depending on what
// was required to generate a 5mV local depolarization
  $o1.gmax = find_gmax($3) 

// next we decide what the NMDA-AMPA gmax ratio should be --- ie,
// a Mainen-Sejnowski article suggested that maximum NMDA should be
// (0.6)*gbar_AMPA. 

  nmdaR = deduce_ratio()

// Assuming (and expecting and hoping!) that the first object passed in
// was an AMPA synapse and the second object passed in was an NMDA
// synapse, then the NMDA synapses' gbar_NMDA is now changed by a factor
// of nmdaR

  $o2.gmax=$o1.gmax*nmdaR
//  printf("ampa: %g nmda: %g * %g\n", $o1.gmax, $o1.gmax, nmdaR)
}

// This is a variation of the above designed to work with
// GABA syns as well as AMPA syns.

// It is a work in progress.
proc SALLOC() { local ratio, ampa_flag
        ampa_flag=0
        ampa_flag=$4
  $o1.loc($3)
  $o2.loc($3)
        if (ampa_flag) {
                $o1.gmax=find_gmax($3) 
                nmdaR=deduce_ratio()
                $o2.gmax=$o1.gmax*nmdaR
//                printf("ampa: %g nmda: %g * %g\n", $o1.gmax, $o1.gmax, nmdaR)
        } else {
                $o1.gmax=GABA_AMPA_RATIO*find_gmax($3) 
                nmdaR=deduce_ratio()
                $o2.gmax=GABAB_GABAA_RATIO*$o1.gmax
//                printf("gabaa: %g gabab: %g * %g\n", $o1.gmax, $o1.gmax, GABAB_GABAA_RATIO)
        }
}


// same for GABAa synapses

proc SALLOC_GABAa() { local flag
        flag=0
        flag=$3
        $o1.loc($2)

        if (flag){  
            $o1.gmax=GABA_AMPA_RATIO*find_gmax($2) // as a function of ampa conductance 
        } else {
            $o1.gmax = $4
        }
//        printf("gabaa: %g\n", $o1.gmax)
        
}

// same for GABAb synapses

proc SALLOC_GABAb() { local flag
        flag=0
        flag=$3
        $o1.loc($2)

        if (flag){  
            $o1.gmax=GABAb_GABAa_RATIO*(GABA_AMPA_RATIO*find_gmax($2)) // as a function of ampa conductance 
        } else {
            $o1.gmax = $4
        }
//        printf("gabab: %g\n", $o1.gmax)
        
}

// display synaptic locations on a graph

proc salloc2() {
/*
  $o1.loc($3)
  $o2.loc($3)
  $o1.gmax=find_gmax($3) 
  $o2.gmax=$o1.gmax*deduce_ratio()
  print $o1, $o1.gmax
  print $o2, $o2.gmax
*/
  salloc($o1,$o2,$3)    
  if ($4) {
    $o5.point_mark($o1,$6)
  }
}


Loading data, please wait...