Reconstructing cerebellar granule layer evoked LFP using convolution (ReConv) (Diwakar et al. 2011)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:139883
The model allows reconstruction of evoked local field potentials as seen in the cerebellar granular layer. The approach uses a detailed model of cerebellar granule neuron to generate data traces and then uses a "ReConv" or jittered repetitive convolution technique to reproduce post-synaptic local field potentials in the granular layer. The algorithm was used to generate both in vitro and in vivo evoked LFP and reflected the changes seen during LTP and LTD, when such changes were induced in the underlying neurons by modulating release probability of synapses and sodium channel regulated intrinsic excitability of the cells.
Reference:
1 . Diwakar S, Lombardo P, Solinas S, Naldi G, D'Angelo E (2011) Local field potential modeling predicts dense activation in cerebellar granule cells clusters under LTP and LTD control. PLoS One 6:e21928 [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): Cerebellum interneuron granule cell;
Channel(s): I K; I M; I K,Ca; I Sodium; I Calcium; I Cl, leak;
Gap Junctions:
Receptor(s): GabaA; AMPA; NMDA;
Gene(s):
Transmitter(s):
Simulation Environment: NEURON; MATLAB; Octave;
Model Concept(s): Extracellular Fields; Evoked LFP;
Implementer(s): Diwakar, Shyam [shyam at amrita.edu];
Search NeuronDB for information about:  Cerebellum interneuron granule cell; GabaA; AMPA; NMDA; I K; I M; I K,Ca; I Sodium; I Calcium; I Cl, leak;
/
ReConv
data
readme.html
AmpaCOD.mod *
GRC_CA.mod *
GRC_CALC.mod *
GRC_GABA.mod *
GRC_KA.mod *
GRC_KCA.mod *
GRC_KIR.mod *
GRC_KM.mod *
GRC_KV.mod *
GRC_LKG1.mod *
GRC_LKG2.mod *
GRC_NA.mod *
NmdaS.mod *
Pregen.mod *
ComPanel.hoc
Grc_Cell.hoc
mosinit.hoc
Parametri.hoc
ReConv_GrC.jpg
ReConv_invitro.jpg
ReConv_invivo.jpg
Record_vext.hoc
Start.hoc
                            
// ReConv algorithm for reconstructing evoked LFP in cerebellar granular layer
// Uses Multicompartmental GrC model (see http://senselab.med.yale.edu/ModelDb/showmodel.asp?model=116835)
// Last updated 11-June-2011
// Model developer: Shyam Diwakar M.
// Developed at Amrita School of Biotechnology (India) and at Prof. Egidio D'Angelo's Lab at Univ of Pavia (Italy)
// Amrita School of Biotechnology, Amritapuri
// Clappana P.O., Kollam, 690 525, Kerala, India.
// http://research.amrita.edu/compneuro
// Email:shyam@amrita.edu

 
/* Model published as [Diwakar et al., 2011, manuscript accepted, PLoS ONE]
Shyam Diwakar, Paola Lombardo, Sergio Solinas, Giovanni Naldi, Egidio D'Angelo. "Local field potential modeling predicts dense activation in cerebellar granule cells clusters under LTP and LTD control", PLoS ONE, 2011.
*/

//Modifying gmax

	for(i=0;i<4;i=i+1) {
		GrC[0].synA[i].gmax=600
		GrC[0].synNS[i].gmax=100000
		GrC[0].synG[i].gmax=2500

	}


//Measuring and plotting total vext[0] from extracellular electrode
//Last updated  15-September-2008

objref ivec,isubvec,isubvec2,isubvec3,isubvec4,isubvec5,isubvec6,isubvec7,isubvec8,isubvec9,isubvec10,isubvec11,g,CC
objref isubvec12,isubvec13,isubvec14,isubvec15,isubvec16,isubvec17,isubvec18,isubvec19,isubvec20,isubvec21,isubvec22
objref isubvec23,isubvec24,isubvec25,isubvec26,isubvec27,isubvec28,isubvec29,isubvec30,isubvec31,isubvec32,isubvec33
objref isubvec34,isubvec35,isubvec36,isubvec37,isubvec38,isubvec39,isubvec40,isubvec41,isubvec42,isubvec43
objref isubvec44,isubvec45,isubvec46,isubvec47,isubvec48,isubvec49,isubvec50,isubvec51,isubvec52,iveca,time

objref fob
fob = new File()
strdef s


forall {
	insert extracellular
	xg[0]=100e3//100e3.3
	xraxial[0]=100e-3//1e-3.4

}
	

