Effects of Chloride accumulation and diffusion on GABAergic transmission (Jedlicka et al 2011)

 Download zip file   Auto-launch 
Help downloading and running models
"In the CNS, prolonged activation of GABA(A) receptors (GABA(A)Rs) has been shown to evoke biphasic postsynaptic responses, consisting of an initial hyperpolarization followed by a depolarization. A potential mechanism underlying the depolarization is an acute chloride (Cl(-)) accumulation resulting in a shift of the GABA(A) reversal potential (E(GABA)). The amount of GABA-evoked Cl(-) accumulation and accompanying depolarization depends on presynaptic and postsynaptic properties of GABAergic transmission, as well as on cellular morphology and regulation of Cl(-) intracellular concentration ([Cl(-)](i)). To analyze the influence of these factors on the Cl(-) and voltage behavior, we studied spatiotemporal dynamics of activity-dependent [Cl(-)](i) changes in multicompartmental models of hippocampal cells based on realistic morphological data. ..."
1 . Jedlicka P, Deller T, Gutkin BS, Backus KH (2011) Activity-dependent intracellular chloride accumulation and diffusion controls GABA(A) receptor-mediated synaptic transmission. Hippocampus 21:885-98 [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; Extracellular;
Brain Region(s)/Organism:
Cell Type(s): Dentate gyrus granule GLU cell;
Channel(s): I Chloride; I_HCO3;
Gap Junctions:
Receptor(s): GabaA;
Transmitter(s): Gaba;
Simulation Environment: NEURON;
Model Concept(s): Influence of Dendritic Geometry; Short-term Synaptic Plasticity; Chloride regulation;
Implementer(s): Jedlicka, Peter [jedlicka at em.uni-frankfurt.de]; Mohapatra, Namrata [mohapatra at em.uni-frankfurt.de];
Search NeuronDB for information about:  Dentate gyrus granule GLU cell; GabaA; I Chloride; I_HCO3; Gaba;
//For passive properties
//Mario Vuksic's in vivo data (44µm IML/OML border)
IML_border = actCell.somaLoc.secRef.sec.L/2+44

forsec actCell.all {e_pas=REVERSAL_PAS}

forall {
    insert cldifus
    cli0_cldifus = 5
    clo0_cldifus = 133.5
    celsius = 37

PREL  = 0.18			// Phco3/Pcl relative permeability

//For synaptic parameters, see Schmidt-Hieber et al. JN 2007; Santhakumar et al. J Neurophysiol 2005, Table 4

TAU1 = 0.5	//dendritic HC-GC synapse, Santhakumar et al. 2005
TAU2 = 6	//dendritic HC-GC synapse, Santhakumar et al. 2005
G = 0.0005	//nS
VARIANCE_G = 1e-8/4

NOISE = 1		    //0 no noise
STIMINTERVAL=100	//one event in X s
printf("Stimulation frequency: %g Hz.\n",1000/STIMINTERVAL)
STIMNUMBER=1e9		//unlimited source of mPSCs

TAU1_ML = 0.5	//dendritic HC-GC synapse, Santhakumar et al. 2005
TAU2_ML = 6	    //dendritic HC-GC synapse, Santhakumar et al. 2005	
G_ML = 0.0005	//nS	
VARIANCE_G_ML = 1e-8/4

TAU1_GCL = 0.26	//somatic BC-GC synapse, Santhakumar et al. 2005
TAU2_GCL = 5.5	//somatic BC-GC synapse, Santhakumar et al. 2005	
G_GCL = 0.0016	//nS	


SYNDENSITY = 0.5 //Megias (average spine density)

// Creating objects and procedures for inserting synaptic inputs
create presynapse	
access presynapse
{diam=0.01 L=0.01
insert cldifus
cli0_cldifus = 5
clo0_cldifus = 133.5}	

objref list_of_Locations, list_of_OMLLocations, list_of_IMLLocations, list_of_GCLLocations, list_of_MLLocations
list_of_Locations = new List()
list_of_OMLLocations = new List()
list_of_IMLLocations = new List()
list_of_MLLocations = new List()
list_of_GCLLocations = new List()

objref list_of_synapses, list_of_presynapses, list_of_OMLsynapses, list_of_IMLsynapses, list_of_MLsynapses, list_of_GCLsynapses
list_of_synapses = new List()
list_of_presynapses = new List()
list_of_OMLsynapses = new List()
list_of_IMLsynapses = new List()
list_of_MLsynapses = new List()
list_of_GCLsynapses = new List()

objref list_of_netcons, list_of_OMLnetcons, list_of_IMLnetcons, list_of_MLnetcons, list_of_GCLnetcons
list_of_netcons = new List()
list_of_OMLnetcons = new List()
list_of_IMLnetcons = new List()
list_of_MLnetcons = new List()
list_of_GCLnetcons = new List()

proc createInput() {
	$o1 = new gaba($2)
	$o1.tau1 = TAU1 	//ms
	$o1.tau2 = TAU2 	//ms
	$o1.P = PREL

proc createStim() {
	access presynapse
	$o1 = new NetStim($2)
	$o1.start = STIMSTART	//ms
	$o1.number = STIMNUMBER 	
	$o1.interval = STIMINTERVAL	//ms
	$o1.noise = NOISE
	$o1.seed($3)		//to begin each simulation round (for a cell) with a different NetStim seed

//initiating random number generator
ropen("/proc/uptime")		// get a seed  that is changing based on the processing time
 		rseed = fscan()		// so that simulation will not start with the same seed
objref random
random = new Random(rseed)

//procedure for creating lists of synaptic objects

proc create_list_of_MLLocations() {local i, nsyn	localobj tempLoc
		nsyn = int(L*SYNDENSITY)
		if (nsyn/2==int(nsyn/2)) {nsyn=nsyn+1} else {}	//keeping odd number of synapses
		nseg = nsyn 			//making nseg equal to nsyn
		for i=0,nsyn-1 {
			node = (2*(i+1)-1)/(2*nseg)
			tempLoc = new Location(node)

proc create_list_of_GCLLocations() {local i, nsyn	localobj tempLoc
		nsyn = int(list_of_MLLocations.count()/3)
		if (nsyn/2==int(nsyn/2)) {nsyn=nsyn+1} else {}	//keeping odd number of synapses
		nseg = nsyn 			//making nseg equal to nsyn
		for i=0,nsyn-1 {
			node = (2*(i+1)-1)/(2*nseg)
			tempLoc = new Location(node)

proc create_list_of_Locations() {local i
	for i=0,list_of_GCLLocations.count()-1 {
	for i=0,list_of_MLLocations.count()-1 {

proc create_synapses()  {local i	localobj syn, stim, syncon
	for i=0,list_of_Locations.count()-1 {
		list_of_Locations.o(i).secRef.sec {
			createInput(syn, list_of_Locations.o(i).loc)
			createStim(stim, 0.5, rseed)
			syncon = new NetCon(list_of_presynapses.o(i), list_of_synapses.o(i), 0, 0, abs(random.normal(G,VARIANCE_G)))

			if (i<=list_of_GCLLocations.count()-1) {
			} else {


			if (list_of_Locations.o(i).distToRootCenter > IML_border) {

			if (list_of_Locations.o(i).distToRootCenter <= IML_border && i>list_of_GCLLocations.count()-1) {

forsec actCell.den create_list_of_MLLocations()	
forsec "section[0]" create_list_of_GCLLocations()

proc display(){
printf("%d Synapses have been created.\n",list_of_Locations.count())
printf("There are %d dendritic synapses\n",list_of_MLLocations.count())
printf("There are %d perisomatic synapses.\n",list_of_GCLLocations.count()) 

//////////Procedures for scaling and silencing synapses//////////

proc changeWeight() {local j localobj k
	if (numarg()<1) {} else {j = $1 k = $o2}
	k.weight = j
proc changeKinetics() {local i,j localobj k
	if (numarg()<1) {} else {i = $1 j = $2 k = $o3}
	k.tau1 = i
	k.tau2 = j

//procedures for selective scaling and modifying kinetics of dendritic (ML) synapses
proc scaleML() {local i, m, n
	if (numarg()<1) {m = G_ML n = VARIANCE_G_ML} else {m = $1 n = $2}
	for i=0,list_of_MLnetcons.count()-1 {
		changeWeight(abs(random.normal(m,n)), list_of_MLnetcons.o(i)) 		
printf ("%d%s%.4f%s\n", list_of_MLnetcons.count(), " dendritic (ML) synapses have been scaled to ", m*1000, " nS.")

proc changeKineticsML() {local i, m, n
	if (numarg()<1) {m = TAU1_ML n = TAU2_ML} else {m = $1 n = $2}
	for i=0,list_of_MLsynapses.count()-1 {
printf ("%s%.4f%s%.4f%s\n", "Tau1 and Tau2 of dendritic (ML) synapses have been changed to ", m, " and ", n, " ms.")

//procedures for selective scaling and modifying kinetics of somatic (GCL) synapses
proc scaleGCL() {local i, m, n
	if (numarg()<1) {m = G_GCL n = VARIANCE_G_GCL} else {m = $1 n = $2}
	for i=0,list_of_GCLnetcons.count()-1 {
		changeWeight(abs(random.normal(m,n)), list_of_GCLnetcons.o(i)) 		
printf ("%d%s%.4f%s\n", list_of_GCLnetcons.count(), " somatic (GCL) synapses have been scaled to ", m*1000, " nS.")

proc changeKineticsGCL() {local i, m, n
	if (numarg()<1) {m = TAU1_GCL n = TAU2_GCL} else {m = $1 n = $2}
	for i=0,list_of_GCLsynapses.count()-1 {
printf ("%s%.4f%s%.4f%s\n", "Tau1 and Tau2 of somatic (GCL) synapses have been changed to ", m, " and ", n, " ms.")

///////Initiating synaptic conductances and kinetics

// Shape plot to see synapses
objref s
s = new Shape()
s.observe(actCell.all)	   //to exclude the "presynapse" from the shape plot
//s.view(681.65, 697.059, 309.5, 142.587, 230, 132, 505.1, 232.7)
//s.exec_menu("Show Diam")
s.exec_menu("View = plot")  
for i=0,list_of_MLLocations.count()-1 {
	list_of_MLLocations.o(i).secRef.sec s.point_mark(list_of_MLsynapses.o(i),2)
for i=0,list_of_GCLLocations.count()-1 {
	list_of_GCLLocations.o(i).secRef.sec s.point_mark(list_of_GCLsynapses.o(i),3)

s.exec_menu("View = plot")

//define ionic concentrations
cli0_cl_ion = cli0_cldifus 		         
clo0_cl_ion = clo0_cldifus

hco3i0_hco3_ion = 16
hco3o0_hco3_ion = 26

	hco3i = 16 hco3o = 26
	cli=5 clo=133.5

tstop = TSTOP

proc display_par(){
printf("PREL: %f \n",PREL)
printf("Initial ECL: %f mV \n",ecl)
printf("EHCO3: %f mV\n",ehco3)
EGABA0 = PREL*ehco3+(1-PREL)*ecl
printf("Initial EGABA: %f mV\n",EGABA0)