autoit选中图标无反应_用psychopy编写第一个程序:简单反应时(上)

基础设置:Monitor

在开始编写程序之前,需要对显示器的基本参数进行设置。因为我们的程序是在电脑屏幕上显示的(废话),所以需要告诉psychopy我们的屏幕是什么样的,多宽,多少分辨率,以及你距离屏幕有多远(影响观察的视角)。这样才能保证显示正常。而且,如果我用另一台电脑跑程序的话,就得重新调整参数。

首先打开Tools→Monitor Center。弹出显示器设置对话框。

对话框的右边是高级的校正,通常不需要更改

左边第一个窗口,是选择显示器。可以新建(new),保存(save)和删除(delete)。默认的显示器为“testMonitor”。

下方的窗口是显示器的参数配置名称,通常以时间为名称来保存校正的参数。可以通过Copy添加一个新的参数校正。

最下方的窗口就是具体的参数设置了,其中

  • Use Bit++:………………Sorry!目前还没搞明白是啥意思,水平有限,呵呵呵。
  • Screen Distance(cm):输入被试与屏幕的距离,单位是cm。毕竟距离直接影响了视角,对于一些视觉的研究,特别是以刺激大小作为自变量的研究来说,这个属性就非常关键。
  • Size(pixels; Horiz, Vert):屏幕的分辨率,到电脑的显示设置的找找就行。
  • Screen Width(cm):电脑屏幕的物理宽度,这个……,自己用尺子量一量吧。

最后的Notes窗口用来写关于这个显示器的标注,可有可无。

上述参数的设置与程序中使用的单位紧密挂钩,当然,使用不同的单位所需的参数也不一样。不过,最好还是把所有的参数都提前设置好。

显示器的参数设置非常重要,因为这些参数与实验中的刺激显示大小,呈现位置有密切的联系。

builder界面简介

builder界面分成了三部分:

  • 右边是component(组件)视图。是实验最为基本的元素,分为刺激,反应,自定义组件,接口四种类型。实际上,常用的就是刺激和反应这两类。而刺激中常用的就是文字,图片,视频,音频;反应就是鼠标和键盘。
  • 左边是Routine视图。Routine这个词我没有找到很好的中文来翻译,同学们可以简单理解为一个实验的单元。多个组件组合在一起就形成了一个Routine。所以,一个Routine可以包含一次反应,一段指导语,或者一系列刺激。也就是常规的实验单元(也不知道这样定义准不准确)
  • 下方是Flow(流程)视图。顾名思义,Flow就是整个实验的流程,由多个Routine组合在一起。可以在Flow视图中添加Routine。如果要使某个或某几个Routine循环呈现的话,可以添加Loop来实现。

用builder创建简单反应时的测量程序

接下来,让我们动动手,完成一个视觉简单反应时的小程序。完成之后你会发现,builder真的很方便。

1.先感谢一下你的被试:定义实验的欢迎界面以及指导语

在component界面选择Text(文字)组件,单击之后进入Text的设置界面。界面分为Basic,Advanced,Data和Testing四个字窗口,现主要介绍Basic窗口。

  • name随便起一个。当然最好是具有一定含义,能够清楚理解的,最好短一点。不过不能使用中文,毕竟builder实际上也是编程语言(中文太难了,Python不认识,哈哈)。这里我们将名字定义为"Welcome"。
  • start意味着在本次Routine中,该component啥时候开始,可以选择时间(time),帧(frame N)以及条件(condition)三种方式。这里我们使用最简单的时间,后面输入0。意味着这段文字从一开始就呈现。(灰色的expected start没啥用,忽略就行)
  • stop同样有多种方式,我们选用最简单的持续时间(duration),设置为1。意味着该component持续1s。
  • color可以通过右键点击输入框进行选择,或者自己输入颜色名称,或者使rgb代码都可以。
  • font是字体。此处使用默认的就行。
  • letter height是字体大小,单位需要在advanced中进行设置,默认的是窗口垂直距离的相对大小。此处设置为0.05,意味着字体的高度是窗口高度的5%。
  • position是呈现的位置。(0,0)表示屏幕正中,可以将屏幕当成二维坐标系,position就定义了其中的一个点。以中点为基准,左和下是负值,右和上是正值。注意的是,此处的数值单位同样需要在advanced中定义。
  • text就是要呈现的文字,此处直接输入中文就可以了。输入“您好!欢迎参加本实验”。
  • 之后点击OK完成第一个component的设置

如下图:

a12b9e26d977d7c28957f0502b24e0cd.png

回到builder主界面后,先保存一下,随便起个名字吧。

然后点击Tools-Run。弹出Runner界面。选中我们的程序,点击右侧绿色的小人就开始运行了。

开始运行后,会默认弹出输入被试编号和实验轮次的基本信息框,随意输入就行。

运行之后,可以看到我们的欢迎词呈现了1s,之后程序就结束了。接下来,让我们继续完善

2. 为欢迎词添加一个反应按键

