0001 function xyz = xyzdata(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: xyzdata.m,v 1.6 2008/03/17 09:16:37 mauro Exp $';
0033 CATEGORY = 'Constructor';
0034
0035
0036 if nargin == 2 && isa(varargin{1}, 'xyzdata') && ischar(varargin{2})
0037 if strcmp(varargin{2}, 'Params')
0038 xyz = plist();
0039 return
0040 elseif strcmp(varargin{2}, 'Version')
0041 xyz = VERSION;
0042 return
0043 elseif strcmp(varargin{2}, 'Category')
0044 xyz = CATEGORY;
0045 return
0046 end
0047 end
0048
0049
0050
0051 function xyz = init(version)
0052 xyz.name = 'None';
0053 xyz.x = [];
0054 xyz.y = [];
0055 xyz.z = [];
0056 xyz.xunits = '';
0057 xyz.yunits = '';
0058 xyz.zunits = '';
0059 xyz.version = version;
0060 xyz.created = time;
0061 xyz = class(xyz, 'xyzdata');
0062 end
0063
0064
0065
0066
0067
0068 if nargin == 0
0069 xyz = init(VERSION);
0070
0071 elseif nargin == 1
0072
0073
0074 if ischar(varargin{1})
0075
0076 filename = varargin{1};
0077 [path, name, ext, vers] = fileparts(filename);
0078 switch ext
0079 case '.mat'
0080 xyz = load(filename);
0081 xyz = xyz.a;
0082 case '.xml'
0083 root_node = xmlread(filename);
0084 xyz = ltpda_xmlread(root_node, 'xyzdata');
0085 otherwise
0086 error('### Unknown file type.');
0087 end
0088
0089 elseif isa(varargin{1}, 'xyzdata')
0090 xyz = varargin{1};
0091
0092
0093 elseif isstruct(varargin{1})
0094
0095 xyz = init(VERSION);
0096
0097 fields = fieldnames(varargin{1});
0098 for ii = 1:length(fields)
0099 field = fields{ii};
0100
0101
0102 if strcmp(field, 'created')
0103 created = varargin{1}.created;
0104 if isstruct(created)
0105 created = time(created);
0106 end
0107 xyz.created = created;
0108
0109 else
0110 try
0111 xyz.(field) = varargin{1}.(field);
0112 catch
0113 error('### The field ''%s'' in the struct is not a xydata property.', field)
0114 end
0115 end
0116 end
0117
0118
0119 elseif isnumeric(varargin{1}) && length(varargin{1}) > 1
0120 xyz = init(VERSION);
0121 xyz.x = 1:size(varargin{1}, 1);
0122 xyz.y = 1:size(varargin{1}, 2);
0123 xyz.z = varargin{1};
0124
0125
0126 elseif isa(varargin{1}, 'plist')
0127
0128 if nparams(varargin{1}) == 0
0129 xyz = init(VERSION);
0130 else
0131 error('### Unknown xyzdata constructor method.');
0132 end
0133
0134 else
0135 error('### Unknown xyzdata constructor method.');
0136 end
0137
0138
0139 elseif nargin == 2
0140
0141
0142 if isa(varargin{1}, 'database')
0143 xyz = retrieve(varargin{1}, varargin{2:end});
0144 else
0145 error('### Unknown constructor.');
0146 end
0147 elseif nargin == 3
0148 xyz = init(VERSION);
0149 xyz.x = varargin{1};
0150 xyz.y = varargin{2};
0151 xyz.z = varargin{3};
0152 else
0153 error('### Unknown number of constructor arguments.');
0154 end
0155
0156
0157
0158
0159 nx = size(xyz.z, 2);
0160 ny = size(xyz.z, 1);
0161
0162 if length(xyz.x) ~= nx
0163 error('### X-vector has wrong length.');
0164 end
0165 if length(xyz.y) ~= ny
0166 error('### Y-vector has wrong length.');
0167 end
0168 if size(xyz.y,2) > size(xyz.y,1)
0169 xyz.y = [xyz.y].';
0170 end
0171 if size(xyz.x,2) > size(xyz.x,1)
0172 xyz.x = [xyz.x].';
0173 end
0174
0175
0176
0177 end
0178
0179