annotate Problems/private/completeOps.m @ 57:3a58e70e8cbe

(none)
author idamnjanovic
date Mon, 14 Mar 2011 17:06:07 +0000
parents 4fef33632323
children
rev   line source
idamnjanovic@54 1 function data = completeOps(data)
idamnjanovic@54 2
idamnjanovic@54 3 % Copyright 2008, Ewout van den Berg and Michael P. Friedlander
idamnjanovic@54 4 % http://www.cs.ubc.ca/labs/scl/sparco
idamnjanovic@54 5 % $Id: completeOps.m 1040 2008-06-26 20:29:02Z ewout78 $
idamnjanovic@54 6
idamnjanovic@54 7 operators = {};
idamnjanovic@54 8 flagM = 0; if isfield(data,'M'), flagM = 1; end;
idamnjanovic@54 9 flagB = 0; if isfield(data,'B'), flagB = 1; end;
idamnjanovic@54 10
idamnjanovic@54 11 if (~flagM) && (~flagB)
idamnjanovic@54 12 error('At least one of the operators M or B has be to given.');
idamnjanovic@54 13 end
idamnjanovic@54 14
idamnjanovic@54 15 % Define measurement matrix if needed
idamnjanovic@54 16 if ~flagM
idamnjanovic@54 17 info = data.B([],0);
idamnjanovic@54 18 data.M = opDirac(info{1});
idamnjanovic@54 19 else
idamnjanovic@54 20 operators{end+1} = data.M;
idamnjanovic@54 21 end
idamnjanovic@54 22
idamnjanovic@54 23 % Define sparsity basis if needed
idamnjanovic@54 24 if ~flagB
idamnjanovic@54 25 info = data.M([],0);
idamnjanovic@54 26 data.B = opDirac(info{2});
idamnjanovic@54 27 else
idamnjanovic@54 28 operators{end+1} = data.B;
idamnjanovic@54 29 end
idamnjanovic@54 30
idamnjanovic@54 31 % Define operator A if needed
idamnjanovic@54 32 if ~isfield(data,'A')
idamnjanovic@54 33 if (length(operators) > 1)
idamnjanovic@54 34 data.A = opFoG(operators{:});
idamnjanovic@54 35 else
idamnjanovic@54 36 data.A = operators{1};
idamnjanovic@54 37 end
idamnjanovic@54 38 end
idamnjanovic@54 39
idamnjanovic@54 40 % Define empty solution if needed
idamnjanovic@54 41 if ~isfield(data,'x0')
idamnjanovic@54 42 data.x0 = [];
idamnjanovic@54 43 end
idamnjanovic@54 44
idamnjanovic@54 45 % Define the operator size and string
idamnjanovic@54 46 opInfo = data.A([],0);
idamnjanovic@54 47 data.sizeA = [opInfo{1},opInfo{2}];
idamnjanovic@54 48 opInfo = data.B([],0);
idamnjanovic@54 49 data.sizeB = [opInfo{1},opInfo{2}];
idamnjanovic@54 50 opInfo = data.M([],0);
idamnjanovic@54 51 data.sizeM = [opInfo{1},opInfo{2}];
idamnjanovic@54 52 data.op.strA = opToString(data.A);
idamnjanovic@54 53 data.op.strB = opToString(data.B);
idamnjanovic@54 54 data.op.strM = opToString(data.M);
idamnjanovic@54 55
idamnjanovic@54 56 % Get the size of the desired signal
idamnjanovic@54 57 if ~isfield(data,'signalSize')
idamnjanovic@54 58 if ~isfield(data,'signal')
idamnjanovic@54 59 error(['At least one of the fields signal ', ...
idamnjanovic@54 60 'or signalSize must be given.']);
idamnjanovic@54 61 end
idamnjanovic@54 62 data.signalSize = size(data.signal);
idamnjanovic@54 63 end
idamnjanovic@54 64
idamnjanovic@54 65 % Reconstruct signal from sparse coefficients
idamnjanovic@54 66 if ~isfield(data,'reconstruct')
idamnjanovic@54 67 data.reconstruct = @(x) reshape(data.B(x,1),data.signalSize);
idamnjanovic@54 68 end
idamnjanovic@54 69
idamnjanovic@54 70 % Reorder the fields (sort alphabetically)
idamnjanovic@54 71 m = fieldnames(data);
idamnjanovic@54 72 m = sort(m);
idamnjanovic@54 73 dataReorder = struct();
idamnjanovic@54 74 for i=1:length(m)
idamnjanovic@54 75 eval(sprintf('dataReorder.%s = data.%s;',m{i},m{i}));
idamnjanovic@54 76 end
idamnjanovic@54 77
idamnjanovic@54 78 data = dataReorder;