0001 function c = cdata(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032 VERSION = '$Id: cdata.m,v 1.21 2008/02/19 17:23:11 mauro Exp $';
0033 CATEGORY = 'Constructor';
0034
0035
0036 if nargin == 2 && isa(varargin{1}, 'cdata') && ischar(varargin{2})
0037 if strcmp(varargin{2}, 'Params')
0038 c = plist();
0039 return
0040 elseif strcmp(varargin{2}, 'Version')
0041 c = VERSION;
0042 return
0043 elseif strcmp(varargin{2}, 'Category')
0044 c = CATEGORY;
0045 return
0046 end
0047 end
0048
0049
0050
0051 function c = init()
0052 c.name = 'None';
0053 c.y = [];
0054 c.x = {};
0055 c.xunits = 'N/A';
0056 c.yunits = 'N/A';
0057 c.version = VERSION;
0058 c.created = time;
0059 c = class(c, 'cdata');
0060 end
0061
0062
0063
0064
0065
0066 if nargin == 0
0067 c = init();
0068
0069 elseif nargin == 1
0070
0071
0072 if ischar(varargin{1})
0073
0074 filename = varargin{1};
0075 [path, name, ext, vers] = fileparts(filename);
0076 switch ext
0077 case '.mat'
0078 c = load(filename);
0079 c = c.a;
0080 case '.xml'
0081 root_node = xmlread(filename);
0082 c = ltpda_xmlread(root_node, 'cdata');
0083 otherwise
0084 error('### Unknown file type.');
0085 end
0086
0087 elseif isa(varargin{1}, 'cdata')
0088 c = varargin{1};
0089
0090
0091 elseif isstruct(varargin{1})
0092
0093 c = init();
0094
0095 fields = fieldnames(varargin{1});
0096 for ii = 1:length(fields)
0097 field = fields{ii};
0098
0099
0100 if strcmp(field, 'created')
0101 created = varargin{1}.created;
0102 if isstruct(created)
0103 created = time(created);
0104 end
0105 c.created = created;
0106
0107 else
0108 try
0109 c.(field) = varargin{1}.(field);
0110 catch
0111 error('### The field ''%s'' in the struct is not a cdata property.', field)
0112 end
0113 end
0114 end
0115
0116
0117 elseif isa(varargin{1}, 'plist')
0118
0119 c = init();
0120
0121
0122 fcn = find(varargin{1}, 'fcn');
0123
0124 y = find(varargin{1}, 'vals');
0125 if isempty(y)
0126 y = find(varargin{1}, 'y');
0127 end
0128
0129
0130 if ~isempty(fcn)
0131
0132 y = eval(fcn);
0133 elseif ~isempty(y)
0134
0135
0136 else
0137 error('### unknown constructor method for cdata.');
0138 end
0139
0140 c.name = fcn;
0141 c.y = y;
0142
0143
0144
0145 else
0146
0147 c = init();
0148 c.name = 'Data';
0149 c.y = varargin{1};
0150
0151 end
0152
0153
0154
0155 elseif nargin == 2
0156
0157
0158 if isa(varargin{1}, 'database')
0159 c = retrieve(varargin{1}, varargin{2:end});
0160 else
0161 c = init();
0162 c.name = 'Constant';
0163 c.y = ones(varargin{1},1)*varargin{2};
0164 end
0165 else
0166 error('### Unknown number of constructor arguments.');
0167 end
0168
0169
0170
0171 end
0172
0173
0174
0175
0176 function c = checkCdata(c)
0177
0178 x = c.y;
0179 if size(x, 1) < size(x, 2)
0180 x = x.';
0181 end
0182
0183 c = set(c, 'y', x);
0184 end
0185