0001 function bo = find(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
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
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
0050 if ~isempty(ps)
0051 pl = combine(ps);
0052 else
0053 pl = plist();
0054 end
0055
0056
0057 queries = [queries ' & ' find(pl, 'queries')];
0058
0059
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
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
0115
0116
0117 h = history(ALGONAME, VERSION, plist(param('queries', queries)), a.hist);
0118 h = set(h, 'invars', invars);
0119
0120
0121 b = ao(d, h);
0122
0123
0124
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
0133 bo = [bo b];
0134
0135 end
0136
0137
0138
0139