Mercurial > hg > ltpda
view m-toolbox/classes/@history/hist2m.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 source
% HIST2M writes a new m-file that reproduces the analysis described in the history object. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % DESCRIPTION: HIST2M writes a new m-file that reproduces the analysis described % in the history object. % % CALL: cmds = hist2m(h); % % INPUT: h - history object % % OUTPUT: cmds - cell array with the commands to reproduce the data % % VERSION: $Id: hist2m.m,v 1.49 2011/03/29 13:40:16 hewitson Exp $ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function cmds = hist2m(varargin) import utils.const.* utils.helper.msg(msg.PROC3, 'running %s/%s', mfilename('class'), mfilename); % Get history objects hists = varargin{1}; if nargin >= 2 pl = combine(varargin{2}, getDefaultPlist()); else pl = getDefaultPlist(); end % Created contains the epochtime in millisecounds and CREATED2INT define % the number of the last digits CREATED2INT = 1e7; % get a node list utils.helper.msg(msg.PROC1, 'extracting node list from history'); [n,a, nodes] = getNodes(hists, pl.find('stop_option')); utils.helper.msg(msg.PROC1, 'converting history nodes to commands'); % loop over nodes and convert to commands i = 1; cmds = {}; while i <= length(nodes) v = nodes(i).n; idx = find([nodes(:).pn] == i); pl = nodes(i).pl; aoName = mod(nodes(i).h.proctime,CREATED2INT); hi = [nodes(idx).h]; iNames = zeros(size(hi)); for j=1:length(hi) created = hi(j).proctime; %get(hi(j), 'created'); iNames(j) = mod(created,CREATED2INT); end cmd = writeCmd(char(nodes(i).names), pl, aoName, iNames, nodes(i).h.methodInfo.mclass); if ~iscell(cmd), cmd = {cmd}; end utils.helper.msg(msg.PROC2, 'wrote command for node %d [%s]', i, char(nodes(i).names)); for kk=1:numel(cmd) utils.helper.msg(msg.PROC3, 'command: %s', cmd{kk}); end cmds = {cmds{:} cmd{:}}; i = i + 1; end % now find commands that are duplicated after the '=' and remap those utils.helper.msg(msg.PROC1, 'fixing duplicate commands'); ncmds = length(cmds); for j = 1:ncmds cmdj = cmds{j}; % now inspect all other commands prior to this one for k = j+1:ncmds cmdk = cmds{k}; if strcmp(cmdj, cmdk) cmds{j} = ''; end end end % remove empty commands cmds = cmds(~strcmp('', cmds)); utils.helper.msg(msg.PROC1, 'writing output line'); % add the final command to produce a_out alast = deblank(strtok(cmds{1}, '=')); cmds = [cellstr(sprintf('a_out = %s;', alast)) cmds]; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Local Functions % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % FUNCTION: writeCmd % % % % DESCRIPTION: write a command-line % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function cmd = writeCmd(name, pl, aon, ains,methodclass) ainsStr = ''; % for i=length(ains):-1:1 ni = length(ains); for i=1:ni ainsStr = [ainsStr sprintf('a%d, ', ains(i))]; end name = strrep(name, '\_', '_'); if ~isempty(pl) % convert plist to commands cmd = plist2cmds(pl); % the last command will go as input to the method command [s,plstr] = strtok(cmd{1}); plstr = strtrim(plstr); cmd = [ sprintf('a%d = %s(%s%s); %% %s', ... aon, name, ainsStr, strtrim(plstr(2:end-1)),methodclass) cmd(2:end)]; else ainsStr = ainsStr(1:end-2); cmd = sprintf('a%d = %s(%s);', aon, name, ainsStr); end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % FUNCTION: getDefaultPlist % % DESCRIPTION: Get Default Plist % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function plo = getDefaultPlist() plo = plist('stop_option', 'full'); end