Mercurial > hg > ltpda
diff m-toolbox/m/helper/addHistoryStep.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/m/helper/addHistoryStep.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,115 @@ +% ADDHISTORYSTEP Adds a history step of a non LTPDA method to object with history. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% DESCRIPTION: Adds a history step of a non LTPDA method to object with +% history. +% +% CALL: obj = addHistoryStep(obj, minfo, h_pl, ver, var_name, inhists, ...); +% +% INPUT: obj: Object with histry like AOs, SSMs, MFIRs, MIIRs, ... +% h_pl: Plist which should go into the history. +% ver: cvs version of the user defined method. Only +% necessary if no minfo is passed in. +% minfo: Information object of the function. If not defined +% this method will take the following: +% minfo(CALLED_METHOD, 'none', '', 'User defined', ver, {'Default'}, h_pl); +% var_name: Cell-array with the variable manes of the object(s) +% inhists: History objects which should be add to the input +% object. e.g. [a.hist b.hist] +% +% REMARK: Don't use this method inside a sub function +% +% VERSION: $Id: addHistoryStep.m,v 1.9 2011/03/25 13:32:09 ingo Exp $ +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +function varargout = addHistoryStep(varargin) + + % Get the calling method name from the + stack = dbstack(); + + if numel(stack) < 2 + error('### Please use this method only inside a method'); + end + + mthdName = stack(2).name; + + % Collect objects + objs = utils.helper.collect_objects(varargin(:), ''); + pls = utils.helper.collect_objects(varargin(:), 'plist'); + mi = utils.helper.collect_objects(varargin(:), 'minfo'); + ver = utils.helper.collect_objects(varargin(:), 'char'); + invars = utils.helper.collect_objects(varargin(:), 'cell'); + in_hists = utils.helper.collect_objects(varargin(:), 'history'); + + % Check that the input objects are objects with history + if ~isa(objs, 'ltpda_uoh') + error('### The input objects must be derived from the ltpda_uoh class like ao, ssm, mfir, ...'); + end + + % If the user doesn't pass in an minfo object then create a default one. + if isempty(mi) + if isempty(ver) + ver = 'No version'; + end + if ~isempty(pls) + pls.combine(); + end + mi = minfo(mthdName, 'none', '', utils.const.categories.user, ver, {'Default'}, pls); + end + + % Modify plist object + if ~isempty(pls) + % Make sure that we have only one PLIST + pls.combine(); + + % 1. replace ltpda_uoh in pls with their history + % 2. empty the description field of a parameter ('desc') + % 3. remove the options + for jj=1:pls.nparams + p = pls.params(jj); + if isa(p.getVal, 'ltpda_uoh') + p.setVal([p.getVal.hist]); + end + p.setDesc(''); + p.setVal(p.getVal); + end + end + % Remove Password from the history-plist + if isa(pls, 'plist') && pls.isparam('password') + pls.remove('password'); + end + % Remove Username from the history-plist + if isa(pls, 'plist') && pls.isparam('username') + pls.remove('username'); + end + + % Remove the 'sets' and the corresponding 'plists' from the minfo + % object. They are not important for the history step. + mi.clearSets(); + + % Add history to all objects + for ii = 1:numel(objs) + pause(0.001) + t0 = time(); + + % set UUID + uuid = char(java.util.UUID.randomUUID); + objs(ii).setUUID(uuid); + + % Create new history object + h = history(t0.utc_epoch_milli, mi, pls, invars, uuid, in_hists); + h.setObjectClass(class(objs(ii))); + + % Set the new history + objs(ii).setHist(h); + + end + + % Prepare output + varargout{1} = objs; +end + + + +