diff m-toolbox/classes/@ao/fromParameter.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/fromParameter.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,106 @@
+% FROMPARAMETER Construct an ao from a param object
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% FUNCTION:    fromParameter
+%
+% DESCRIPTION: Construct an ao from a param object
+%
+% CALL:        a = fromParameter(a, pl)
+%
+% PARAMETER:   pl: Parameter list object
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+function a = fromParameter(a, pli)
+  
+  VERSION = '$Id: fromParameter.m,v 1.2 2011/07/06 06:37:06 mauro Exp $';
+  % get AO info
+  ii = ao.getInfo('ao', 'From Parameter');
+  
+  % Set the method version string in the minfo object
+  ii.setMversion([VERSION '-->' ii.mversion]);
+  
+  % Add default values
+  pl = parse(pli, ii.plists);
+  pl = parse(pl, plist('fcn', []));
+  pl.getSetRandState();
+  
+  pin = find(pl, 'parameter');
+  name = '';
+  pval = [];
+  switch class(pin)
+    case 'plist'
+      key = find(pl, 'key');
+      if isempty(key)
+        error('When inputting a plist, the required key should be specified');
+      end
+      
+      pidx = pin.getIndexForKey(key);
+      p = pin.params(pidx);
+      name = p.key;
+      pval = p.val;
+      
+    case 'param'
+      
+      name = pin.key;
+      pval = pin.val;
+      
+    case 'paramValue'
+      
+      pval = pin;
+      
+    case 'char'
+      pl_model_list = plist.getBuiltInModels();
+      if any(strcmp(pl_model_list(:,1), pin))
+        pl_model = plist(plist('built-in', pin));
+      else
+        error('The input name ''%s'' is not a supported built-in model', pin);
+      end
+      
+      key = find(pl, 'key');
+      if isempty(key)
+        error('When inputting a plist, the required key should be specified');
+      end
+      
+      pidx = pl_model.getIndexForKey(key);
+      p = pl_model.params(pidx);
+      name = p.key;
+      pval = p.val;
+    otherwise
+      error('The input parameter class is not supported [%s]', class(pin));
+  end
+  
+  
+  yunits = '';
+  props = [];
+  switch class(pval)
+    case 'double'
+      dval = pval;
+    case 'paramValue'
+      dval = pval.getVal;
+      
+      % do we have other properties?
+      propnames = fieldnames(pval.property);
+      if ismember('unit', propnames)
+        yunits = pval.getProperty('unit');
+      end
+      if ismember('units', propnames)
+        yunits = pval.getProperty('units');
+      end
+      
+      props = pval.property;
+      
+    otherwise
+      error('Unsupported value class [%s] for key %s', class(pval), name);
+  end
+  
+  data = cdata(dval);
+  data.setYunits(yunits);
+  a.setName(name);
+  a.data = data;
+  a.setProcinfo(plist('properties', props));
+  
+  % Add history
+  a.addHistory(ii, pl, [], []);
+  
+end
+