Thalamocortical Relay cell under current clamp in high-conductance state (Zeldenrust et al 2018)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:232876
Mammalian thalamocortical relay (TCR) neurons switch their firing activity between a tonic spiking and a bursting regime. In a combined experimental and computational study, we investigated the features in the input signal that single spikes and bursts in the output spike train represent and how this code is influenced by the membrane voltage state of the neuron. Identical frozen Gaussian noise current traces were injected into TCR neurons in rat brain slices to adjust, fine-tune and validate a three-compartment TCR model cell (Destexhe et al. 1998, accession number 279). Three currents were added: an h-current (Destexhe et al. 1993,1996, accession number 3343), a high-threshold calcium current and a calcium- activated potassium current (Huguenard & McCormick 1994, accession number 3808). The information content carried by the various types of events in the signal as well as by the whole signal was calculated. Bursts phase-lock to and transfer information at lower frequencies than single spikes. On depolarization the neuron transits smoothly from the predominantly bursting regime to a spiking regime, in which it is more sensitive to high-frequency fluctuations. Finally, the model was used to in the more realistic “high-conductance state” (Destexhe et al. 2001, accession number 8115), while being stimulated with a Poisson input (Brette et al. 2007, Vogels & Abbott 2005, accession number 83319), where fluctuations are caused by (synaptic) conductance changes instead of current injection. Under “standard” conditions bursts are difficult to initiate, given the high degree of inactivation of the T-type calcium current. Strong and/or precisely timed inhibitory currents were able to remove this inactivation.
Reference:
1 . Zeldenrust F, Chameau P, Wadman WJ (2018) Spike and burst coding in thalamocortical relay cells. PLoS Comput Biol 14:e1005960 [PubMed]
2 . Destexhe A, Bal T, McCormick DA, Sejnowski TJ (1996) Ionic mechanisms underlying synchronized oscillations and propagating waves in a model of ferret thalamic slices. J Neurophysiol 76:2049-70 [PubMed]
3 . Huguenard JP, Mccormick DA (1994) Electrophysiology of the Neuron: An Interactive Tutorial
4 . Destexhe A, Rudolph M, Fellous JM, Sejnowski TJ (2001) Fluctuating synaptic conductances recreate in vivo-like activity in neocortical neurons. Neuroscience 107:13-24 [PubMed]
5 . Brette R, Rudolph M, Carnevale T, Hines M, Beeman D, Bower JM, Diesmann M, Morrison A, Goodman PH, Harris FC, Zirpe M, Natschläger T, Pecevski D, Ermentrout B, Djurfeldt M, Lansner A, Rochel O, Vieville T, Muller E, Davison AP, El Boustani S, Destexhe A (2007) Simulation of networks of spiking neurons: a review of tools and strategies. J Comput Neurosci 23:349-98 [PubMed]
6 . Vogels TP, Abbott LF (2005) Signal propagation and logic gating in networks of integrate-and-fire neurons. J Neurosci 25:10786-95 [PubMed]
7 . Destexhe A, Neubig M, Ulrich D, Huguenard J (1998) Dendritic low-threshold calcium currents in thalamic relay cells. J Neurosci 18:3574-88 [PubMed]
8 . Destexhe A, Babloyantz A, Sejnowski TJ (1993) Ionic mechanisms for intrinsic slow oscillations in thalamic relay neurons. Biophys J 65:1538-52 [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;
Brain Region(s)/Organism: Thalamus;
Cell Type(s): Thalamus geniculate nucleus/lateral principal GLU cell;
Channel(s): I L high threshold; I K,Ca; I h; I T low threshold;
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Bursting; Information transfer; Rebound firing; Sensory coding;
Implementer(s): Zeldenrust, Fleur [fleurzeldenrust at gmail.com];
Search NeuronDB for information about:  Thalamus geniculate nucleus/lateral principal GLU cell; I L high threshold; I T low threshold; I h; I K,Ca;
/
TCR
influence_ih_iT
cells
cadecay.mod *
hh2.mod *
ic.mod *
Ih_des93.mod *
il.mod *
ITGHK.mod *
VClamp.mod *
El.oc *
loc3.oc *
stim_long.dat *
tc3_cc_ihiT.hoc
                            
/*----------------------------------------------------------------------------

	CURRENT-CLAMP SIMULATIONS OF TC CELLS
	=====================================
	Accession number ModelDB: 232876

	Simulations of a simplified model of thalamic relay cell.

	The current model is described in the following paper:
		Zeldenrust F, Chameau P, Wadman WJ. Spike and Burst Coding in Thalamocortical Relay Cells. PLoS Computational Biology, 2017.


	The original model, the basis of the current one, is described in the following paper:
	   Destexhe A, Neubig M, Ulrich D and Huguenard JR.  Dendritic
	   low-threshold calcium currents in thalamic relay cells.  
	   Journal of Neuroscience 18: 3574-3588, 1998.

	Please cite these references when using this model.
----------------------------------------------------------------------------*/

//----------------------------------------------------------------------------
//  simulation settings
//----------------------------------------------------------------------------

factor = .1
vhold = 80

strdef filename

if(factor == 0.5){
	filename = "tcrelay3c_factor_05"
} else if(factor == 0.25){
	filename = "tcrelay3c_factor_025"
} else if(factor == 0.75){
	filename = "tcrelay3c_factor_075"
} else if(factor == 0){
	filename = "tcrelay3c_factor_0"
} else if(factor == 0.1){
	filename = "tcrelay3c_factor_01"
} else if(factor == 2){
	filename = "tcrelay3c_factor_2"
} else if(factor == 1.5){
	filename = "tcrelay3c_factor_15"
} else if(factor == 1){
	filename = "tcrelay3c_factor_1"
}

if(vhold == 80){
	sprint(filename,"%s%s",filename,"_80")
} else if(vhold == 70){
	sprint(filename,"%s%s",filename,"_70")
} else if(vhold == 60){
	sprint(filename,"%s%s",filename,"_60")
} else if(vhold == 50){
	sprint(filename,"%s%s",filename,"_50")
}


//----------------------------------------------------------------------------
//  load and define general graphical procedures
//----------------------------------------------------------------------------

load_file("nrngui.hoc")		// updated command version of above
nrncontrolmenu()		// create control menu

objectvar g[20]			// max 20 graphs
ngraph = 0

proc addgraph() { local ii	// define subroutine to add a new graph
				// addgraph("variable", minvalue, maxvalue)
	ngraph = ngraph+1
	ii = ngraph-1
	g[ii] = new Graph()
	g[ii].size(tstart,tstop,$2,$3)
	g[ii].xaxis()
	g[ii].yaxis()
	g[ii].addvar($s1,1,0)
	g[ii].save_name("graphList[0].")
	graphList[0].append(g[ii])
}

proc addshape() { local ii	// define subroutine to add a new shape
				// addshape()
	ngraph = ngraph+1
	ii = ngraph-1
	g[ii] = new PlotShape()
	g[ii].scale(-130,50)
}

//----------------------------------------------------------------------------
//  transient time
//----------------------------------------------------------------------------

trans = 00

print " "
print ">> Transient time of ",trans," ms"
print " "


//----------------------------------------------------------------------------
//  create multi-compartment geometry and insert currents
//----------------------------------------------------------------------------

xopen("cells/tc3.geo")		// read geometry file

corrD = 7.954			// dendritic surface correction
				// (estimated by fitting voltage-clamp traces)
				
corrR = 0.75  // make R 25% higher, so g=1/1.25=0.8, do also for C for correction RC time
corrC = 0.9   // make RC time smaller

G_pas = corrR*3.79e-5
E_pas = -73			// to fit current-clamp data (was -71 to -73)
E_pas = -76.5			// within 3 mV error
C_m   = corrC*corrR*0.88


forall { 				// insert passive current everywhere
	insert pas
	g_pas = G_pas * corrD
	e_pas = E_pas
	cm = C_m * corrD
	Ra = 173
	L = L
	
}

soma {
	g_pas = G_pas
	cm = C_m

	insert hh2			// insert fast spikes
	ena = 50
	ek = -100
	vtraub_hh2 = -52
	gnabar_hh2 = 0.1
	gkbar_hh2 = 0.1
	
	insert iL     		// insert IL (high-threshold calcium)
	pcabar_iL=0.00005
	
	
	
	insert iC   // IKC (calcium-dependent potassium)
	gkbar_iC=0.001
	}


forall {
	insert itGHK		// T-current everywhere
	cai = 2.4e-4 
	cao = 2 
	eca = 120 
	shift_itGHK = -1	// screening charge shift + 3 mV error
	gcabar_itGHK = corrD * 0.0002
	qm_itGHK = 2.5
	qh_itGHK = 2.5
	

	insert cad			// calcium diffusion everywhere
	depth_cad = 0.1 * corrD
	kt_cad = 0			// no pump
	kd_cad = 1e-4
	taur_cad = 5
	cainf_cad = 2.4e-4	
	
	insert iar 			// Ih everywhere
	ghbar_iar = factor*1.3e-04

}



xopen("loc3.oc")		// load procedures for localizing T-current

// high distal density, match detailed model in voltage-clamp
localize(1.7e-5,corrD*9.5e-5)

  
//----------------------------------------------------------------------------
//  setup simulation parameters
//----------------------------------------------------------------------------

Dt = 0.1
npoints = 9030000         // longer traces             stim_long

dt = 0.1			// must be submultiple of Dt
tstart = trans
tstop = trans + npoints * Dt
runStopAt = tstop
steps_per_ms = 1/Dt

celsius=30

v_init = -74			// approximate resting Vm


//----------------------------------------------------------------------------
//  insert electrodes in the soma
//----------------------------------------------------------------------------

if(ismenu==0) {
  xopen("El.oc")		// Electrode with series resistance
  ismenu = 1
}

access soma

// DC current electrode for setting holding potential
//----------------------------------------------------------------------------

objectvar El1			// insert electrode
El1 = new Electrode()
electrodes_present = 1


// CURRENT-CLAMP MODE

soma El1.stim.loc(0.5)		// put electrode in current-clamp mode
El1.stim.del = 0
El1.stim.dur = tstop - tstart

if(vhold == 80){
	El1.stim.amp = -0.7*factor     // for -80
} else if(vhold == 70){
	El1.stim.amp = -0.475*factor   // for -70 
} else if(vhold == 60){
	El1.stim.amp = -0.275*factor   // for -60
} else if(vhold == 50){
	El1.stim.amp = -0.0*factor    // for -50
}

// Variable current electrode for frozen noise stimulus
//----------------------------------------------------------------------------
objectvar El2             
soma El2 = new IClamp(0.5) 
El2.del = 0
El2.dur = tstop-tstart   

// Frozen noise stimulus   
objref r,f
f = new File()
r = new Vector()
// f.ropen("stimt1s3.dat") // tau = 1 ms stimulus
f.ropen("stim_long.dat")
r.scanf(f)
r.play(&El2.amp, dt)    

// Variable current electrode for extra noise
//----------------------------------------------------------------------------
// objectvar El3             
// soma El3 = new IClamp(0.5) 
// El3.del = 0
// El3.dur = tstop-tstart   
// 
// Noisy stimulus extra noise 
// objref r1,f1
// f1 = new File()
// r1 = new Vector()
// f1.ropen("stimvar.dat")
// r1.scanf(f1)
// r1.play(&El3.amp, dt)    

//----------------------------------------------------------------------------
//  add graphs
//----------------------------------------------------------------------------

addgraph("soma.v(0.5)",-100,50)		// soma


//----------------------------------------------------------------------------
//  Save
//----------------------------------------------------------------------------
objref rect, recv, recinternalcalcium
objref recicap, recih, recit, recikc, recina, recik
objref recmit, rechit, reco1ih, reco2ih, recmikc, recmina, rechina, recnik

// General
//----------------------------------------------------------------------------
// rect = new Vector()
// rect.record(&t)
recv = new Vector()
recv.record(&soma.v(0.5))
// recinternalcalcium = new Vector()
// recinternalcalcium.record(&soma.v(0.5))

// Currents
//----------------------------------------------------------------------------
// recicap = new Vector()
// recicap.record(&soma.i_cap(0.5))
recih = new Vector()
recih.record(&soma.ih(0.5))
recit = new Vector()
recit.record(&soma.ica(0.5))
// recikc = new Vector()
// recikc.record(&soma.iC(0.5))
recina = new Vector()
recina.record(&soma.ina(0.5))
recik = new Vector()
recik.record(&soma.ik(0.5))

// Gating variables
//----------------------------------------------------------------------------
recmit = new Vector()
recmit.record(&soma.m_itGHK(0.5))
rechit = new Vector()
rechit.record(&soma.h_itGHK(0.5))
reco1ih = new Vector()
reco1ih.record(&soma.o1_iar(0.5))
reco2ih = new Vector()
reco2ih.record(&soma.o2_iar(0.5))
// recmikc = new Vector()
// recmikc.record(&soma.m_iC(0.5))
recmina = new Vector()
recmina.record(&soma.m_hh2(0.5))
rechina = new Vector()
rechina.record(&soma.h_hh2(0.5))
recnik = new Vector()
recnik.record(&soma.n_hh2(0.5))



// Procedures for saving
//----------------------------------------------------------------------------
objref savdata
objref tempmatrix
tempmatrix = new Matrix()

proc fileopen() {
    savdata = new File()

	sprint(filename,"%s%s",filename,".dat")
    savdata.wopen(filename)
}
    
proc slaop() {
    tempmatrix.resize(recv.size(),7)   
    tempmatrix.setcol(0,recv)
    tempmatrix.setcol(1,recih)
    tempmatrix.setcol(2,recit)
    tempmatrix.setcol(3,recmit)
    tempmatrix.setcol(4,rechit)
    tempmatrix.setcol(5,reco1ih)
    tempmatrix.setcol(6,reco2ih )


	tempmatrix.fprint(savdata, " %g")
    savdata.close()

}

proc fileopenna() {
    savdata = new File()
	sprint(filename,"%s%s",filename,"_ina.dat")
    savdata.wopen(filename)
}
    
proc slaopna() {
    tempmatrix.resize(recv.size(),3)   
    tempmatrix.setcol(0,recina)
    tempmatrix.setcol(1,recmina)
    tempmatrix.setcol(2,rechina)


	tempmatrix.fprint(savdata, " %g")
    savdata.close()

}

proc fileopenk() {
    savdata = new File()
	sprint(filename,"%s%s",filename,"_ik.dat")
    savdata.wopen(filename)
}
    
proc slaopk() {
    tempmatrix.resize(recv.size(),2)   
    tempmatrix.setcol(0,recik)
    tempmatrix.setcol(1,recnik)


	tempmatrix.fprint(savdata, " %g")
    savdata.close()

}