Home > . > prt_struct.m

prt_struct

PURPOSE ^

% Function to load the PRT.mat and check its integrity regarding the

SYNOPSIS ^

function [PRT,flag] = prt_struct(PRT,prtdir)

DESCRIPTION ^

% Function to load the PRT.mat and check its integrity regarding the 
 fields that it is supposed to contain. Updates the PRT if needed.

 input  : PRT structure to check

 output : PRT structure updated
_______________________________________________________________________
 Copyright (C) 2011 Machine Learning & Neuroimaging Laboratory

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [PRT,flag] = prt_struct(PRT,prtdir)
0002 %% Function to load the PRT.mat and check its integrity regarding the
0003 % fields that it is supposed to contain. Updates the PRT if needed.
0004 %
0005 % input  : PRT structure to check
0006 %
0007 % output : PRT structure updated
0008 %_______________________________________________________________________
0009 % Copyright (C) 2011 Machine Learning & Neuroimaging Laboratory
0010 
0011 % Written by J. Schrouff
0012 % $Id: prt_struct.m 803 2013-06-11 11:46:24Z cphillip $
0013 
0014 flag = 1; % If any essential fields are missing, change flag and error
0015 flagch = 0; % 1 if structure is updated
0016 % Data and Design
0017 %--------------------------------------------------------------------------
0018 % Group
0019 ng = {'gr_name','subject','hrfoverlap','hrfdelay'};
0020 np = fieldnames(PRT.group(1));
0021 cg = ismember(ng,np);
0022 if ~all(cg) % missing fields
0023     flag = 0;
0024 %     ita = find(cg==0);  Repair
0025 %     for i = 1:length(ita)
0026 %         for j=1:length(PRT.group)
0027 %             PRT.group(j).(ng{ita(i)}) = [];
0028 %             if ita(i)==1
0029 %                 PRT.group(j).gr_name = '';
0030 %             elseif ita(i)==3
0031 %                 PRT.group(j).hrfoverlap = 0;
0032 %             elseif ita(i)==4
0033 %                 PRT.group(j).hrfdelay = 0;
0034 %             end
0035 %         end
0036 %     end
0037 end
0038 
0039 % Subject
0040 ng = {'subj_name','modality'};
0041 np = fieldnames(PRT.group(1).subject(1));
0042 cg = ismember(ng,np);
0043 if ~all(cg) % missing fields
0044     flag = 0;
0045 %     ita = find(cg==0);
0046 %     for i = 1:length(ita)
0047 %         for j=1:length(PRT.group)
0048 %             for k  = 1:length(PRT.group(j).subject)
0049 %                 PRT.group(j).subject(k).(ng{ita(i)}) = [];
0050 %                 if ita(i)==1
0051 %                     PRT.group(j).subject(k).subj_name = '';
0052 %                 end
0053 %             end
0054 %         end
0055 %     end
0056 end
0057 
0058 %Modality
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) % missing fields
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 % Masks
0082 %--------------------------------------------------------------------------
0083 ng = {'mod_name','fname'};
0084 np = fieldnames(PRT.masks(1));
0085 cg = ismember(ng,np);
0086 if ~all(cg) % missing fields
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 % Feature set
0097 %--------------------------------------------------------------------------
0098 if isfield(PRT,'fs')
0099     % Feature set .fs
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) % missing fields
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     % fs.fas: indexes in the file array
0124     ng = {'im','ifa'};
0125     np = fieldnames(PRT.fs(1).fas);
0126     cg = ismember(ng,np);
0127     if ~all(cg) % missing fields
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     % fs.modality: parameters selected for each modality in GUI
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) % missing fields
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 % File array
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) % missing fields
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 % Model
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) % missing fields
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     %model.input
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) % missing fields
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 %   Dealing with model outputs
0245     % model.output
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) % missing fields
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; %regression
0261                         end
0262                         winame = [prtdir,filesep,'weights_',PRT.model(j).model_name]; %potential weight image 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 % %     ng = {'targets','predictions','stats','func_val',...
0289 % %         'alpha','b'};
0290 % %     np = fieldnames(PRT.model(1).output(1).fold(1));
0291 % %     cg = ismember(ng,np);
0292 % %     if ~all(cg) % missing fields
0293 % %         ita = find(cg==0);
0294 % %         for i = 1:length(ita)
0295 % %             for j=1:length(PRT.model)
0296 % %                 for k = 1:length(PRT.model(j).output(k))
0297 % %                     for l = 1:length(PRT.model(j).output(k).fold(l))
0298 % %                         PRT.model(j).output(k).fold(l).(ng{ita(i)}) = [];
0299 % %                     end
0300 % %                 end
0301 % %             end
0302 % %         end
0303 % %     end
0304 
0305 
0306

Generated on Tue 10-Feb-2015 18:16:33 by m2html © 2005