%readGP3Fixations.m
%Read GP3 Fixation Data File (.csv exported from GP_Analysis Pro)

clear all;

%open text data file
inputfilename = 'Frank_fixations.csv';
fid = fopen(inputfilename, 'rt');
%skip header line
fgetl(fid);
%collect formated data from file
AoA = textscan(fid,'%f%s%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%s%f%f%f%f%f%f%f%f%f%f',...
    'delimiter',',');
%close file
fclose(fid);

%parse Gazepoint fixation data fields into separate data arrays
media_id = AoA{1};        %stimulus category (number)
media_name = AoA{2};      %stimulus category (string)
counter = AoA{3};         %video data field counter (60 Hz)
timesecs = AoA{4};        %time in seconds (at end-of-video-frame)
timeticks = AoA{5};       %time in system clock ticks (64-bit integer)
fpogx = AoA{6};           %Fixation Point of Gaze X-position (0.0-1.0)
fpogy = AoA{7};           %Fixation Point of Gaze Y-position
fpogs = AoA{8};           %Fixation start time
fpogd = AoA{9};           %Fixation duration (secs)
fpogid = AoA{10};         %Fixation event number
fpogv = AoA{11};          %Fixation Valid Flag (boolean)
bpogx = AoA{12};          %Best POG data available X-position
bpogy = AoA{13};          %Best POG data available Y-position
bpogv = AoA{14};          %Best POG data validity flag (boolean)
cx = AoA{15};             %mouse cursor screen X-position (0.0-1.0)
cy = AoA{16};             %mouse cursor screen Y-position
cs = AoA{17};             %mouse cursor button state (NOT IMPLEMENTED)
user = AoA{18};           %user-supplied synchronization marker/state (string)
lpcx = AoA{19};           %left pupil X-position (0.0-1.0 image camera)
lpcy = AoA{20};           %left pupil Y-position
lpd = AoA{21};            %left pupil diameter (camera pixels)
lps = AoA{22};            %left pupil scale factor (1.0 at calibration distance)
lpv = AoA{23};            %left pupil data validity flag (boolean)
rpcx = AoA{24};           %right pupil X-position
rpcy = AoA{25};           %right pupil Y-position
rpd = AoA{26};            %right pupil diameter (camera pixels)
rps = AoA{27};            %right pupil scale factor
rpv = AoA{28};            %right pupil data validity flag (boolean)

%display summary on console (screen size assumption: 1024x768)
pixwidth = 1024; pixheight = 768;
disp(' ');
disp('Fixation Summary Report');
disp(['File: ',inputfilename]);
disp(' ');
disp('STIM FIXNO   X     Y    MSEC'); %column headings
for n = 1:length(media_id)
   %stimulus  fix_no  X_pixels  Y-pixels  duration(ms)
   line = sprintf(' %03d  %03d  %04.0f   %03.0f   %04.0f', ...
       media_id(n),fpogid(n),floor(fpogx(n)*pixwidth),floor(fpogy(n)*pixheight),...
       floor(fpogd(n)*1000));
   disp(line);
end
 
Fixation Summary Report
File: Frank_fixations.csv
 
STIM FIXNO   X     Y    MSEC
 000  001  0526   342   0723
 000  002  0426   337   0624
 000  003  0610   325   0561
 000  004  0421   344   0343
 000  005  0492   569   0248
 000  006  0497   593   0542
 000  007  0412   336   0459
 000  008  0611   315   0493
 000  009  0388   348   0689
 000  010  0500   483   0279
 000  011  0493   498   0541
 001  001  0480   493   0311
 001  002  0450   326   0237
 001  003  0518   379   0196
 001  004  0535   284   0541
 001  005  0431   296   0427
 001  006  0583   319   0296
 001  007  0498   551   0673
 001  008  0411   249   0622
 001  009  0552   311   0328
 001  010  0484   375   0246
 001  011  0501   475   0557
 001  012  0488   578   0739
 001  013  0415   325   0131
 002  001  0408   303   0080
 002  002  0393   310   0477
 002  003  0442   314   0278
 002  004  0612   372   0410
 002  005  0640   520   0212
 002  006  0640   551   1100
 002  007  0483   565   0526
 002  008  0507   491   0229
 002  009  0537   417   0262
 002  010  0592   323   0541
 002  011  0401   323   0508
 002  012  0609   327   0311
 003  013  0399   323   0543
 003  001  0402   320   0033
 003  002  0574   329   0541
 003  003  0498   359   0377
 003  004  0501   365   0920
 003  005  0272   312   0497
 003  006  0146   300   1821
 003  007  0173   295   1495
 003  008  0206   316   0583
 003  009  0220   286   0411
 003  010  0275   311   0295
 003  011  0277   346   0295
 003  012  0054   324   0771
 003  013  0635   368   0328
 003  014  0713   507   0098