forked from racheldenison/temporal-attention
-
Notifications
You must be signed in to change notification settings - Fork 0
/
rd_eyeTrackTester.m
112 lines (92 loc) · 3.12 KB
/
rd_eyeTrackTester.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
% rd_eyeTrackTester.m
%
% This is designed to be a very simple "experiment" that can be used to
% test and/or demonstrate the use of rd_eyeLink.m.
subjectID = 'ldb1';
eyeDataDir = 'eyedata';
eyeFile = sprintf('%s%s', subjectID, datestr(now, 'mmdd'));
nTrials = 10;
rad = 70; % radius of allowable eye movement in pixels
%% Screen
screenNumber = max(Screen('Screens'));
[window rect] = Screen('OpenWindow', screenNumber);
% [window rect] = Screen('OpenWindow', screenNumber, [], [0 0 800 600]); % for testing
[cx cy] = RectCenter(rect);
Screen('TextSize', window, 24);
Screen('TextColor', window, 255);
Screen('TextFont', window, 'Verdana');
Screen('FillRect', window, 128)
Screen('Flip', window);
%% Initialize eye tracker
[el exitFlag] = rd_eyeLink('eyestart', window, eyeFile);
if exitFlag
return
end
%% Calibrate eye tracker
[cal exitFlag] = rd_eyeLink('calibrate', window, el);
if exitFlag
return
end
%% Present trials
for iTrial = 1:nTrials
Screen('FillRect', window, 128)
DrawFormattedText(window, '+', 'center', 'center', 0);
Screen('Flip', window);
% wait for a keypress to begin the trial
KbWait;
fprintf('\n\nTrial %d', iTrial)
% present fixation
DrawFormattedText(window, '+', 'center', 'center', 255);
timeFix = Screen('Flip', window);
% start the trial when the eyetracker is recording and the subject is
% holding fixation
rd_eyeLink('trialstart', window, {el, iTrial, cx, cy, rad});
% present first stimulus
DrawFormattedText(window, '+', 'center', 'center', 255);
DrawFormattedText(window, 'STIM 1', cx-200, 'center');
timeStim1(iTrial) = Screen('Flip', window);
Eyelink('Message', 'EVENT_STIM1');
stopThisTrial = 0;
while GetSecs < timeStim1(iTrial) + 0.45 && ~stopThisTrial
WaitSecs(.01);
fixation = rd_eyeLink('fixcheck', window, {cx, cy, rad});
if ~fixation
% do fixation break tasks:
% this could include adding the broken trial to the end
fprintf('\nBROKE FIXATION! (stim 1)')
Beeper('high')
stopThisTrial = 1;
end
% alt: fixationBreakTasks(fixation)
end
fix1(iTrial) = fixation;
if stopThisTrial
continue
end
% present second stimulus
DrawFormattedText(window, '+', 'center', 'center');
DrawFormattedText(window, 'STIM 2', cx+200, 'center');
timeStim2(iTrial) = Screen('Flip', window, timeStim1(iTrial) + 0.5);
Eyelink('Message', 'EVENT_STIM2');
while GetSecs < timeStim2(iTrial) + 0.45 && ~stopThisTrial
WaitSecs(.01);
fixation = rd_eyeLink('fixcheck', window, {cx, cy, rad});
if ~fixation
fprintf('\nBROKE FIXATION! (stim 2)')
Beeper('high')
stopThisTrial = 1;
end
end
fix2(iTrial) = fixation;
Eyelink('Message', 'TRIAL_END');
end
%% Final blank
Screen('FillRect', window, 128)
Screen('Flip', window);
%% Save the eye data and shut down the eye tracker
if ~exist(eyeDataDir,'dir')
mkdir(eyeDataDir)
end
rd_eyeLink('eyestop', window, {eyeFile, eyeDataDir});
%% Close screen
Screen('CloseAll')