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]
Citations  Citation Browser
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
                            
// This function turns on a given number of inhibitory synapses contained within a 
// given SectionList.  !!NOTE!!: this function does not attempt to turn off
// all synapses before activating the desired synapses.  It merely sets a 
// subset of synapses to "on", agnostic to whether they were previously on
// or not.  Note, however, that this function can be called twice to first
// turn all synapses off, and then turn on only the desired synapses.  See
// notes below.
//
// This function can also be used to toggle off synapses in the following way:
// A) to shut off all synapses in a given SectionList, set $2<0.
// B) to shut off all synapses in all sections, set $2<0 and set $o2 to be
//	the whole tree.
//
// Also, to activate all synapses in a given region, just set $2 to be a huge
//	number; this will activate all of the synapses in the desired region.
//
// INPUT:
// $o1: SectionList instance.  Sections to draw from.
// $2: variable.  Number of synapses to active.
// $3: variable.  The seed to assign.
// ($s4,$5 ; $s6,$7 ; ...): optional pairs of inhibitory driver line tags and logicals.
//	$s4,6,8,... should be strdefs corresponding to genotypes (ie, "vgat",
//	"sst","npy").  $5,7,9,... correspond to logicals
//	as to whether these genotypes should be required (=1), should be
//	not included at all (=0).  If it doesn't matter for analysis, can
//	leave these entries blank.
//
// OUTPUT:
// the .isOn flag is toggled as desired for the synapses selected.
//
// As an example, say one wanted to turn off all inhibitory synapses, except
// for 20 (VGAT+, SST-) interneurons in the tuft.  The calls would be:
//	activateInh(-1,cellList,1) // shuts of all inhibition, where cellList is a SectionList containing all sections.
//	activateInh(tuftList,20,1,"vgat",1,"sst",0) // turn on 20 (VGAT+,SST-) synapses in the tuft.
//

strdef curGenStr
obfunc activateInhibition() {local numGen,i,ii,jj,curGenFlag localobj allSyns,theSec,passSyns,screenedSyns,finalSyns
	allSyns = new Vector() // all (potential) synapses that qualify for activation	
	passSyns = new Vector() // binary vector representing whether each element
				// in allSyns has passed the screening process for
				// different genotypes.
	screenedSyns = new Vector() // vector of synapse indices that pass screening process
	finalSyns = new Vector() // vector of synapse indices that will be activated
	
	numGen = int(numarg()/2 - 1) // number of genotypes being screened for or against

	// interate over all synapses, adding those that are in the right
	// domain.
	for ii=0,totVgatAt-1{
		synGABA[ii].get_loc()
		theSec = new SectionRef()
		if(sectionRefInList(theSec,$o1)){
			allSyns.append(ii)
		}
		pop_section()
	}
	
	if($2<0){
		// Want to shut off all synapses in the provided region.
		for ii=0,allSyns.size()-1{
			synGABA[allSyns.x[ii]].isOn = 0
			synGABArect[allSyns.x[ii]].isOn = 0
			synGABAB[allSyns.x[ii]].isOn = 0
		}
		return finalSyns
	}else{
	
		// for all synapses that are flagged, screen for/against, as set
		// by desired arguments.
		passSyns = new Vector(allSyns.size(),1) // originally, all start with one
	
		for jj=1,numGen{
			i = 2*(jj+1) // indices
			curGenStr = $si // contains genotype flag
			i = i + 1
			curGenFlag = $i
	
			for ii=0,allSyns.size()-1{
				if(curGenFlag<0.1) {
	
					// remove all synapses with this particular flag
					if(abs(strcmp(curGenStr,"vgat"))<0.1){
						if(abs(synGABA[allSyns.x[ii]].vgat-1)<0.1){
							passSyns.x[ii] = 0
						}
					}
					if(abs(strcmp(curGenStr,"sst"))<0.1){
						if(abs(synGABA[allSyns.x[ii]].sst-1)<0.1){
							passSyns.x[ii] = 0
						}
					}
					if(abs(strcmp(curGenStr,"npy"))<0.1){
						if(abs(synGABA[allSyns.x[ii]].npy-1)<0.1){
							passSyns.x[ii] = 0
						}
					}
				}else{
	
					// remove synapses without this particular flag
					if(abs(strcmp(curGenStr,"vgat"))<0.1){
						if(abs(synGABA[allSyns.x[ii]].vgat-1)>0.1){
							passSyns.x[ii] = 0
						}
					}
					if(abs(strcmp(curGenStr,"sst"))<0.1){
						if(abs(synGABA[allSyns.x[ii]].sst-1)>0.1){
							passSyns.x[ii] = 0
						}
					}
					if(abs(strcmp(curGenStr,"npy"))<0.1){
						if(abs(synGABA[allSyns.x[ii]].npy-1)>0.1){
							passSyns.x[ii] = 0
						}
					}
				}
			}
		}			
	
	
		// Take only synapses that have passed the screening process.
		for jj=0,allSyns.size()-1{
			if(passSyns.x[jj]>0.1){
				screenedSyns.append(allSyns.x[jj])
			}
		}
		
		// Choose random indices from desired subset.
		finalSyns = sampleNoReplace(screenedSyns,$2,$3) // supply a non-random seed
		
		// Activate these synapses.
		for ii=0,finalSyns.size()-1{
			synGABA[finalSyns.x[ii]].isOn=1
			synGABArect[finalSyns.x[ii]].isOn=1
			synGABAB[finalSyns.x[ii]].isOn=1
		}
		
		// Give a final printout.
		print "Activated ",finalSyns.size,"inhibitory inputs"
		
		
		return finalSyns
	}
}