Recording层


实验设计回顾

eb_exp_design_record_level

本节中我们将编辑红色选框选中的部分。

首先,我们将在第一部分中构建一个只呈现1篇文章实验。随后我们将在第二部分通过Datasource引用构建出多个试次的循环。


1. 构建单个试次结构

本阶段中用到的所有控件其实已经在之前的部分介绍过了。我在这里会做一个最基本的叙述作为复习。

1.1 Display_TextPage

  • 添加一个新的DisplayScreen Action空间,连接箭头,修改名称为“Display_TextPage”。

eb_add_dsiplay_textpage

  • 修改Background Color为中性灰128, 128, 128, 255

eb_set_textpage_bgcolor

  • 打开Display_TextPageScreen Builder,添加一个MultiLine_Text_Resource

eb_textpage_add_multiline_text_resource

  • 设置MultiLine_Text_ResourceMargin,编辑文本内容,设置文字为黑色 - 15号 - Courier New - Double行距

eb_textpage_edit_text

  • 关闭MultiLine_Text_Resource窗口完成编辑。

⚠️注意⚠️:我们需要额外设置Use For Host Display属性为True,以配合Trial层中的Prepare SequenceDraw to Eyelink Host设置(传送门)

1.2 Keyboard_of_TP

  • 添加一个新的Keyboard Trigger,连接箭头,修改Label为“Keyboard_of_TP”。设置触发按键为Space

eb_add_key_TP

1.3 Display_Question

  • 添加一个新的DisplayScreen Action空间,连接箭头,修改名称为“Display_Question”。

  • Screen Builder中添加MultiLine Text Resource,设置Margin,添加文本。

  • 设置黑色 - 15号 - Courier New

eb_add_display_q

⬆️此处是操作动图,文件较大可能加载缓慢。

1.4 Keyboard_of_Question

  • 添加一个新的Keyboard Trigger,连接箭头,修改Label为“Keyboard_of_Question”。

  • 此处我们的设计是让被试判断问题的对错,如果问题是对的,则按f键,反之则按j键。因此我们设置Keyboard_of_Question的触发按键为fj

设置按键多选时可以直接使用Ctrl或者Shift进行多选。

eb_set_keyboard_q_keys

至此,单一试次任务编写完成。


2. 测试程序

在完成但一试次任务编写之后,我们可以试运行我们的实验,以此来检测整个实验流程是否是按照我们的想法进行的。

这里要用到Experiment BuilderTest Run功能,你可以在工具栏中找到它。

eb_testrun_in_toolbar

无论是否连接眼动仪,我们都可以通过点击Test Run按钮来试运行程序。

  • 连接眼动仪 - 点击Test Run直接运行即可;
  • 未连接眼动仪 - 开启Dummy Mode后试运行实验。

很多时候我们都不能连接眼动仪来调试设备,那么Dummy Mode的存在就非常有意义了。在Dummy Mode下,可以不连接眼动仪、直接跳过眼动仪校准等环节运行试验。

当然这样做的代价是,在整个实验的运行过程中,和眼动相关的很多触发器等功能都无法使用了。

2.1 设置Dummy Mode

首先设置Dummy Mode,如果您已经连接了眼动仪,请跳过此步骤直接进行2.2 Test Run试运行。。

Structure面板中选中Devices标签页,点击Eyelink,在其Properties面板中即可找到Dummy Mode属性。

eb_set_dummymode

2.2 Test Run试运行

点击工具栏中的Test Run开始试运行。

eb_testrun_in_toolbar

首先会出现第一个提示,告知Test Run会清空现存的所有数据,即之前Test Run时采集的数据。

eb_testrun_1_confrim

在这里强调一下,Test Run仅仅适用于试运行程序,不能用于正式的数据采集

之后会和正常运行程序一样,出现第二个提示窗口,输入.edf文件的名称。

eb_testrun_creat_edf

然后是最后一个提示框,告知Test Run模式下部分眼动相关的功能可能会失效。

eb_testrun_2_confrim

整个过程如下图所示(可能加载缓慢):

eb_testrun


3. Datasource与引用

在前面的工作中,我们已经构建好了单试次的实验,只呈现了一篇文章和一个问题。

实验设计中共计划呈现4篇文章和4个问题,剩下的三个要怎么办呢?复制粘贴也许是个能解决问题的办法,但是这不是“正宗”的方案。

在这里我们要引入一个新的概念——Datasource

Datasource实际上是一个表格,以当前实验任务为例:一共四个试次,每个试次的结构都是一样的,即“呈现文章 - 看完按空格 - 呈现问题 - 按f/j作答“。每个试次运行的时候都是套用这样一个格式,区别在于每次呈现的文章和问题不同。

我们将每个试次之间不同的部分放到一个表格里面,套用相同的流程格式,就成功创建了许多个试次。而这个表格就叫做Datasource,如下表所示:

