-
Notifications
You must be signed in to change notification settings - Fork 0
/
aamod_pilab_rdms_searchselect.m
103 lines (92 loc) · 3.97 KB
/
aamod_pilab_rdms_searchselect.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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
% [aap,resp]= aamod_pilab_rdms_searchselect(aap,task,subj)
function [aap,resp]= aamod_pilab_rdms_searchselect(aap,task,subj)
resp='';
switch task
case 'doit'
% get the model / epi instances
designpath = aas_getfiles_bystream(aap,subj,'pilab_design');
designvol = loadbetter(designpath);
epipath = aas_getfiles_bystream(aap,subj,'pilab_epi');
epivol = loadbetter(epipath);
ts = aap.tasklist.currenttask.settings;
if ~isempty(ts.setclass)
fprintf('setting data to %s\n',ts.setclass);
epivol.data = feval(ts.setclass,epivol.data);
designvol.data = feval(ts.setclass,designvol.data);
end
% get ROIs / spheres
roipath = aas_getfiles_bystream(aap,subj,...
'pilab_rois');
rois = loadbetter(roipath);
% sort out the training predictors
if isempty(ts.predictorfun)
predictpath = aas_getfiles_bystream(aap,subj,...
'pilab_rsapredictors');
predictors = loadbetter(predictpath);
else
fprintf('using custom predictor RDMs from %s\n',...
ts.predictorfun);
predictors = feval(ts.predictorfun);
end
if ~isempty(ts.selectpredictorinds)
assert(isempty(ts.removepredictorinds),...
'cannot both select and remove predictor inds');
predictors = predictors(ts.selectpredictorinds);
end
predictors(ts.removepredictorinds) = [];
% however you did that, there should now be only a single model RDM
assert(numel(predictors)==1,'1 predictor only');
% sort out masks
% find roi masks (possibly split-specific)
roidir = fullfile(ts.roiroot,...
aap.acq_details.subjects(subj).subjname);
if isempty(ts.subdir)
% simples
maskvol = roidir2vol(roidir);
else
if ~iscell(ts.subdir)
maskvol = roidir2vol(fullfile(roidir,ts.subdir));
else
for s = 1:numel(ts.subdir)
roidir = fullfile(roidir,ts.subdir{super});
maskvol{s} = roidir2vol(roidir);
end
end
end
[meandisvol,sessdisvolcell,roispheres] = ...
roidata2rdmvol_lindisc_searchselect(rois,designvol,epivol,...
maskvol,...
'predictor',predictors,'split',ts.split,'cvsplit',ts.cvsplit,...
'subsplit',ts.subsplit,'minvoxeln',ts.minvoxeln,...
'glmclass',ts.glmclass,'glmvarargs',ts.glmvarargs,...
'sterrunits',ts.sterrunits,...
'crossvalidate',ts.crossvalidate,...
'crosscon',ts.crosscon,'maskns',...
ts.maskns,'rsaclass',ts.rsaclass,'rsaclassargs',...
ts.rsaclassargs);
pidir = fullfile(aas_getsubjpath(aap,subj),'pilab');
outpath_mean = fullfile(pidir,'rdms_mean.mat');
save(outpath_mean,'meandisvol');
aap=aas_desc_outputs(aap,subj,'pilab_data_rdms_mean',...
outpath_mean);
% save session disvols
outpaths_sessrdms = [];
for sp = 1:length(sessdisvolcell)
sessdisvol = sessdisvolcell{sp};
outpath_sessdata = fullfile(pidir,sprintf(...
'rdms_split%02d.mat',sp));
save(outpath_sessdata,'sessdisvol');
outpaths_sessrdms = [outpaths_sessrdms; outpath_sessdata];
end
% describe outputs
aap=aas_desc_outputs(aap,subj,'pilab_data_rdms_sess',...
outpaths_sessrdms);
% also save ROIs for diagnostic purposes
sphereout = fullfile(pidir,'searchspheres.mat');
save(sphereout,'roispheres');
aap=aas_desc_outputs(aap,subj,'pilab_rois_searchselect',...
sphereout);
case 'checkrequirements'
otherwise
aas_log(aap,1,sprintf('Unknown task %s',task));
end