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
datastore
pars
plots
poirazi-nmda-car
tests
validation-plots
README.txt
ampa_forti.mod
cacum.mod
cad.mod *
cagk.mod
cal.mod
calH.mod
car.mod
car_mag.mod
cat.mod
d3.mod *
h.mod
hha_old.mod
hha2.mod
kadist.mod
kaprox.mod
kca.mod
km.mod
nap.mod
nmda_andr.mod
somacar.mod
binaverages.m
bpap-cell.hoc
bpap-data.hoc
bpap-dendburst.hoc
bpap-graphics.hoc
bpap-gui.hoc
bpap-gui.ses
bpap-pars.hoc
bpap-record.hoc
bpap-run.hoc
bpap-scaling.hoc
bpap-sims.hoc
bpap-sims-cell1.hoc
bpap-sims-cell2.hoc
bpap-sims-scaling.hoc
bpap-somainj.hoc
bpap-spiketrain.hoc
ca1_mrg_cell1.hoc
ca1_mrg_cell2.hoc
ca1_poirazi.hoc
ChannelBlocker.hoc
CrossingFinder.hoc
epspsizes.hoc
figure-example.R
figures.R
figures-common.R
FileUtils.hoc
FormatFile.hoc
ghk.inc
GraphUtils.hoc
Integrator.hoc
Makefile
mosinit.hoc
NmdaAmpaSpineSynStim.hoc
NmdaAmpaSynStim.hoc
ObjectClass.hoc
plotscalingresults_pergroup1.m
plotscalingresults5.m
PointProcessDistributor.hoc
ReferenceAxis.hoc
removezeros.m
RPlot.hoc
scaling_plots.m
Segment.hoc
SimpleSpine.hoc
Spine.hoc
TreePlot.hoc
TreePlotArray.hoc
triexpsyn.inc
units.inc
utils.hoc
validate-bpap.hoc
VarList.hoc
VCaGraph.hoc
                            
if (name_declared("pkgversions") != 4 ) {  execute("strdef pkgversions") }
sprint(pkgversions,"%sbpap-record = $Revision: 1.25 $, ",pkgversions)

load_file("nrngui.hoc")
load_file("FormatFile.hoc")
load_file("bpap-cell.hoc")
load_file("bpap-data.hoc")

//
// Recordngs
//

// Remove all recordings from list of vectors
proc record_remove() { local i
    for i=0,$o1.count() - 1 {
        if (cvode_active()) {
            cvode.record_remove($o1.object(i))
        } 
    }
}    

// Voltage from segments of dendritic tree
objref vtree, tsyn            // List of membrane potential at synapses
proc record_vtree() {
    vtree = new List()
    tsyn = new List()
    for i= 0, segreflist.srl.count() - 1 {
        vtree.append(new Vector())
        tsyn.append(new Vector())
        segreflist.srl.object(i).secref.sec cvode.record(&v(segreflist.srl.object(i).x),vtree.object(i),tsyn.object(i)) 
    }
}

// Voltage from segments of dendritic tree
objref catree, ttree            // List of membrane potential at synapses
proc record_catree() {
    catree = new List()
    ttree  = new List()
    for i= 0, segreflist.srl.count() - 1 {
        catree.append(new Vector())
        ttree.append(new Vector())
        segreflist.srl.object(i).secref.sec cvode.record(&cai(segreflist.srl.object(i).x),catree.object(i),ttree.object(i)) 
    }
}

// Voltage from the soma
objref vsoma, tsoma
proc record_vsoma() {
    vsoma = new Vector()
    tsoma = new Vector()
    cvode.record(&v(0), vsoma, tsoma)
}

// Calcium concentration in spine heads
objref casyn, scall_inputs
proc record_casyn() {
    casyn = new List()
    for i=0,scall_inputs.count()-1 {
        casyn.append(new Vector())
        scall_inputs.object(i).spine.head casyn.object(i).record(&cai(0.5))
    }
}

// Voltage at spine head
objref vsyn
proc record_vsyn() { localobj inputs
    vsyn = new List()
    for i=0, scall_inputs.count()-1 {
        vsyn.append(new Vector())
        scall_inputs.object(i).spine.head vsyn.object(i).record(&v(0.5))
    }
}

// Calcium current in spine head
objref icasyn
proc record_icasyn() { localobj inputs
    inputs = $o1
    icasyn = new List()
    for i=0, inputs.count()-1 {
        icasyn.append(new Vector())
        inputs.object(i).spine.head icasyn.object(i).record(&ica(0.5))
    }
}

// Calcium current through NMDA receptors. 
// The argument inputs is a list of SpineSynStim objects
objref ica_nmdasyn
proc record_ica_nmdasyn() { localobj inputs
    inputs = $o1
    ica_nmdasyn = new List()
    for i=0, inputs.count()-1 {
        ica_nmdasyn.append(new Vector())
        ica_nmdasyn.object(i).record(&inputs.object(i).nmdasyn.ica)
    }
}

// Calcium current through AMPA receptors. 
// The argument inputs is a list of SpineSynStim objects
objref ica_ampasyn
proc record_ica_ampasyn() { localobj inputs
    inputs = $o1
    ica_ampasyn = new List()
    for i= 0, inputs.count()-1 {
        ica_ampasyn.append(new Vector())
        ica_ampasyn.object(i).record(&inputs.object(i).ampasyn.ica)
    }
}

// record_apcount_soma()
// set up a recording of the action potential count in the soma
objref record_apc
proc record_apcount_soma() {
    record_apc = new APCount(0.5)
}

// Record time of presynaptic spikes
objref tprespike            // List of times of presynaptic spikes
tprespike = new List()

// record_tprespike()
// Set up a recording of the presynaptic spike times
proc record_tprespike() {
    tprespike = new List()
    // Ulp!!  need to know where the synapses are...
    // ... oh no we don't, never mind
    for i= 0,scall_inputs.count()-1  {
        tprespike.append(new Vector())
        scall_inputs.object(i).netcon.record(tprespike.object(i))
    }
    //    datalist.appendMatrix("tprespike",tprespikes)    
}