time = new Vector()
ivec = new Vector()
isubvec = new Vector()
isubvec2 = new Vector()
isubvec3 = new Vector()
isubvec4 = new Vector()
isubvec5 = new Vector()
isubvec6 = new Vector()
isubvec7 = new Vector()
isubvec8 = new Vector()
isubvec9 = new Vector()
isubvec10 = new Vector()
isubvec11 = new Vector()
isubvec12 = new Vector()
isubvec13 = new Vector()
isubvec14 = new Vector()
isubvec15 = new Vector()
isubvec16 = new Vector()
isubvec17 = new Vector()
isubvec18 = new Vector()
isubvec19 = new Vector()
isubvec20 = new Vector()
isubvec21 = new Vector()
isubvec22 = new Vector()
isubvec23 = new Vector()
isubvec24 = new Vector()
isubvec25 = new Vector()
isubvec26 = new Vector()
isubvec27 = new Vector()
isubvec28 = new Vector()
isubvec29 = new Vector()
isubvec30 = new Vector()
isubvec31 = new Vector()
isubvec32 = new Vector()
isubvec33 = new Vector()
isubvec34 = new Vector()
isubvec35 = new Vector()
isubvec36 = new Vector()
isubvec37 = new Vector()
isubvec38 = new Vector()
isubvec39 = new Vector()
isubvec40 = new Vector()
isubvec41 = new Vector()
isubvec42 = new Vector()
isubvec43 = new Vector()
isubvec44 = new Vector()
isubvec45 = new Vector()
isubvec46 = new Vector()
isubvec47 = new Vector()
isubvec48 = new Vector()
isubvec49 = new Vector()
isubvec50 = new Vector()
isubvec51 = new Vector()
isubvec52 = new Vector()

iveca = new Vector() //summed val



proc extpl1() {
	time.record(&t)
  GrC[0].soma isubvec.record(&GrC[0].soma.vext[0])
  GrC[0].dend_4[3] isubvec2.record(&GrC[0].dend_4[3].vext[0])
  GrC[0].dend_4[2] isubvec3.record(&GrC[0].dend_4[2].vext[0])
  GrC[0].dend_4[1] isubvec4.record(&GrC[0].dend_4[1].vext[0])
  GrC[0].dend_4[0] isubvec5.record(&GrC[0].dend_4[0].vext[0])
  GrC[0].dend_3[3] isubvec6.record(&GrC[0].dend_3[3].vext[0])
  GrC[0].dend_3[2] isubvec7.record(&GrC[0].dend_3[2].vext[0])
  GrC[0].dend_3[1] isubvec8.record(&GrC[0].dend_3[1].vext[0])
  GrC[0].dend_3[0] isubvec9.record(&GrC[0].dend_3[0].vext[0])
  GrC[0].dend_2[3] isubvec10.record(&GrC[0].dend_2[3].vext[0])
  GrC[0].dend_2[2] isubvec11.record(&GrC[0].dend_2[2].vext[0])
  GrC[0].dend_2[1] isubvec12.record(&GrC[0].dend_2[1].vext[0])
	
}

proc extpl2() {
  GrC[0].dend_2[0] isubvec13.record(&GrC[0].dend_2[0].vext[0])
  GrC[0].dend_1[3] isubvec14.record(&GrC[0].dend_1[3].vext[0])
  GrC[0].dend_1[2] isubvec15.record(&GrC[0].dend_1[2].vext[0])
  GrC[0].dend_1[1] isubvec16.record(&GrC[0].dend_1[1].vext[0])
  GrC[0].dend_1[0] isubvec17.record(&GrC[0].dend_1[0].vext[0])
  GrC[0].hillock[0] isubvec18.record(&GrC[0].hillock[0].vext[0])
  GrC[0].hillock[1] isubvec19.record(&GrC[0].hillock[1].vext[0])
  GrC[0].hillock[2] isubvec20.record(&GrC[0].hillock[2].vext[0])
  GrC[0].hillock[3] isubvec21.record(&GrC[0].hillock[3].vext[0])
  GrC[0].hillock[4] isubvec22.record(&GrC[0].hillock[4].vext[0])
  GrC[0].axon[0] isubvec23.record(&GrC[0].axon[0].vext[0])
  GrC[0].axon[1] isubvec24.record(&GrC[0].axon[1].vext[0])
  GrC[0].axon[2] isubvec25.record(&GrC[0].axon[2].vext[0])
  GrC[0].axon[3] isubvec26.record(&GrC[0].axon[3].vext[0])
}

