0001 function [PRT,flag] = prt_struct(PRT,prtdir)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 flag = 1;
0015 flagch = 0;
0016
0017
0018
0019 ng = {'gr_name','subject','hrfoverlap','hrfdelay'};
0020 np = fieldnames(PRT.group(1));
0021 cg = ismember(ng,np);
0022 if ~all(cg)
0023 flag = 0;
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037 end
0038
0039
0040 ng = {'subj_name','modality'};
0041 np = fieldnames(PRT.group(1).subject(1));
0042 cg = ismember(ng,np);
0043 if ~all(cg)
0044 flag = 0;
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056 end
0057
0058
0059 ng = {'mod_name','detrend','covar','rt_subj','design','scans'};
0060 np = fieldnames(PRT.group(1).subject(1).modality(1));
0061 cg = ismember(ng,np);
0062 if ~all(cg)
0063 flagch = 1;
0064 ita = find(cg==0);
0065 for i = 1:length(ita)
0066 for j=1:length(PRT.group)
0067 for k = 1:length(PRT.group(j).subject)
0068 for l = 1:length(PRT.group(j).subject(k).modality)
0069 PRT.group(j).subject(k).modality(l).(ng{ita(i)}) = [];
0070 if ita(i) == 2
0071 PRT.group(j).subject(k).modality(l).detrend = 0;
0072 elseif ita(i)==1
0073 PRT.group(j).subject(k).modality(l).mod_name = '';
0074 end
0075 end
0076 end
0077 end
0078 end
0079 end
0080
0081
0082
0083 ng = {'mod_name','fname'};
0084 np = fieldnames(PRT.masks(1));
0085 cg = ismember(ng,np);
0086 if ~all(cg)
0087 flagch = 1;
0088 ita = find(cg==0);
0089 for i = 1:length(ita)
0090 for j=1:length(PRT.masks)
0091 PRT.masks(j).(ng{ita(i)}) = [];
0092 end
0093 end
0094 end
0095
0096
0097
0098 if isfield(PRT,'fs')
0099
0100 ng = {'fs_name','k_file','id_col_names','fas','modality','id_mat','multkernel',...
0101 'atlas_name','igood_kerns','multkernelROI'};
0102 np = fieldnames(PRT.fs(1));
0103 cg = ismember(ng,np);
0104 if ~all(cg)
0105 flagch = 1;
0106 ita = find(cg==0);
0107 for i = 1:length(ita)
0108 for j=1:length(PRT.fs)
0109 PRT.fs(j).(ng{ita(i)}) = [];
0110 if ita(i)== 7
0111 PRT.fs(j).multkernel = 0;
0112 elseif ita(i) == 9
0113 PRT.fs(j).igood_kerns = 1;
0114 elseif ita(i) == 1
0115 PRT.fs(j).fs_name = '';
0116 elseif ita(i) == 10
0117 PRT.fs(j).multkernelROI = 0;
0118 end
0119 end
0120 end
0121 end
0122
0123
0124 ng = {'im','ifa'};
0125 np = fieldnames(PRT.fs(1).fas);
0126 cg = ismember(ng,np);
0127 if ~all(cg)
0128 flagch = 1;
0129 ita = find(cg==0);
0130 for i = 1:length(ita)
0131 for j=1:length(PRT.fs)
0132 for k = 1:length(PRT.fs(j).fas)
0133 PRT.fs(j).fas(k).(ng{ita(i)}) = [];
0134 end
0135 end
0136 end
0137 end
0138
0139
0140 ng = {'mod_name','detrend','param_dt','mode','idfeat_fas','normalise'};
0141 np = fieldnames(PRT.fs(1).modality);
0142 cg = ismember(ng,np);
0143 if ~all(cg)
0144 flagch = 1;
0145 ita = find(cg==0);
0146 for i = 1:length(ita)
0147 for j=1:length(PRT.fs)
0148 for k = 1:length(PRT.fs(j).modality)
0149 PRT.fs(j).modality(k).(ng{ita(i)}) = [];
0150 if ita(i)==1
0151 PRT.fs(j).modality(k).mod_name = '';
0152 elseif ita(i)==2
0153 PRT.fs(j).modality(k).detrend = 0;
0154 elseif ita(i)==4
0155 PRT.fs(j).modality(k).mode = 'all_scans';
0156 elseif ita(i) == 6
0157 PRT.fs(j).modality(k).normalise.type = 0;
0158 PRT.fs(j).modality(k).normalise.scaling = [];
0159 end
0160 end
0161 end
0162 end
0163 end
0164
0165 end
0166
0167
0168
0169
0170 if isfield(PRT,'fas')
0171 ng = {'mod_name','dat','detrend','param_dt','hdr','idfeat_img'};
0172 np = fieldnames(PRT.fas(1));
0173 cg = ismember(ng,np);
0174 if ~all(cg)
0175 flagch = 1;
0176 ita = find(cg==0);
0177 for i = 1:length(ita)
0178 for j=1:length(PRT.fas)
0179 PRT.fas(j).(ng{ita(i)}) = [];
0180 if ita(i)== 3
0181 PRT.fas(j).detrend = 0;
0182 elseif ita(i) == 1
0183 PRT.fas(j).mod_name = '';
0184 end
0185 end
0186 end
0187 end
0188 end
0189
0190
0191
0192
0193 if isfield(PRT,'model')
0194 ng = {'model_name','input','output'};
0195 np = fieldnames(PRT.model(1));
0196 cg = ismember(ng,np);
0197 if ~all(cg)
0198 flagch = 1;
0199 ita = find(cg==0);
0200 for i = 1:length(ita)
0201 for j=1:length(PRT.model)
0202 PRT.model(j).(ng{ita(i)}) = [];
0203 if ita(i) == 1
0204 PRT.model(j).model_name = '';
0205 end
0206 end
0207 end
0208 end
0209
0210
0211 ng = {'use_kernel','type','machine','fs','samp_idx','include_allscans',...
0212 'targets','targ_allscans','cv_mat','cv_type','cv_k','use_nested_cv',...
0213 'nested_param','operations'};
0214 for j=1:length(PRT.model)
0215 if ~isempty(PRT.model(j).input)
0216 np = fieldnames(PRT.model(j).input);
0217 cg = ismember(ng,np);
0218 if ~all(cg)
0219 flagch = 1;
0220 ita = find(cg==0);
0221 for i = 1:length(ita)
0222 for k= length(PRT.model(j).input)
0223 PRT.model(j).input(k).(ng{ita(i)}) = [];
0224 if ita(i) == 1
0225 PRT.model(j).input(k).use_kernel = 0;
0226 elseif ita(i)== 3
0227 PRT.model(j).input(k).machine.function = '';
0228 PRT.model(j).input(k).machine.args=[];
0229 elseif ita(i) ==4
0230 PRT.model(j).input(k).fs(1).fs_name = '';
0231 elseif ita(i) == 6
0232 PRT.model(j).input(k).include_allscans = 0;
0233 elseif ita(i) == 11
0234 PRT.model(j).input(k).cv_k = 0;
0235 elseif ita(i) == 12
0236 PRT.model(j).input(k).use_nested_cv = 0;
0237 end
0238 end
0239 end
0240 end
0241 end
0242 end
0243
0244
0245
0246 ng = {'fold','stats','weight_ROI','weight_img'};
0247 for j=1:length(PRT.model)
0248 if ~isempty(PRT.model(j).output)
0249 np = fieldnames(PRT.model(j).output(1));
0250 cg = ismember(ng,np);
0251 if ~all(cg)
0252 flagch = 1;
0253 ita = find(cg==0);
0254 for i = 1:length(ita)
0255 for k = 1:length(PRT.model(j).output)
0256 PRT.model(j).output(k).(ng{ita(i)}) = [];
0257 if isfield(PRT.model(j).input,'class')
0258 nclass = length(PRT.model(j).input.class);
0259 else
0260 nclass=1;
0261 end
0262 winame = [prtdir,filesep,'weights_',PRT.model(j).model_name];
0263 if nclass>2
0264 for nc=1:nclass
0265 if exist([winame,'_',num2str(nc),'.img'],'file')
0266 PRT.model(j).output(k).(ng{ita(i)})(nc) = {'weights_',PRT.model(j).model_name,'_',num2str(nc)};
0267 end
0268 end
0269 else
0270 if exist(winame,'file')
0271 PRT.model(j).output(k).(ng{ita(i)}) = {'weights_',PRT.model(j).model_name};
0272 end
0273 end
0274 end
0275 end
0276 end
0277 end
0278 end
0279 end
0280
0281 if flagch
0282 disp('PRT structure has been updated and saved')
0283 end
0284
0285
0286
0287
0288
0289
0290
0291
0292
0293
0294
0295
0296
0297
0298
0299
0300
0301
0302
0303
0304
0305
0306