diff m-toolbox/classes/@ao/applymethod.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/@ao/applymethod.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,78 @@
+% APPLYMETHOD to the analysis object
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% DESCRIPTION: APPLYMETHOD to the analysis object
+%              Private static AO function that applies the given method to
+%              the given AOs. This is called by all the simple methods like
+%              abs, mean, acos, etc.
+%
+% CALL:        as = applymethod(copyObjects, callerIsMethod, in_names, operatorName, dxFcn, getInfo, getDefaultPlist, varargin)
+%
+% VERSION:     $Id: applymethod.m,v 1.23 2011/04/17 09:12:33 hewitson Exp $
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function varargout = applymethod(copyObjects, callerIsMethod, in_names, operatorName, dxFcn, getInfo, getDefaultPlist, varargin)
+  
+  if callerIsMethod
+    
+    ao_invars = {};
+    % assumed call: b = fcn(a1,a2,a3)
+    % assumed call: b = fcn(a1,a2,a3, pl)
+    
+    if isa(varargin{end}, 'plist')
+      as = varargin{1:end-1};
+      pl = varargin{end};
+    else
+      pl = [];
+      as = [varargin{:}];
+    end
+    
+    info = [];
+    
+  else
+    % Check if this is a call for parameters
+    if utils.helper.isinfocall(varargin{:})
+      varargout{1} = getInfo(varargin{3});
+      if nargout == 2
+        varargout{2} = [];
+      end
+      return
+    end    
+    
+    % Collect all AOs
+    [as, ao_invars, rest] = utils.helper.collect_objects(varargin, 'ao', in_names);
+    
+    info = getInfo('None');
+    
+    % Collect the rest of the inputs (should be plists)
+    pl = utils.helper.collect_objects(rest, 'plist');
+  end
+  
+  % Decide on a deep copy or a modify
+  bs = copy(as, copyObjects);
+  
+  
+  for jj = 1:numel(bs)
+    % Message
+    utils.helper.msg(utils.const.msg.PROC3, 'applying %s to %s ', operatorName, bs(jj).name);
+    % Apply method to data
+    pl = applymethod(bs(jj).data, pl, operatorName, getDefaultPlist, dxFcn);
+    if ~callerIsMethod
+      % Set new AO name
+      bs(jj).name = [operatorName '(' ao_invars{jj} ')'];
+      % append history
+      bs(jj).addHistory(info, pl, ao_invars(jj), bs(jj).hist);
+    end
+  end  
+  
+  if nargout == 1
+    varargout{1} = bs;
+  elseif nargout == 2
+    varargout{1} = bs;
+    varargout{2} = pl;
+  else
+    error('### Incorrect outputs');
+  end
+  
+end