Mercurial > hg > ltpda
diff m-toolbox/classes/@ao/fromDataInMAT.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/fromDataInMAT.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,169 @@ +% FROMDATAINMAT Convert a saved data-array into an AO with a tsdata-object +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% FUNCTION: fromDataInMAT +% +% DESCRIPTION: Convert a saved data-array into an AO with a tsdata-object +% +% CALL: obj = fromLISO(obj, data-array, plist) +% +% PARAMETER: data-array: data-array +% plist: plist-object (must contain the filename) +% +% VERSION: $Id: fromDataInMAT.m,v 1.8 2011/08/12 11:38:03 hewitson Exp $ +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +function objs = fromDataInMAT(obj, loadData, pli) + + VERSION = '$Id: fromDataInMAT.m,v 1.8 2011/08/12 11:38:03 hewitson Exp $'; + + ii = obj.getInfo(class(obj), 'From MAT Data File'); + + % Set the method version string in the minfo object + ii.setMversion([VERSION '-->' ii.mversion]); + + %%%%%%%%%% Get default parameter list %%%%%%%%%% + dpl = ii.plists(); + pl = applyDefaults(dpl, pli); + + % Get filename + filename = find(pli, 'filename'); + [pathstr, f_name, ext] = fileparts(filename); + + pl = pset(pl, 'filename', [f_name ext]); + pl = pset(pl, 'filepath', pathstr); + + data_type = find (pl, 'type'); + columns = find (pl, 'columns'); + fs = find (pl, 'fs'); + + objs = []; + + %%%% + if strcmpi(data_type, 'cdata') + fs = 1; + end + + % Then we try for a numerical data set in + % the first numerical field we come to + fnames = fieldnames(loadData); + for jj=1:length(fnames) + if isnumeric(loadData.(fnames{jj})) + % get the data from here + data = loadData.(fnames{jj}); + + if isempty(columns) + columns = 1:size(data,2); + end + + if max(columns) > size(data,2) + error('### The stored variable [%s] doesn''t contain %d columns. It only contains %d columns.', fnames{jj}, max(columns), size(data,2)); + end + + if isempty(fs) + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%% Create from x and y %%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + for kk=1:2:numel(columns) + + % Create an empty object. + obj = obj.initObjectWithSize(1,1); + + x = data(:, columns(kk)); + y = data(:, columns(kk+1)); + + switch lower(data_type) + case 'tsdata' + dataObj = tsdata(x, y); + case 'fsdata' + dataObj = fsdata(x, y); + case 'xydata' + dataObj = xydata(x, y); + case 'cdata' + error('### Should not happen'); + otherwise + error('### unknown data type ''%s''', data_type); + end + + obj.data = dataObj; + + plh = pl.pset('columns', [columns(kk) columns(kk+1)]); + if isempty(pl.find('Name')) + plh.pset('Name', sprintf('%s_%d_%d', find(pl, 'filename'), columns(kk), columns(kk+1))); + end + + obj.addHistory(ii, plh, [], []); + + objs = [objs obj]; + + end + + else + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%% Create from y and fs %%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + for kk=1:numel(columns) + + % Create an empty object. + obj = obj.initObjectWithSize(1,1); + + y = data(:, columns(kk)); + + switch lower(data_type) + case 'tsdata' + dataObj = tsdata(y, fs); + case 'fsdata' + dataObj = fsdata(y, fs); + case 'xydata' + dataObj = xydata(y); + case 'cdata' + % Special case for cdata objects. + % If the user doesn't specify any columns then return only + % one AO with all the data. But if the user defines any + % columns then return for each column an AO + pl.removeKeys({'fs', 'xunits'}); + if isempty(pl.find('columns')) + obj = obj.initObjectWithSize(1,1); + obj.data = cdata(data); + obj.name = pl.find('filename'); + obj.addHistory(ii, pl, [], []); + objs = [objs obj]; + break; + else + dataObj = cdata(data(:,columns)); + end + otherwise + error('### unknown data type ''%s''', data_type); + end + + obj.data = dataObj; + + plh = pl.pset('columns', columns(kk)); + if isempty(pl.find('Name')) + plh.pset('Name', sprintf('%s_%d', find(pl, 'filename'), columns(kk))); + end + + % add history + obj.addHistory(ii, plh, [], []); + + objs = [objs obj]; + end + + end + + % set any object properties + objs.setObjectProperties(pl); + + end % End if the mat file contains numeric data + end % End loop over filenames + + +end + + +