CA1 pyramidal neuron: nonlinear a5-GABAAR controls synaptic NMDAR activation (Schulz et al 2018)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:258867
The study shows that IPSCs mediated by a5-subunit containing GABAA receptors are strongly outward-rectifying generating 4-fold larger conductances above -50?mV than at rest. Experiments and modeling show that synaptic activation of these receptors can very effectively control voltage-dependent NMDA-receptor activation in a spatiotemporally controlled manner in fine dendrites of CA1 pyramidal cells. The files contain the NEURON code for Fig.8, Fig.S8 and Fig.S9 of the paper. The model is based on the model published by Bloss et al., 2017. Physiological properties of GABA synapses were modified as determined by optogenetic activation of inputs during voltage-clamp recordings in Schulz et al. 2018. Other changes include stochastic synaptic release and short-term synaptic plasticity. All changes of mechanisms and parameters are detailed in the Methods of the paper. Simulation can be run by starting start_simulation.hoc after running mknrndll. The files that model the individual figures have to be uncommented in start_simulation.hoc beforehand.
Reference:
1 . Schulz JM, Knoflach F, Hernandez MC, Bischofberger J (2018) Dendrite-targeting interneurons control synaptic NMDA-receptor activation via nonlinear a5-GABAA receptors. Nat Commun 9:3576 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell; Dendrite; Synapse;
Brain Region(s)/Organism: Hippocampus; Mouse;
Cell Type(s): Hippocampus CA1 pyramidal GLU cell;
Channel(s): I h; I A;
Gap Junctions:
Receptor(s): GabaA; GabaB; AMPA; NMDA;
Gene(s):
Transmitter(s): Gaba; Glutamate;
Simulation Environment: NEURON;
Model Concept(s):
Implementer(s): Schulz, Jan M [j.schulz at unibas.ch];
Search NeuronDB for information about:  Hippocampus CA1 pyramidal GLU cell; GabaA; GabaB; AMPA; NMDA; I A; I h; Gaba; Glutamate;
/
Alpha5_NMDA_CA1_pyr
README.html
dists.mod *
eff.mod *
exc.mod *
gabab.mod
h.mod
id.mod *
inh.mod
kad.mod *
kap.mod *
kdr.mod *
na3.mod *
nmdaSyn.mod
syns.mod *
tonic.mod
activateExcitation.hoc
activateInhibition_JMS.hoc
addChannels_JMS.hoc
addExcitation_JMS.hoc
addVgatInhibition_JMS.hoc
channelParameters.hoc
Connect_Stimulator2ExcSyn.hoc
Connect_Stimulator2InhSyn.hoc
Fig8_tuft_NMDA_spike.hoc
FigS8_SR_SLM_burst_stim.hoc
FigS9_test_TI.hoc
flagVgatInhibition_JMS.hoc
Generate_Stimulator.hoc
getBranchOrder.hoc *
idMorph.hoc
inhibitionBiophysics_JMS.hoc
initializationAndRun.hoc *
loadMorph.hoc *
mosinit.hoc
naceaxon.nrn *
Print-to-File.hoc
processMorph.hoc *
proofreadMorph.hoc *
resetNSeg.hoc *
screenshot.png
start_simulation.hoc
synHelperScripts.hoc
SynStim_SR_SLM_control.hoc
SynStim_SR_SLM_noInh.hoc
SynStim_SR_SLM_redInh.hoc
SynStim_SR_SLM_TI.hoc
tuft_NMDA_spike_fast.hoc
tuft_NMDA_spike_noRect.hoc
twinApical.swc *
update_Synapses.hoc
                            
// procedure to update stimulated synapses for burst of stimuli
//
// INPUT:
// $o1: Vector.  The vector of synapses to update.
// $2: numeric.  random seed
// $3: numeric.  release probability for first stim
// $o4: Vector.  normalised Pr
// $o5: Shape object
//
// local variables:
// N_synapses: int.     maximal number of activated synapses
// index1: int.         first index of newly activated synapses
// no_syn: int.         number of synapses activated given probability of respective combination and maximal number of activated synapses
// SynAct: Vector.      Vector of number of activated synapses on each pulse
// RelPr: Vector.       STP corrected release probabilities

