0001 function p = set(p, varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 VERSION = '$Id: set.m,v 1.10 2008/02/16 22:22:42 hewitson Exp $';
0025 CATEGORY = 'Helper';
0026 DEFAULT_PLIST = plist('name', '', ...
0027 'f', [], ...
0028 'q', [], ...
0029 'ri', [], ...
0030 'plist', plist(), ...
0031 'version', '', ...
0032 'created', time());
0033
0034 propArgin = varargin;
0035 zero_fields = fieldnames(p);
0036
0037
0038 if length(zero_fields) ~= nparams(DEFAULT_PLIST)
0039 error('\n### The DEFAULT_PLIST doesn''t contain all field names of the %s-class!', class(p));
0040 end
0041
0042
0043 if ~isempty(varargin{1}) == 1 && ischar(varargin{1})
0044 in = varargin{1};
0045 if strcmp(in, 'Params')
0046 p = DEFAULT_PLIST;
0047 return
0048 elseif strcmp(in, 'Version')
0049 p = VERSION;
0050 return
0051 elseif strcmp(in, 'Category')
0052 p = CATEGORY;
0053 return
0054 end
0055 end
0056
0057 if nargin >= 2 && isa(propArgin{1}, 'plist')
0058 pl = propArgin{1};
0059 propArgin = {};
0060 for ii = 1:nparams(pl)
0061
0062
0063
0064 propArgin{end+1} = lower(pl.params(ii).key);
0065 propArgin{end+1} = pl.params(ii).val;
0066 end
0067 end
0068
0069 while length(propArgin) >= 2
0070
0071 prop = propArgin{1};
0072 val = propArgin{2};
0073 propArgin = propArgin(3:end);
0074
0075
0076 if strcmp(prop, 'f')
0077 for jj = 1:numel(p)
0078 p(jj).f = val;
0079 p(jj).ri = pfq2ri(p(jj).f, p(jj).q);
0080 end
0081
0082
0083 elseif strcmp(prop, 'q')
0084 for jj = 1:numel(p)
0085 p(jj).q = val;
0086 p(jj).ri = pfq2ri(p(jj).f, p(jj).q);
0087 end
0088
0089
0090 elseif strcmp(prop, 'ri')
0091 if size(val,2) > size(val,1), val = val.'; end
0092 for jj = 1:numel(p)
0093 if length(val) == 1
0094 p(jj).ri = [val; conj(val)];
0095 else
0096 p(jj).ri = val;
0097 end
0098 [p(jj).f, p(jj).q] = pri2fq(p(jj).ri);
0099 end
0100
0101
0102 elseif ismember(prop, zero_fields)
0103 for jj = 1:numel(p)
0104 p(jj).(prop) = val;
0105 end
0106 else
0107 error('### ''%s'' is not a valid %s-object property.', prop, class(p));
0108 end
0109
0110 end
0111
0112 if (nargout == 0)
0113 display(p);
0114 error('\n### No output variable!\n### Please use: %s = set(%s, ''key'', ''value'');', inputname(1), inputname(1));
0115 end