E-prime主要常见问题以及matlab、python打marker

前言

今天更新一期E-prime呈现刺激常见的问题,基本上做脑成像的设备,不论是做什么实验的基本上都会用到,E-prime是一个非常简单入手的软件,对于刚“入坑”做脑科学研究的人来说,这个软件不需要编程基础,简直是“傻瓜式”的操作。但是还是会有很多人对这个软件有很多的问题,这两天就被一些老师问到一些基本的操作问题,整得我有点烦躁。那就写点东西供大家参考用。当然,呈现刺激并不是一定需要使用这个软件,presentation、inquisit、opensesame、matlab、python、c、c++等软件都可以实现。但对于初学者来说,E-prime相比较上面的软件来说是最友好的了。

回归正题,下面是总结的E-prime主要常见问题以及matlab、python打marker的几种方式。

一、E-prime常见问题

1.1 E-prime版本打Mark无法正常发送原因

1.2 E-prime如何同时呈现多种刺激

1.3 E-prime 3.0版本安装注意事项

1.4 E-prime 如何设置刺激呈现时间随机

1.5 E-prime 如何修改文本刺激的背景色和字体颜色

1.6 E-prime 如何查看刺激电脑并口的端口地址

1.7 以前能够发送Mark,换了刺激电脑后,同样的刺激程序打不上Mark,无任何代码发送过来

1.8 E-prime 1.1编制的程序转化成2.0/3.0的文档

1.9 E-prime开端口语句

二、Matlab中使用psychotoolbox打标记方式

2.1第一种方式适用于window 7 32位系统(PortTalk文件)

2.2第二种方式,适用于window 7/10 32&64位系统(Inpout文件)常见方式

2.3第三种方式,适用于window7系统,但对matlab版本有要求

三、python中打标记方式

3.1第一种方法:调用库PyParallel

3.2第二种方法:使用Inpout32.dll文件

E-prime常见问题

1.1 E-prime版本打Mark无法正常发送原因 1、检查硬件连接线之间是否有松动

2、查看E-prime中inline语句是否书写正确;

3、修改需要打标记的刺激材料属性中的Duration-PreRelease选项默认的same as duration更改为0即可。

1.2 E-prime如何同时呈现多种刺激 可以通过Slide控件实现多种刺激(图片、文本、声音、视频)同时呈现。

1.3 E-prime 3.0版本安装注意事项 在安装E-prime3.0程序之前需要先安装dotnetfx4.5插件(在安装文件support中可离线安装)。

1.4 E-prime 如何设置刺激呈现时间随机 可以通过inline语句定义刺激的呈现时间随机。例:设置Textdisplay1的刺激呈现时间在800-1200ms之间随机呈现

eg: Textdisplay1.duration = random(800,1200)

1.5 E-prime 如何修改文本刺激的背景色和字体颜色 打开文本刺激属性窗口,在General选项修改Backcolor和Forecolor即可

1.6 E-prime 如何查看刺激电脑并口的端口地址 依次点击我的电脑或计算机(右击)—管理—设备管理器—端口—LPT端口—资源—I/O范围中的前四个数字。

1.7 以前能够发送Mark,换了刺激电脑后,同样的刺激程序打不上Mark,无任何代码发送过来 1、先排查硬件是否已连接好;

2、更换刺激电脑后,需重新书写刺激程序中的开端口地址;

3、重新查看新刺激电脑中的并口端口地址;

4、将刺激程序中的inline语句相应端口地址更改为新刺激电脑的并口端口地址。

1.8 E-prime 1.1编制的程序转化成2.0/3.0的文档 1、打开2.0/3.0的e-studio,把1.1的程序文件拖到e-studio的窗口中就会提示进行转换,转换后保存回原程序文件夹中再运行就可以了。

2、把1.1的程序文件的后缀名由es改成es2,点击运行后会提示进行转换,之后的步骤同(1)所述。

1.9 E-prime开端口语句 1、打开端口命令

inline1:

Textdisplay1.OnsetSignalEnabled = True %打开控件Textdisplay1的端口

Textdisplay1.OnsetSignalPort = &H378

%打开Textdisplay1端口为H378(电脑设备管理器中查看)

Textdisplay1.OffsetSignalEnabled = True %关闭控件Textdisplay1的端口

Textdisplay1.OffsetSignalPort =&H378

%关闭控件Textdisplay1的端口为H378

inline2:

Textdisplay1.OnsetSignalData =c.GetAttrib("Condition")

%向ERPs发送控件Textdisplay1的刺激信号(Mark),这个刺激信号从List中的condition(code)获取

inline3:

1、if Answer.resp=”1” or Answer.resp=”3” then

WritePort&H378,c.GetAttrib(“Answer.resp”) %“Answer”是刺激的名称

else WritePort &H378,2

end if %假如反应为“1”或“3”,则标记为“1”或“3”;不反应则标记为“2”

2、if Target.resp = "f" then

writePort &H378,1

elseif Target.resp = "j" then

writePort &H378,2

else writePort &H378,3

end if %当反应的按键是字母(如j、f)时:按f键读为1,按j键读为2,无需按键时读为3。”标在后面