obfunc set_gluSyn() {local ii,jj,N_synapses localobj SynAct, RelPr, randGen
    SynAct = new Vector(5,0) // number of activated synapses per stim
    RelPr = new Vector(5) // number of activated synapses per stim
    RelPr = $o4.c.mul($3) // release probability for each stimulus
    N_synapses = $o1.size(0)    
    randGen = new Random($2)
    
    //print "RelPr.x[4] is ", RelPr.x[$o4.size(0)-1]
    for jj=1,stim_no{
        //print jj
        for ii=1,N_synapses {
            //print ii
            //print $o1.x[(ii-1)]*stim_no+jj-1
            if (randGen.uniform(0,1)<RelPr.x[jj-1]){
                ncAmpa[$o1.x[(ii-1)]*stim_no+jj-1].weight = ampaWeight
                ncAmpa[$o1.x[(ii-1)]*stim_no+jj-1].delay = 0
                //print $o1.x[(ii-1)]*stim_no+jj-1
                ncNmda[$o1.x[(ii-1)]*stim_no+jj-1].weight = nmdaWeight
                ncNmda[$o1.x[(ii-1)]*stim_no+jj-1].delay = 0
                $o5.point_mark(synAmpa[$o1.x[ii-1]],2,"O",6)
                SynAct.x[jj-1] =SynAct.x[jj-1]+1
            } 
        }  	
    }
    return SynAct
}

obfunc set_InhSyn() {local ii,jj,N_synapses localobj SynAct, RelPr, randGen
    SynAct = new Vector(5,0) // number of activated synapses per stim
    RelPr = new Vector(5) // number of activated synapses per stim
    RelPr = $o4.c.mul($3) // release probability for each stimulus
    N_synapses = $o1.size(0)    
    randGen = new Random($2)
    
    print "RelPr.x[4] is ", RelPr.x[$o4.size(0)-1]
    for jj=1,stim_no{
        //print jj
        for ii=1,N_synapses {
            //print ii
            //print $o1.x[(ii-1)]*stim_no+jj-1
            if (randGen.uniform(0,1)<RelPr.x[jj-1]){
                ncGABA[$o1.x[(ii-1)]*stim_no+jj-1].weight = GABAweight0
                ncGABA[$o1.x[(ii-1)]*stim_no+jj-1].delay = 0
                ncGABAB[$o1.x[(ii-1)]*stim_no+jj-1].weight = GABA_release_weight
                ncGABAB[$o1.x[(ii-1)]*stim_no+jj-1].delay = 0
                //print $o1.x[(ii-1)]*stim_no+jj-1
                ncGABArect[$o1.x[(ii-1)]*stim_no+jj-1].weight = GABAweight1
                ncGABArect[$o1.x[(ii-1)]*stim_no+jj-1].delay = 0
                $o5.point_mark(synGABA[$o1.x[ii-1]],3,"O",6)
                SynAct.x[jj-1] =SynAct.x[jj-1]+1
            } 
        }  	
    }
    return SynAct
}


// INPUT:
// $o1: Vector.  The vector of synapses to update.
// $2: numeric.  random seed
// $3: numeric.  release probability for first stim
// $o4: Vector.  normalised Pr
// $o5: Shape object
//
// local variables:
// N_synapses: int.     maximal number of activated synapses
// index1: int.         first index of newly activated synapses
// no_syn: int.         number of synapses activated given probability of respective combination and maximal number of activated synapses
// SynAct: Vector.      Vector of number of activated synapses on each pulse
// RelPr: Vector.       STP corrected release probabilities

obfunc set_gluSyn_fixed_N() {local ii,jj,N_synapses localobj SynAct, N_inputs, randGen, N_output
    
    //SynAct = new Vector(5,0) , number of activated synapses per stim
    N_inputs = new Vector(5) // number of activated synapses per stim
    N_output = new Vector(5)
    N_synapses = $o1.size(0)
    N_inputs = $o4.c.mul($3).c.mul(N_synapses) // release probability for each stimulus times number of synapses available   
    //randGen = new Random($2)
    //print N_inputs.x[0], N_inputs.x[1], N_inputs.x[2], N_inputs.x[3], N_inputs.x[4]
    //print "RelPr.x[4] is ", RelPr.x[$o4.size(0)-1]
    for jj=1,stim_no{
        if (N_inputs.x[jj-1]%1>0){
            N_inputs.x[jj-1]=N_inputs.x[jj-1]-N_inputs.x[jj-1]%1
            //print N_inputs.x[jj-1]
        }
        N_output.x[jj-1]=N_inputs.x[jj-1]
        SynAct=sampleNoReplace($o1,N_inputs.x[jj-1],$2+jj) 
        //print jj
        for ii=1,N_inputs.x[jj-1] {
            //print ii
            //print $o1.x[(ii-1)]*stim_no+jj-1
            ncAmpa[SynAct.x[(ii-1)]*stim_no+jj-1].weight = ampaWeight
            ncAmpa[SynAct.x[(ii-1)]*stim_no+jj-1].delay = 0
            //print $o1.x[(ii-1)]*stim_no+jj-1
            ncNmda[SynAct.x[(ii-1)]*stim_no+jj-1].weight = nmdaWeight
            ncNmda[SynAct.x[(ii-1)]*stim_no+jj-1].delay = 0
            $o5.point_mark(synAmpa[$o1.x[ii-1]],2,"O",6)
        }  	
    }
    return N_output
}

