0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 1 % SELECT select particular samples from the input AOs and return new AOs with only those samples.
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: SELECT select particular samples from the input AOs and return
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 5 % new AOs with only those samples.
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 6 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 7 % CALL: b = select(a, [1 2 3 4]);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 8 % b = select(a, pl)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 9 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 10 % <a href="matlab:utils.helper.displayMethodInfo('ao', 'select')">Parameters Description</a>
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 11 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 12 % VERSION: $Id: select.m,v 1.42 2011/10/06 05:21:05 hewitson Exp $
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 13 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 14 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 15
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 16 function varargout = select(varargin)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 17
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 18 % Check if this is a call for parameters
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 19 if utils.helper.isinfocall(varargin{:})
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 20 varargout{1} = getInfo(varargin{3});
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 21 return
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 22 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 23
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 24 import utils.const.*
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 25 utils.helper.msg(msg.PROC3, 'running %s/%s', mfilename('class'), mfilename);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 26
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 27 % Collect input variable names
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 28 in_names = cell(size(varargin));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 29 for ii = 1:nargin,in_names{ii} = inputname(ii);end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 30
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 31 % Collect all AOs and plists
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 32 [as, ao_invars, rest] = utils.helper.collect_objects(varargin(:), 'ao', in_names);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 33 [pl, pl_invars, rest] = utils.helper.collect_objects(rest(:), 'plist', in_names);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 34
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 35 % Decide on a deep copy or a modify
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 36 bs = copy(as, nargout);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 37
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 38 % Combine plists
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 39 pl = parse(pl, getDefaultPlist);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 40
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 41 % Check for samples in arguments
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 42 samples_in = [];
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 43 for jj = 1:numel(rest)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 44 if isnumeric(rest{jj})
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 45 samples_in = [samples_in reshape(rest{jj}, 1, [])];
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 46 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 47 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 48
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 49 % Get sample selection from plist
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 50 sam = find(pl, 'samples');
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 51 axis = find(pl, 'axis');
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 52 if isnumeric(sam)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 53 samples = [samples_in reshape(find(pl, 'samples'), 1, [])];
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 54 elseif isa(sam, 'ao')
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 55 if isa(sam.data, 'tsdata')
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 56 if axis == 'y'
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 57 samples = [samples_in sam.y];
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 58 else
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 59 samples = [samples_in 1:len(sam)];
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 60 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 61 elseif isa(sam.data, 'xydata') || isa(sam.data, 'fsdata')
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 62 if axis == 'y'
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 63 samples = [samples_in reshape(sam.y, 1, [])];
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 64 else
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 65 samples = [samples_in reshape(sam.x, 1, [])];
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 66 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 67 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 68 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 69 samples = sort(samples);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 70 % Set the samples again to the plist because it is possible that the user
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 71 % specified the not in the plist but direct as input.
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 72 if ~isempty(samples_in)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 73 pl.pset('samples', samples);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 74 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 75
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 76 % Loop over input AOs
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 77 for jj = 1:numel(bs)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 78 if isa(bs(jj).data, 'cdata')
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 79 bs(jj).data.setY(bs(jj).data.y(samples));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 80 if numel(bs(jj).data.dy) > 1
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 81 bs(jj).data.setDy(bs(jj).data.dy(samples));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 82 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 83 if isprop(bs(jj).data, 'enbw')
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 84 if numel(bs(jj).data.enbw) > 1
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 85 bs(jj).data.setEnbw(bs(jj).data.enbw(samples));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 86 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 87 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 88 else
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 89 % Get x
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 90 x = bs(jj).data.getX;
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 91 % set new samples
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 92 bs(jj).data.setXY(x(samples), bs(jj).data.y(samples));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 93 if numel(bs(jj).data.dx) > 1
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 94 bs(jj).data.setDx(bs(jj).data.dx(samples));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 95 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 96 if numel(bs(jj).data.dy) > 1
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 97 bs(jj).data.setDy(bs(jj).data.dy(samples));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 98 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 99 if isprop(bs(jj).data, 'enbw')
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 100 if numel(bs(jj).data.enbw) > 1
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 101 bs(jj).data.setEnbw(bs(jj).data.enbw(samples));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 102 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 103 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 104 % if this is tsdata, we may need to do some other steps
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 105 if isa(bs(jj).data, 'tsdata')
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 106 % recompute nsecs
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 107 bs(jj).data.fixNsecs;
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 108 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 109 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 110 % Set AO name
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 111 bs(jj).name = sprintf('select(%s)', ao_invars{jj});
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 112 % Add history
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 113 bs(jj).addHistory(getInfo('None'), pl, ao_invars(jj), bs(jj).hist);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 114 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 115
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 116 % Set output
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 117 varargout = utils.helper.setoutputs(nargout, bs);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 118
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 119 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 120
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 121 %--------------------------------------------------------------------------
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 122 % Get Info Object
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 123 %--------------------------------------------------------------------------
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 124 function ii = getInfo(varargin)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 125 if nargin == 1 && strcmpi(varargin{1}, 'None')
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 126 sets = {};
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 127 pl = [];
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 128 else
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 129 sets = {'Default'};
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 130 pl = getDefaultPlist();
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 131 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 132 % Build info object
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 133 ii = minfo(mfilename, 'ao', 'ltpda', utils.const.categories.sigproc, '$Id: select.m,v 1.42 2011/10/06 05:21:05 hewitson Exp $', sets, pl);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 134 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 135
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 136 %--------------------------------------------------------------------------
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 137 % Get Default Plist
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 138 %--------------------------------------------------------------------------
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 139 function plout = getDefaultPlist()
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 140 persistent pl;
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 141 if ~exist('pl', 'var') || isempty(pl)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 142 pl = buildplist();
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 143 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 144 plout = pl;
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 145 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 146
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 147 function plo = buildplist()
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 148 plo = plist();
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 149
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 150 p = param({'samples', 'A list of samples to select.'}, paramValue.EMPTY_DOUBLE);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 151 plo.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 152
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 153 p = param({'axis', 'If the samples are specified with an AO then it is possible from axis you want to select the samples.'}, {1 {'x', 'y'} paramValue.SINGLE});
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 154 plo.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 155
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 156 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 157
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 158 % END
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 159 % PARAMETERS: 'samples' - a list of samples to select
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 160 %