// 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()