# rubin_terman_dbs.ode : For Rubin & Terman, JCNS, 2004 # identical to rubin_terman_pd.ode but with # periodic DBS stimulation applied # turn off stimulation by changing the initial condition # for i1 to il=0 # note that there may be some numerical issues after 1000 msec so we # avoided long time simulations in the paper # stn parameters p vl=-60,vna=55.,vk=-80.,thetam=30,sm=15 p gl=2.25,gna=37.5,gk=45,tn=1.,th=0.05 p gahp=9.,gca=.5,vca=140.,k1=15.,eps=5e-05 p kca=22.5,thetas=39.,ss=8.,xp=1.,i=0. p thetah=-39,sh=3.1,thetan=-32.,sn=-8. p taun0=1,taun1=100.,thn=80.,sigman=26. p tauh0=1,tauh1=500,thh=57.,sigmah=3.,phi=.75 p thetat=-63.,kt=-7.8,gt=.5,phir=.5 p thetar=-67,kr=2.,taur0=7.1,taur1=17.5,thr=-68,sigmar=2.2 p alpha=5,beta=1.,ab=-30.,gsyn=0.9,vsyn=-100 p rth=.25,rsig=-.07,rho1=.5,a1=.9,hets=0,inp=25 p alphai=1,betai=.05 # gp parameters p gnag=120.,gkg=30.,gahpg=30.,gtg=.5,gcag=.1,glg=.1 p vnag=55.,vkg=-80.,vcag=120.,vlg=-55. p thetasg=-57.,ksg=2.,thetas1g=-35.,ks1g=2. p thetarg=-70.,krg=-2.,taurg=30. p thetamg=-37.,sigmamg=10. p thetang=-50.,sigmang=14. p taun0g=.05,taun1g=.27,thng=-40,sng=-12 p thetahg=-58,sigmahg=-12 p tauh0g=.05,tauh1g=.27,thhg=-40,shg=-12 p k1g=30.,kcag=15.,epsg=0.0001 p phig=1.,deltang=.1,deltahg=.05 p iapp=2,gsyngg=.3,vsyngg=-80. p gsyng=0.3,vsyng=0,alphag=2,betag=.04,abg=-20 p iappi=5,igl=1.,thresg=0.0,hetg=0.,betagi=.08,kcagi=15 p gsyngi=.3,gsynggi=1.5,alphaggi=1,betaggi=.1 # TC parameters p vsyntc=-85,gsyntc=.08,asg=200,bsg=.4 p itc=6,shi=-80,shi2=-90,dur=5,dur2=10,period=25 p gnabar=3,gkbar=5,glbar=.05,ena=50,ek=-90,eleak=-70 p gtbar=5,qht=2.5,tadj=1,apr=4,apt=1 # stn functions sinf(v)=1./(1.+exp(-(v+thetas)/ss)) minf(v)=1./(1.+exp(-(v+thetam)/sm)) hinf(v)=1./(1.+exp((v-thetah)/sh)) ninf(v)=1./(1.+exp((v-thetan)/sn)) taun(v)=taun0+taun1/(1+exp((v+thn)/sigman)) tauh(v)=tauh0+tauh1/(1+exp((v+thh)/sigmah)) rinf(v)=1/(1+exp((v-thetar)/kr)) taur(v)=taur0+taur1/(1+exp((v+thr)/sigmar)) tinf(v)=1/(1+exp((v-thetat)/kt)) rnew(r)=1/(1+exp((r-rth)/rsig))-1/(1+exp(-rth/rsig)) # gp functions sinfg(vg)=1/(1+exp(-(vg-thetasg)/ksg)) sinf1g(vg)=1/(1+exp(-(vg-thetas1g)/ks1g)) rinfg(vg)=1/(1+exp(-(vg-thetarg)/krg)) minfg(vg)=1./(1.+exp(-(vg-thetamg)/sigmamg)) ninfg(vg)=1./(1.+exp(-(vg-thetang)/sigmang)) taung(vg)=taun0g+taun1g/(1+exp(-(vg-thng)/sng)) hinfg(vg)=1./(1.+exp(-(vg-thetahg)/sigmahg)) tauhg(vg)=tauh0g+tauh1g/(1+exp(-(vg-thhg)/shg)) hv(v)=1./(1.+exp(-v/.001)) # TC functions inaf(v,m,h)=gnabar*m^3*h*(v-ena) ikf(v,n)=gkbar*n^4*(v-ek) ilf(v)=glbar*(v-eleak) itf(v,mt,ht)=gtbar*mt^2*ht*v minftc(v) = 1/(1+exp(-(v+37)/7)) mtinf(v) = 1/(1+exp(-(v+60)/6.2)) ah(v) = 0.128*exp(-(46+v)/18) bh(v) = apr/(1+exp(-(23+v)/5)) tauhtc(v) = 1/(ah(v)+bh(v)) hinftc(v) = 1/(1+exp((v+41)/4)) htinf(v) = 1/(1+exp((v+84)/4)) tauht(v)=(28+apt*exp((v+25)/(-10.5))) # function for cortical inputs, periodic case: ftc(t)=itc*hv(sin(6.2831853*(t+shi)/period))*(1-hv(sin(6.2831853*(t+shi+dur)/period))) # function used to set up windows for calculation of error index: ftc2(t)=hv(sin(6.2831853*(t+shi2)/period))*(1-hv(sin(6.2831853*(t+shi2+dur2)/period))) # stn currents il(v)=gl*(v-vl) ina(v,h)=gna*(minf(v))^3*h*(v-vna) ik(v,n)=gk*n^4*(v-vk) iahp(v,ca)=gahp*(v-vk)*ca/(ca+k1) ica(v)=gca*((sinf(v))^2)*(v-vca) it(v,r)=gt*(tinf(v)**3)*(rnew(r)^2)*(v-vca) isyn1=gsyn*(sg5+sg2)*(v1-vsyn) isyn2=gsyn*(sg6+sg1)*(v2-vsyn) isyn3=gsyn*(sg8+sg4)*(v3-vsyn) isyn4=gsyn*(sg7+sg3)*(v4-vsyn) isyn5=gsyn*(sg2+sg6)*(v5-vsyn) isyn6=gsyn*(sg1+sg5)*(v6-vsyn) isyn7=gsyn*(sg3+sg8)*(v7-vsyn) isyn8=gsyn*(sg4+sg7)*(v8-vsyn) isyn9=gsyn*(sg13+sg10)*(v9-vsyn) isyn10=gsyn*(sg14+sg9)*(v10-vsyn) isyn11=gsyn*(sg16+sg12)*(v11-vsyn) isyn12=gsyn*(sg15+sg11)*(v12-vsyn) isyn13=gsyn*(sg10+sg14)*(v13-vsyn) isyn14=gsyn*(sg9+sg13)*(v14-vsyn) isyn15=gsyn*(sg11+sg16)*(v15-vsyn) isyn16=gsyn*(sg12+sg15)*(v16-vsyn) # gp currents itg(vg,rg)=gtg*(sinfg(vg)^3)*rg*(vg-vcag) inag(vg,hg)=gnag*(minfg(vg)^3)*hg*(vg-vnag) ikg(vg,ng)=gkg*(ng^4)*(vg-vkg) iahpg(vg,cag)=gahpg*(vg-vkg)*cag/(cag+k1g) icag(vg)=gcag*((sinf1g(vg))^2)*(vg-vcag) ilg(vg)=glg*(vg-vlg) isyng1=gsyng*(s8+s4+.2*s16)*(vg1-vsyng) isyng2=gsyng*(s7+s3+.2*s15)*(vg2-vsyng) isyng3=gsyng*(s1+s5+.2*s9)*(vg3-vsyng) isyng4=gsyng*(s2+s6+.2*s10)*(vg4-vsyng) isyng5=gsyng*(s4+s8+.2*s12)*(vg5-vsyng) isyng6=gsyng*(s3+s7+.2*s11)*(vg6-vsyng) isyng7=gsyng*(s5+s2+.2*s13)*(vg7-vsyng) isyng8=gsyng*(s6+s1+.2*s14)*(vg8-vsyng) isyng9=gsyng*(s16+s12+.2*s8)*(vg9-vsyng) isyng10=gsyng*(s15+s11+.2*s7)*(vg10-vsyng) isyng11=gsyng*(s9+s13+.2*s1)*(vg11-vsyng) isyng12=gsyng*(s10+s14+.2*s2)*(vg12-vsyng) isyng13=gsyng*(s12+s16+.2*s4)*(vg13-vsyng) isyng14=gsyng*(s11+s15+.2*s3)*(vg14-vsyng) isyng15=gsyng*(s13+s10+.2*s5)*(vg15-vsyng) isyng16=gsyng*(s14+s9+.2*s6)*(vg16-vsyng) isyngg1=gsyngg*(sg2+sg3)*(vg1-vsyngg) isyngg2=gsyngg*(sg1+sg5)*(vg2-vsyngg) isyngg3=gsyngg*(sg4+sg8)*(vg3-vsyngg) isyngg4=gsyngg*(sg3+sg1)*(vg4-vsyngg) isyngg5=gsyngg*(sg6+sg7)*(vg5-vsyngg) isyngg6=gsyngg*(sg5+sg2)*(vg6-vsyngg) isyngg7=gsyngg*(sg8+sg3)*(vg7-vsyngg) isyngg8=gsyngg*(sg7+sg4)*(vg8-vsyngg) isyngg9=gsyngg*(sg10+sg11)*(vg9-vsyngg) isyngg10=gsyngg*(sg9+sg13)*(vg10-vsyngg) isyngg11=gsyngg*(sg12+sg16)*(vg11-vsyngg) isyngg12=gsyngg*(sg11+sg9)*(vg12-vsyngg) isyngg13=gsyngg*(sg14+sg15)*(vg13-vsyngg) isyngg14=gsyngg*(sg13+sg10)*(vg14-vsyngg) isyngg15=gsyngg*(sg16+sg11)*(vg15-vsyngg) isyngg16=gsyngg*(sg15+sg12)*(vg16-vsyngg) isyngi[1..16]=gsyngi*si[j]*(vgi[j]-vsyng) isynggi[1..16]=gsynggi*sggi[j]*(vgi[j]-vsyn) i V1=-78.,V2=-55.,V3=-78.,V4=-52. i V5=-78.,V6=-78.,H1=0.2,H2=0.08 i H3=0.2,H4=0.08,H5=0.2,H6=0.2 i N1=0.08,N2=0.4,N3=0.08,N4=0.43 i N5=0.08,N6=0.08,R1=0.67,R2=0.38 i R3=0.67,R4=0.38,R5=0.67,R6=0.67 i CA1=0.44,CA2=0.47,CA3=0.4,CA4=0.4 i CA5=0.44,CA6=0.44,S1=0.001,S2=0.3 i S3=0.001,S4=0.35,S5=0.001,S6=0.31 i VG1=-16.,VG2=-69.,VG3=-6.8,VG4=-69. i VG5=-8.,VG6=-69.,NG1=0.84,NG2=0.2 i NG3=0.8,NG4=0.2,NG5=0.83,NG6=0.2 i HG1=0.1,HG2=0.7,HG3=0.14,HG4=0.7 i HG5=0.15,HG6=0.7,RG1=0.6,RG2=0.47 i RG3=0.66,RG4=0.47,RG5=0.66,RG6=0.47 i CAG1=0.068,CAG2=0.06,CAG3=0.067,CAG4=0.05 i CAG5=0.067,CAG6=0.05,SG1=0.025,SG2=0.025 i SG3=0.06,SG4=0.025,SG5=0.025,SG6=0.025 i V10=-78.,V9=-512.,V11=-78.,V13=-129. i V12=-78.,V15=-78.,H10=0.9,H9=0.08 i H11=0.9,H13=0.08,H12=0.9,H15=0.9 i N10=0.08,N9=0.13,N11=0.08,N13=0.1311 i N12=0.08,N15=0.08,R10=0.157,R9=0.118 i R11=0.157,R13=0.118,R12=0.157,R15=0.157 i CA10=0.1313,CA9=0.137,CA11=0.13,CA13=0.13 i CA12=0.1313,CA15=0.1313,S10=0.0010,S9=0.11 i S11=0.0010,S13=0.1112,S12=0.0010,S15=0.1110 i VG10=-1015.,VG9=-159.,VG11=-15.8,VG13=-159. i VG12=-8.,VG15=-159.,NG10=0.813,NG9=0.9 i NG11=0.8,NG13=0.9,NG12=0.811,NG15=0.9 i HG10=0.10,HG9=0.7,HG11=0.1013,HG13=0.7 i HG12=0.1012,HG15=0.7,RG10=0.15,RG9=0.137 i RG11=0.1515,RG13=0.137,RG12=0.1515,RG15=0.137 i CAG10=0.0158,CAG9=0.015,CAG11=0.0157,CAG13=0.012 i CAG12=0.0157,CAG15=0.012,SG10=0.0912,SG9=0.0912 i SG11=0.015,SG13=0.0912,SG12=0.0912,SG15=0.0912 i vt1=-65.7,ht1=.008577 # stn equations v[1..16]'=-(il(v[j])+ina(v[j],h[j])+ik(v[j],n[j])+iahp(v[j],ca[j])+ica(v[j])+it(v[j],r[j]))-isyn[j]+hets*[j]+inp+dbs(t) h[1..16]'=phi*( hinf(v[j])-h[j] )/tauh(v[j]) n[1..16]'=phi*( ninf(v[j])-n[j] )/taun(v[j]) r[1..16]'=phir*(rinf(v[j])-r[j])/taur(v[j]) ca[1..16]'=phi*eps*(-ica(v[j])-it(v[j],r[j]) - kca*ca[j]) s[1..16]'=alpha*(1-s[j])*sinf(v[j]+ab)-beta*s[j] si[1..16]'=alphai*(1-si[j])*sinf(v[j]+ab)-betai*si[j] # gp equations vg[1..16]'= -(itg(vg[j],rg[j])+inag(vg[j],hg[j])+ikg(vg[j],ng[j])+iahpg(vg[j],cag[j])+icag(vg[j])+ilg(vg[j]))+iapp-isyngg[j]-isyng[j]+hetg*[j] ng[1..16]'= deltang*(ninfg(vg[j])-ng[j])/taung(vg[j]) hg[1..16]'= deltahg*(hinfg(vg[j])-hg[j])/tauhg(vg[j]) rg[1..16]'= phig*(rinfg(vg[j])-rg[j])/taurg cag[1..16]'=epsg*(-icag(vg[j])-itg(vg[j],rg[j]) - kcag*cag[j]) sg[1..16]'=alphag*(1-sg[j])*sinfg(vg[j]+abg)-betag*sg[j] sggi[1..16]'=alphaggi*(1-sggi[j])*sinfg(vg[j]+abg)-betaggi*sggi[j] # gpi equations vgi[1..16]'= -(itg(vgi[j],rgi[j])+inag(vgi[j],hgi[j])+ikg(vgi[j],ngi[j])+iahpg(vgi[j],cagi[j])+icag(vgi[j])+ilg(vgi[j]))+iappi-isyngi[j]-isynggi[j] ngi[1..16]'= deltang*(ninfg(vgi[j])-ngi[j])/taung(vgi[j]) hgi[1..16]'= deltahg*(hinfg(vgi[j])-hgi[j])/tauhg(vgi[j]) rgi[1..16]'= phig*(rinfg(vgi[j])-rgi[j])/taurg cagi[1..16]'=epsg*(-icag(vgi[j])-itg(vgi[j],rgi[j]) - kcagi*cagi[j]) sgi[1..16]'=alphag*(1-sgi[j])*sinfg(vgi[j]+abg)-betagi*sgi[j] # TC equations vt1'=-(ilf(vt1)+inaf(vt1,minftc(vt1),ht1)+ikf(vt1,.75*(1-ht1))+itf(vt1,mtinf(vt1),htt1))+ftc(t)-gsyntc*sga*(vt1-vsyntc) htt1'=qht*(htinf(vt1)-htt1)/tauht(vt1) ht1'=tadj*(hinftc(vt1)-ht1)/tauhtc(vt1) vt2'=-(ilf(vt2)+inaf(vt2,minftc(vt2),ht2)+ikf(vt2,.75*(1-ht2))+itf(vt2,mtinf(vt2),htt2))+ftc(t)-gsyntc*sgb*(vt2-vsyntc) htt2'=qht*(htinf(vt2)-htt2)/tauht(vt2) ht2'=tadj*(hinftc(vt2)-ht2)/tauhtc(vt2) # additional variables used for error index calculations and DBS # note that i1 is amplitude of DBS: # with i1'=0, signal turns on or off # il'=f(t) can be used to specify form of signal while on # pdbs is period of DBS # ddbs is on duration of each DBS pulse # both of these are constant by default but can be made time-dependent coun1'=0 coun2'=0 pdbs'=0 ddbs'=0 i1'=0 z[1..2]'=1-hv(z[j]-50) good[1..2]'=0 p thr0=20 i z1=50,z2=50 i good1=0,good2=0 global 1 {(vt1+thr0)*hv(t-25)*hv(ftc2(t)-0.5)} {coun1=coun1+1} global 1 {(vt2+thr0)*hv(t-25)*hv(ftc2(t)-0.5)} {coun2=coun2+1} global 1 {(vt1+10)*hv(t-25)*hv(ftc2(t)-0.5)*hv(z1-40)} {z1=0;good1=good1+1} global 1 {(vt2+10)*hv(t-25)*hv(ftc2(t)-0.5)*hv(z2-40)} {z2=0;good2=good2+1} dbs(t)=i1*hv(sin(6.2831853*t/pdbs))*(1-hv(sin(6.2831853*(t+ddbs)/pdbs))) sga=sgi1+sgi2+sgi5+sgi6+sgi9+sgi10+sgi13+sgi14 sgb=sgi3+sgi4+sgi7+sgi8+sgi11+sgi12+sgi15+sgi16 aux sg=ftc(t) aux sgt=ftc2(t) aux sa=sga aux sb=sgb @ maxstor=100001,dt=.1,total=1000,meth=qualrk,xp=t,yp=v1,xlo=0,xhi=1000,ylo=-80,yhi=20.,bound=50000 done