Mercurial > hg > ltpda
diff m-toolbox/classes/@ao/fromXYVals.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/fromXYVals.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,154 @@ +% FROMXYVALS Construct an ao from a value set +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% FUNCTION: fromXYVals +% +% DESCRIPTION: Construct an ao from a value set +% +% CALL: a = aoFromXYVals(a, vals) +% +% PARAMETER: vals: Constant values +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function a = fromXYVals(a, pli, callerIsMethod) + + VERSION = '$Id: fromXYVals.m,v 1.20 2011/08/15 05:03:31 hewitson Exp $'; + + if callerIsMethod + % do nothing + else + % get AO info + ii = ao.getInfo('ao', 'From XY Values'); + + % Set the method version string in the minfo object + ii.setMversion([VERSION '-->' ii.mversion]); + end + + if callerIsMethod + pl = pli; + pl_unused = plist(); + else + % Combine input plist with default values + % TODO: the parse step should be removed and included somehow into plist/applyDefaults + [pl, pl_unused] = applyDefaults(ii.plists, pli); + end + + % Get values from the plist + xvals = find(pl, 'xvals'); + yvals = find(pl, 'yvals'); + fs = find(pl, 'fs'); + dtype = find(pl, 'type'); + t0 = find(pl, 't0'); + + % Create an AO with cdata if no value is set + if isempty(xvals) && isempty(yvals) + error('### Please specify some X and Y values.'); + end + + % Try to decide what to do if the user doesn't specify dtype + if isempty(dtype) + if ~isempty(yvals) + if ~isempty(fs) + dtype = 'tsdata'; + else + dtype = 'xydata'; + end + else + dtype = 'cdata'; + end + end + + %--------- Now decide what to construct + switch lower(dtype) + + case 'tsdata' + if ~isempty(xvals) && ~isempty(yvals) && ~isempty(fs) + data_obj = tsdata(xvals, yvals, fs); + elseif ~isempty(xvals) && ~isempty(yvals) + data_obj = tsdata(xvals, yvals); + elseif ~isempty(yvals) && ~isempty(fs) + data_obj = tsdata(yvals, fs); + else + error('### To build an AO with tsdata please specify at least yvals and fs'); + end + if ~isempty(t0) + data_obj.setT0(time(t0)); + else + data_obj.setT0(time(0)); + end + + % Handle toffset + % For evenly sampled which means the original toffset of the data has + % been put in the toffset field, so we need to add the user + % specified toffset. + % For unevenly sampled data, the data object is constructed with a + % toffset of zero. In any case the following works for both cases + % except when this is called from a method, in which case we don't + % apply the defaults and the toffset could be []. MATLAB returns [] + % when you do <double> + [], so we need to check that the plist value + % of toffset is not empty before doing the sum. + if ~isempty(pl.find('toffset')) + toffset = data_obj.toffset + 1000*pl.find('toffset'); + data_obj.setToffset(toffset); + end + + case 'fsdata' + if ~isempty(xvals) && ~isempty(yvals) && ~isempty(fs) + data_obj = fsdata(xvals, yvals, fs); + elseif ~isempty(xvals) && ~isempty(yvals) + data_obj = fsdata(xvals, yvals); + elseif ~isempty(yvals) && ~isempty(fs) + data_obj = fsdata(yvals, fs); + else + error('### To build an AO with fsdata please specify at least xvals and yvals'); + end + + case 'xydata' + if ~isempty(xvals) && ~isempty(yvals) + data_obj = xydata(xvals, yvals); + elseif ~isempty(yvals) + data_obj = xydata(yvals); + else + error('### To build an AO with xydata please specify at least yvals'); + end + + case 'cdata' + if ~isempty(yvals) + data_obj = cdata(yvals); + else + error('### To build an AO with cdata please specify yvals'); + end + + otherwise + error('### Can not build a data object with the given parameters.'); + + end + + if isa(data_obj, 'fsdata') + if eq(unit(pl.find('xunits')), unit('')) + pl.pset('xunits', 'Hz'); + end + elseif isa(data_obj, 'tsdata') + if eq(unit(pl.find('xunits')), unit('')) + pl.pset('xunits', 's'); + end + end + + % Set data + a.data = data_obj; + + a.setXunits(find(pl, 'xunits')); + a.setYunits(find(pl, 'yunits')); + + if callerIsMethod + % do nothing + else + % Add history + a.addHistory(ii, pl, [], []); + end + + % Set the object properties from the plist + a.setObjectProperties(pl); + +end +