obfunc set_InhSyn_fixed_N() {local ii,jj,N_synapses localobj SynAct, N_inputs, randGen, N_output
    
    //SynAct = new Vector(5,0) , number of activated synapses per stim
    N_inputs = new Vector(5) // number of activated synapses per stim
    N_output = new Vector(5)
    N_synapses = $o1.size(0)
    N_inputs = $o4.c.mul($3).c.mul(N_synapses) // release probability for each stimulus times number of synapses available   
    //randGen = new Random($2)
    //print N_inputs.x[0], N_inputs.x[1], N_inputs.x[2], N_inputs.x[3], N_inputs.x[4]
    //print "RelPr.x[4] is ", RelPr.x[$o4.size(0)-1]
    for jj=1,stim_no{
        if (N_inputs.x[jj-1]%1>0){
            N_inputs.x[jj-1]=N_inputs.x[jj-1]-N_inputs.x[jj-1]%1
            //print N_inputs.x[jj-1]
        }
        N_output.x[jj-1]=N_inputs.x[jj-1]
        SynAct=sampleNoReplace($o1,N_inputs.x[jj-1],$2+jj) 
        //print jj
        for ii=1,N_inputs.x[jj-1] {
            ncGABA[SynAct.x[(ii-1)]*stim_no+jj-1].weight = GABAweight0
            ncGABA[SynAct.x[(ii-1)]*stim_no+jj-1].delay = 0
            ncGABAB[SynAct.x[(ii-1)]*stim_no+jj-1].weight = GABA_release_weight
            ncGABAB[SynAct.x[(ii-1)]*stim_no+jj-1].delay = 0
            //print $o1.x[(ii-1)]*stim_no+jj-1
            ncGABArect[SynAct.x[(ii-1)]*stim_no+jj-1].weight = GABAweight1
            ncGABArect[SynAct.x[(ii-1)]*stim_no+jj-1].delay = 0
            $o5.point_mark(synGABA[SynAct.x[ii-1]],3,"O",6)
        }  	
    }
    return N_output
}

// INPUT:
// $o1: Vector.  The vector of synapses to update.
// $2: numeric.  random seed
// $3: numeric.  number of synapses
// $o4: Shape object
//
// local variables:
// N_synapses: int.     maximal number of activated synapses
// index1: int.         first index of newly activated synapses
// no_syn: int.         number of synapses activated given probability of respective combination and maximal number of activated synapses
// SynAct: Vector.      Vector of number of activated synapses on each pulse
// RelPr: Vector.       STP corrected release probabilities

obfunc set_InhSyn_syn_fixed() {local ii,jj,N_synapses localobj SynAct, randGen, N_output
    
    //SynAct = new Vector(5,0) , number of activated synapses per stim
    N_output = new Vector(5)
    N_synapses = $o1.size(0)
    N_inputs = $3   // release probability for each stimulus times number of synapses available   
    SynAct=sampleNoReplace($o1,N_inputs,$2)
    for jj=1,stim_no{ 
    //print jj
        for ii=1,N_inputs{
        //print ii
            ncGABA[SynAct.x[(ii-1)]*stim_no+jj-1].weight = GABAweight0
            ncGABA[SynAct.x[(ii-1)]*stim_no+jj-1].delay = 0
            ncGABAB[SynAct.x[(ii-1)]*stim_no+jj-1].weight = GABA_release_weight
            ncGABAB[SynAct.x[(ii-1)]*stim_no+jj-1].delay = 0
            //print $o1.x[(ii-1)]*stim_no+jj-1
            ncGABArect[SynAct.x[(ii-1)]*stim_no+jj-1].weight = GABAweight1
            ncGABArect[SynAct.x[(ii-1)]*stim_no+jj-1].delay = 0
        }
        N_output.x[jj-1] = N_inputs
    }
    //print "done"
    for ii=1,N_inputs{ $o4.point_mark(synGABA[SynAct.x[ii-1]],3,"O",6)}
    return N_output
}

Loading data, please wait...