科学实验硬件同步
Hardware Synchronization for Scientific Experiment
我不熟悉 python 以及科学实验装置。我的实验设置包括向受试者展示一些在 Python 中编程的视觉刺激。当受试者正在看那些视觉刺激物时,他们眼睛的数据将使用眼动仪 (Pupil Labs) 进行记录。 Pupil Labs 是一个开源平台,它还提供了使用 TCP 套接字将数据(即凝视或眼球运动)广播到服务器的功能。
现在我打算记录所有数据,例如显示特定刺激时以及记录从服务器接收的眼球运动数据。问题是同步这两件事,比如在特定时间显示了一些 'xyz' 刺激,我想记录那个特定时间的眼睛数据到底是什么。
我正在 Python 中编写代码,到目前为止发生的事情是有一个使用 psychopy 库显示刺激的主程序。在该主程序中有一个线程从服务器接收数据。
我想知道如何同步这个任务。我对这样的任务不熟悉,我也不确定在互联网上寻找什么。我会很感激你的帮助。
查看文档,Pupil Labs 眼动追踪事件有一个 timestamp
由计算机上的系统时钟设置,相对于某个纪元时间(在 unix 系统上为 1970 年 1 月 1 日)。同样,您可以在 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 插值眼睛位置
我不熟悉 python 以及科学实验装置。我的实验设置包括向受试者展示一些在 Python 中编程的视觉刺激。当受试者正在看那些视觉刺激物时,他们眼睛的数据将使用眼动仪 (Pupil Labs) 进行记录。 Pupil Labs 是一个开源平台,它还提供了使用 TCP 套接字将数据(即凝视或眼球运动)广播到服务器的功能。
现在我打算记录所有数据,例如显示特定刺激时以及记录从服务器接收的眼球运动数据。问题是同步这两件事,比如在特定时间显示了一些 'xyz' 刺激,我想记录那个特定时间的眼睛数据到底是什么。
我正在 Python 中编写代码,到目前为止发生的事情是有一个使用 psychopy 库显示刺激的主程序。在该主程序中有一个线程从服务器接收数据。
我想知道如何同步这个任务。我对这样的任务不熟悉,我也不确定在互联网上寻找什么。我会很感激你的帮助。
查看文档,Pupil Labs 眼动追踪事件有一个 timestamp 由计算机上的系统时钟设置,相对于某个纪元时间(在 unix 系统上为 1970 年 1 月 1 日)。同样,您可以在 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 插值眼睛位置