wolffd@0: function combis = param_combinations(params, pos) wolffd@0: % given a param struct with multiple options for diverse wolffd@0: % parameters, param_combinations(params) returns all wolffd@0: % valid combinations of the param sets wolffd@0: wolffd@0: if nargin < 2 wolffd@0: pos = 1; wolffd@0: end wolffd@0: wolffd@0: % get available fields wolffd@0: fields = fieldnames(params); wolffd@0: wolffd@0: nparams = params; wolffd@0: if pos <= numel(fields) wolffd@0: wolffd@0: for j = 1:numel(params.(fields{pos})) wolffd@0: wolffd@0: % --- wolffd@0: % successively ralter the params struct, wolffd@0: % choosing one of the options wolffd@0: % --- wolffd@0: if ~iscell(params.(fields{pos})) wolffd@0: wolffd@0: nparams.(fields{pos}) = params.(fields{pos})(j); wolffd@0: else wolffd@0: wolffd@0: nparams.(fields{pos}) = params.(fields{pos}){j}; wolffd@0: end wolffd@0: wolffd@0: if j == 1 wolffd@0: combis = param_combinations(nparams, pos + 1); wolffd@0: wolffd@0: else wolffd@0: wolffd@0: % gather the resulting configurations, in reverse order wolffd@0: % regarding the recursion wolffd@0: combis = cat(1, param_combinations(nparams, pos + 1), combis); wolffd@0: end wolffd@0: end wolffd@0: else wolffd@0: % we have reached the leaves, containing single combinations wolffd@0: combis = nparams; wolffd@0: end wolffd@0: end