diff m-toolbox/classes/@matrix/fromValues.m @ 0:f0afece42f48

Import.
author Daniele Nicolodi <nicolodi@science.unitn.it>
date Wed, 23 Nov 2011 19:22:13 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/m-toolbox/classes/@matrix/fromValues.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,89 @@
+% Construct a matrix object with multiple AOs built from input values.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% FUNCTION:    fromValues
+%
+% DESCRIPTION: Construct a matrix object with multiple AOs built from input
+%              values.
+%
+% CALL:        matrix = matrix.fromValues(obj, pli)
+%
+% VERSION:     $Id: fromValues.m,v 1.4 2011/03/24 19:53:52 ingo Exp $
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+function obj = fromValues(obj, pli, callerIsMethod)
+  
+  import utils.const.*
+  utils.helper.msg(msg.PROC2, 'Constructing an matrix object with multiple AOs built from input values.');
+  
+  % get AO info
+  ii = matrix.getInfo('matrix', 'From Values');
+  
+  pl = combine(pli, ii.plists);
+  values = pl.find('values');
+  yunits = pl.find('yunits');
+  names  = pl.find('names');
+  
+  % Some plausibility checks
+  if ~isnumeric(values)
+    error('### The values must be from the type double');
+  end
+  nvals = numel(values);
+  
+  if ischar(yunits)
+    yunits = cellstr(yunits);
+  end
+  if numel(yunits) > 1 && numel(yunits) ~= nvals
+    error('### The number of yunits must be the same as the numer of values %d <-> %d', numel(yunits), nvals);
+  end
+  if numel(yunits) == 1
+    % Replicate the single unit for all AOs
+    yunits = repmat(yunits, 1, nvals);
+  end
+  
+  if ischar(names)
+    names = cellstr(names);
+  end
+  if numel(names) > 1 && numel(names) ~= nvals
+    error('### The number of names must be the same as the numer of values %d <-> %d', numel(names), nvals);
+  end
+  if numel(names) == 1
+    % Replicate the single name for all AOs
+    names = repmat(names, 1, nvals);
+  end
+  
+  for nn = 1:numel(values)
+    
+    % Create the AO
+    a = ao(values(nn));
+    
+    % Set the name
+    if ~isempty(names)
+      a.setName(names{nn});
+    end
+  
+    % Set the y-units
+    if ~isempty(yunits)
+      a.setYunits(yunits{nn});
+    end
+  
+    obj.objs = [obj.objs a];
+    
+  end
+  
+  % Reshape the inside objects
+  obj.objs = reshape(obj.objs, size(values));
+  
+  % Add history
+  if callerIsMethod
+    % do nothing
+  else
+    obj.addHistory(ii, pl, [], []);
+  end
+  
+  warning('off', utils.const.warnings.METHOD_NOT_FOUND);
+  % remove parameters we already used
+  pl_set = copy(pl,1);
+  obj.setProperties(pl_set);
+  warning('on', utils.const.warnings.METHOD_NOT_FOUND);
+end