Skip to content
Snippets Groups Projects
Commit 95f202ad authored by Laura Nervo's avatar Laura Nervo
Browse files

gtCheckParameters/gtModifyStructure : fixed bug with structures with structure...

gtCheckParameters/gtModifyStructure : fixed bug with structures with structure as field, handling correctly the filling of those parameters by default
build_structure  : only comments
make_parameters : Added debug flag

Signed-off-by: default avatarLaura Nervo <laura.nervo@esrf.fr>
parent 9510c096
No related branches found
No related tags found
No related merge requests found
function structure = build_structure(list, separator, debug)
function structure = build_structure(list, separator, debug)
% BUILD_STRUCTURE Builds some structure starting from a list template in 'list'
% structure = build_structure(list, separator, debug)
% -----------------------------------------------------
% structure = build_structure(list, [separator], [debug])
% -------------------------------------------------------
%
% INPUT:
% list = <struct> cell structure with names, description,
% classes and usertypes columns
% separator = <string> separator for sub-structures in list struct {'__'}
% i.e. list.index__strategy --> parameters.index.strategy
% list = <struct> cell structure with names, description,
% classes and usertypes columns
% separator = <string> separator for sub-structures in list struct {'__'}
% i.e. list.index__strategy --> parameters.index.strategy
% 'strategy' is a sub-structure of 'index'.
% PS. list.match_calib --> 'match_calib' is a field of
% 'list'. 'calib' is not a sub-structure of 'match'.
% PS. list.match_calib --> 'match_calib' is a field of
% 'list'. 'calib' is not a sub-structure of 'match'.
%
% OUTPUT:
% structure = <struct> structure built from 'list'
% substructures = <string> array of sub-structures found in each field of
% 'structure'
%
%
% Version 001 18-11-2011 by LNervo
% For each sub-structure an empty structure is created properly and
% the name is given in the output 'substructures'
% default separator is '__'
if ~exist('separator', 'var') || isempty(separator)
separator = '__';
end
......
......@@ -40,8 +40,6 @@ function [parameters, tocheck, list] = gtCheckParameters(parameters, section_nam
global GT_MATLAB_HOME
if ~any( ismember( fieldnames(parameters), section_name ) )
if any( ismember(section_name, {'version','acq','xop','cryst','labgeo','samgeo','prep',...
'seg','match','index','fsim','rec','fed','oar'}) )
......@@ -64,7 +62,7 @@ end
out = GtConditionalOutput(debug);
if diaryFlag
if (diaryFlag)
% save output in diary
dirname = gtGetLastDirName(pwd);
filename = gtLastFileName([section_name '_check_' dirname],'new','log');
......@@ -73,7 +71,7 @@ end
% gets the defaults values
out.odisp(' ')
[default_parameters, default_list] = make_parameters(2); % 0.025 sec
[default_parameters, default_list] = make_parameters(2, debug); % 0.025 sec
out.odisp(' ')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
......@@ -105,12 +103,14 @@ list_tocheck = cell(0,5);
% Fields used in the code : get only used VARIABLES and update info
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[used_vars, output_all, singles_vars] = get_used_names(output_all, section_name, patterns, false); % 0.050 sec
% take unique used names
used_names = unique(singles_vars);
% keep patterns for later (column shape)
patterns = patterns';
% find sections relative to section_name
[~, sections_] = findStringIntoCell(fieldnames(default_list), {section_name});
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Criterion #1 : check used VS saved parameters
......@@ -139,29 +139,37 @@ if ~isempty( findValueIntoCell(checkType, {'used', 'all'}) )
sfDisplayParameterUse(found_default_names, tocheck, 'used in the code but default:');
tmp_par = cell2struct(cell(size(found_default_names)), found_default_names, 1);
parameters.(section_name) = gtAddMatFile(parameters.(section_name), tmp_par, false, true, true);
[ind_, sections_toadd_] = findStringIntoCell(sections_, found_default_names);
if ~isempty(sections_toadd_)
sections_toadd_(end+1,1) = {section_name};
end
tmp_list = cell2struct( cellfun(@(num) default_list.(num), sections_toadd_, 'UniformOutput', false), sections_toadd_, 1);
% modify added parameters that are default
[~, tmp_list, ~] = findValueIntoCell(default_list.(section_name), found_default_names);
action = repmat({'added to parameters'},size(tmp_list,1),1);
parameters.(section_name) = gtModifyStructure(parameters.(section_name), tmp_list, [], 'Adding default missing parameters used in the code');
list_tocheck = [list_tocheck; [tmp_list action]];
[~, tmp_list.(section_name), ~] = findValueIntoCell(default_list.(section_name), found_default_names);
action = repmat({'added to parameters'},size(tmp_list.(section_name),1),1);
tmp_par = build_structure(tmp_list, '__', debug);
parameters.(section_name) = gtAddMatFile(parameters.(section_name), tmp_par.(section_name), false, true, true);
parameters.(section_name) = gtModifyStructure(parameters.(section_name), tmp_list.(section_name), [], 'Adding default missing parameters used in the code');
list_tocheck = [list_tocheck; [tmp_list.(section_name) action]];
end
% #2 B
found_notdefault_names = missing_used_names(~default);
if ~isempty(found_notdefault_names)
% find info relative to missing fields
[~, tocheck, ~] = findValueIntoCell(output_all, found_notdefault_names);
[~, tocheck, nottocheck] = findValueIntoCell(output_all, found_notdefault_names);
found_notdefault_names = setdiff(found_notdefault_names, nottocheck');
outlist = sfDisplayParameterUse(found_notdefault_names, tocheck, 'used in the code but not default:');
tmp_par = cell2struct(cell(size(found_notdefault_names)), found_notdefault_names, 1);
parameters.(section_name) = gtAddMatFile(parameters.(section_name), tmp_par, false, true, true);
% build list for new pars
tmp_list = [found_notdefault_names outlist cellfun(@(num) class(parameters.(section_name).(num)), found_notdefault_names, 'UniformOutput', false) ...
repmat({-1},length(found_notdefault_names),1)];
tmp_list = [found_notdefault_names outlist ...
cellfun(@(num) class(parameters.(section_name).(num)), found_notdefault_names, 'UniformOutput', false) ...
repmat({-1},length(found_notdefault_names),1)];
default_list.(section_name) = [default_list.(section_name); tmp_list];
% add gtModifyStructure for the added parameters
[parameters.(section_name), default_list.(section_name)] = gtModifyStructure(parameters.(section_name), default_list.(section_name), -1, 'Adding not default missing parameters used in the code:');
......@@ -211,13 +219,19 @@ if ~isempty( findValueIntoCell(checkType, {'default', 'all'}) )
sfDisplayParameterUse(found_default_names, tocheck, 'used in the code but default but not saved:');
tmp_par = cell2struct(cell(size(found_default_names)), found_default_names, 1);
parameters.(section_name) = gtAddMatFile(parameters.(section_name), tmp_par, false, true, true);
[ind_, sections_toadd_] = findStringIntoCell(sections_, found_default_names);
if ~isempty(sections_toadd_)
sections_toadd_(end+1,1) = {section_name};
end
tmp_list = cell2struct( cellfun(@(num) default_list.(num), sections_toadd_, 'UniformOutput', false), sections_toadd_, 1);
% modify added parameters that are default
[~, tmp_list, ~] = findValueIntoCell(default_list.(section_name), found_default_names);
action = repmat({'added to parameters'},size(tmp_list,1),1);
parameters.(section_name) = gtModifyStructure(parameters.(section_name), tmp_list, [], 'Adding default missing parameters used in the code:\nYou should an expert user; if not, press Quit...');
[~, tmp_list.(section_name), ~] = findValueIntoCell(default_list.(section_name), found_default_names);
action = repmat({'added to parameters'},size(tmp_list.(section_name),1),1);
tmp_par = build_structure(tmp_list, '__', debug);
parameters.(section_name) = gtAddMatFile(parameters.(section_name), tmp_par.(section_name), false, true, true);
parameters.(section_name) = gtModifyStructure(parameters.(section_name), tmp_list, [], 'Adding default missing parameters used in the code:\nYou should be an expert user; if not, press Quit...');
list_tocheck = [list_tocheck; [tmp_list action]];
end
......@@ -227,12 +241,24 @@ if ~isempty( findValueIntoCell(checkType, {'default', 'all'}) )
sfDisplayParameterUse(notfound_default_names, [], 'not used in the code but default !');
[ind, ~, ~] = findValueIntoCell(default_list.(section_name), notfound_default_names);
tmp_list = default_list.(section_name);
tmp_list_notfound = tmp_list(ind(:,1),:);
tmp_list_notfound(:,2) = {tmp_list_notfound(:,2)};
tmp_list(ind(:,1),:) = [];
default_list.(section_name) = tmp_list;
[ind_, sections_toadd_] = findStringIntoCell(sections_, notfound_default_names);
if ~isempty(sections_toadd_)
sections_toadd_(end+1,1) = {section_name};
end
tmp_list = cell2struct( cellfun(@(num) default_list.(num), sections_toadd_, 'UniformOutput', false), sections_toadd_, 1);
tmp_list_notfound = [];
for ii=1:length(sections_toadd_)
[~, tmp_list.(sections_toadd_{ii}), ~] = findValueIntoCell(default_list.(sections_toadd_{ii}), notfound_default_names);
[ind,~,~]=findValueIntoCell(default_list.(sections_toadd_{ii}), notfound_default_names);
if ~isempty(ind)
tmp_list_notfound = [tmp_list_notfound; default_list.(sections_toadd_{ii})(ind(:,1),:)];
default_list.(sections_toadd_{ii})(ind(:,1),:) = [];
elseif ismember(sections_toadd_{ii}, sections_(ind_))
tmp_list_notfound = [tmp_list_notfound; default_list.(sections_toadd_{ii})];
default_list = rmfield(default_list, sections_toadd_{ii});
end
end
action = repmat({'removed from default'},size(tmp_list_notfound,1),1);
out.odisp(' Removed from default parameters and default list !')
list_tocheck = [list_tocheck; [tmp_list_notfound action]];
......@@ -277,8 +303,11 @@ if ~isempty( findValueIntoCell(checkType, {'extra', 'all'}) )
outlist = sfDisplayParameterUse(found_extra_names, tocheck, 'used in the code but not default:');
% build list for new pars
tmp_list = [found_extra_names outlist cellfun(@(num) class(parameters.(section_name).(num)), found_extra_names, 'UniformOutput', false) repmat({-2}, length(found_extra_names), 1)];
tmp_list = [found_extra_names outlist ...
cellfun(@(num) class(parameters.(section_name).(num)), found_extra_names, 'UniformOutput', false) ...
repmat({-2}, length(found_extra_names), 1)];
default_list.(section_name) = [default_list.(section_name); tmp_list];
% add gtModifyStructure for the added parameters
[parameters.(section_name), default_list.(section_name)] = gtModifyStructure(parameters.(section_name), default_list.(section_name), -2, 'Now possible to remove or not extra fields used in the code:');
[~, tmp_list, ~] = findValueIntoCell(default_list.(section_name), {-2});
......@@ -295,8 +324,9 @@ if ~isempty( findValueIntoCell(checkType, {'extra', 'all'}) )
sfDisplayParameterUse(notfound_extra_names, [], 'saved but not used in the code !');
action = repmat({'removed from parameters'},size(notfound_extra_names,1),1);
list_tocheck = [list_tocheck; [notfound_extra_names repmat({''},size(notfound_extra_names,1),1) cellfun(@(num) class(parameters.(section_name).(num)), notfound_extra_names, 'UniformOutput', false) ...
cell(size(notfound_extra_names,1),1) action]];
list_tocheck = [list_tocheck; [notfound_extra_names repmat({''},size(notfound_extra_names,1),1) ...
cellfun(@(num) class(parameters.(section_name).(num)), notfound_extra_names, 'UniformOutput', false) ...
cell(size(notfound_extra_names,1),1) action]];
parameters.(section_name) = rmfield(parameters.(section_name), notfound_extra_names);
end
......@@ -321,7 +351,7 @@ if ~isempty(list_tocheck)
disp(['Parameters to be checked for section ''' section_name ''':'])
disp(list_tocheck)
if diaryFlag
if (diaryFlag)
textfile = write_mod_parameters(section_name, list_tocheck);
disp('A log file is saved here:')
......@@ -342,7 +372,7 @@ if nargout > 1
end
end
if diaryFlag
if (diaryFlag)
diary('off')
end
......
......@@ -309,18 +309,17 @@ clear ndx2 ndx3 tmpnames
assignin('caller', 'dim', dim);
CellStructure = struct();
count=0;
for ii=1:length(fnames)
if isempty(list) || any(strcmpi(list, fnames{ii}))
if isempty(list) || any(ismember(list, fnames{ii}))
% which item from list?
count=count+1;
% get the field value
val=Structure.(fnames{ii});
% skip this if it's a structure, or if it's a matrix
if isstruct(val) || iscell(val) || (length(size(val))>1 && (size(val,1)>1 && size(val, 2)>1))
continue;
end
% otherwise, count item
count=count+1;
% field name
CellStructure(count).name = fnames{ii};
CellStructure(count).transposed = false; % default
......@@ -328,19 +327,25 @@ for ii=1:length(fnames)
CellStructure(count).color = 'black'; % default
CellStructure(count).curr_type = class(val);
CellStructure(count).val = val;
% which item from list?
listndx=findValueIntoCell(list, fnames(ii));
if ~isempty(listndx) && ~isempty(captions) && ~isempty(types)
CellStructure(count).caption = captions{listndx(:,1)};
CellStructure(count).s_type = types{listndx(:,1)};
CellStructure(count).type = dim.def_types.(CellStructure(count).s_type);
if ~ismember(CellStructure(count).s_type, {'cell','struct'})
CellStructure(count).type = dim.def_types.(CellStructure(count).s_type);
else
CellStructure(count).type = [];
end
else
gtError(['The type for parameter number ' num2str(count) ' is empty!'])
end
% skip this if it's a structure, or if it's a matrix
if isstruct(val) || iscell(val) || (length(size(val))>1 && (size(val,1)>1 && size(val, 2)>1))
continue;
end
% set up the type of the current parameters
if ~isempty(val)
if ~strcmpi(CellStructure(count).curr_type, CellStructure(count).s_type)
CellStructure(count).error = true;
......@@ -674,7 +679,7 @@ for ii = first : last
'Style', 'checkbox', ...
'Value', CellStructure(ii).val,...
'Position', [dim.bposx+dim.iwidth+dim.bposx+dim.lwidth+dim.bposx+(dim.bwidth/2), dim.bposy, dim.iwidth, dim.bheight]);
else
elseif ~isempty(CellStructure(ii).type)
if ((CellStructure(ii).type == 1) && ~ischar(CellStructure(ii).val))
% It is a double and is not converted, yet.
......
function [parameters, list] = make_parameters(version)
function [parameters, list] = make_parameters(version, debug)
% MAKE_PARAMETERS Creates a parameters.mat file with empty fields
% [parameters, list] = make_parameters(version)
% ---------------------------------------------
% [parameters, list] = make_parameters(version, [debug])
% ------------------------------------------------------
%
% INPUT:
% version = <double> -1 (loads a specific parameters.mat file)
% 0 (old parameters (<2011))
% 1 (single phase / old matching parameters)
% 2 (multiple phases parameters)
% debug = <logical> print comments on screen {false}
%
% OUTPUT:
% parameters = <struct> parameters file
......@@ -20,7 +21,13 @@ function [parameters, list] = make_parameters(version)
% Creates a .mat file with description for each field in the parameters.mat
fprintf('Getting the field list of parameters...')
if ~exist('debug','var') || isempty(debug)
debug = false;
end
out = GtConditionalOutput(debug);
out.fprintf('Getting the field list of parameters...')
switch (version)
case -1
......@@ -42,6 +49,6 @@ switch (version)
parameters.version.number = 2;
end
fprintf('...Done!\n')
out.fprintf('...Done!\n')
end % end of function
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment