def generateGao10e3(vpn): ''' Experiment 3 from Gao et al. (2010) Gao, T., McCarthy, G., & Scholl, B. J. (2010). The Wolfpack Effect Perception of Animacy Irresistibly Influences Interactive Behavior. Psychological science, 21(12), 1845-1853. vpn - tuple of ints, each value gives the subject id ''' offs=5.875; sz=(2*offs+Q.agentSize,2*offs+Q.agentSize) quadrants=[EmptyMaze((1,1),dispSize=sz,pos=(offs,offs),lw2cwRatio=0), EmptyMaze((1,1),dispSize=sz,pos=(-offs,offs),lw2cwRatio=0), EmptyMaze((1,1),dispSize=sz,pos=(offs,-offs),lw2cwRatio=0), EmptyMaze((1,1),dispSize=sz,pos=(-offs,-offs),lw2cwRatio=0)] nrtrials=42; os.chdir('..');os.chdir('input/') for vp in vpn: vpname='vp%03d' % vp;os.mkdir(vpname);os.chdir(vpname) for trial in range(nrtrials): if vp>300 and vp<400 and vp!=350: continue trajectories=[] for k in range(len(quadrants)): traj=generateTrial(5,maze=quadrants[k], rejectionDistance=0.0) trajectories.append(traj[:,2:,:]) fn='%strial%03d'% (vpname,trial); np.save(fn,np.concatenate(trajectories,axis=1)) np.save('order%sb%d'% (vpname,0),np.random.permutation(nrtrials)) np.save('order%sb%d'% (vpname,1),np.random.permutation(nrtrials)) np.save('order%sb%d'% (vpname,2),np.random.permutation(nrtrials)) Q.save('SettingsTraj.pkl') os.chdir('..')
def generateExperiment(vpn): ''' vpn - tuple of ints, each value gives the subject id ''' offs=5.875; sz=(2*offs+Q.agentSize,2*offs+Q.agentSize) quadrants=[EmptyMaze((1,1),dispSize=sz,pos=(offs,offs),lw2cwRatio=0), EmptyMaze((1,1),dispSize=sz,pos=(-offs,offs),lw2cwRatio=0), EmptyMaze((1,1),dispSize=sz,pos=(offs,-offs),lw2cwRatio=0), EmptyMaze((1,1),dispSize=sz,pos=(-offs,-offs),lw2cwRatio=0)] nrtrials=42; os.chdir('..');os.chdir('input/') for vp in vpn: vpname='vp%03d' % vp;os.mkdir(vpname);os.chdir(vpname) for trial in range(nrtrials): if vp>300 and vp<400 and vp!=350: continue trajectories=[] for k in range(len(quadrants)): traj=generateTrial(5,maze=quadrants[k], rejectionDistance=0.0) trajectories.append(traj[:,2:,:]) fn='%strial%03d'% (vpname,trial); np.save(fn,np.concatenate(trajectories,axis=1)) np.save('order%sb%d'% (vpname,0),np.random.permutation(nrtrials)) np.save('order%sb%d'% (vpname,1),np.random.permutation(nrtrials)) np.save('order%sb%d'% (vpname,2),np.random.permutation(nrtrials)) Q.save('SettingsTraj.pkl') os.chdir('..')
def generateGao10e4(vpn): ''' Experiment 4 from Gao et al. (2010) Gao, T., McCarthy, G., & Scholl, B. J. (2010). The Wolfpack Effect Perception of Animacy Irresistibly Influences Interactive Behavior. Psychological science, 21(12), 1845-1853. vpn - tuple of ints, each value gives the subject id ''' # gao10e4 settings maze=EmptyMaze((1,1),dispSize=(18,18),lw2cwRatio=0) Q.setTrialDur(8); nrtrials=90; Q.setAspeed(5.1) os.chdir('..');os.chdir('input/') for vp in vpn: vpname='vp%03d' % vp;os.mkdir(vpname);os.chdir(vpname) for trial in range(nrtrials): if vp>400 and vp<500: continue trajectories=generateTrial(12,maze=maze, rejectionDistance=0.0) fn='%strial%03d'% (vpname,trial); np.save(fn,trajectories[:,2:,:]) np.save('order%sb0'% (vpname),np.random.permutation(nrtrials)) np.save('order%sb1'% (vpname),np.random.permutation(nrtrials)) np.save('order%sb2'% (vpname),np.random.permutation(nrtrials)) Q.save('SettingsTraj.pkl') os.chdir('..')
def PFinit(vp,event,suf=''): path,inpath,fp=initPath(vp,event) if event>=0: N=[50,15,8,2][event] else: N=1 dat={'N':N,'os':64,'rot':1, 'width':10,'hz':85.0,'SX':0.3,'SY':0.3,'ST':40} np.save(inpath+'stackPF.npy',range(dat['N']+1)) Q.save(inpath+'PF%s.q'%suf) f=open(inpath+'PF%s.pars'%suf,'w') pickle.dump(dat,f) f.close()
def __init__(self,of=None): # ask subject the information myDlg = gui.Dlg(title="Experiment zur Bewegungswahrnehmung",pos=Q.guiPos) myDlg.addText('VP Infos') myDlg.addField('Subject ID:',0) myDlg.addField('Block:',0) myDlg.addField('Alter:', 21) #age myDlg.addField('Geschlecht (m/w):',choices=(u'weiblich',u'maennlich'))#gender myDlg.addField(u'Händigkeit:',choices=('rechts','links'))# handedness myDlg.addField(u'Dominantes Auge:',choices=('rechts','links')) #dominant eye myDlg.addField(u'Sehschärfe: ',choices=('korrigiert','normal')) # acuity # hours per week spent at screen myDlg.addField(u'Wochenstunden vor dem Komputerbildschirm:', choices=('0','0-2','2-5','5-10','10-20','20-40','40+')) # hours per week playing computer games myDlg.addField(u'Wochenstunden Komputerspielen:', choices=('0','0-2','2-5','5-9','10-20','20+')) myDlg.addField('Starte bei Trial:', 0) # starting trial, for debug only myDlg.addField(u'Stimulus:',choices=('dart','eyes')) # shape of the stimulus myDlg.show()#show dialog and wait for OK or Cancel vpInfo = myDlg.data if myDlg.OK:#then the user pressed OK subinf = open(Q.outputPath+'vpinfo.res','a') subinf.write('%d\t%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s\t%d\t%s\n'% tuple(vpInfo)) subinf.close() else: print 'Experiment cancelled' return self.id=vpInfo[0] self.block=vpInfo[1] self.initTrial=vpInfo[-2] self.isDart= vpInfo[-1] == 'dart' # save settings, which we will use Q.save(Q.inputPath+'vp%03d'%self.id+Q.delim+'SettingsExp.pkl') if of==None: self.output = open(Q.outputPath+'vp%03d.res'%self.id,'a') else: self.output = open(Q.outputPath+of,'a') #init stuff self.wind=Q.initDisplay() # init text fs=1 # font size self.text1=visual.TextStim(self.wind,text='Error',wrapWidth=30,pos=[0,2]) self.text2=visual.TextStim(self.wind,text='Error',wrapWidth=30,pos=[0,0]) self.text3=visual.TextStim(self.wind, text='Error',wrapWidth=30,pos=[0,-10]) self.text1.setHeight(fs) self.text2.setHeight(fs) self.text3.setHeight(fs) self.f=0 self.permut=np.load(Q.inputPath+'vp%03d'%self.id+Q.delim +'ordervp%03db%d.npy'%(self.id,self.block)) if len(self.permut.shape)>1 and self.permut.shape[1]>1: self.data=self.permut[:,1:] self.permut=self.permut[:,0] self.nrtrials=self.permut.size
def generateGao09e1(vpn): ''' Experiment 1 from Gao et al. (2009) Gao, T., Newman, G. E., & Scholl, B. J. (2009). The psychophysics of chasing: A case study in the perception of animacy. Cognitive psychology, 59(2), 154-179. vpn - tuple of ints, each value gives the subject id ''' # gao09e1 settings # TODO move settings to Settings.py nrtrials=15 maze=EmptyMaze((1,1),dispSize=(32,24),lw2cwRatio=0) chs=[0,60,120,180,240,300] Q.setTrialDur(10);Q.phiRange=(120,120) Q.setpDirChange([5.9,5.9,5.9]) block=0 #os.chdir('..') os.chdir('..') os.chdir('input/') for vp in vpn: vpname='vp%03d' % vp os.mkdir(vpname) os.chdir(vpname) i=0 r=np.zeros((2*6*nrtrials,2)) r[:,0]=np.random.permutation(2*6*nrtrials) for cond in range(6): for trial in range(nrtrials): Q.phiRange=(Q.phiRange[0],chs[cond]) trajectories=None while trajectories ==None: trajectories=generateTrial(5,maze=maze, rejectionDistance=5.0) #target present trial r[i,1]=cond fn='gao09e1%sb%dtrial%03d'% (vpname,block,i); np.save(fn,trajectories[:,:-1,:]);i+=1 #target absent trial r[i,1]=cond+6 fn='gao09e1%sb%dtrial%03d'% (vpname,block,i); np.save(fn,trajectories[:,1:,:]);i+=1 np.save('gao09e1order%sb%d'% (vpname,block),r) Q.save('SettingsTraj.pkl') os.chdir('..') os.chdir('..')
def generateBabyExperiment(vpn,nrtrials=10,blocks=1,conditions=[6,8],rd=0,pdch=None, dispSize=29,maze=None): '''my work in progress, baby experiment''' #os.chdir('..') if not pdch is None: Q.setpDirChange(pdch) os.chdir(Q.inputPath) mazes=[] Q.nrframes+= Q.refreshRate *5 print 'Generating Trajectories' for vp in vpn: vpname='vp%03d' % vp os.mkdir(vpname) os.chdir(vpname) r=[] phase=[0,1,1,2] for i in range((len(conditions)*nrtrials-len(phase))/2): if np.random.rand()>0.5: phase.extend([1,2]) else: phase.extend([2,1]) print 'phase', phase for block in range(blocks): i=0 for condition in conditions: for trial in range(nrtrials): if condition==conditions[0]: if np.random.rand()>0.5: r.extend([trial, trial+nrtrials]) else: r.extend([trial+nrtrials,trial]) trajectories=None while trajectories ==None: trajectories=generateTrial(condition, maze=EmptyMaze((1,1),dispSize=(dispSize,dispSize)),rejectionDistance=rd) #fn='%str%03dcond%02d'% (vpname,trial,conditions[order[trial]]) #fn = 'trial%03d' % trial trajectories=trajectories[(Q.refreshRate*5):] #print trajectories.shape fn='%sb%dtrial%03d'% (vpname,block,i) i+=1 print fn np.save(fn,trajectories) #r=np.random.permutation(nrtrials*len(conditions)) r=np.array(r) print r np.save('order%sb%d'% (vpname,block),r) np.save('phase%sb%d'% (vpname,block),phase) Q.save('SettingsTraj.pkl') os.chdir('..') os.chdir('..')
def generateMixedExperiment(vpn,trialstotal,blocks=4,condition=14, dispSize=26,maze=None,probeTrials=False): '''my work in progress, experiment with chatch trials''' #os.chdir('..') os.chdir(Q.inputPath) mazes=[] if probeTrials: bs=range(0,blocks+1) else: bs=range(22,blocks+1) print 'Generating Trajectories' for vp in vpn: vpname='vp%03d' % vp #os.mkdir(vpname) os.chdir(vpname) Q.save('SettingsTraj.pkl') for block in bs: if block ==0: nrtrials=10 else: nrtrials=trialstotal for trial in range(nrtrials): if vp>1 and vp<10: continue if trial >= nrtrials*0.9: rd=0.0 else: rd=3.0 trajectories=None while trajectories ==None: trajectories=generateTrial(condition, maze=EmptyMaze((1,1),dispSize=(dispSize,dispSize)),rejectionDistance=rd) #fn='%str%03dcond%02d'% (vpname,trial,conditions[order[trial]]) #fn = 'trial%03d' % trial fn='%sb%dtrial%03d'% (vpname,block,trial) print fn np.save(fn,trajectories) while True:# check that more than 1 consecutive control trials do not occur r=np.random.permutation(nrtrials) r2=np.roll(np.random.permutation(nrtrials)>=nrtrials-0.1*nrtrials,1) #r3=np.roll(np.random.permutation(50)>=45,2) if not np.any(np.bitwise_and(r,r2)): break np.save('order%sb%d'% (vpname,block),r) os.chdir('..') os.chdir('..')
def __init__(self,vp=None): ''' inits variables and presents the intro dialog vp - subject id, useful for replay functionality''' # ask infos myDlg = gui.Dlg(title="Experiment zur Bewegungswahrnehmung",pos=Q.guiPos) myDlg.addText('VP Infos') myDlg.addField('Subject ID:',201)# subject id myDlg.addField('Block:',0) # block id myDlg.addField('Alter:', 21) # age myDlg.addField('Geschlecht (m/w):',choices=(u'weiblich',u'maennlich')) #gender myDlg.addField(u'Händigkeit:',choices=('rechts','links'))# handedness myDlg.addField(u'Dominantes Auge:',choices=('rechts','links'))# dominant eye myDlg.addField(u'Sehschärfe: ',choices=('korrigiert','normal')) # visual acuity # weekly hours spent on computer screen myDlg.addField(u'Wochenstunden vor dem Komputerbildschirm:', choices=('0','0-2','2-5','5-10','10-20','20-40','40+')) # weekly hours spent playing video games myDlg.addField(u'Wochenstunden Komputerspielen:', choices=('0','0-2','2-5','5-9','10-20','20+')) myDlg.addField('Starte bei Trial:', 0) # start trial id, for debug only if vp is None: myDlg.show()#show dialog and wait for OK or Cancel vpInfo = myDlg.data else: vpInfo=[vp,0,21,'','','','','','',0] self.id=vpInfo[0] self.block=vpInfo[1] self.initTrial=vpInfo[-1] self.scale=1#vpInfo[2] try:#then the user pressed OK subinf = open(Q.outputPath+'vpinfo.res','a') subinf.write('%d\t%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s\t%d\n'% tuple(vpInfo)) subinf.close() except: print 'Experiment cancelled' # save settings, which we will use Q.save(Q.inputPath+'vp%03d'%self.id+Q.delim+'SettingsExp.pkl') #init stuff self.wind=Q.initDisplay() self.mouse = event.Mouse(False,None,self.wind) self.mouse.setVisible(False) fcw=0.1; fch=0.8 #fixcross width and height fclist=[ visual.ShapeStim(win=self.wind, pos=[0,0],fillColor='white', vertices=((fcw,fch),(-fcw,fch),(-fcw,-fch),(fcw,-fch)),interpolate=False), visual.ShapeStim(win=self.wind, pos=[0,0],fillColor='white', vertices=((fch,fcw),(-fch,fcw),(-fch,-fcw),(fch,-fcw)),interpolate=False), visual.Circle(win=self.wind, pos=[0,0],fillColor='black',radius=0.1,interpolate=False)] self.fixcross=visual.BufferImageStim(self.wind,stim=fclist) self.wind.flip(); self.wind.flip() self.score=0 self.rt=0 # init text fs=1 # font size self.text1=visual.TextStim(self.wind,text='Error',wrapWidth=30,pos=[0,2]) self.text2=visual.TextStim(self.wind,text='Error',wrapWidth=30,pos=[0,0]) self.text3=visual.TextStim(self.wind, text='Error',wrapWidth=30,pos=[0,-10]) self.text1.setHeight(fs) self.text2.setHeight(fs) self.text3.setHeight(fs) self.f=0 self.permut=np.load(Q.inputPath+'vp%03d'%self.id+Q.delim +'ordervp%03db%d.npy'%(self.id,self.block)) if len(self.permut.shape)>1 and self.permut.shape[1]>1: self.data=self.permut[:,1:] self.permut=self.permut[:,0] self.nrtrials=self.permut.size