Public Member Functions | |
| __init__ (self, display, logfile=settings.LOGFILE, eventdetection=settings.EVENTDETECTION, saccade_velocity_threshold=35, saccade_acceleration_threshold=9500, blink_threshold=settings.BLINKTHRESH, **args) | |
| log_var (self, var, val) | |
| set_eye_used (self) | |
| is_valid_sample (self, sample) | |
| start_recording (self) | |
| stop_recording (self) | |
| sample (self) | |
| pupil_size (self) | |
| calibrate (self, calibrate=True, validate=True) | |
| fix_triggered_drift_correction (self, pos=None, min_samples=10, max_dev=60, reset_threshold=30) | |
| drift_correction (self, pos=None, fix_triggered=False) | |
| wait_for_fixation_start (self) | |
| wait_for_fixation_end (self) | |
| wait_for_saccade_start (self) | |
| wait_for_saccade_end (self) | |
| wait_for_blink_start (self) | |
| wait_for_blink_end (self) | |
| log (self, msg) | |
| close (self) | |
Public Member Functions inherited from pygaze._eyetracker.baseeyetracker.BaseEyeTracker | |
| __init__ (self) | |
| connected (self) | |
| get_eyetracker_clock_async (self) | |
| send_command (self, cmd) | |
| draw_drift_correction_target (self, x, y) | |
| draw_calibration_target (self, x, y) | |
| set_draw_calibration_target_func (self, func) | |
| set_draw_drift_correction_target_func (self, func) | |
| status_msg (self, msg) | |
| set_detection_type (self, eventdetection) | |
| wait_for_event (self, event) | |
Public Attributes | |
| list | gaze = [] |
| disp = display | |
| screen = Screen() | |
| kb = Keyboard(keylist=['space', 'escape', 'q'], timeout=1) | |
| bool | recording = False |
| screendist = settings.SCREENDIST | |
| list | eyetrackers = [t for t in tr.find_all_eyetrackers() if t.serial_number == settings.TRACKERSERIALNUMBER] |
| list | eyetracker = self.eyetrackers[0] |
| int | LEFT_EYE = 0 |
| int | RIGHT_EYE = 1 |
| int | BINOCULAR = 2 |
| int | eye_used = 0 |
| list | points_to_calibrate = [self._norm_2_px(p) for p in [(lb, ub), (rb, ub), (xc, yc), (lb, bb), (rb, bb)]] |
| float | fixtresh = 1.5 |
| int | fixtimetresh = 100 |
| spdtresh = saccade_velocity_threshold | |
| accthresh = saccade_acceleration_threshold | |
| blinkthresh = blink_threshold | |
| int | weightdist = 10 |
| str | eventdetection = eventdetection |
| screensize = settings.SCREENSIZE | |
| tuple | pixpercm |
| int | errdist = 2 |
| pxerrdist = self._deg2pix(self.screendist, self.errdist, self.pixpercm) | |
| list | event_data = [] |
| t0 = None | |
| datafile = open("{0}_TOBII_output.tsv".format(logfile), 'w') | |
| list | pxaccuracy = [(self._mean(lxacc), self._mean(lyacc)), (self._mean(rxacc), self._mean(ryacc))] |
| sampletime = self._mean(timestamps) | |
| samplerate = int(1000.0 / self.sampletime) | |
| tuple | pxdsttresh = (XRMS, YRMS) |
| pxfixtresh = self._deg2pix(self.screendist, self.fixtresh, self.pixpercm) | |
| pxspdtresh = self._deg2pix(self.screendist, self.spdtresh / 1000.0, self.pixpercm) | |
| pxacctresh = self._deg2pix(self.screendist, self.accthresh / 1000.0, self.pixpercm) | |
Public Attributes inherited from pygaze._eyetracker.baseeyetracker.BaseEyeTracker | |
| draw_calibration_target = func | |
| draw_drift_correction_target = func | |
Protected Member Functions | |
| _norm_2_px (self, normalized_point) | |
| _px_2_norm (self, pixelized_point) | |
| _mean (self, array) | |
| _deg2pix (self, cmdist, angle, pixpercm) | |
| _on_gaze_data (self, gaze_data) | |
| _flush_to_file (self) | |
| _write_header (self) | |
| _write_sample (self, sample) | |
Protected Attributes | |
| bool | _write_enabled = True |
| _on_gaze_data = [] | |
A class for Tobii Pro EyeTracker objects
| pygaze._eyetracker.libtobii.TobiiProTracker.__init__ | ( | self, | |
| display, | |||
| logfile = settings.LOGFILE, | |||
| eventdetection = settings.EVENTDETECTION, | |||
| saccade_velocity_threshold = 35, | |||
| saccade_acceleration_threshold = 9500, | |||
| blink_threshold = settings.BLINKTHRESH, | |||
| ** | args ) |
Initializes a TobiiProTracker instance arguments display -- a pygaze.display.Display instance keyword arguments None
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
| pygaze._eyetracker.libtobii.TobiiProTracker.calibrate | ( | self, | |
| calibrate = True, | |||
| validate = True ) |
Calibrates the eye tracker.
arguments
None
keyword arguments
calibrate -- Boolean indicating if calibration should be
performed (default = True).
validate -- Boolean indicating if validation should be performed
(default = True).
returns
success -- returns True if calibration succeeded, or False if
not; in addition a calibration log is added to the
log file and some properties are updated (i.e. the
thresholds for detection algorithms)
Reimplemented from pygaze._eyetracker.baseeyetracker.BaseEyeTracker.
| pygaze._eyetracker.libtobii.TobiiProTracker.close | ( | self | ) |
Closes the currently used log file. arguments None returns None -- closes the log file.
Reimplemented from pygaze._eyetracker.baseeyetracker.BaseEyeTracker.
| pygaze._eyetracker.libtobii.TobiiProTracker.drift_correction | ( | self, | |
| pos = None, | |||
| fix_triggered = False ) |
Performs a drift check
arguments
None
keyword arguments
pos -- (x, y) position of the fixation dot or None for
a central fixation (default = None)
fix_triggered -- Boolean indicating if drift check should be
performed based on gaze position (fix_triggered
= True) or on spacepress (fix_triggered =
False) (default = False)
returns
checked -- Boolean indicating if drift check is ok (True)
or not (False); or calls self.calibrate if 'q'
or 'escape' is pressed
Reimplemented from pygaze._eyetracker.baseeyetracker.BaseEyeTracker.
| pygaze._eyetracker.libtobii.TobiiProTracker.fix_triggered_drift_correction | ( | self, | |
| pos = None, | |||
| min_samples = 10, | |||
| max_dev = 60, | |||
| reset_threshold = 30 ) |
Performs a fixation triggered drift correction by collecting
a number of samples and calculating the average distance from the
fixation position
arguments
None
keyword arguments
pos -- (x, y) position of the fixation dot or None for
a central fixation (default = None)
min_samples -- minimal amount of samples after which an
average deviation is calculated (default = 10)
max_dev -- maximal deviation from fixation in pixels
(default = 60)
reset_threshold -- if the horizontal or vertical distance in
pixels between two consecutive samples is
larger than this threshold, the sample
collection is reset (default = 30)
returns
checked -- Boolean indicating if drift check is ok (True)
or not (False); or calls self.calibrate if 'q'
or 'escape' is pressed
Reimplemented from pygaze._eyetracker.baseeyetracker.BaseEyeTracker.
| pygaze._eyetracker.libtobii.TobiiProTracker.is_valid_sample | ( | self, | |
| sample ) |
Checks if the sample provided is valid, based on Tobii specific
criteria (for internal use)
arguments
sample -- a (x,y) gaze position tuple, as returned by
self.sample()
returns
valid -- a Boolean: True on a valid sample, False on
an invalid sample
| pygaze._eyetracker.libtobii.TobiiProTracker.log | ( | self, | |
| msg ) |
Writes a message to the log file
arguments
msg -- a string to include in the log file
returns
Nothing -- uses native log function to include a line
in the log file
Reimplemented from pygaze._eyetracker.baseeyetracker.BaseEyeTracker.
| pygaze._eyetracker.libtobii.TobiiProTracker.log_var | ( | self, | |
| var, | |||
| val ) |
Writes a variable to the log file
arguments
var -- variable name
val -- variable value
returns
Nothing -- uses native log function to include a line
in the log file in a "var NAME VALUE" layout
Reimplemented from pygaze._eyetracker.baseeyetracker.BaseEyeTracker.
| pygaze._eyetracker.libtobii.TobiiProTracker.pupil_size | ( | self | ) |
Returns newest available pupil size
arguments
None
returns
pupilsize -- a float if only eye is selected or only one eye has valid data.
-- a tuple with two floats if both eyes are selected.
-- -1 if there is no valid pupil data available.
Reimplemented from pygaze._eyetracker.baseeyetracker.BaseEyeTracker.
| pygaze._eyetracker.libtobii.TobiiProTracker.sample | ( | self | ) |
Returns newest available gaze position The gaze position is relative to the self.eye_used currently selected. If both eyes are selected, the gaze position is averaged from the data of both eyes. arguments None returns sample -- an (x,y) tuple or a (-1,-1) on an error
Reimplemented from pygaze._eyetracker.baseeyetracker.BaseEyeTracker.
| pygaze._eyetracker.libtobii.TobiiProTracker.set_eye_used | ( | self | ) |
Logs the eye_used variable, based on which eye was specified.
arguments
None
returns
Nothing -- logs which eye is used by calling self.log_var, e.g.
self.log_var("eye_used", "right")
Reimplemented from pygaze._eyetracker.baseeyetracker.BaseEyeTracker.
| pygaze._eyetracker.libtobii.TobiiProTracker.start_recording | ( | self | ) |
Starts recording eye position
arguments
None
returns
None -- sets self.recording to True when recording is
successfully started
Reimplemented from pygaze._eyetracker.baseeyetracker.BaseEyeTracker.
| pygaze._eyetracker.libtobii.TobiiProTracker.stop_recording | ( | self | ) |
Stop recording eye position
arguments
None
returns
Nothing -- sets self.recording to False when recording is
successfully started
Reimplemented from pygaze._eyetracker.baseeyetracker.BaseEyeTracker.
| pygaze._eyetracker.libtobii.TobiiProTracker.wait_for_blink_end | ( | self | ) |
Waits for a blink end and returns the blink ending time
arguments
None
returns
timestamp -- blink ending time in milliseconds, as
measured from experiment begin time
Reimplemented from pygaze._eyetracker.baseeyetracker.BaseEyeTracker.
| pygaze._eyetracker.libtobii.TobiiProTracker.wait_for_blink_start | ( | self | ) |
Waits for a blink start and returns the blink starting time
arguments
None
returns
timestamp -- blink starting time in milliseconds, as
measured from experiment begin time
Reimplemented from pygaze._eyetracker.baseeyetracker.BaseEyeTracker.
| pygaze._eyetracker.libtobii.TobiiProTracker.wait_for_fixation_end | ( | self | ) |
Returns time and gaze position when a fixation has ended;
function assumes that a 'fixation' has ended when a deviation of
more than self.pxfixtresh from the initial fixation position has
been detected (self.pxfixtresh is created in self.calibration,
based on self.fixtresh, a property defined in self.__init__)
arguments
None
returns
time, gazepos -- time is the starting time in milliseconds (from
expstart), gazepos is a (x,y) gaze position
tuple of the position from which the fixation
was initiated
Reimplemented from pygaze._eyetracker.baseeyetracker.BaseEyeTracker.
| pygaze._eyetracker.libtobii.TobiiProTracker.wait_for_fixation_start | ( | self | ) |
Returns starting time and position when a fixation is started;
function assumes a 'fixation' has started when gaze position
remains reasonably stable (i.e. when most deviant samples are
within self.pxfixtresh) for five samples in a row (self.pxfixtresh
is created in self.calibration, based on self.fixtresh, a property
defined in self.__init__)
arguments
None
returns
time, gazepos -- time is the starting time in milliseconds (from
expstart), gazepos is a (x,y) gaze position
tuple of the position from which the fixation
was initiated
Reimplemented from pygaze._eyetracker.baseeyetracker.BaseEyeTracker.
| pygaze._eyetracker.libtobii.TobiiProTracker.wait_for_saccade_end | ( | self | ) |
Returns ending time, starting and end position when a saccade is
ended; based on Dalmaijer et al. (2013) online saccade detection
algorithm
arguments
None
returns
endtime, startpos, endpos -- endtime in milliseconds (from
expbegintime); startpos and endpos
are (x,y) gaze position tuples
Reimplemented from pygaze._eyetracker.baseeyetracker.BaseEyeTracker.
| pygaze._eyetracker.libtobii.TobiiProTracker.wait_for_saccade_start | ( | self | ) |
Returns starting time and starting position when a saccade is
started; based on Dalmaijer et al. (2013) online saccade detection
algorithm
arguments
None
returns
endtime, startpos -- endtime in milliseconds (from expbegintime);
startpos is an (x,y) gaze position tuple
Reimplemented from pygaze._eyetracker.baseeyetracker.BaseEyeTracker.
|
protected |
|
protected |
| pygaze._eyetracker.libtobii.TobiiProTracker.accthresh = saccade_acceleration_threshold |
| int pygaze._eyetracker.libtobii.TobiiProTracker.BINOCULAR = 2 |
| pygaze._eyetracker.libtobii.TobiiProTracker.blinkthresh = blink_threshold |
| pygaze._eyetracker.libtobii.TobiiProTracker.datafile = open("{0}_TOBII_output.tsv".format(logfile), 'w') |
| pygaze._eyetracker.libtobii.TobiiProTracker.disp = display |
| int pygaze._eyetracker.libtobii.TobiiProTracker.errdist = 2 |
| list pygaze._eyetracker.libtobii.TobiiProTracker.event_data = [] |
| str pygaze._eyetracker.libtobii.TobiiProTracker.eventdetection = eventdetection |
| int pygaze._eyetracker.libtobii.TobiiProTracker.eye_used = 0 |
| list pygaze._eyetracker.libtobii.TobiiProTracker.eyetracker = self.eyetrackers[0] |
| list pygaze._eyetracker.libtobii.TobiiProTracker.eyetrackers = [t for t in tr.find_all_eyetrackers() if t.serial_number == settings.TRACKERSERIALNUMBER] |
| int pygaze._eyetracker.libtobii.TobiiProTracker.fixtimetresh = 100 |
| pygaze._eyetracker.libtobii.TobiiProTracker.fixtresh = 1.5 |
| list pygaze._eyetracker.libtobii.TobiiProTracker.gaze = [] |
| pygaze._eyetracker.libtobii.TobiiProTracker.kb = Keyboard(keylist=['space', 'escape', 'q'], timeout=1) |
| int pygaze._eyetracker.libtobii.TobiiProTracker.LEFT_EYE = 0 |
| tuple pygaze._eyetracker.libtobii.TobiiProTracker.pixpercm |
| list pygaze._eyetracker.libtobii.TobiiProTracker.points_to_calibrate = [self._norm_2_px(p) for p in [(lb, ub), (rb, ub), (xc, yc), (lb, bb), (rb, bb)]] |
| pygaze._eyetracker.libtobii.TobiiProTracker.pxacctresh = self._deg2pix(self.screendist, self.accthresh / 1000.0, self.pixpercm) |
| list pygaze._eyetracker.libtobii.TobiiProTracker.pxaccuracy = [(self._mean(lxacc), self._mean(lyacc)), (self._mean(rxacc), self._mean(ryacc))] |
| tuple pygaze._eyetracker.libtobii.TobiiProTracker.pxdsttresh = (XRMS, YRMS) |
| pygaze._eyetracker.libtobii.TobiiProTracker.pxerrdist = self._deg2pix(self.screendist, self.errdist, self.pixpercm) |
| pygaze._eyetracker.libtobii.TobiiProTracker.pxfixtresh = self._deg2pix(self.screendist, self.fixtresh, self.pixpercm) |
| pygaze._eyetracker.libtobii.TobiiProTracker.pxspdtresh = self._deg2pix(self.screendist, self.spdtresh / 1000.0, self.pixpercm) |
| bool pygaze._eyetracker.libtobii.TobiiProTracker.recording = False |
| int pygaze._eyetracker.libtobii.TobiiProTracker.RIGHT_EYE = 1 |
| pygaze._eyetracker.libtobii.TobiiProTracker.samplerate = int(1000.0 / self.sampletime) |
| pygaze._eyetracker.libtobii.TobiiProTracker.sampletime = self._mean(timestamps) |
| pygaze._eyetracker.libtobii.TobiiProTracker.screen = Screen() |
| pygaze._eyetracker.libtobii.TobiiProTracker.screendist = settings.SCREENDIST |
| pygaze._eyetracker.libtobii.TobiiProTracker.screensize = settings.SCREENSIZE |
| pygaze._eyetracker.libtobii.TobiiProTracker.spdtresh = saccade_velocity_threshold |
| pygaze._eyetracker.libtobii.TobiiProTracker.t0 = None |
| int pygaze._eyetracker.libtobii.TobiiProTracker.weightdist = 10 |