proc extpl3() {
  GrC[0].axon[4] isubvec27.record(&GrC[0].axon[4].vext[0])
  GrC[0].axon[5] isubvec28.record(&GrC[0].axon[5].vext[0])
  GrC[0].axon[6] isubvec29.record(&GrC[0].axon[6].vext[0])
  GrC[0].axon[7] isubvec30.record(&GrC[0].axon[7].vext[0])
  GrC[0].axon[8] isubvec31.record(&GrC[0].axon[8].vext[0])
  GrC[0].axon[9] isubvec32.record(&GrC[0].axon[9].vext[0])
  GrC[0].axon[10] isubvec33.record(&GrC[0].axon[10].vext[0])
  GrC[0].axon[11] isubvec34.record(&GrC[0].axon[11].vext[0])
  GrC[0].axon[12] isubvec35.record(&GrC[0].axon[12].vext[0])
  GrC[0].axon[13] isubvec36.record(&GrC[0].axon[13].vext[0])
  GrC[0].axon[14] isubvec37.record(&GrC[0].axon[14].vext[0])
  GrC[0].axon[15] isubvec38.record(&GrC[0].axon[15].vext[0])
  
}

proc extpl4() {
  GrC[0].axon[16] isubvec39.record(&GrC[0].axon[16].vext[0])
  GrC[0].axon[17] isubvec40.record(&GrC[0].axon[17].vext[0])
  GrC[0].axon[18] isubvec41.record(&GrC[0].axon[18].vext[0])
  GrC[0].axon[19] isubvec42.record(&GrC[0].axon[19].vext[0])
  GrC[0].axon[20] isubvec43.record(&GrC[0].axon[20].vext[0])
  GrC[0].axon[21] isubvec44.record(&GrC[0].axon[21].vext[0])
  GrC[0].axon[22] isubvec45.record(&GrC[0].axon[22].vext[0])
  GrC[0].axon[23] isubvec46.record(&GrC[0].axon[23].vext[0])
  GrC[0].axon[24] isubvec47.record(&GrC[0].axon[24].vext[0])
  GrC[0].axon[25] isubvec48.record(&GrC[0].axon[25].vext[0])
  GrC[0].axon[26] isubvec49.record(&GrC[0].axon[26].vext[0])
  GrC[0].axon[27] isubvec50.record(&GrC[0].axon[27].vext[0])
  GrC[0].axon[28] isubvec51.record(&GrC[0].axon[28].vext[0])
  GrC[0].axon[29] isubvec52.record(&GrC[0].axon[29].vext[0])
}

proc sum1() {
	iveca = isubvec.sub(isubvec3)
	iveca = iveca.sub(isubvec2)
	iveca = iveca.sub(isubvec3)
	iveca = iveca.sub(isubvec4)
	iveca = iveca.sub(isubvec5)
	iveca = iveca.sub(isubvec6)
	iveca = iveca.sub(isubvec7)
	iveca = iveca.sub(isubvec8)
	iveca = iveca.sub(isubvec9)
	iveca = iveca.sub(isubvec10)
	iveca = iveca.sub(isubvec11)
	iveca = iveca.sub(isubvec12)
}
proc sum2() {
	iveca = iveca.sub(isubvec13)
	iveca = iveca.sub(isubvec14)
	iveca = iveca.sub(isubvec15)
	iveca = iveca.sub(isubvec16)
	iveca = iveca.sub(isubvec17)
	iveca = iveca.add(isubvec18)


}
proc sum3() {
//	iveca = iveca.add(isubvec19)
//	iveca = iveca.add(isubvec20)
//	iveca = iveca.add(isubvec21)
//	iveca = iveca.add(isubvec22)
	//iveca = iveca.add(isubvec23)
	//iveca = iveca.add(isubvec24)
	//iveca = iveca.add(isubvec25)
	//iveca = iveca.add(isubvec26)
        iveca = iveca.add(isubvec27)
	iveca = iveca.add(isubvec28)
	iveca = iveca.add(isubvec29)
	iveca = iveca.add(isubvec30)
	iveca = iveca.add(isubvec31)
	iveca = iveca.add(isubvec32)
	iveca = iveca.add(isubvec33)
	iveca = iveca.add(isubvec34)
	iveca = iveca.add(isubvec35)
	iveca = iveca.add(isubvec36)
	iveca = iveca.add(isubvec37)
	iveca = iveca.add(isubvec38)
}

proc sum4() {
	iveca = iveca.add(isubvec39)
	iveca = iveca.add(isubvec40)
	iveca = iveca.add(isubvec41)
	iveca = iveca.add(isubvec42)
	iveca = iveca.add(isubvec43)
	iveca = iveca.add(isubvec44)
	iveca = iveca.add(isubvec45)
	iveca = iveca.add(isubvec46)
	iveca = iveca.add(isubvec47)
	iveca = iveca.add(isubvec48)
	iveca = iveca.add(isubvec49)
	iveca = iveca.add(isubvec50)
	iveca = iveca.add(isubvec51)
	iveca = iveca.add(isubvec52)
}	
  
  

