有没有比较好的psychopy学习教程或示例( 二 )

#实验过程#呈现一个注视屏,上面有三个框,中间的框里有注视点,800ms
然后左边或右边的框中出现一个圆,圆的颜色是红、绿、蓝其中一种,200ms
接着继续呈现注视屏,400ms或700ms
再呈现目标刺激,是一个"*",被试需要立即按下\u0026#39;j\u0026#39;键。如果被试在"*"出现前按下按键,那么反馈"请看到*后再按键",如果被试超过1000ms都没有按键,那么反馈"请在*出现1秒内反馈"。反馈信息显示1000ms
最后呈现一个700ms的空屏
试次分为正常试次和探测试次。正常试次按以上流程,探测试次在呈现目标刺激阶段时,不呈现"*"。
#自变量#color 线索颜色: 红、绿、蓝
cloc 线索位置: 左边 右边
soa :400ms 700ms
tloc 目标刺激: 左边 右边 不呈现
#因变量#被试的按键:"j"
按键反应时
其中,反应时为-1000表示被试提前按键,按键为timeout表示被试超时。
实验设计共360试次,其中80%正常试次,20%探测试次。在这两种试次中,自变量的各种情况都均匀分布。
#需要记录的结果#被试id 试次 color cloc soa tloc key RT
=============以下是一些编程技巧=======
##把几个关键屏写成函数##ShowFixation1: 显示第一个注视屏 ShowCue: 显示线索屏幕 ShowFixation2:显示第二个线索屏: 需要检测是否提前按键, 返回\u0026#39;timeout\u0026#39;说明被试没按键, 返回\u0026#39;j\u0026#39;等说明被试提前按键ShowTarget: 显示目标刺激: 返回(\u0026#39;j\u0026#39;, 789)等表示被试正常按键, 返回(\u0026#39;timeout\u0026#39;,0)等表示被试超时, 返回(\u0026#39;q\u0026#39;, 765)等表示退出实验ShowTimePre: 显示反应提前 ShowTimeOut: 显示反应超时 ShowBlank: 显示空屏 ##快速配置试次##from itertools import *import randomcolors = clocs = soas = tlocs = # + trails = list(product(colors, clocs, soas, tlocs))* 12 +\\ list(product(colors, clocs, soas, )) * 6random.shuffle(trails)itertools里的product会生成一个迭代器,这个迭代器会依次返回多个循环器集合的笛卡尔积,相当于嵌套循环。在外面套上list把结果转换成列表。
例如list(product(,)),会生成
执行完上面的操作后,trails里就有 3*2*2*2*12+3*2*2*1*6=360个元素了。
使用:
color, cloc, soa, tloc = trails就可以把每个试次的自变量配置取出来。
##使用字典保存详细配置##COLOR = {\u0026#39;red\u0026#39;: , \u0026#39;green\u0026#39;: , \u0026#39;blue\u0026#39;: , \u0026#39;white\u0026#39;: , \u0026#39;black\u0026#39;: , \u0026#39;gray\u0026#39;: }CLOC = {\u0026#39;left\u0026#39; : (-224, 0), \u0026#39;right\u0026#39;: (224, 0) }TLOC = {\u0026#39;left\u0026#39; : (-224, -20), \u0026#39;right\u0026#39;: (224, -20), 0 : 0 }有时候我们会用嵌套的if和else来区分不同变量下的详细配置,其实这是没有必要的,使用字典可以灵活地解决这个问题。
比如设置线索的颜色和位置,可以这样写:
color, cloc, soa, tloc = trailscircle = Circle(win, radius=16, edges=32, units = \u0026#39;pix\u0026#39;)circle.setFillColor(colorSpace = \u0026#39;rgb255\u0026#39;, color = COLOR)circle.setLineColor(colorSpace = \u0026#39;rgb255\u0026#39;, color = COLOR)circle.setPos(CLOC)##保存结果##把每个试次的按键和反应时都保存到results列表里


推荐阅读