Ejemplo n.º 1
0
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('..')
Ejemplo n.º 2
0
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('..')
Ejemplo n.º 3
0
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('..')
Ejemplo n.º 4
0
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()
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
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('..')
Ejemplo n.º 7
0
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('..')
Ejemplo n.º 8
0
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('..')
Ejemplo n.º 9
0
 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