我们想让被试自由的浏览欢迎词,通过自己按键结束浏览,而不是强制1秒就退出。此时,重新打开刚才设置的Welcome(鼠标点击一下就行)。

  • 将stop定义的duration删掉。空白表示一直呈现。之后点击OK退出Welcome
  • 添加键盘的component,点击右侧的键盘图标,弹出界面。
  • 名字随便起,此处设置为”EndWelcome".
  • Start定义为0,意味着按键跟欢迎词同步,从一开始就可以进行按键。如果我设置为0.5,那么0.5秒后才能开始按键,被试至少要阅读0.5秒的欢迎词(因为Welcome是从0开始的)。
  • Stop空白就好,意味着被试什么时候按键都行。假设我设置为3,那么3秒以后这个按键就失效了。
  • 勾选Force end of Routine。说明只要按键,那么这个Routine就停止。
  • Allow Keys中填写有效的按键,用单引号将按键输入就行。此处我们只保留空格键‘space’。
  • Store表示要保存的按键,此处因为只是一个欢迎界面,不是正式实验,所以不用保存按键。下拉选择nothing
  • Store Correct表示保存正确率,此处不用勾选
  • 其他的默认就好

如下图:

b8eb2bed9c9090ec9ff51839f882b570.png

再次运行程序,发现欢迎词一直都显示着,直到按下空格键后才退出。

为了让被试知道可以按空格键,我们再添加一段说明。

3.添加按空格键的说明

再次添加一个Text的component,

  • 名称随便,此处用PressSpace
  • start为0,stop空白,与刚才的组块一致
  • pos改为(0,-0.4),注意,最底部是-0.5,因为整个窗口高度为1。
  • text文字输入“按空格键继续”
  • 其他设置自由发挥吧,如图:

22018369213c359243199a7c561726c6.png

大家再次运行看看效果吧

4.添加指导语

实际上,我们可以将指导语直接写在欢迎页中(多打几行字的问题)。不过,为了进一步说明Routine和Flow,我们单独用一个Routine来定义指导语。

首先,我们将之前定义好的欢迎Routine重新命名,免得以后搞混淆了。在Flow中右键点击trial,选择rename,将名字改为Start_Welcome(尽量不要与其他的重名,虽然这里是Routine,之前的是component)

接下来,在Flow的界面左上方点击Insert Routine,选择new,并定义好名字,此处用“instructions”。

接下来点击Flow流程图中的位置插入Routine,将instructions放在之前欢迎页的Routine后面。

在Flow视图中点击instructions,打开这个Routine,开始添加component。

这里同样添加两个文字组件和一个键盘组件。操作跟之前相同。只是指导语的文字输入

“本测试是一项快速反应任务。

一会屏幕中将出现一个十字,请注视。

十字消失,并在短暂间隔后会出现红色的圆形

请你在看到红色圆形时快速按下空格键”

5.呈现刺激

再插入一个Routine,命名为trial,用来设置刺激。

在trial中先添加一个polygon组件(stimuli分类下,自己找找看),作为注视点。

  • shape选择cross(十字),其他的也可以,不过我习惯用十字作为注视点
  • size改为(0.05,0.05)
  • 持续时间为0.5秒

具体设置如图:

c7c92e31082bd2c451f207bdbe4a2c66.png

再添加一个polygon组件,命名为stim,用来作为刺激。

  • start设置为1,因为注视点持续0.5秒,所以1表示注视点消失后,再间隔0.5秒才出现刺激
  • stop空白,一会通过键盘来控制
  • shape选择regular polygon,下方的Num vertices输入100,也就是100个顶点的多边形,这样就非常接近圆
  • size设置为(0.2,0.2),同学们也可以换成其他参数试试看效果。
  • 点击advanced子窗口,右击fill color,选择红色填充。

其他设置默认就行,如图

eca80f78f9d119ca60064dce914757fe.png

接下来,再添加一个键盘,设置与之前基本相同,区别在于:

  • start设置为1。因为刺激是1秒才开始出现的。
  • 因为此时需要记录数据,store选择last key(其实只要不是nothing就行,因为此时需要记录的只是反应时)

好了,我们再运行一次试试,现在程序的雏形已经有了。不过反应了一次之后就退出,实在不够尽兴。如果要让trial多出现几次,最笨的办法当然是继续添加routine。简单的办法就是添加一个loop(循环)。

6.添加loop

在insert routine下方,点击insert loop,然后选择trial前后的节点作为起点和终点。选择好以后就弹出了loop的对话框,其中nreps表示重复的次数,这里输入10,那么trial就会重复10次。

7 实验结束提示

最后,我们再添加一个Routine,命名为End(其他名字也可以,随你喜欢),用于呈现实验结束的提示。

在end中添加一个Text组件和keyboard组件,前者用于呈现“实验结束,感谢你的参与。请按空格键退出实验”。后者用于退出界面。具体的设置参照上面就可以完成了

数据结果

程序的第一版已经完成了,同学们可以尝试着运行一遍。运行结束之后,程序根目录下会自动生成一个data的文件夹,里面保存了刚才的测试结果。数据文件默认的命名规则是“被试编号-文件名-运行时间”

现在data文件夹里应该有很多文件,毕竟刚才我们运行了很多次了。找到完整程序的运行结果(可通过生成时间以及被试编号查找)

找到以后打开excel的数据文件,发现所有的数据都保存在里面了。每一列都component的某个结果(如start,stop)。

当然,我们不需要这么多数据,可以回到builder界面,打开不需要保存数据的component,在data子窗口中将勾去掉就行了。

未完待续,仍需要完善的程序

由于程序中注视点与刺激的呈现间隔是固定的(0.5s),练习效应必然导致被试产生预判,从而提升反应时。如果不控制住这个额外变量,那整个测试就不准确了。

要控制也很简单,只需要将注视点与刺激的间隔随机化就行。

那么随机化如何在builder中实现呢?可以在loop中实现

具体怎么操作,我们下次再聊

欢迎非商业转载,只需注明作者“AhaDad”和来源即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值