0001 function dec = addMeasureDataDec(dec, measure, par, 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 [recalculateFlag verbose zerotol] = mapOption(varargin, ...
0038 'recalculate', 0, 'verbose', 0, 'zerotol', elkZerotol);
0039
0040
0041 if ~exist('par', 'var')
0042 par = [];
0043 end
0044
0045
0046 if isstruct(measure)
0047 measureStruct = measure;
0048 else
0049 measureStruct = obtainMeasureInfo(measure, dec.A);
0050 end
0051
0052
0053 if ~isfield(dec, 'measureData')
0054 dec.measureData = struct();
0055 end
0056
0057 if ~isfield(dec.measureData, measureStruct.name) || recalculateFlag
0058 dec.measureData.(measureStruct.name) = measureStruct;
0059 end
0060
0061
0062 hMatrix = (dec.mappingReducedToFull*dec.se')';
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078 if ~measureStruct.isPar
0079
0080
0081 measureStruct.par = [];
0082
0083 if ~isfield(dec.measureData.(measureStruct.name), 'tensorSe')
0084
0085 tic
0086 measureStruct.tensorSe = computeMixedVolumeTensor(...
0087 hMatrix, measureStruct.handleH, measureStruct.dim, ...
0088 dec.seIncidenceMatrix, verbose);
0089 measureStruct.time.mixedVolumeTensor = toc;
0090
0091
0092 tic
0093 if verbose
0094 disp('Cycling through simplex partitions: ')
0095 fprintf('......');
0096 end
0097 for iPart = 1:length(dec.simplexPartition)
0098 if verbose
0099 fprintf('\b\b\b\b\b\b%5.1f%%', ...
0100 (iPart/length(dec.simplexPartition))*100);
0101 end
0102 measureStruct.tensorHc{iPart} = convertMeasureTensorSe(...
0103 measureStruct.tensorSe, ...
0104 dec.simplexPartition{iPart}.seIndexVector, ...
0105 dec.simplexPartition{iPart}.mappingHcToLam, ...
0106 measureStruct.dim);
0107 end
0108 if verbose, fprintf('\b\b\b\b\b\b');end
0109 measureStruct.time.convertedTensor = toc;
0110 end
0111
0112 dec.measureData.(measureStruct.name) = measureStruct;
0113
0114 else
0115
0116
0117 if ~isfield(dec.measureData.(measureStruct.name), 'tensorSe')
0118 dec.measureData.(measureStruct.name).tensorSe = cell(0);
0119 end
0120
0121
0122 if ~isfield(dec.measureData.(measureStruct.name), 'par')
0123 dec.measureData.(measureStruct.name).par = [];
0124 end
0125
0126
0127 measureStruct = dec.measureData.(measureStruct.name);
0128
0129
0130 for iPar = 1:size(par, 1)
0131
0132 if ~isempty(...
0133 eliminateRows(par(iPar,:), ...
0134 measureStruct.par, 0)...
0135 )
0136
0137
0138 measureStruct.par(end+1, :) = par(iPar, :);
0139
0140
0141 tic
0142 measureStruct.tensorSe{end+1} = ...
0143 computeMixedVolumeTensor(hMatrix, ...
0144 @(h)(measureStruct.handleH(h, par(iPar, :))), ...
0145 measureStruct.dim, ...
0146 dec.seIncidenceMatrix, verbose);
0147 measureStruct.time(iPar).mixedVolumeTensor = toc;
0148
0149
0150 tic
0151 if verbose
0152 disp('Cycling through simplex partitions: ')
0153 fprintf('......');
0154 end
0155 for iPart = 1:length(dec.simplexPartition)
0156 if verbose
0157 fprintf('\b\b\b\b\b\b%5.1f%%', ...
0158 (iPart/length(dec.simplexPartition))*100);
0159 end
0160 measureStruct.tensorHc{iPar}{iPart} = convertMeasureTensorSe(...
0161 measureStruct.tensorSe{end}, ...
0162 dec.simplexPartition{iPart}.seIndexVector, ...
0163 dec.simplexPartition{iPart}.mappingHcToLam, ...
0164 measureStruct.dim);
0165 end
0166 if verbose, fprintf('\b\b\b\b\b\b');end
0167 measureStruct.time(iPar).convertedTensor = toc;
0168 end
0169 end
0170
0171
0172 dec.measureData.(measureStruct.name) = measureStruct;
0173 end
0174
0175 end
0176