Mercurial > hg > ltpda
diff m-toolbox/classes/@ao/applyoperator.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/applyoperator.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,68 @@ +% APPLYOPERATOR to the analysis object +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% DESCRIPTION: APPLYOPERATOR to the analysis object +% Private AO function that applies the given operator to +% the given AOs. This is called by all the simple methods like +% plus, minus, mtimes etc. +% +% CALL: as = applyoperator(callerIsMethod, as, ao_invars, op, opsym, pl, info) +% +% VERSION: $Id: applyoperator.m,v 1.27 2011/02/25 15:46:22 ingo Exp $ +% +% HISTORY: 11-06-2008 Hewitson +% Creation +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +function res = applyoperator(as, callerIsMethod, ao_invars, op, opsym, pl, info) + + %% Initialise the result to the first input object + res = as(1); + + %% go through the remaining analysis objects + for jj = 2:numel(as) + + % Message + utils.helper.msg(2, 'applying %s to %s and %s', op, res.name, as(jj).name); + + % Compute operator of data + yu1 = res.data.yunits; + yu2 = as(jj).data.yunits; + res.data = applyoperator(res.data, as(jj).data, op); + + if callerIsMethod + % do nothing + else + % append history + res.addHistory(info, pl, [{res.name} ao_invars(jj)], [res.hist as(jj).hist]); + + % Set new AO name + if (length(opsym) == 2 && opsym(1) == '.') || ... + (length(opsym) == 1) + res.name = ['(' res.name ')' opsym '(' ao_invars{jj} ')']; + else + res.name = [opsym '(' res.name ',' ao_invars{jj} ')']; + end + end + + if any(strcmp(op, {'plus', 'minus'})) + % Do nothing + elseif ismethod('unit', op) + % Set units + if any(strcmp(op, {'mpower', 'power'})) + if numel(as(jj).data.getY) == 1 + res.data.setYunits(feval(op, yu1, as(jj).data.getY)); + else + end + else + res.data.setYunits(feval(op, yu1, yu2)); + end + else + warning('LTPDA:INFO', '### This method doesn''t exist in the units class. Please set the units yourself.'); + end + + end + +end +