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 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-graphics = $Revision: 1.7 $, ",pkgversions)

load_file("VCaGraph.hoc")

// The code in this file is a hotchpotch of code, dating from a time
// when I (DCS) was trying to get the interface to do exciting 
// point-and-click things and clean up the code by abstracting into objects.
// It hasn't quite happened yet...


// This object links up a ShapePlot with a VCaGraph, which contains plots
// of the voltage, calcium concentration, calcium currents and NMDA
// block values from a spine head
begintemplate ShapeActionHandler

public record_syn, handle_action, vcag, mark_synapses
objref sh                               // A shape plot 
objref vcag                             // VCaGraph
objref sf                               // Auxilliary things
strdef s1, s2                           // Auxilliary things

// ShapeActionHandler(ShapePlot sh)
// Initialise with a a ShapePlot
proc init() {
    sf = new StringFunctions()
    vcag = new VCaGraph(920, 0, 180, 720)
    sh = $o1
    colbase = 2                         
    col = colbase
    // Set action for when ShapePlot is clicked on
    sh.action("handle_action()")
}

// handle_action()
// The action to perform when the ShapePlot is clicked on 
proc handle_action() {
    print secname()
    print (hoc_ac_)
}

// record_syn(NmdaAmpaSpineSynStim syn)
// Add features of the synapse syn to the VCaGraph
func record_syn() {
    vcag.addvar($o1, col, 1)
    sh.point_mark($o1.ampasyn, col)
    col = col + 1
    return col - 1
}

// mark_synapses(standard_inputs, rec_inputs)
// Mark standard_inputs with grey circles and rec_inputs with the coloured
// synapses
proc mark_synapses() { local i
    sh.point_mark_remove()
    // Mark normal synapses
    for i = 0, $o1.count() - 1 {
        sh.point_mark($o1.object(i).ampasyn, 9) 
    }
    // Mark coloured synapses
    for i = 0, $o2.count() - 1 {
        sh.point_mark($o2.object(i).ampasyn, colbase + i)
    }
    sh.flush()
}

endtemplate ShapeActionHandler

objref basemark, apexmark
objref sah

// graphics_lineup_shapeplot()
// This twists the plot of the neuron around so that it is pointing in 
// the correct position and adds a scalebar
proc graphics_lineup_shapeplot() { localobj aold
    // It seemst to be necessary to run doNotify() here
    doNotify()
    aold = new Vector(2)
    apex.secref.sec aold.x[0] =  x3d(apex.x) 
    apex.secref.sec aold.x[1] =  y3d(apex.x)
    base.secref.sec aold.x[0] =  aold.x[0]-x3d(base.x)
    base.secref.sec aold.x[1] =  aold.x[1]-y3d(base.x)
    // atan2(y,x). In our case we want angle to y-axis (not x-axis) so
    // we want atan2 (-x,y)
    theta = atan2(-aold.x[0],aold.x[1])
    print theta
    // Start from x-y plane
    Shape[0].rotate()
    
    // The rotate
    Shape[0].rotate(0,0,0,0,0,theta)
    
    // Scale bar 100um long
    Shape[0].beginline()
    Shape[0].line(100,200,50)
    Shape[0].line(100,100,50)
    Shape[0].flush()
    sah = new ShapeActionHandler(Shape[0])
}

// graphics_mark_synapses()
// Convenience function 
proc graphics_mark_synapses() {
    sah.mark_synapses(scall_inputs, screc_inputs)
}

proc graphics_mark_screc_synapses() { localobj l
    l = new List()
    sah.mark_synapses(l, screc_inputs)
}


// graphics_add_synrecs()
// Set up recordings to be displayed graphically from the special,
// coloured synapses, which are defined in screc_inputs
// Also prints a copy of the cell to neuron.eps - this should probably change

proc graphics_add_synrecs() {  local i localobj ppm
    
    for i = 0, screc_inputs.count() -1 {
        sah.record_syn(screc_inputs.object(i))
    }
    
    ppm = new PointProcessMark(0.5)
    Shape[0].unmap()
    Shape[0].point_mark(ppm,1)
    Shape[0].view(-180, 200, 280, 30, 1150, 0, 400, 600)
    Shape[0].show(0)
    Shape[0].printfile("neuron.eps")
    Shape[0].unmap()
    
    // FIXME: These are hacks to get rid of unwanted plots created by the 
    // Poirazi code
    Shape[1].unmap()
    Shape[2].unmap()
}

Loading data, please wait...