Home > classes > @ao > find.m

find

PURPOSE ^

FIND particular samples that satisfy the input query and return a new AO.

SYNOPSIS ^

function bo = find(varargin)

DESCRIPTION ^

 FIND particular samples that satisfy the input query and return a new AO.
 
 Usage: b = find(a, 'f > 10 & f < 100')
        b = find(a, plist)
 
 Parameters:
   query - a string specifying a query on valid fields of the AO.
 
 M Hewitson 14-05-07

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function bo = find(varargin)
0002 
0003 % FIND particular samples that satisfy the input query and return a new AO.
0004 %
0005 % Usage: b = find(a, 'f > 10 & f < 100')
0006 %        b = find(a, plist)
0007 %
0008 % Parameters:
0009 %   query - a string specifying a query on valid fields of the AO.
0010 %
0011 % M Hewitson 14-05-07
0012 %
0013 
0014 % capture input variable names
0015 invars = {};
0016 for j=1:nargin
0017   if isa(varargin{j}, 'ao')
0018     invars = [invars cellstr(inputname(j))];
0019   end
0020 end
0021 
0022 ALGONAME = mfilename;
0023 VERSION  = '$Id: find.html,v 1.1 2007/06/08 14:15:02 hewitson Exp $';
0024 
0025 % Get inputs
0026 as      = [];
0027 ps      = [];
0028 queries = [];
0029 for j=1:nargin
0030   if isa(varargin{j}, 'ao')
0031     as = [as varargin{j}];
0032   end
0033   if isa(varargin{j}, 'plist')
0034     ps = [ps varargin{j}];
0035   end
0036   if ischar(varargin{j})
0037     queries = [queries ' & ' varargin{j}];
0038   end
0039 end
0040 
0041 Na = length(as);
0042 if isempty(as)
0043   error('### Please input at least one AO.');
0044 end
0045 if isempty(ps) && isempty(queries)
0046   error('### Please specify queries to select directly or as a plist.');
0047 end
0048 
0049 % Combine plists
0050 if ~isempty(ps)
0051   pl = combine(ps);
0052 else
0053   pl = plist();
0054 end
0055 
0056 % Get sample selection from plist
0057 queries = [queries ' & ' find(pl, 'queries')];
0058 
0059 % We may have pre or trailing '&' now
0060 queries = strtrim(queries);
0061 if queries(1) == '&'
0062   queries = queries(2:end);
0063 end
0064 if queries(end) == '&'
0065   queries = queries(1:end-1);
0066 end
0067 
0068 
0069 disp(sprintf('*** processing %s', queries));
0070 
0071 % Loop over input AOs
0072 bo = [];
0073 for j=1:Na
0074 
0075   a = as(j);
0076   d = a.data;
0077   
0078   if isa(d, 'tsdata')
0079     t = d.t;
0080     x = d.x;
0081     cmd =  sprintf('idx = find(%s);', queries);
0082     eval(cmd);
0083     d = set(d, 't', t(idx));
0084     d = set(d, 'x', x(idx));
0085     
0086   elseif isa(d, 'fsdata')
0087     f  = d.f;
0088     xx = d.xx;
0089     cmd =  sprintf('idx = find(%s);', queries);
0090     eval(cmd);
0091     d = set(d, 'f', f(idx));
0092     d = set(d, 'xx', xx(idx));
0093     
0094   elseif isa(d, 'cdata')
0095     tags = d.tags;
0096     vals = d.vals;
0097     cmd =  sprintf('idx = find(%s);', queries);
0098     eval(cmd);
0099     d = set(d, 'tags', tags(idx));
0100     d = set(d, 'vals', vals(idx));
0101     
0102   elseif isa(d, 'xydata')
0103     x = d.x;
0104     y = d.y;
0105     cmd =  sprintf('idx = find(%s);', queries);
0106     eval(cmd);
0107     d = set(d, 'x', x(idx));
0108     d = set(d, 'y', y(idx));
0109     
0110   else
0111     error('### Unknown data type in AO.');
0112   end  
0113   
0114   % Make output AO
0115   
0116   % create new output history
0117   h = history(ALGONAME, VERSION, plist(param('queries', queries)), a.hist);
0118   h = set(h, 'invars', invars);
0119 
0120   % make output analysis object
0121   b = ao(d, h);
0122 
0123   % set name
0124   % name for this object
0125   if isempty(invars{j})
0126     n1 = a.name;
0127   else
0128     n1 = invars{j};
0129   end
0130   b = set(b, 'name', sprintf('select(%s)', n1));
0131 
0132   % Add to output array
0133   bo = [bo b];
0134   
0135 end
0136 
0137 
0138 
0139 % END

Generated on Fri 08-Jun-2007 16:09:11 by m2html © 2003