-
Notifications
You must be signed in to change notification settings - Fork 0
/
BIDS_event.m
42 lines (39 loc) · 1.86 KB
/
BIDS_event.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
function BIDS_event(pathdata,SSID,data)
scandata=data;%copy the unprocessed data just in case
scandata{1,size(scandata,2)+1}='phase';%add a phase column so that test phase doesnt produce duplicated files
%find the onset columns
[headerow,expcol]=find(strcmp(scandata,'ExpStartTime'));
%find the task columns
[~,taskcol]=find(strcmp(scandata,'task'));
%fill in the phase column according to tasks
[studyrow,~]=find(strcmp(scandata(:,taskcol),'animacy'));
[testrow,~]=find(strcmp(scandata(:,taskcol),'lifetime')|strcmp(scandata(:,taskcol),'recent'));
scandata(studyrow,end)={'study'};%attach a new column at the end to indicate phase
scandata(testrow,end)={'test'};
%find the run columns
[~,runcol]=find(strcmp(scandata,'Run'));
%*********assuming there is not empty cells in the
%ExpStartTime column************
phasecell=scandata(headerow+1:end,end);
[p,IP,~]=unique(phasecell(~cellfun(@isempty,phasecell)));%unique task
scand=cell(1);
trow=cell(1);
rrow=cell(1);
scand_break=cell(1,1);
for i=1:length(p)%cut the data according to phase
[trow{i},~]=find(strcmp(scandata(:,end),p{i}));
scand{i}=scandata(trow{i},:);
%get unique runs in each phase
expcell=cell2mat(scand{i}(:,expcol));
[C,IA,IC]=unique(expcell);
%cut the data according to runs in each phase
for j=1:length(C)
tempcell=cellfun(@(x) isequal(x,C(j)),scandata(:,expcol));%isequal() gives logic rather than cell array
[rrow{j},~]=find(tempcell);
scand_break{j,i}=scandata(rrow{j},:);
scand_break{j,i}(:,runcol)={j};
%write to separate spreadsheets
xlswrite(strcat(pathdata,'/',SSID,'/','sub-',SSID,'_task-',p{i},'_run-',num2str(j,'%02.f'),'_data.xlsx'),vertcat(scandata(headerow,:),scand_break{j,i}));
end
end
end