proc rresize(){

time.resize(0)
iveca.resize(0)
ivec.resize(0)
isubvec.resize(0)
isubvec2.resize(0)
isubvec3.resize(0)
isubvec4.resize(0)
isubvec5.resize(0)
isubvec6.resize(0)
isubvec7.resize(0)
isubvec8.resize(0)
isubvec9.resize(0)
isubvec10.resize(0)
isubvec11.resize(0)
isubvec12.resize(0)
isubvec13.resize(0)
isubvec14.resize(0)
isubvec15.resize(0)
isubvec16.resize(0)
isubvec17.resize(0)
isubvec18.resize(0)
isubvec19.resize(0)
isubvec20.resize(0)
isubvec21.resize(0)
isubvec22.resize(0)
isubvec23.resize(0)
isubvec24.resize(0)
isubvec25.resize(0)
isubvec26.resize(0)
isubvec27.resize(0)
isubvec28.resize(0)
isubvec29.resize(0)
isubvec30.resize(0)
isubvec31.resize(0)
isubvec32.resize(0)
isubvec33.resize(0)
isubvec34.resize(0)
isubvec35.resize(0)
isubvec36.resize(0)
isubvec37.resize(0)
isubvec38.resize(0)
isubvec39.resize(0)
isubvec40.resize(0)
isubvec41.resize(0)
isubvec42.resize(0)
isubvec43.resize(0)
isubvec44.resize(0)
isubvec45.resize(0)
isubvec46.resize(0)
isubvec47.resize(0)
isubvec48.resize(0)
isubvec49.resize(0)
isubvec50.resize(0)
isubvec51.resize(0)
isubvec52.resize(0)

}


proc write_files(){

									// Invitro
if(type == 1){
	sprint(s,"data/Invitro/e%di%d.asc",Exe_comb_num,Inh_comb_num)
	fob.wopen(s)

				for i=1,iveca.size()-1 { 			// writing 
					fob.printf("%f \t %e", time.x[i],iveca.x[i]) 
					fob.printf("\n") 
				}
	fob.close()
}

if(type == 2){
	sprint(s,"data/Invitro/e%dmfnorm.asc",Exe_comb_num)
	fob.wopen(s)

				for i=1,iveca.size()-1 { 			// writing 
					fob.printf("%f \t %e", time.x[i],iveca.x[i]) 
					fob.printf("\n") 
				}
	fob.close()
}

if(type == 3){
	sprint(s,"data/Invitro/e%dmfnonmda.asc",Exe_comb_num)
	fob.wopen(s)

				for i=1,iveca.size()-1 { 			// writing 
					fob.printf("%f \t %e", time.x[i],iveca.x[i]) 
					fob.printf("\n") 
				}
	fob.close()
}


										//Invivo


if(type == 4){
	sprint(s,"data/Invivo/t%dmfnorm.asc",Exe_comb_num)
	fob.wopen(s)

				for i=1,iveca.size()-1 { 			// writing 
					fob.printf("%f \t %e", time.x[i],iveca.x[i]) 
					fob.printf("\n") 
				}
	fob.close()
}

if(type == 5){
	sprint(s,"data/Invivo/c%dmfnorm.asc",Exe_comb_num)
	fob.wopen(s)

				for i=1,iveca.size()-1 { 			// writing 
					fob.printf("%f \t %e", time.x[i],iveca.x[i]) 
					fob.printf("\n") 
				}
	fob.close()
}


}



  
 proc run_combinations() {
	
	rresize()	 // resizing the vectors
	MossyInhib()  // updating mosyy and Inh
	
	
	extpl1() //Somato-dendritic LFP - comment lines for axonal data
	extpl2() //Somato-dendritic LFP - comment lines for axonal data
//	extpl3()  //uncomment for axonal data
//	extpl4() //uncomment for axonal data
	init()
	continuerun(tstop)
	sum1()  //Somato-dendritic LFP - comment lines for axonal data
	sum2()  //Somato-dendritic LFP - comment lines for axonal data
//	sum3() //uncomment for axonal data
//	sum4()  //uncomment for axonal data

write_files()
}



