文档章节

psychopy coder模式编写心理试验程序 字符程序和记录反应时

z
 zbaigao01
发布于 2016/04/25 22:15
字数 1067
阅读 534
收藏 2

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

自变量

呈现3个字母,中间为A或者B的话,被试需要反应f,中间为X或Y的话,被试需要反应j。

3个字母中间有两种情况:AB或XY

3个字母两边有同类或异类两种情况:AB两边是AB为同类,为XY为异类;XY则反之

3个字母两边的颜色:红、绿、蓝

注视点呈现时间:400ms、500ms、600ms

 

因变量

被试的反应时和判断正确率

 

实验设计

480次trail

注视点呈现400ms、500ms和600ms分别160次

红、绿、蓝分别160次

中间为A的情况120次,其中60次两边为B(同类),30次两边为X(异类),30次两边为Y(异类)

中间为B、X和Y的情况依此构造

 

需要记录的结果

被试ID、实验序号、注视点呈现时间、呈现的字母、两边字母的颜色、正确的反应按键、实际的反应按键、反应时、是否反应正确。

 

程序思路

首先准备实验刺激,生成有16个项目的trailTypes,和颜色组合成48种,翻10倍,再和注视点时间进行搭配。之后写函数来实现具体程序。阅读程序时,从“这是程序真正开始的地方”开始阅读会比较容易,之后再具体看程序。

 

 

# -*- coding: utf-8 -*-
"""
Created on Sun Apr 10 12:40:30 2016
@author: zbg
"""
from psychopy.visual import Window, ImageStim, TextStim
from psychopy import core, event, gui, clock
import random
#准备trail和注视点时间
trailTypes = ['BAB', 'BAB', 'XAX', 'YAY', 
              'ABA', 'ABA', 'XBX', 'YBY',
              'YXY', 'YXY', 'AXA', 'BXB',
              'XYX', 'XYX', 'AYA', 'BYB']
colors = [(-1,-1,1), (-1,1,-1), (1,-1,-1)]
trails = []
"""
trails = [(timeCross, trailType, color, correctKey), ...]
"""
timeCrosses = [.4] * 160 + [.5] * 160 + [.6] * 160
for i in range(10):
    for tt in trailTypes:
        for c in colors:
            tc = tt[1]
            correctKey = 0
            if tc in "AB":
                correctKey = 'f'
            elif tc in "XY":
                correctKey = 'j'
            trails.append((timeCrosses.pop(), tt, c, correctKey))
#到这里,trails包含16 * 3 * 10 = 480次试验
random.shuffle(trails)
#存放结果的地方
results = []
"""
results = [(按键, 反应时, 是否正确), ...]
"""
#程序使用的各种函数
def GetSubject():
    """
    返回被试的id
    """
    myDlg = gui.Dlg(title="Subject Information")
    myDlg.addField(u'被试ID:')
    myDlg.show()
    if myDlg.OK:
        thisInfo = myDlg.data
     
    else:
        exit(0)
        
    return thisInfo[0]
def ShowIntro(win):
    introduce =u"""
    啦啦啦啦啦啦啦啦啦啦
    啦啦啦啦啦啦啦
    按[空格键]继续
    """
    t =TextStim(win, introduce ,pos=(0,-0.0))
    t.draw()
    win.flip()
    keys=[]
    while 'space' not in keys:
        keys=event.getKeys()
def ShowBlank(win):
    win.flip()
    clk = clock.CountdownTimer(0.5) 
    while clk.getTime() > 0:
        pass
def ShowCross(win, time):
    t =TextStim(win, '+' ,pos=(0,0), height = 55, units = "pix")
    t.draw()
    win.flip()
    clk = clock.CountdownTimer(time) #非常精确的计时器
    while clk.getTime() > 0:
        pass
    
    return
def ShowTrailAndGetKey(win, text, color):
    """
    返回(按键, 反应时(s))
    情况分别有:
        ('j', 反应时)
        ('f', 反应时)
        ('0', 1.2)    (超时)
    """
    tLeft   = TextStim(win, text[0], pos=(-70, 0), color = color,   height = 55, units = "pix")
    tRight  = TextStim(win, text[2], pos=(+70, 0), color = color,   height = 55, units = "pix")
    tCenter = TextStim(win, text[1], pos=(  0, 0), color = (1,1,1), height = 55, units = "pix")
    tLeft.draw()
    tRight.draw()
    tCenter.draw()
    event.clearEvents()
    
    win.flip()
    clk = clock.CountdownTimer(1.2)
    while clk.getTime() > 0:
        keys = event.getKeys()
        if 'j' in keys:
            return ('j', 1.2-clk.getTime())
        elif 'f' in keys:
            return ('f', 1.2-clk.getTime())
        elif 'q' in keys:
            return ('q', 1.2-clk.getTime())
    
    #超时
    return ('0', 1.2)
def ShowIncorrect(win):
    t =TextStim(win, u'按键错误' ,pos=(0,0), height = 55, units = "pix")
    t.draw()
    win.flip()
    clk = clock.CountdownTimer(1) #非常精确的计时器
    while clk.getTime() > 0:
        pass
    
    return
def ShowBreak(win):
    introduce =u"""
    啦啦啦啦啦啦啦啦啦啦
    啦啦啦啦啦啦啦
    按[空格键]继续
    """
    t =TextStim(win, introduce ,pos=(0,-0.0))
    t.draw()
    win.flip()
    clk = clock.CountdownTimer(10) #强制休息10秒
    while clk.getTime() > 0:
        pass
    keys=[]
    event.clearEvents()
    while 'space' not in keys:
        keys=event.getKeys()
