ET_PDToolkit/PDToolkit/@PDSession/read_gazedata.m

94 lines
2.6 KiB
Matlab

function[obj] = readASC(obj)
%% low level function to read in asc data from Tobii eyetracker data
datafile = obj.datafile;
samples=[];
events ={};
load_processed_data = 0;
[base file ext] = fileparts(datafile);
target_dir = [base filesep file '.matlab'];
if (exist(target_dir, 'dir') == 0)
mkdir(target_dir);
end
cd(target_dir);
display(['Parsing file : ' file]);
%display_and_log(['Parsing file : ' file], 1);
%display_and_log(['Date : ' datestr(now)], 0);
target_raw = [target_dir filesep file '_raw.mat'];
target_processed = [target_dir filesep file '_processed.mat'];
settings.target_raw = target_raw;
settings.target_processed = target_processed;
if exist([target_dir filesep file '_processed.mat'], 'file');
display(sprintf('*) Loading data from file : %s', target_processed));
file_contents = load(target_processed);
data = file_contents.data;
load_processed_data = 1;
elseif exist([target_dir filesep file '_raw.mat'], 'file');
display(sprintf('*) Loading data from file : %s', target_raw));
file_contents= load(target_raw);
data = file_contents.data;
else
lc=0;
fp = fopen(datafile,'r');
i=1; j=1; m=1;
data_flag = 0;
if (isunix)
[status lines_txt] = system(['wc ' regexprep(datafile,' ', '\\ ') '|awk ''{print $1''}']);
[status events_txt] = system(['grep -c "^[0-9*" ' regexprep(datafile,' ', '\\ ') '|awk ''{print $1''}']);
else
[status lines_txt] = system(['find /c ' datafile]);
end
lines = str2num(lines_txt);
nevents = str2num(events_txt);
progressbar = waitbar(0, 'Reading data file...');
samples = nan(lines, 4);
events = cell(1, nevents);
header =fgetl(fp);
params = strsplit(header, '\t');
pupil_params = find(~cellfun(@isempty,strfind(params, 'Pupil')));
while(~feof(fp))
if(mod(lc, 1000) ==0)
% display(sprintf('working on line %d', lc));
waitbar(lc / lines, progressbar, sprintf('Reading data file ... : (%f)', round(100*(lc / lines))));
end
line=fgetl(fp);
pattern = ['%*d %*d %*d %d ' repmat('%*f ', 1, pupil_params(1)-5) '%f %*s']
if (data_flag & regexp(line, '^[0-9]*'))
samples(i,:) = sscanf(line, '%*d %*d %*d %d %f %*s');
i=i+1;
else
events{j} = line;
j=j+1;
end
if regexp(line,'^SAMPLES')
data_flag = 1;
end
lc=lc+1;
end
fclose(fp)
data.samples = samples;
data.events = events;
save(target_raw, 'data');
close(progressbar);
end