Permalink
Cannot retrieve contributors at this time
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?
test/Hariri_logfile_bids.m
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
104 lines (78 sloc)
3.7 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% 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 | |