0001 function out = prt_run_model(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045 job = varargin{1};
0046
0047
0048
0049 fname = char(job.infile);
0050 if exist('PRT','var')
0051 clear PRT
0052 end
0053 PRT=prt_load(fname);
0054 if ~isempty(PRT)
0055 handles.dat=PRT;
0056 else
0057 beep
0058 disp('Could not load file')
0059 return
0060 end
0061
0062
0063 model.fname = fname;
0064 model.model_name = job.model_name;
0065 if ~(prt_checkAlphaNumUnder(model.model_name))
0066 beep
0067 disp('Model name should be entered in alphanumeric format only')
0068 disp('Please correct')
0069 return
0070 end
0071 model.use_kernel = job.use_kernel;
0072
0073
0074
0075 model.fs(1).fs_name = job.fsets;
0076 fid=prt_init_fs(PRT,model.fs(1));
0077 mods={PRT.fs(fid).modality(:).mod_name};
0078
0079
0080 nm=length(mods);
0081 for i=1:nm
0082 flag=1;
0083 for j=1:length(PRT.group)
0084 for k=1:length(PRT.group(j).subject)
0085 m2= strcmpi(PRT.fs(fid).modality(nm).mod_name,mods);
0086 des=PRT.group(j).subject(k).modality(m2).design;
0087 if isstruct(des) && flag
0088 if k==1 && j==1
0089 lcond={des.conds(:).cond_name};
0090 else
0091 tocmp={des.conds(:).cond_name};
0092 lcond=intersect(lcond,tocmp);
0093 end
0094 else
0095 flag=0;
0096 lcond={};
0097 end
0098 end
0099 end
0100 end
0101
0102
0103
0104
0105 if isfield(job.model_type,'classification')
0106 model.type = 'classification';
0107 for c = 1:length(job.model_type.classification.class)
0108 model.class(c).class_name = job.model_type.classification.class(c).class_name;
0109
0110 for g = 1:length(job.model_type.classification.class(c).group)
0111 scount = 1;
0112 model.class(c).group(g).gr_name = ...
0113 job.model_type.classification.class(c).group(g).gr_name;
0114
0115 sids = job.model_type.classification.class(c).group(g).subj_nums;
0116 for s = 1:length(sids)
0117 model.class(c).group(g).subj(scount).num = sids(s);
0118 for m = 1: length(mods)
0119 model.class(c).group(g).subj(scount).modality(m).mod_name=mods{m};
0120 if isfield(job.model_type.classification.class(c).group(g).conditions,'all_scans')
0121 model.class(c).group(g).subj(scount).modality(m).all_scans = true;
0122 elseif isfield(job.model_type.classification.class(c).group(g).conditions,'all_cond')
0123 model.class(c).group(g).subj(scount).modality(m).all_cond = true;
0124 if isempty(lcond)
0125 beep
0126 disp('All conditions selected while no conditions were common to all subjects')
0127 disp('Please review the selection and/or the data and design')
0128 return
0129 end
0130 else
0131 model.class(c).group(g).subj(scount).modality(m).conds = ...
0132 job.model_type.classification.class(c).group(g).conditions.conds;
0133 for cc=1:length(job.model_type.classification.class(c).group(g).conditions.conds)
0134 cname=job.model_type.classification.class(c).group(g).conditions.conds(cc).cond_name;
0135 if isempty(intersect({cname},lcond))
0136 beep
0137 disp('This condition is not common to all subjects')
0138 disp('Please remove it from the selection')
0139 return
0140 end
0141 end
0142 end
0143 end
0144 scount = scount+1;
0145 end
0146 end
0147 end
0148
0149 if isfield(job.model_type.classification.machine_cl,'svm')
0150 model.machine.function = 'prt_machine_svm_bin';
0151 model.machine.args = job.model_type.classification.machine_cl.svm.svm_args;
0152 elseif isfield(job.model_type.classification.machine_cl,'gpc')
0153 model.machine.function='prt_machine_gpml';
0154 model.machine.args=job.model_type.classification.machine_cl.gpc.gpc_args;
0155 elseif isfield(job.model_type.classification.machine_cl,'gpclap')
0156 model.machine.function='prt_machine_gpclap';
0157 model.machine.args=job.model_type.classification.machine_cl.gpclap.gpclap_args;
0158 elseif isfield(job.model_type.classification.machine_cl,'rt')
0159 model.machine.function='prt_machine_RT_bin';
0160 model.machine.args=job.model_type.classification.machine_cl.rt.rt_args;
0161 else
0162 [pat, nam] = fileparts(char(job.model_type.classification.machine_cl.custom_machine.machine_func));
0163 model.machine.function = nam;
0164 model.machine.args = job.model_type.classification.machine_cl.custom_machine.machine_args;
0165 end
0166
0167 elseif isfield(job.model_type,'regression')
0168 model.type = 'regression';
0169 scount = 1;
0170 for g = 1:length(job.model_type.regression.reg_group)
0171 model.group(g).gr_name = job.model_type.regression.reg_group(g).gr_name;
0172 sids = job.model_type.regression.reg_group(g).subj_nums;
0173 for s = 1:length(sids)
0174 model.group(g).subj(scount).num = sids(s);
0175 model.group(g).subj(scount).modality.mod_name = mods;
0176 scount=scount+1;
0177 end
0178 end
0179
0180 if isfield(job.model_type.regression.machine_rg,'krr')
0181 model.machine.function='prt_machine_krr';
0182 model.machine.args=job.model_type.regression.machine_rg.krr.krr_args;
0183 elseif isfield(job.model_type.regression.machine_rg,'rvr')
0184 model.machine.function='prt_machine_rvr';
0185 model.machine.args=[];
0186 elseif isfield(job.model_type.regression.machine_rg,'gpr')
0187 model.machine.function='prt_machine_gpr';
0188 model.machine.args=job.model_type.regression.machine_rg.gpr.gpr_args;
0189 else
0190 [pat, nam] = fileparts(char(job.model_type.regression.machine_rg.custom_machine.machine_func));
0191 model.machine.function = nam;
0192 model.machine.args = job.model_type.regression.machine_rg.custom_machine.machine_args;
0193 end
0194 else
0195 error('this is not implemented yet');
0196 end
0197
0198
0199 if isfield(job.cv_type,'cv_loso')
0200 model.cv.type = 'loso';
0201 elseif isfield(job.cv_type,'cv_losgo')
0202 model.cv.type = 'losgo';
0203 elseif isfield(job.cv_type,'cv_lobo')
0204 model.cv.type = 'lobo';
0205
0206
0207
0208
0209
0210 elseif isfield(job.cv_type,'cv_loro')
0211 model.cv.type = 'loro';
0212 else
0213 model.cv.type = 'custom';
0214 model.cv.mat_file = job.cv_type;
0215 end
0216
0217 model.include_allscans = job.include_allscans;
0218
0219
0220
0221
0222
0223
0224
0225 if isfield(job.sel_ops.use_other_ops,'data_op')
0226 ops = [job.sel_ops.use_other_ops.data_op{:}];
0227 elseif isfield(job.sel_ops.use_other_ops,'no_op')
0228 ops = [];
0229 end
0230 if job.sel_ops.data_op_mc == 0
0231 model.operations = [3 ops];
0232 else
0233 model.operations = ops;
0234 end
0235
0236 prt_model(PRT,model);
0237
0238
0239
0240 out.files{1} = fname;
0241 out.names{1} = model.model_name;
0242 disp('Model configuration complete.')
0243 end