diff m-toolbox/classes/@ssm/buildParamPlist.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/@ssm/buildParamPlist.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,145 @@
+% BUILDPARAMPLIST builds paramerter plists for the ssm params field.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% DESCRIPTION: BUILDPARAMPLIST builds paramerter plists for the ssm params
+%              field.
+%
+% CALL:   pl = bode(names, values, descriptions, units, pl)
+%
+% INPUTS:
+%         'names' - (array of) char
+%         'values'  - double array of same size
+%         'description'  - cellstr of same size
+%         'pl'  - plist containing optionnal fields 'min', 'max', 'sigma',
+%                 double arrays of same size
+%
+% OUTPUTS:
+%
+%        'pl' - plist of ssm parameters.
+%
+% <a href="matlab:utils.helper.displayMethodInfo('ssm', 'buildParamPlist')">Parameters Description</a>
+%
+% VERSION: $Id: buildParamPlist.m,v 1.9 2011/04/08 08:56:22 hewitson Exp $
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function varargout = buildParamPlist(varargin)
+  %% starting initial checks
+  
+  
+  utils.helper.msg(utils.const.msg.MNAME, ['running ', mfilename]);
+  
+  names = varargin{1};
+  value = varargin{2};
+  description = varargin{3};
+  units = varargin{4};
+  pl = varargin{5};
+  
+  
+  %% checking for fields class
+  if isa(names, 'char')
+    names = {names};
+  elseif ~iscellstr(names)
+    error('error because names must either be a cellstr or a char')
+  end
+  Nparams = numel(names);
+  
+  if ~isa(value, 'double') && ~isempty(value)
+    error('error because values must be a double')
+  end
+  
+  if isa(description, 'char')
+    description = {description};
+  elseif ~iscellstr(description) && ~isempty(description)
+    error('error because description must either be a cellstr or a char')
+  end
+  
+  if ~isa(units, 'unit') && ~isempty(units)
+    error('error because units must be a unit')
+  end
+  
+  if ~isa(pl, 'plist') && ~isempty(pl)
+    error('error because pl must be a plist')
+  end
+  
+  %% checking for empty fields or retrieving data
+  if isempty(units)
+    dounits = false;
+  else
+    dounits = true;
+    if ~( Nparams==numel(units))
+      error('error because names and units are not the same length')
+    end
+  end
+  
+  if isempty(description)
+    dodescription = false;
+  else
+    dodescription = true;
+    if ~ ( Nparams==numel(description))
+      error('error because names and description are not the same length')
+    end
+  end
+  
+  if isempty(value)
+    value = NaN(1,Nparams);
+  else
+    if ~ ( Nparams==numel(value))
+      error('error because names and value are not the same length')
+    end
+  end
+  
+  domax = false;
+  domin = false;
+  dosigma = false;
+  if ~isempty(pl)
+    if isparam(pl, 'max')
+      max = find(pl, 'max');
+      domax = true;
+      if ~ ( Nparams==numel(max))
+        error('error because names and max are not the same length')
+      end
+    end
+    if isparam(pl, 'min')
+      min = find(pl, 'min');
+      domin = true;
+      if ~ ( Nparams==numel(min))
+        error('error because names and min are not the same length')
+      end
+    end
+    if isparam(pl, 'sigma')
+      sigma = find(pl, 'sigma');
+      dosigma = true;
+      if ~ ( Nparams==numel(sigma))
+        error('error because names and variance are not the same length')
+      end
+    end
+  end
+  
+  
+  %% building plist
+  pl = plist();
+  for ii=1:numel(names)
+    if dodescription
+      pli = plist({names{ii} description{ii}}, value(ii));
+    else
+      pli = plist(names{ii}, value(ii));
+    end
+    if domax
+      pli.setPropertyForKey(names{ii},'max',max(ii) );
+    end
+    if domin
+      pli.setPropertyForKey(names{ii},'min',min(ii) );
+    end
+    if dosigma
+      pli.setPropertyForKey(names{ii},'sigma',sigma(ii) );
+    end
+    if dounits
+      pli.setPropertyForKey(names{ii},'units',units(ii) );
+    end
+    pl.append(pli);
+  end
+  
+  varargout{1} = pl;
+end
+