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

 Download zip file 
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]
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)

Loading data, please wait...