科学实验的硬件同步

时间:2016-05-22 15:54:14

标签: python multithreading psychopy experimental-design

我是python以及科学实验设置的新手。我的实验设置包括将向受试者显示一些用Python编程的视觉刺激。当受试者正在观察那些视觉刺激时,他们的眼睛数据将使用眼动仪(Pupil Labs)进行记录。 Pupil Labs是一个开源平台,它还提供这种设施,它使用TCP套接字向服务器广播数据(即凝视或眼球运动)。

现在我计划记录所有数据,例如显示特定刺激时以及记录从服务器接收的眼球运动数据。问题是同步这两件事,比如在特定时间显示一些'xyz'刺激,我想记录那个特定时间的眼睛数据到底是什么。

我正在用Python编写代码,到目前为止发生的事情是有一个主程序使用心理库来显示刺激。在该主程序中有一个从服务器接收数据的线程。

我想知道如何同步此任务。我不熟悉这样的任务,我不知道在互联网上寻找什么。我将非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

观看文档,Pupil Labs的眼动追踪活动有timestamp  由计算机上的系统时钟设置,相对于某个纪元时间(1970年1月1日在unix系统上)。同样,您可以在pychopy中找到将在实验日志中显示的事件的时间戳。

收集数据后,请读入您的瞳孔数据并将其转换为numpy数组(pupil_time,pupil_x和pupil_y)。接下来加载您的pyschopy数据。可以相对于实验开始存储pyschopy中的时间戳,在这种情况下,您必须将实验开始时间添加到刺激呈现时间(开始时间应该在存储的数据中的某处可用)。

鉴于pupil_time,pupil_x,pupil_y数组,您可以在实验期间绘制瞳孔运动:

import matplotlib.pyplot as plt
import numpy as np

# time since stimulus presentation, in seconds
t = np.linspace(0, 4, 400)  

# time since stimulus presentation, relative to pupil data time
abs_t = t + stimulus_presentation_timestamp

# plot interpolated eye position from pupil data
px, py = np.interp(abs_t, pupil_time, pupil_x), np.interp(abs_t, pupil_time, pupil_y)
plt.plot(px, py)
plt.show()

您可能不想插入数据如果Pupil Labs软件仅记录每次扫视后的位置,那么使用searchsorted在时间t之前找到最后记录的瞳孔位置可能更合适。

2016-05-23更新:使用t_abs插入眼位