def ShowEnd(win):
    introduce =u"""
    啦啦啦啦啦啦啦啦啦啦
    啦啦啦啦啦啦啦
    按[空格键]退出
    """
    t =TextStim(win, introduce ,pos=(0,-0.0))
    t.draw()
    win.flip()
    keys=[]
    while 'space' not in keys:
        keys=event.getKeys()
def StoreResult(name, N, trails, results):
    fp = open(name + '.txt','w')
    fp.write("ID\tnum\ttimeCross\ttrailType\tcolor\tcorrectKey\trKey\trTime\tCorrect\n")
    
    def w(x):
        fp.write(str(x) + '\t')
    def n():
        fp.write('\n')
    
    for i in range(N):
        (timeCross, trailType, color, correctKey) = trails[i]
        (rKey, rTime, Correct) = results[i]
        w(name)
        w(i+1)
        w(timeCross)
        w(trailType)
        w(color)
        w(correctKey)
        w(rKey)
        w("%.0f" % (rTime * 1000))
        w(Correct)
        n()
        
    fp.close()

#这是程序真正开始的地方    
N = 480
name = GetSubject()
win = Window(fullscr = True, color=(-1,-1,-1))
ShowIntro(win)
for i in range(N):
    (timeCross, trailType, color, correctKey) = trails[i]
    ShowBlank(win)
    ShowCross(win, timeCross)
    (rKey, rTime) = ShowTrailAndGetKey(win, trailType, color)
    
    if rKey == 'q':
        StoreResult(name, i, trails, results)
        exit(0)
    
    if rKey != correctKey:
        ShowIncorrect(win)
        results.append((rKey, rTime, 0))
    else:
        results.append((rKey, rTime, 1))
    
    if i % 120 == 119:
        ShowBreak(win)
ShowEnd(win)
StoreResult(name, N, trails, results)
win.close()

psychopy 定做实验程序 https://item.taobao.com/item.htm?spm=a230r.1.14.6.Q6E2OW&id=530690095131&ns=1&abbucket=15#detail

 

 

© 著作权归作者所有

z
粉丝 8
博文 24
码字总数 15941
作品 0
昆明
私信 提问
psychopy coder模式编写心理试验程序 图片呈现和量表评分

呈现图片 准备一张图片和一个python文件,如下图: python文件中写如下代码: 运行后可以呈现图片 量表评分 编写如下程序可以实现量表评分 把两个程序合在一起可以实现呈现图片,然后用量表评...

zbaigao
2015/04/22
1K
0
python tkinter 编写心理学试验程序干扰任务之四则运算 psychopy

在训练任务与回忆任务之间,要求被试做4分钟的四则运算,包括20以内的加法、减法和乘法,被试需要输入运算结果。无论被试是否计算正确,皆进入下一题。4分钟的时间到后,结束干扰任务。 考虑...

zbaigao
2016/09/03
210
0
psychopy心理学编程 快速配置自变量

配置心理学实验时所需要的自变量是一个麻烦的问题,在这里,介绍一种简单快速配置实验变量的方法。这个方法确保了程序的简单、可读,减少了编程出bug的可能。 实验过程 呈现一个注视屏,上面...

zbaigao
2016/05/29
1K
0
php程序员的水平 看看自己属于那个级别的

PHPer的定义 PHPer是以PHP程序编写为主要工作,其他方面略有涉及的一种职业人士,大家所说的程序猿。 对PHPer的等级划分 PHP 爱好者 (半个PHPer) PHP 初学者 (PHP Beginner) PHP 初级程序员 ...

郜秀
2012/07/06
10.2K
34
shell学习之awk或gawk

AWK 是该编程语言本身的名称,它编写于 1977 年。其名称是三个主要作者的姓的首字母缩写:Drs. A. Aho、P. Weinberger 和 B. Kernighan。 因为 AWK 是一种文本处理和模式匹配语言,所以它通常...

woshixin
2018/11/29
73
0

没有更多内容

加载失败,请刷新页面

加载更多

如何更改iOS应用程序的名称?

我前几天用一个愚蠢的开发代码名称开始了一个iPhone项目,现在我想改变项目的名称,因为它已经接近完成了。 但是我不知道如何使用Xcode来做这件事,尝试在info.plist文件中更改应用程序的名称...

技术盛宴
27分钟前
3
0
关于win10tensorflow的配置(CPU+GPU)

主要内容 CPU篇 GPU篇 【前期准备与注意事项】 环境:window1064位+python36(37)+CUDA9.0+cuDNN7.6+tensorflow_gpu-1.12.0 软件:anaconda+pycharm 硬件:有nvidia显卡的笔记本或台式(非A...

放只虎归个山
35分钟前
3
0
C#中的多行字符串文字

有没有一种简单的方法可以在C#中创建多行字符串文字? 这是我现在所拥有的: string query = "SELECT foo, bar"+ " FROM table"+ " WHERE id = 42"; 我知道PHP有 <<<BLOCKBLOCK; C#是......

javail
43分钟前
4
0
微信支付之小微商户扫盲!支持信用卡,免营业执照!

微信支付商户申请面向线下小微商户开放,符合条件的微信支付服务商可为小微商户发起接入申请。无需营业执照。 小微商户日收款额度为5万元~30万元 。 信用卡支付日限额为1千;月限额1万。 结算...

吴伟祥
今天
4
0
大话SDWebImage(三)-- 图片下载层

四、图片下载层 SDWebImageDownloader是处理图片下载的类 4.1 图片下载步骤 首先介绍下dispatch_barrier,GCD中的dispatch_barrier目的是在并发队列实现串行的效果,创建下载任务SDWebImageD...

aron1992
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部