// $Id: sense.hoc,v 1.21 2011/11/22 22:55:23 samn Exp $ //* proprioceptive inputs declare("stimnq","o[1]","DPseed",9658,"DPdt",1,"ldp","o[1]","minDPr",0,"maxDPr",1) rdmthresh_DRSPK = 1 //* mkstimnq([seed]) - make NQS with inputs to DP(proprioceptive) cells proc mkstimnq () { local ii,se,a localobj xo,rdm,ind,vr if(numarg()>0) se=$1 else se=9658 {nqsdel(stimnq) stimnq=new NQS("eflex","eext","wflex","wext")} rdm=new Random() rdm.ACG(se) a=allocvecs(ind,vr) ind.indgen(0,PI/2,0.01) for ii=0,10 {stimnq.v[0].append(ind) stimnq.v[0].append(ind.c.reverse)} stimnq.v[1].copy(stimnq.v[0]) ind.indgen(PI/4,3*PI/4,0.01) // recording at 1e-3 but play back at 0.3 for ii=0,10 {stimnq.v[2].append(ind) stimnq.v[2].append(ind.c.reverse)} stimnq.v[3].copy(stimnq.v[2]) for case(&ii,0,2) stimnq.v(ii).apply("sin") for case(&ii,1,3) stimnq.v(ii).apply("cos") for ii=0,2 stimnq.v(ii).scale(0.1,0.5) for ltr(xo,cedp) stimnq.v[xo.zloc].play(&xo.drive, 0.6) rdm.poisson(8) vr.resize(tstop) for ltr(xo,cedp,&ii) { vr.setrand(rdm) vr.scale(minDPr,maxDPr) vr.play(&xo.rand, 0.6) } dealloc(a) } //* setDPrand - set random thresholds for DP cells proc setDPrand () { local ii,se,a localobj xo,rdm,vr,vec if(numarg()>0) se=$1 else se=9658 if(rdmthresh_DRSPK) { ldp=new List() rdm=new Random() rdm.ACG(se) rdm.poisson(8) } else {rdm=new Random() rdm.ACG(se)} for ltr(xo,cedp,&ii) { if(rdmthresh_DRSPK) { rdm.normal(25,10) ldp.append(vr=new Vector(tstop / DPdt + 1)) vr.setrand(rdm) // vr.scale(minDPr,maxDPr) vr.scale(1.5,50) vr.play(&xo.drspk.rand,DPdt) } else { xo.drspk.thresh = xo.drspk.rand = rdm.uniform(minDPr,maxDPr) } } } //* func calls setDPrand(DPseed)