// $Id: params.hoc,v 1.273 2012/01/06 01:53:57 samn Exp $ print "Loading params.hoc..." //* batch params jrsvn_INTF6=1e3 jrsvd_INTF6=2e4 jrtm_INTF6 = 1e3 //* sim duration & some params v_init=1000 // so keep v's as set randomly // sim runs for: // PreDur s of baseline (A) // turn on zip <<-- only if EERed,EIRed != 1 // ZipDur s (B) // turn on plasticity // LearnDur s (C) // turn off plasticity // PostDur s (D) // *************** // For investigating synaptic scaling as a balancer for STDP (units in s): // *************** //declare("PreDur",800) // Num seconds to get baseline activity and allow scaling activity points to be found (was 100 in Sam's paper) //declare("ZipDur",0) // For experiments on memory erasure with ZIP drug (not in use) //declare("LearnDur",8000) // STDP (learning from signal, set to TrainRate Hz) //declare("PostDur",800) // "Recall" (allowing non-STDP recurrent update) (was 100 in paper) // *************** // Alzheimer's pathology with STDP (for neurostimulation experiments) (units in s): // *************** //declare("PreDur",1600) // Equal to GetInfoDur + BaselineDur in alz.hoc -- allows baseline info and activity etc. to be obtained without interference. //declare("ZipDur",0) // Not using ZIP for Alzheimer's experiments. //declare("LearnDur",160000) // = DeletionDur in alz.hoc -- turns learning on for the duration of the run // Requires 0 < TrainRate << 1 for this to work, and ideally also 0 < TrainW << 1. // TrainRate and TrainW need to be both > 0 for STDP to be activated, but TrainRate > 0.1 // will mean a massive spike vector has to be initialised for this very long LearnDur. // Likewise, TrainW should be very low (but still > 0) so the Training signal is // essentially switched off, but is still present for the procedures which require it. //declare("PostDur",0) // "Recall" state // *************** // Alzheimer's pathology WITHOUT STDP (for neurostimulation experiments) (units in s): // *************** declare("PreDur",161600) // Equal to BaselineDur + DeletionDur in alz.hoc declare("ZipDur",0) declare("LearnDur",0) declare("PostDur",0) // "Recall" state // ************* // Alzheimer's pathology with learning and STDP (for information contribution experiments) (units in s): // ************* //declare("PreDur",1700) // Run at baseline with stim to get scaling targets (BaselineDur in alz.hoc) //declare("ZipDur",0) //declare("LearnDur",3100) // 31 patterns * 100s learning per pattern (also BaselineDur in alz.hoc) //declare("PostDur",192000) // GetInfoDur + DeletionDur in alz.hoc // ************* // Alzheimer's pathology with discrete stim patterns but without learning // ************* //declare("PreDur",164800) //declare("ZipDur",0) //declare("LearnDur",0) //declare("PostDur",0) declare("use_nqLFP",0) tstop=mytstop=htmax= (LearnDur + ZipDur + PreDur + PostDur) * 1e3 //* ARTC params mg_INTF6=1.6 EAM_INTF6=65 // these are deviations above RMP ENM_INTF6=90 EGA_INTF6=-15 declare("tauahpRS",400) // tauahp for RS cells if(!autotune) { if(useplast) seadsetting_INTF6 = 3 // plasticity on } //* Declarations dosetexvals=name_declared("wmatex")==0 // whether to set values in wmatex,ratex sprint(tstr,"d[%d][%d]",CTYPi,STYPi) declare("wmatex",tstr,"ratex",tstr) // weights,avg. rate of external inputs declare("fih","o[1]","nstim","o[1]") vseed_stats(223481) rdm.MCellRan4(seed_stats) declare("vsgrpp",new Vector(CTYPi)) //% X 100 of cells of a type to stim, used in stim,sgrcells declare("vsgrsidx",new Vector(CTYPi)) //startind index of cell to stim when using topstim declare("sgrdur",mytstop + 5e3) //duration of stim, make it longer so NetStims don't run out of spikes declare("inputseed",1234) declare("EXFctr",1) declare("sgrhzEE",300*EXFctr,"sgrhzEI",300*EXFctr,"sgrhzII",125*EXFctr,"sgrhzIE",125*EXFctr,"sgrhzNM",50*EXFctr,"sgron",1,"sgrdel",0) //declare("sgrhzEE",400*EXFctr,"sgrhzEI",400*EXFctr,"sgrhzII",80*EXFctr,"sgrhzIE",30*EXFctr,"sgrhzNM",50*EXFctr) declare("sgron",1,"sgrdel",0,"sgrhzdel",0)//variance in sgrhz for an INTF6 declare("EXGain",15) // gain for external inputs declare("lcstim",new List()) // list of CSTIM objects declare("nqwmex",new NQS("ct","sy","w","rate")) // NQS passed to CSTIM init {sprint(tstr,"d[%d]",numcols) declare("EIBalance",tstr)} // whether to balance rate of external E/I inputs declare("usens",1) // whether to use NetStims in CSTIM declare("E2WEXGain",1,"E2REXGain",1) // gains for external inputs to E2 (1st is for E weights, 2nd is for E rates) SCAHP=SCTH=1 //* shock-related params declare("MAXSHOCK",10) sprint(tstr,"d[%d][%d][%d][%d]",numcols,CTYPi,STYPi,MAXSHOCK) declare("wshock",tstr,"durshock",tstr,"prctshock",tstr,"nshock",tstr,"isishock",tstr,"startshock",tstr) //* "zip"-related params -- modulates strength of internal weights from E->X declare("ZipONT",PreDur*1e3,"zid","o[1]","EERed",1,"EIRed",1,"ZIPNM2",0) // EERed,EIRed only work on AM2 unless ZIPNM2==1 declare("ZipOFFT",-1) // zip stays on full sim -- -1==never zip off //* EGA-related params declare("EGAONT",-1,"EGAOFFT",-1,"EGAINCT",0,"did","o[1]","EGAStart",0,"EGAInc",0) //* "modulation"-related params -- just modulates external input weights to ModType // applies modulation at t = modulationT ms. // ModGain is scaling factor for AM2,NM2 synapses declare("ModONT",0,"fid","o[1]","ModGain",1,"ModType",E2) // when to apply modulation to ModType declare("ModOFFT",-1) // modulation stays on full sim -- -1==never modulate off //* Training-signal related params declare("vtrainty",new Vector(),"vtrainprct",new Vector()) vtrainty.append(E4) vtrainprct.append(110) declare("TrainRate",0.000001) // TrainRate is input rate for L4 declare("TrainNUM",0,"TrainW",0.0001,"TrainDUR",1,"TrainSY",AM2) // Set TrainW = weight for training signal declare("TrainRand",0) // whether to randomize training spikes (keeps same # just removes correlations) // start,stop time for training signal -- only used when TrainW,TrainISI>0 declare("TrainStart",(PreDur+ZipDur)*1e3, "TrainStop", tstop-PostDur*1e3) // train off when TrainW == 0 declare("PlastStart",(PreDur+ZipDur)*1e3,"PlastStop",tstop-PostDur*1e3) //declare("plastEEinc",0.05,"plastEIinc",0.10,"plastEEmaxw",10*EERed,"plastEImaxw",15*EIRed) //declare("plastIEinc",0.01*5,"plastIIinc",0.01*5,"plastIEmaxw",3,"plastIImaxw",3) declare("plastEEinc",0.001,"plastEIinc",0,"plastEEmaxw",4,"plastEImaxw",1) // Changed to allow only E->E STDP declare("plastIEinc",0,"plastIIinc",0,"plastIEmaxw",1,"plastIImaxw",1) declare("nqplast","o[1]") // stores weights sprint(tstr,"d[%d][%d]",CTYPi,CTYPi) declare("dplastinc",tstr,"dplasttau",tstr,"dplastmaxw",tstr) // params for plasticity if(DopeRL) { DOPE_INTF6=1 EDOPE_INTF6=IDOPE_INTF6=1 ESTDP_INTF6=ISTDP_INTF6=0 } else { ESTDP_INTF6 = 1 ISTDP_INTF6 = 0 } if(LearnDur > 0) { plaststartT_INTF6 = PlastStart plastendT_INTF6 = PlastStop } else plaststartT_INTF6 = plastendT_INTF6 = tstop + 1e3 TrainISI = 0 if(TrainRate > 0 && TrainW > 0) TrainISI = 1e3/TrainRate //* ModulateON -- applies ModGain to AM2,NM2 inputs to ModType cells (NetCon weights) proc ModulateON () { local i localobj nc,ncl print "Modulation of " , ModGain, " to " , CTYP.o(ModType).s, " ON at t = ", t for i=0,numcols-1 { ncl = col[i].cstim.ncl for ltr(nc,ncl) if(!isojt(nc.pre,INTF6[0]) && isojt(nc.syn,INTF6[0])) { if(nc.syn.type==ModType) { if(nc.weight(AM2)>0) nc.weight(AM2) = wmatex[ModType][AM2] * ModGain if(nc.weight(NM2)>0) nc.weight(NM2) = wmatex[ModType][NM2] * ModGain } } } } //* ModulateOFF -- applies E2ModGain to AM2,NM2 inputs to E2 cells (NetCon weights) proc ModulateOFF () { local i localobj nc,ncl print "Modulation of " , ModGain, " to " , CTYP.o(ModType).s, " OFF at t = ", t for i=0,numcols-1 { ncl = col[i].cstim.ncl for ltr(nc,ncl) if(!isojt(nc.pre,INTF6[0]) && isojt(nc.syn,INTF6[0])) { if(nc.syn.type==ModType) { if(nc.weight(AM2)>0) nc.weight(AM2) = wmatex[ModType][AM2] if(nc.weight(NM2)>0) nc.weight(NM2) = wmatex[ModType][NM2] } } } } //* InitModulation proc InitModulation () { if(ModGain!=1) { cvode.event(ModONT,"ModulateON()") if(ModOFFT > 0) cvode.event(ModOFFT,"ModulateOFF()") } } //* ZipON([invert]) - turn on zip - reduce internal AM2,NM2 weights proc ZipON () { local i,j,k,c,fctr1,fctr2,inv,a localobj cel,vwt1,vwt2,vidx,ce if(numarg()>0) inv=$1 else inv=0 if(inv) fctr1=EEREd else fctr1=1/EERed if(inv) fctr2=EIRed else fctr2=1/EIRed a=allocvecs(vwt1,vwt2,vidx) print "call ZipON at t = ", t, ", inv = ", inv for c=0,numcols-1 for col[c].ctt(&i) if(!ice(i)) { ce=col[c].ce if(wsetting_INTF6 == 1) { for j=col[c].ix[i],col[c].ixe[i] { cel = ce.o(j) vrsz(cel.getdvi(vidx),vwt1,vwt2) vwt1.fill(0) vwt2.fill(0) cel.getsywv(vwt1,vwt2) for k=0,vwt1.size-1 { if(ice(ce.o(vidx.x(k)).type)) { vwt1.x(k) *= fctr2 if(ZIPNM2) vwt2.x(k) *= fctr2 } else { vwt1.x(k) *= fctr1 if(ZIPNM2) vwt2.x(k) *= fctr1 } } cel.setsywv(vwt1,vwt2) } } else { for col[c].ctt(&j) if(col[c].div[i][j]) { if(ice(j)) { col[c].wd0[i][j][AM2] *= fctr2 if(ZIPNM2) col[c].wd0[i][j][NM2] *= fctr2 } else { col[c].wd0[i][j][AM2] *= fctr1 if(ZIPNM2) col[c].wd0[i][j][NM2] *= fctr1 } } } } dealloc(a) } //* ZipOFF - turn off zip - resets internal weights back up proc ZipOFF () { ZipON(-1) } //* InitZip proc InitZip () { if(EERed!=1 || EIRed!=1) { cvode.event(ZipONT,"ZipON()") if(ZipOFFT > 0) cvode.event(ZipOFFT,"ZipOFF()") } } //* UpdateEGA proc UpdateEGA () { if(t == EGAONT) { print " t is ", t , " init EGA_INTF6 to " , EGAStart EGA_INTF6 = EGAStart } else { print "t is " , t, " changing EGA_INTF6 from ", EGA_INTF6 , " to " , EGA_INTF6+EGAInc EGA_INTF6 += EGAInc } if(t+EGAINCT <= EGAOFFT) cvode.event(t+EGAINCT,"UpdateEGA()") } //* InitEGA proc InitEGA () { if(EGAONT >= 0 && EGAOFFT > EGAONT && EGAInc!=0) { cvode.event(EGAONT,"UpdateEGA()") } } //* setwmatex - set weights of external inputs to INTF6s proc setwmatex () { local ct,sy,lr,gn if(dosetexvals) { for ct=0,CTYPi-1 for sy=0,STYPi-1 wmatex[ct][sy]=0 for ct=0,CTYPi-1 { ly=int(layer(ct)) // if(ly==5) gn=0.875 else gn=1 gn=1 if(ice(ct)) { ratex[ct][AM2]=sgrhzEI * gn ratex[ct][GA2]=ratex[ct][GA]=sgrhzII * gn } else { ratex[ct][AM2]=sgrhzEE * gn ratex[ct][GA2]=ratex[ct][GA]=sgrhzIE * gn } ratex[ct][NM2]=sgrhzNM * gn if(IsLTS(ct)) { wmatex[ct][AM2] = 0.2 * gn wmatex[ct][NM2] = 0.025 * gn wmatex[ct][GA]=wmatex[ct][GA2]=0.125 * gn } else if(ice(ct)) { wmatex[ct][NM2] = 0.100 * gn wmatex[ct][AM2] = 0.275 * gn wmatex[ct][GA]=wmatex[ct][GA2]=0.125 * gn } else { wmatex[ct][NM2] = 0.05 * gn wmatex[ct][AM2] = 0.25 * gn wmatex[ct][GA]=wmatex[ct][GA2]=0.125 * gn } for sy=0,STYPi-1 wmatex[ct][sy] *= EXGain // apply gain control } {wmatex[E2][AM2] *= E2WEXGain wmatex[E2][NM2] *= E2WEXGain} {ratex[E2][AM2] *=E2REXGain ratex[E2][NM2] *=E2REXGain} } nqwmex.clear() //wmatex[E4][AM2] *= 0.5 // @@@ CK: Add attentional modulation for the cell populations listed in batch.ho for ct=0,CTYPi-1 for sy=0,STYPi-1 if(wmatex[ct][sy]) nqwmex.append(ct,sy,wmatex[ct][sy],ratex[ct][sy]) } //* RSparams - setup regular spiking excitatory cells proc RSparams () { local ii,jj localobj xo,co for ltr(co,lcol) for case(&ii,E2,E4,E5R,E5B,E6) if(co.numc[ii]>0) { for jj=co.ix[ii],co.ixe[ii] { xo=co.ce.o(jj) xo.ahpwt=1 xo.tauahp=tauahpRS if(ii==E2) { xo.RMP = -68 // -71.5 } else if(ii==E4 || ii==E6) { xo.RMP = -66.4 } else if(ii==E5R || ii==E5B) { xo.RMP = -63 } xo.RMP = -65 xo.VTH= -40 xo.refrac= 5 xo.Vblock= -25 xo.tauGA = 10 xo.tauGA2 = 20 xo.tauAM2 = 20 xo.tauNM2 = 300 xo.tauRR = 1 //4 //8 xo.RRWght = 0.5 // .75 } } } //* LTSparams - setup low-threshold spiking interneurons proc LTSparams () { local ii,jj localobj xo,co for ltr(co,lcol) for case(&ii,I2L,I4L,I5L,I6L) if(co.numc[ii]>0) { for jj=co.ix[ii],co.ixe[ii] { xo=co.ce.o(jj) xo.ahpwt=0.5 xo.refrac= 1.25 xo.tauahp=50 xo.Vblock=-10 xo.RMP = -65 xo.VTH= -47 xo.tauGA = 10 xo.tauGA2 = 20 xo.tauAM2 = 20 xo.tauNM2 = 300 xo.tauRR = 1 xo.RRWght = 0.25 } } } //* FSparams - setup fast spiking interneurons proc FSparams () { local ii,jj localobj xo,co for ltr(co,lcol) for case(&ii,I2,I2C,I4,I5,I6,I6C) if(co.numc[ii]>0) { for jj=co.ix[ii],co.ixe[ii] { xo=co.ce.o(jj) xo.ahpwt=0.5 xo.refrac= 1.25 xo.tauahp=50 xo.Vblock=-10 xo.RMP = -63 xo.VTH= -40 xo.tauGA = 10 xo.tauGA2 = 20 xo.tauAM2 = 20 xo.tauNM2 = 300 xo.tauRR = 1 xo.RRWght = 0.25 } } } //* setNMParams(col,celltype,mg0 factor,maxnmc) proc setNMParams () { local ct,mgf,maxnmc,idx localobj col,ce col=$o1 ce=col.ce ct=$2 mgf=$3 maxnmc=$4 for idx=col.ix[ct],col.ixe[ct] { ce.o(idx).mg0 = 3.57 * mgf ce.o(idx).maxnmc = maxnmc } } //* setNMIParams(col[,mg0 factor,maxnmc]) proc setNMI () { local mgf,maxnmc,ct localobj col col=$o1 if(numarg()>1) mgf=$2 else mgf=1 if(numarg()>2) maxnmc=$3 else maxnmc=1 for ct=0,CTYPi-1 if(ice(ct)) setNMParams(col,ct,mgf,maxnmc) } //* schizon - turn on schizo params proc schizon () { local c,ct for c=0,numcols-1 { setNMI(col[c],0.75,0.75) setNMParams(col[c],E4,1.25,1.25) for case(&ct,E2,E5R,E5B) setNMParams(col[c],ct,0.75,0.9) } } //* schizon - turn off schizo params proc schizoff () { local c,ct for c=0,numcols-1 { setNMI(col[c],1,1) setNMParams(col[c],E4,1,1) for case(&ct,E2,E5R,E5B) setNMParams(col[c],ct,1,1) } } proc rewt () {} // nothing needs to be done since copy directly into wd0[][][] //* setcstim - set external inputs to COLUMNs using CSTIM proc setcstim () { local i,seed for i=0,lcol.count-1 { if(dbgcols)seed=inputseed else seed=(i+1)*inputseed lcstim.append(new CSTIM(lcol.o(i),seed,sgrdur,sgrhzdel,EIBalance[i],usens)) lcstim.o(lcstim.count-1).setwm(nqwmex) lcstim.o(lcstim.count-1).setspks() } print "set external inputs" } //* clrshock -- clear all shock params and actual shocks proc clrshock () { local i,j,k,l for i=0,numcols-1 for j=0,CTYPi-1 for k=0,STYPi-1 for l=0,MAXSHOCK-1 { wshock[i][j][k][l]=durshock[i][j][k][l]=prctshock[i][j][k][l]=nshock[i][j][k][l]=isishock[i][j][k][l]=startshock[i][j][k][l]=0 } setshock(1) } //* setshockparms -- setup matrices for shock params used by setshock proc setshockparms () { local i,x,tm for i=0,1 { wshock[0][E4][AM2][i] = wshock[0][E4][NM2][i] = 15.25 durshock[0][E4][AM2][i] = 1 prctshock[0][E4][AM2][i] = 100 if(i==0) { startshock[0][E4][AM2][i] = 100e3 isishock[0][E4][AM2][i] = 100 nshock[0][E4][AM2][i] = 50 } else { startshock[0][E4][AM2][i] = 200e3 isishock[0][E4][AM2][i] = 1e3 / 15 nshock[0][E4][AM2][i] = 50 } } } //* setshockp(celltype,column,synapsetype,weight,starttime,prctcells,nshocks,isi,dur,shocknum) proc setshockp () { local i,x,cty,col,syty,wt,tm,prct,ns,isi,dur,shockn cty=$1 col=$2 syty=$3 wt=$4 tm=$5 prct=$6 ns=$7 isi=$8 dur=$9 shockn=$10 wshock[col][cty][syty][shockn] = wt durshock[col][cty][syty][shockn] = dur prctshock[col][cty][syty][shockn] = prct nshock[col][cty][syty][shockn] = ns isishock[col][cty][syty][shockn] = isi startshock[col][cty][syty][shockn] = tm } //* setshock([clear vq first]) - set stims using shock matrices , NB: DEFAULT IS TO CLEAR vq FIRST proc setshock () { local clr,i,j,k,l,tt,set,ns if(numarg()>0) clr=$1 else clr=1 for i=0,numcols-1 for ns=0,1 { set=0 // whether setting new spikes if(clr) {col[i].cstim.vq.clear() col[i].ce.o(0).clrvspks()} // clear shocks to this column? for j=0,CTYPi-1 for k=0,STYPi-1 if(wshock[i][j][k][ns]>0 && nshock[i][j][k][ns]>0) { set = 1 tt = startshock[i][j][k][ns] // time for l=0,nshock[i][j][k][ns]-1 { col[i].cstim.shock(durshock[i][j][k][ns],prctshock[i][j][k][ns],j,tt,9342*(i+1)*(j+1)*(k+1)*(l+1),k,wshock[i][j][k][ns]) tt += isishock[i][j][k][ns] // inc by ISI } } if(set) {col[i].cstim.pushspks() print col[i].cstim.vq.size(-1)} } } //* setplast proc setplast () { local i,j,ty2,xiinc,xeinc,ximaxw,xemaxw,xired,xered,gn,ly1,ly2,a localobj xo,vwg,vtau,vinc,vmaxw,vidx a=allocvecs(vwg,vtau,vinc,vmaxw,vidx) for i=0,CTYPi-1 if(col.numc[i]) { if(ice(i)) { xiinc = plastIIinc xeinc = plastIEinc ximaxw = plastIImaxw xemaxw = plastIEmaxw xered = xired = 1 } else { xiinc = plastEIinc xeinc = plastEEinc ximaxw = plastEImaxw xemaxw = plastEEmaxw xered = EERed xired = EIRed } ly1=int(layer(i)) for j=0,CTYPi-1 if(col.div[i][j]) { gn=1 ly2=int(layer(j)) // if(ly2==2 || ly2==4) gn=1 // if(int(layer(i))==int(layer(j))) gn=1 else gn=2 // if(int(layer(i))==2 && int(layer(j))==5) gn=1 // if(int(layer(i))==4 && int(layer(j))==2) gn=1 if(ice(j)) { dplastinc[i][j] = xiinc * gn dplasttau[i][j] = 10 * 2 if(DopeRL) dplasttau[i][j] = 205 dplastmaxw[i][j] = ximaxw * xired } else { dplastinc[i][j] = xeinc * gn dplasttau[i][j] = 10 * 2 if(DopeRL) dplasttau[i][j] = 205 dplastmaxw[i][j] = xemaxw * xered } } } if(plaststartT_INTF6 < 0) { plaststartT_INTF6 = tstop/3.0 plastendT_INTF6 = tstop*2.0/3.0 } maxplastt_INTF6 = 40 * 3 // max time interval over which to consider plasticiy for ltr(xo,col.ce) { xo.getdvi(vidx) vrsz(vidx.size,vwg,vtau,vinc,vmaxw) vwg.fill(1) for i=0,vidx.size-1 { ty2 = col.ce.o(vidx.x(i)).type vtau.x(i) = dplasttau[xo.type][ty2] vinc.x(i) = dplastinc[xo.type][ty2] vmaxw.x(i) = dplastmaxw[xo.type][ty2] } if(0) print ice(xo.type),vtau.min,vtau.max,vinc.min,vinc.max,vmaxw.min,vmaxw.max xo.setplast(vwg,vtau,vinc,vmaxw) } dealloc(a) } //* getplastnq(col) - make an NQS with plasticity info, so can load later obfunc getplastnq () { local i,a localobj nq,col,xo,vwg,vtau,vinc,vmaxw a=allocvecs(vwg,vtau,vinc,vmaxw) col=$o1 nq=new NQS("id","gid","vwg","vtau","vinc","vmaxw") {nq.odec("vwg") nq.odec("vtau") nq.odec("vinc") nq.odec("vmaxw")} for ltr(xo,col.ce) { vrsz(xo.getdvi,vwg,vtau,vinc,vmaxw) xo.getplast(vwg,vtau,vinc,vmaxw) nq.append(xo.id,xo.gid,vwg,vtau,vinc,vmaxw) } dealloc(a) return nq } //* setplastnq(nq,col) - load plasticity weights,info into col INTF6 cells // should set resetplast_INTF6 to 0 if using this function func setplastnq () { localobj nq,col,xo,vwg,vtau,vinc,vmaxw nq=$o1 col=$o2 for ltr(xo,col.ce) { if(nq.select(-1,"gid",xo.gid)!=1) { print "can't find gid " , xo.gid , " in nqs!" return 0 } vwg=nq.get("vwg",nq.ind.x(0)).o vtau=nq.get("vtau",nq.ind.x(0)).o vinc=nq.get("vinc",nq.ind.x(0)).o vmaxw=nq.get("vmaxw",nq.ind.x(0)).o if((i=xo.getdvi)!=vwg.size) { print "wrong size ", i, " != " , vwg.size return 0 } xo.setplast(vwg,vtau,vinc,vmaxw) } return 1 } //* plastoff proc plastoff () { local i,j,ty2,a localobj xo,vwg,vtau,vinc,vmaxw,vidx a=allocvecs(vwg,vtau,vinc,vmaxw,vidx) for ltr(xo,col.ce) { xo.getdvi(vidx) vrsz(vidx.size,vwg,vtau,vinc,vmaxw) vwg.fill(1) for i=0,vidx.size-1 { ty2 = col.ce.o(vidx.x(i)).type vtau.x(i) = dplasttau[xo.type][ty2] vinc.x(i) = 0 vmaxw.x(i) = dplastmaxw[xo.type][ty2] } xo.setplast(vwg,vtau,vinc,vmaxw) } dealloc(a) } //* trainsig(isi,signal number,weight,ty,dur,prct[,clear]) - setup training signal proc trainsig () { local a,i,nsumshocks,isi,clr,w,ty,dur,prct,sy,ty2 localobj rdm,vty a=allocvecs(vty) if(numarg()>7) clr=$8 else clr=0 if(clr) clrshock() isi=$1 numshocks = (TrainStop - TrainStart) / isi w=$3 ty=$4 dur=$5 prct=$6 sy=$7 if(ty < 0) { if(int(layer(-ty))==4) { vty.append(E4,I4,I4L) } else if(int(layer(-ty))==2) { vty.append(E2,I2,I2L) } else if(int(layer(-ty))==5) { vty.append(E5R,E5B,I5,I5L) } else if(int(layer(-ty))==6) { vty.append(E6,I6,I6L) } for i=0,numcols-1 for vtr(&ty2,vty) setshockp(ty2,i,sy,w,TrainStart,prct,numshocks,isi,dur,$2) } else for i=0,numcols-1 setshockp(ty,i,sy,w,TrainStart,prct,numshocks,isi,dur,$2) dealloc(a) } //* settrainsig - setup training sig proc settrainsig () { local ii localobj rdm if(TrainW<=0 || TrainISI<=0) return for ii=0,vtrainty.size-1 { //training signal during plasticity period trainsig(TrainISI,0,TrainW,vtrainty.x(ii),TrainDUR,vtrainprct.x(ii),TrainSY) } setshock(0) if(TrainRand) { rdm=new Random() rdm.ACG(inputseed^2) rdm.uniform(TrainStart,TrainStop) for ii=0,numcols-1 { col[ii].cstim.vq.getcol("time").setrand(rdm) col[ii].cstim.pushspks() } } } //* function calls setwmatex() {RSparams() LTSparams() FSparams()} if (!jcn) rjinet() //means no jitcon if(disinhib) inhiboff() setcstim() // how to shock: // setup params for shock << timing, weights, bursts, isi, etc. // {clrshock() setshockparms() setshock()} // sets up modulation events to ModType, only matters if ModGain != 1 (supposed to be < 1 for damage) // fid = new FInitializeHandler(1,"InitModulation()") // sets up Zip, if applicable (only iff EERed !=1 or EIRed != 1) zid = new FInitializeHandler(1,"InitZip()") // sets up changes to EGA, if applicable did = new FInitializeHandler(1,"InitEGA()") if(seadsetting_INTF6==3) setplast() // setup plasticity params settrainsig()