Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
% Hariri Logfile Extraction / Number of scans
%
% transfers logfiles into BIDS tsv format
%
% file history:
% created A. Kuehnel 18.12.2017
% last edited M. Czisch 31.1.2018
function Hariri_logfile_bids(BIDS)
subject_path = BIDS.output.dir;
log = dir([BIDS.output.dir,'/func/*hariri_bold.log']);
logfile=readtext([BIDS.output.dir,'/func/',log.name],'\t');
dummies = 0; %number of dummies
% Find last row with relevant information
last_row=find(strcmp(logfile(:,1),'Event Type'))-3;
% Convert to table
logfile_table = cell2table(logfile(6:last_row,1:8));
Var_Names = strrep(logfile(4,1:8),' ','');
logfile_table.Properties.VariableNames = Var_Names;
% Count Pulses (only if number pulses > nr. events && responses)
logfile_table.EventType=categorical(logfile_table.EventType);
% Find zerotime
logfile_table.Time=logfile_table.Time/10000;
Pulse_index = strcmp(cellstr(logfile_table.EventType),'Pulse');
Response_index = find(strcmp(cellstr(logfile_table.EventType),'Response'));
Dummy_index = find(Pulse_index,dummies+1,'first');
zero_time = logfile_table.Time(Dummy_index(end));
% Find Indexes for different event types
temp = cellfun(@num2str, logfile_table.Code, 'UniformOutput', false);
Ende_index = ~cellfun(@isempty,(regexp(temp,'instruction2')));
if sum(Ende_index)==0; error('Incomplete Logfile!'); end
Jpeg_index = find(~cellfun(@isempty,(regexp(temp,'.jpg$'))));
Fix_index = find(~cellfun(@isempty,(regexp(temp,'fix_*'))));
Fix1_index = find(~cellfun(@isempty,(regexp(temp,'fix_cross1.jpg'))));
Fix2_index = find(~cellfun(@isempty,(regexp(temp,'fix_cross2.jpg'))));
Geo_index = find(~cellfun(@isempty,(regexp(temp,'e*'))));
Faces_index = setxor((setxor(Jpeg_index, Fix_index)),Geo_index);% Alternatively regexp pattern = '^[^ef]\w*\.jpg'
All_events_index = sort([Jpeg_index; Response_index]);
% Categorize Events % 1 fix1 2 fix2 3form 4face 5response/motor
logfile_table.cat=zeros(size(temp));
logfile_table.cat(Fix1_index)=1;
logfile_table.cat(Fix2_index)=2;
logfile_table.cat(Geo_index)=3;
logfile_table.cat(Faces_index)=4;
logfile_table.cat(Response_index)=5;
logfile_table.event=string(nan(size(temp)));
logfile_table.event(Fix1_index)='Fix1';
logfile_table.event(Fix2_index)='Fix2';
logfile_table.event(Geo_index)='Form';
logfile_table.event(Faces_index)='Face';
logfile_table.event(Response_index)='Motor';
% tsv/csv file for bids
% without Pulses
event_durations = nan(length(All_events_index),1);
jpeg_durations = cell2mat(logfile_table.Duration(Jpeg_index))/10000;
%Calculate RTS as difference between begin stimulus presentaion and begin
%next event (Response or next fixation)
RT = nan(length(All_events_index),1);
[~,ai,~]=intersect(All_events_index,Jpeg_index);
RTs = [diff(logfile_table.Time(All_events_index));0];
event_onsets = logfile_table.Time(All_events_index)-zero_time;
stimulus = cellfun(@num2str, logfile_table.Code(All_events_index), 'UniformOutput', false);
event_cat = logfile_table.cat(All_events_index);
event_type = logfile_table.event(All_events_index);
event_durations(ai) = jpeg_durations;
RT(event_cat==3|event_cat==4) = RTs(event_cat==3 | event_cat==4);
% RT = NaN for RTs longer than presentation of stimulus
RT((event_cat==3&RTs>4)|(event_cat==4&RTs>6))=NaN;
log_tab=table(event_type,event_onsets,event_durations,RT,event_cat,stimulus);
%writetable(log, [subject_path,'/func/sub-',subject_path(end-6:end),'_task-hariri_events.csv'],'Delimiter','\t');
log_cell=[log_tab.Properties.VariableNames;table2cell(log_tab)];
fid = fopen([subject_path,'/func/sub-',subject_path(end-11:end-5),'_task-hariri_events.tsv'],'wt');
if fid>0
fprintf(fid, '%s\t%s\t%s\t%s\t%s\t%s\n',log_cell{1,:});
for k=2:size(log_cell,1)
fprintf(fid,'%s\t%f\t%f\t%f\t%f\t%s\n',log_cell{k,:});
end
fclose(fid);
end