Trial ID Text Page Question Correct Answer
1 Buck did not read… The heavy dogs are popular. f
2 The house was… There are 13 boys here in total. f
3 They came and… The fox terriers never yelp. j
4 Among the terriers… Elmo weight 100 pounds. j
  • Trial ID1的试次所呈现的文章是:“Buck did not read…”,被试按空格后所呈现的问题是:“The heavy dogs are popular.”,这道题的正确答案是“f”。

  • Trial ID2的试次所呈现的文章是:“The house was…”,被试按空格后所呈现的问题是:“There are 13 boys here in total.”,这道题的正确答案是“f”。

  • 以此类推……

3.1 建立Datasource

我们如何将这个表格移植到我们的实验程序中呢?

熟悉E-Prime的朋友知道E-Prime的List功能,实际上Datasource的逻辑也是类似的。

  • Datasource实际上是Sequence的一个属性,Sequence在默认情况下是没有Datasource的。

一旦我们给Sequence添加了Datasource属性,那么Sequence也就开启了循环功能,Datasource的表格有几行,Sequence就会被执行几次。

在先前的实验编程中,我们已经设置了三个Sequence——BlockTrialRecording。那应该让哪个Sequence循环呢?

答案很简单,让Trial循环。所以我们要把Datasource创建到Trail下面。

选择Trial层Sequence,双击Properties窗口Data Source属性。

eb_open_datasource

3.1.1 Add Column

点击Add Column,输入Column Name,根据情况设置Column Type,点击OK即可。

eb_ds_add_column

成功添加Trial_ID

eb_ds_1

继续添加其他Column

eb_ds_2

3.1.2 Add Row

完成Column的添加之后我们来添加行。点击Add Row,添加4行。

eb_ds_add_row

完成添加。

eb_ds_3

⚠️注意⚠️:总的行数需要和Datasource的实际行数完全一致,不能留有空行,否则会报错。

3.1.3 添加内容

把准备好的Datasource内容复制粘贴进来即可。

eb_ds_paste

⚠️注意⚠️:下图中绿框红框中的数字虽然一样,但是绿框仅代表行的编号。而红框中的数字,即Trial_ID的值,则是给每个条件的试次一个单独的编号,用作后面的数据分析与统计。

3.2 对刺激材料设置引用

引用,英文叫做Reference,通过引用可以让某些内容或者属性动态变化。

此处我们要对随着试次变化的“阅读材料”和“问题”设置引用,引用到对应的Datasource上。

3.2.1 设置Text_Page的引用(多行文本引用)

打开Display_TextPage中的MultiLine Text Resource Editor。选中全部文字,点击工具栏中的Add Reference按钮。选中左侧列表中Trial下面的Datasource,此时中间的列表中就回出现Datasource中所有Column的名称。双击Text_Page,看到上方的输入框变为“@parent.parent.parent.Trial_DataSource.Text_Page@”则成功引用,点击OK即可。成功引用后,文字的内容将会变成@

eb_sb_add_ref_mtl

注意事项:

  • Datasource的位置是在Trial层下面,因为DatasourceTrial层这个Sequence的一个属性,由于Datasource的存在,Trial才会重复执行。如果Datasource没有再Trial下面的话,就说明建立错了位置。

eb_ref_ds_loc

  • 在进行Reference操作时,双击目标才是正确的引用方法。

完成引用后,我们可以使用预览功能来查看Reference的效果。也可以在点击Preview之后按逐一切换。

eb_mlt_preview_ref

eb_sb_ref_preview

3.2.2 设置Question的引用

使用同样的方法对Question屏的问题文字进行引用。详细解释略。

eb_sb_add_ref_mtl_2

3.3 再次Test Run

再次执行Test Run,我们就可以看到四个试次了。


4. 添加Message

Message类似于脑电数据中的Marker,是一种数据标记。

Recording层中,我们先是呈现了Text Page,接着呈现了Question。在这个过程中,眼动数据是一直在记录的。如果不在眼动数据中添加一些特殊标记,眼动仪就不知道什么时候看的是Text Page,什么时候看的是Question

Message就是标记许多特殊事件的标记,内容通常是一些英文字符。

例如用“Text Page Start”、“Text Page End”来标记Text Page的开始和结束。

几乎每一个控件都会有一个Message属性,在这个控件生效的时候,会将Message的内容发送到.edf文件中,作为标记。所以我们要将特定的文本内容添加到特定控件的Message属性中。

eb_message_def

此处我举例设置Display_TextPageMessage

eb_set_display_textpage_message

完成全部Message设置示例如下:

eb_set_recording_message

截止目前,完成了非随机的全试次编程。


Test Run一下试试效果吧!

eb_show_test_run

以上。