0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 1 % FIND particular samples that satisfy the input query and return a new AO.
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 3 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 4 % DESCRIPTION: FIND particular samples that satisfy the input query and return a new AO.
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 5 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 6 % CALL: b = find(a, 'x > 10 & x < 100')
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 7 % b = find(a, plist)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 8 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 9 % PROCINFO: The selected indexes are stored in the procinfo of the
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 10 % output AO. You can get this indexes with:
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 11 % b.procinfo.find('index')
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 12 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 13 % <a href="matlab:utils.helper.displayMethodInfo('ao', 'find')">Parameters Description</a>
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 14 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 15 % VERSION: $Id: find.m,v 1.47 2011/10/05 12:04:25 ingo Exp $
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 16 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 17 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 18
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 19 function varargout = find(varargin)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 20
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 21 % Check if this is a call for parameters
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 22 if utils.helper.isinfocall(varargin{:})
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 23 varargout{1} = getInfo(varargin{3});
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 24 return
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 25 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 26
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 27 import utils.const.*
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 28 utils.helper.msg(msg.PROC3, 'running %s/%s', mfilename('class'), mfilename);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 29
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 30 % Collect input variable names
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 31 in_names = cell(size(varargin));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 32 for ii = 1:nargin,in_names{ii} = inputname(ii);end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 33
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 34 % Collect all AOs and plists
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 35 [as, ao_invars] = utils.helper.collect_objects(varargin(:), 'ao', in_names);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 36 [pl, pl_invars, rest] = utils.helper.collect_objects(varargin(:), 'plist', in_names);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 37
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 38 % Decide on a deep copy or a modify
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 39 bs = copy(as, nargout);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 40
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 41 % combine plists
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 42 pl = parse(pl, getDefaultPlist());
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 43
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 44 % initialise queries
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 45 queries = '';
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 46 % extract any from inputs
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 47 for j=1:numel(rest)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 48 if ischar(rest{j})
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 49 queries = [queries ' & ' rest{j}];
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 50 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 51 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 52
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 53 % Get sample selection from plist
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 54 queries = [queries ' & ' find(pl, 'query')];
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 55
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 56 % We may have pre or trailing '&' now
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 57 queries = strtrim(queries);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 58 if queries(1) == '&'
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 59 queries = queries(2:end);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 60 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 61 if queries(end) == '&'
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 62 queries = queries(1:end-1);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 63 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 64
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 65 % store for history
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 66 queries = strtrim(queries);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 67 pl.pset('query', queries);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 68
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 69 % Loop over input AOs
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 70 for j=1:numel(bs)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 71
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 72 % The user uses the variables x and y so we need
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 73 % to put them in the workspace.
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 74 clear x
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 75 if ~isa(bs(j).data, 'cdata')
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 76 x = bs(j).data.getX;
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 77 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 78 y = bs(j).data.getY;
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 79
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 80 idx = [];
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 81 cmd = sprintf('idx = find(%s);', queries);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 82 try
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 83 eval(cmd);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 84 catch ME
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 85 error('%s\n\n### please use x or y for the queries.',ME.message);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 86 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 87
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 88 % set data
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 89 if ~isa(bs(j).data, 'cdata')
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 90 %%% tsdata, fsdata, xydata
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 91 bs(j).data.setXY(x(idx), y(idx));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 92
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 93 % Set 'dx' and 'dy' and 'enbw'
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 94 if numel(bs(j).data.dx) > 1
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 95 bs(j).data.setDx(bs(j).data.dx(idx));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 96 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 97 if numel(bs(j).data.dy) > 1
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 98 bs(j).data.setDy(bs(j).data.dy(idx));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 99 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 100 if isprop(bs(j).data, 'enbw')
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 101 if numel(bs(j).data.enbw) > 1
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 102 bs(j).data.setEnbw(bs(j).data.enbw(idx));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 103 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 104 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 105
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 106 else
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 107 %%% cdata
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 108 bs(j).data.setY(y(idx));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 109 if numel(bs(j).data.dy) > 1
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 110 bs(j).data.setY(bs(j).data.dy(idx));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 111 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 112 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 113
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 114 %%% Set special properties for 'tsdata' objects
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 115 if isa(bs(j).data, 'tsdata')
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 116 % Set the toffset to zero because the x-vector includes the toffset
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 117 bs(j).data.setToffset(0);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 118
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 119 % Check fs and see if is x evenly sampled
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 120 [fs,t0,fitted] = tsdata.fitfs(x(idx));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 121 if fitted
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 122 bs(j).data.setFs(fs);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 123 bs(j).data.fixNsecs();
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 124 else
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 125 % drop x
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 126 bs(j).data.collapseX;
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 127 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 128 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 129
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 130 % set name
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 131 bs(j).name = sprintf('find(%s)', ao_invars{j});
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 132 % add history
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 133 bs(j).addHistory(getInfo('None'), pl, ao_invars(j), bs(j).hist);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 134 bs(j).procinfo = plist('index', idx);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 135 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 136
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 137 % Set output
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 138 if nargout == numel(bs)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 139 % List of outputs
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 140 for ii = 1:numel(bs)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 141 varargout{ii} = bs(ii);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 142 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 143 else
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 144 % Single output
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 145 varargout{1} = bs;
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 146 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 147 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 148
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 149 %--------------------------------------------------------------------------
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 150 % Get Info Object
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 151 %--------------------------------------------------------------------------
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 152 function ii = getInfo(varargin)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 153 if nargin == 1 && strcmpi(varargin{1}, 'None')
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 154 sets = {};
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 155 pls = [];
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 156 else
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 157 sets = {'Default'};
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 158 pls = getDefaultPlist;
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 159 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 160 % Build info object
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 161 ii = minfo(mfilename, 'ao', 'ltpda', utils.const.categories.helper, '$Id: find.m,v 1.47 2011/10/05 12:04:25 ingo Exp $', sets, pls);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 162 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 163
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 164 %--------------------------------------------------------------------------
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 165 % Get Default Plist
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 166 %--------------------------------------------------------------------------
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 167 function plout = getDefaultPlist()
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 168 persistent pl;
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 169 if exist('pl', 'var')==0 || isempty(pl)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 170 pl = buildplist();
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 171 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 172 plout = pl;
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 173 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 174
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 175 function pl = buildplist()
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 176 pl = plist({'query', 'A search string specifying a query on ''x'' or ''y'' (or ''vals'' for cdata). <br>For example, <tt>''x>3 & x<5''</tt>'}, paramValue.EMPTY_STRING);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 177 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 178
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 179