2016-05-22 6 views
0

Ich bin neu in Python sowie wissenschaftliche experimentelle Setups. Mein experimenteller Aufbau beinhaltet, dass den Probanden einige visuelle Reize gezeigt werden, die in Python programmiert sind. Während die Probanden diese visuellen Reize betrachten, werden die Daten ihrer Augen mit einem Eye-Tracker aufgezeichnet (Pupil Labs). Pupil Labs ist eine Open-Source-Plattform und bietet auch die Möglichkeit, Daten (d. H. Blick- oder Augenbewegungen) an einen Server mit TCP-Socket zu senden.Hardware-Synchronisation für wissenschaftliches Experiment

Jetzt plane ich, alle Daten zu protokollieren, wie wenn ein bestimmter Stimulus angezeigt wird, sowie die vom Server empfangenen Augenbewegungsdaten zu protokollieren. Das Problem besteht darin, diese beiden Dinge zu synchronisieren, so wie zu bestimmten Zeiten einige "xyz" -Stimuli gezeigt wurden und ich genau protokollieren möchte, was genau die Augen zu diesem Zeitpunkt waren.

Ich schreibe den Code in Python, was bisher passiert ist, gibt es ein Hauptprogramm, das Stimuli mit Psychopy-Bibliothek zeigt. In diesem Hauptprogramm gibt es einen Thread, der Daten vom Server empfängt.

Ich möchte wissen, wie ich diese Aufgabe synchronisieren kann. Ich bin neu zu solcher Aufgabe auch ich bin nicht sicher, nach was man über das Internet sucht. Ich werde für deine Hilfe dankbar sein.

Antwort

1

Mit Blick auf die Dokumente, Pupil Labs Eye-Tracking-Ereignisse haben eine timestamp von der Systemuhr auf Ihrem Computer eingestellt, in Bezug auf einige Epochen (1. Januar 1970 auf Unix-Systemen). Ebenso können Sie Zeitstempel für Ereignisse in Pychopy finden, die in Ihren Experimentprotokollen angezeigt werden.

Sobald Sie Ihre Daten gesammelt haben, lesen Sie Ihre Pupillendaten ein und konvertieren Sie sie in numply Arrays (pupil_time, pupil_x und pupil_y). Laden Sie als Nächstes Ihre Pyschopy-Daten. Die Zeitstempel in Pyschopy können relativ zum Start Ihres Experiments gespeichert werden. In diesem Fall müssen Sie die Startzeit des Experiments zu den Stimuluspräsentationszeiten hinzufügen (die Startzeit sollte irgendwo in den gespeicherten Daten verfügbar sein).

Bei pupil_time, pupil_x, pupil_y Arrays können Sie dann Schüler Bewegung während des Experiments Grundstück:

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() 

Sie können nicht wollen, um die Daten zu interpolieren, wenn der Schüler Labs Software nur die Position aufzeichnet nach jedem Sakkaden, dann Verwenden Sie searchsorted, um die zuletzt aufgezeichnete Pupillenposition vor der Zeit t zu finden, die geeigneter ist.


-Update 2016.05.23: Verwendung t_abs zur Interpolation Augenposition

Verwandte Themen