proc MossyInhib(){

	for i= 0, 3{		
			Mossy[i].end=0
			Inhib[i].end=0
	}

	if(type == 1){								//e#i#
		for i= 0, Exe_comb_num-1{
				Mossy[i].fast_invl=10
				Mossy[i].slow_invl=1e05
				Mossy[i].burst_len=1
				Mossy[i].start=20
				Mossy[i].end=1e10
			
		}
		
		for i= 0, Inh_comb_num-1{
				Inhib[i].fast_invl=10
				Inhib[i].slow_invl=1e05
				Inhib[i].burst_len=1
				Inhib[i].start=24
				Inhib[i].end=1e10
			
		}
	}
	
	
	if(type == 2){								//e#mfnorm
	for i= 0, Exe_comb_num-1{
			Mossy[i].fast_invl=10
			Mossy[i].slow_invl=1e05
			Mossy[i].burst_len=1
			Mossy[i].start=20
			Mossy[i].end=1e10
		
	}
	
	for i= 0, 3{
			Inhib[i].end=0
	}
	}

	
	if(type == 3){								//e%dmfnonmda
	for i= 0, Exe_comb_num-1{
			Mossy[i].fast_invl=10
			Mossy[i].slow_invl=1e05
			Mossy[i].burst_len=1
			Mossy[i].start=20
			Mossy[i].end=1e10
			
			for nm=0,7{
			NMDAS[nm].gmax=0
		}
	}
	
	for i= 0, 3{
			Inhib[i].end=0
	}
	}
	
						
}

	 // Invivo ----------------------------------------------------------------------->
	 
proc trigerminal(){
	tstop = 200
	exe_start = 20
	spike_length = 5
	Inhbi_start = 24
	MossyInhib_Invivo()
}


proc cortical(){
	tstop = 200
	exe_start = 60
	spike_length = 9
	Inhbi_start = 64
	MossyInhib_Invivo()
}


proc MossyInhib_Invivo(){

	for i= 0, 3 {
			Mossy[i].end=0
			Inhib[i].end=0
	}


	for i= 0, Exe_comb_num-1{
			Mossy[i].fast_invl= 2
			Mossy[i].slow_invl= 1e05
			Mossy[i].burst_len = spike_length
			Mossy[i].start = exe_start
			Mossy[i].end = 1e10
		
	}

	for i= 0, Inh_comb_num-1{
			Inhib[i].fast_invl = 2
			Inhib[i].slow_invl = 1e05
			Inhib[i].burst_len = 1
			Inhib[i].start = Inhbi_start 
			Inhib[i].end = 1e10
			
	}

}



proc run_combinations_Invivo() {
	
	extpl1()
	extpl2()
	init()
	trigerminal()
	run(tstop)
	sum1()
	sum2()
	write_files()
	rresize()	 // resizing the vector
	
	extpl1()
	extpl2()
	init()
	cortical()
	run(tstop)	
	sum1()
	sum2()
	type = 5
	write_files()
	rresize()	 // resizing the vector
}



proc Invitro_runn(){
	type = $3			
	Exe_comb_num = $1
	Inh_comb_num = $2
	run_combinations()
}

proc Invivo_runn(){
	type = $3			
	Exe_comb_num = $1
	Inh_comb_num = $2
	run_combinations_Invivo()
}


proc Invitro(){
	print "Simulating in vitro traces... "
							//e#i#
	Invitro_runn(1,1,1)		//Exe,Inh,type
	Invitro_runn(2,2,1)
	Invitro_runn(3,3,1)
	Invitro_runn(4,4,1)

							//e#mfnorm
	Invitro_runn(1,0,2)		
	Invitro_runn(2,0,2)
	Invitro_runn(3,0,2)
	Invitro_runn(4,0,2)

							//e%dmfnonmda
	Invitro_runn(1,0,3)		
	Invitro_runn(2,0,3)
	Invitro_runn(3,0,3)
	Invitro_runn(4,0,3)
	print "Run MATLAB script weighsum.m inside data\\Invitro ... "
	print "Quit and reinit before running for in vivo traces... "
}



proc Invivo(){
	print "Simulating in vivo traces ... "
	Invivo_runn(4,1,4)		//Exe,Inh,type
	Invivo_runn(3,2,4)
	Invivo_runn(2,3,4)
	Invivo_runn(1,4,4)
	print "Run MATLAB script weighavg.m inside data\\Invivo ... "
	print "Quit and reinit before running for in vitro traces... "
}


// panel

xpanel("Control Panel")
	xlabel("ReConv Algorithm")
	xlabel("================")
	xlabel("Run control")
	xbutton("In vitro","Invitro()")
	xbutton("In vivo","Invivo()")
	xlabel("Reconstructing evoked LFP in cerebellar granular layer")
	xlabel("Ref. Diwakar et al., PLoS ONE, 2011.")
xpanel()





Loading data, please wait...