inline4:

If Target.Acc = 1 Then

writeport &H378,1

ElseIf Len(Target.Resp) > 0 Then

writepote &H378,2

Else

writepote &H378,3

End If

2、if语句还可以写成if then

If Target.GetAttrib(“code”)=“5” and back.GetAttrib(“code2”)>0 and resp = "j" and Target.c.GetAttrib(“code”)=“5” then

writePort&H378,3

%如果Target获得的刺激类型5,同时反馈刺激为J 那么向端口输出,mark为3

Matlab中使用psychotoolbox打标记方式

有三种方式可供选择:

2.1第一种方式适用于window 7 32位系统(PortTalk文件) 要访问XP / Vista / 7下的并行端口,需要内核环0驱动程序。我们使用Craig Peacock的PortTalk,你可以从http://www.beyondlogic.org/porttalk/porttalk.htm下载。这只适用于32位window(64位见下面的64位解决方案)。

将porttalk.sys文件复制到您的windows\system32\drivers目录中。编辑porttalk.reg文件替换"Start"=dword:00000002的"Start"=dword:00000000。具有管理权限的用户双击编辑porttalk.reg将内容写入Windows注册表后并重新启动电脑。

附加C代码(也可以在访问复制lptwrite.c与其它文档lptwrite.m),PortTalk_IOCTL.h以及pt_ioctl.c(在IoExample从porttalk zip压缩包的子目录)到您的计算机上的目录。把你的MATLAB目录路径改成这个目录,并执行这个目录,mex-v lptwrite.c在你的目录中产生一个额外的文件(lptwrite.dll或者lptwrite.mexw32取决于你的MATLAB版本)。

在桌面右键点击我的电脑,选择管理,设备管理器,展开“端口(COM&LPT)”,右键点击名为“打印机”的端口(LPT1),并选择属性。选择属性对话框的资源选项卡,并检查I/O范围,“设置”列的第一个值是实际的端口地址。对于LPT1,在大多数标准设置中,这应该是0378(这里是十六进位制,需要修改成十进位制,可使用函数hex2dec())。

现在,您可以用lptwrite(portAddress, byteValue)函数输出。例如,将并行端口的输出位0-7(针脚2-9)lptwrite(888, 255)。为了实现TTL触发器,在将端口重置为零之前,等待您的EEG系统需要的时间(通常最小1 /采样率),例如

lptwrite(888,255);

WaitSecs(0.004);

lptwrite(888,0);

2.2 第二种方式,适用于window 7/10 32&64位系统(Inpout文件)常见方式 取而代之的PortTalk的Inpout可用于制作寄存器访问可能的驱动程序。Inpout也适用于32位Windows,但与lptwrite不兼容。具体方法可参考:http://apps.usd.edu/coglab/psyc770/IO64.html

2.3 第三种方式,适用于window7系统,但对matlab版本有要求(6.5版本以上的matlab无法使用)

直接调用并口的针脚,Matlab的数据采集工具箱知道如何从包含BIOS数据的Windows内存保护区自动读取端口地址:

get(digitalio(' parallel '),' PortAddress ')

数据采集工具箱的误差(〜1ms)比lptwrite/lptread(〜10us)慢,并且无法寻址。

python中打标记方式

3.1第一种方法:调用库PyParallel 1、必须安装giveio文件,在win10上不可用。

2、####Event trigger routine开端口代码

import parallel, time

P = parallel.Parallel()

def SendCode(code):

P.setData(code) # send theevent code (could be 1-255)

time.sleep(0.006) # wait for 6 ms for Recorder to receive the code

P.setData(0) # send a codeto clear the register

time.sleep(0.01) # wait for10 ms

3、使用SendCode()发送事件代码标志,放在刺激之前。(可参考示例文件)

3.2第二种方法:使用Inpout32.dll文件 1、网络下载 inpout.dll 并把它放到电脑C:window/system32 文件夹中。 接下来就是使用 SendCode() 函数调用,在刺激前添加即可

2、####Event trigger routine ####开端口代码

import time

from ctypes import windll

P = windll.inpout32

def SendCode(code):

P.Out32(0x378, code) # sendthe event code (could be 1-255)

time.sleep(0.006) # wait for 6 ms for Recorderto receive the code

P.Out32(0x378, 0) # send acode to clear the register

time.sleep(0.01) # wait for10 ms

相关

*关于Inpout函数使用问题,推荐网址:http://forums.highrez.co.uk/viewforum.php?f=7&sid=92c22a2901999bb1498445bf8a74d56c

关于E-prime软件呈现刺激的问题,今天就写到这了,后面我会再慢慢总结推送一些关于脑电ERP及近红外NIRS使用的常见问题,但我觉得更多的应该是 个人的尝试,只有尝试了,才会知道问题的出现。祝好~

——2018.7.16 南京

谢谢大家观看,如有帮助,来个喜欢或者关注吧!

本文作者:Chen Rui

文章仅限学习使用,不用于商业行为,若有侵权及疑问,请发邮件至science52brain@outlook.com

最后更新于