python心理学实验程序_psychopy coder模式编写心理试验程序 字符程序和记录反应时...
自變量
呈現(xiàn)3個(gè)字母,中間為A或者B的話,被試需要反應(yīng)f,中間為X或Y的話,被試需要反應(yīng)j。
3個(gè)字母中間有兩種情況:AB或XY
3個(gè)字母兩邊有同類或異類兩種情況:AB兩邊是AB為同類,為XY為異類;XY則反之
3個(gè)字母兩邊的顏色:紅、綠、藍(lán)
注視點(diǎn)呈現(xiàn)時(shí)間:400ms、500ms、600ms
因變量
被試的反應(yīng)時(shí)和判斷正確率
實(shí)驗(yàn)設(shè)計(jì)
480次trail
注視點(diǎn)呈現(xiàn)400ms、500ms和600ms分別160次
紅、綠、藍(lán)分別160次
中間為A的情況120次,其中60次兩邊為B(同類),30次兩邊為X(異類),30次兩邊為Y(異類)
中間為B、X和Y的情況依此構(gòu)造
需要記錄的結(jié)果
被試ID、實(shí)驗(yàn)序號(hào)、注視點(diǎn)呈現(xiàn)時(shí)間、呈現(xiàn)的字母、兩邊字母的顏色、正確的反應(yīng)按鍵、實(shí)際的反應(yīng)按鍵、反應(yīng)時(shí)、是否反應(yīng)正確。
程序思路
首先準(zhǔn)備實(shí)驗(yàn)刺激,生成有16個(gè)項(xiàng)目的trailTypes,和顏色組合成48種,翻10倍,再和注視點(diǎn)時(shí)間進(jìn)行搭配。之后寫函數(shù)來(lái)實(shí)現(xiàn)具體程序。閱讀程序時(shí),從“這是程序真正開(kāi)始的地方”開(kāi)始閱讀會(huì)比較容易,之后再具體看程序。
# -*- 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
#準(zhǔn)備trail和注視點(diǎn)時(shí)間
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次試驗(yàn)
random.shuffle(trails)
#存放結(jié)果的地方
results = []
"""
results = [(按鍵, 反應(yīng)時(shí), 是否正確), ...]
"""
#程序使用的各種函數(shù)
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"""
啦啦啦啦啦啦啦啦啦啦
啦啦啦啦啦啦啦
按[空格鍵]繼續(xù)
"""
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) #非常精確的計(jì)時(shí)器
while clk.getTime() > 0:
pass
return
def ShowTrailAndGetKey(win, text, color):
"""
返回(按鍵, 反應(yīng)時(shí)(s))
情況分別有:
('j', 反應(yīng)時(shí))
('f', 反應(yīng)時(shí))
('0', 1.2) (超時(shí))
"""
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())
#超時(shí)
return ('0', 1.2)
def ShowIncorrect(win):
t =TextStim(win, u'按鍵錯(cuò)誤' ,pos=(0,0), height = 55, units = "pix")
t.draw()
win.flip()
clk = clock.CountdownTimer(1) #非常精確的計(jì)時(shí)器
while clk.getTime() > 0:
pass
return
def ShowBreak(win):
introduce =u"""
啦啦啦啦啦啦啦啦啦啦
啦啦啦啦啦啦啦
按[空格鍵]繼續(xù)
"""
t =TextStim(win, introduce ,pos=(0,-0.0))
t.draw()
win.flip()
clk = clock.CountdownTimer(10) #強(qiáng)制休息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()
#這是程序真正開(kāi)始的地方
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 定做實(shí)驗(yàn)程序 https://item.taobao.com/item.htm?spm=a230r.1.14.6.Q6E2OW&id=530690095131&ns=1&abbucket=15#detail
總結(jié)
以上是生活随笔為你收集整理的python心理学实验程序_psychopy coder模式编写心理试验程序 字符程序和记录反应时...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python哪个关键字可以导入模块_关于
- 下一篇: websocket python爬虫_p