查看: 296|回复: 1|关注: 0

[未答复] 如何编程使已有的gui复杂程序不需要点击按钮可以自动化进行

[复制链接]

新手

7 麦片

财富积分


050


2

主题

6

帖子

0

最佳答案
发表于 2019-3-15 17:35:07 | 显示全部楼层 |阅读模式
现在在做用RQA方法对数据进行分析提取RR\ENTR\LAM\DET四个数据值希望可以生成一个全自动的过程不用弹出gui界面自动进入分析过程,这样可以用循环调用crqa程序进行数据批量分析
目前利用工具箱下的crqa程序可以自动出现gui界面,手动点击apply即可出现数据
Snipaste_2019-03-15_17-16-08.png
查看crqa代码中有些复杂,分不太清哪部分是gui的代码

已经查找到case'compute'部分是主要的运算部分,但是不知道怎样提取
但是如果直接定义action='compute'的话会出现设定的error code
放上超级长的删去了最前面一大片注释的crqa程序
  1. function xout=crqa(varargin)
  2. %CRQA   Computes and plots the CRQA measures.


  3. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% programme properties

  4. global errcode props


  5. init_properties

  6. lmin=2;
  7. vmin=2;
  8. nonorm=1;
  9. theiler_window=1;
  10. hw=-1;
  11. xscale = [];
  12. yscale = [];
  13. undocumented = 0;
  14. argout_index=[1,2,3,4,5,6,7,8,9,10];

  15. flag_pdist = 0; % use Matlab function PDIST, but only working for single x
  16. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% check the input

  17. error(nargchk(1,13,nargin));
  18. if nargout>1, error('Too many output arguments'), end

  19. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% splash the GPL

  20. splash_gpl('crp');

  21. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% check and read the input

  22. try
  23. errcode=1;

  24.    set(0,'ShowHidden','on')
  25.    varargin{14}=[];
  26.    t=1;
  27.    w=[];wstep=0; method='max'; method_n=1;
  28.    time_scale_flag=1; time_scale_flag_x=1;
  29.    nogui=0;
  30.    
  31.    % transform any int to double
  32.    intclasses = {'uint8';'uint16';'uint32';'uint64';'int8';'int16';'int32';'int64'};
  33.    flagClass = [];
  34.    for i = 1:length(intclasses)
  35.        i_int=find(cellfun('isclass',varargin,intclasses{i}));
  36.        if ~isempty(i_int)
  37.            for j = 1:length(i_int)
  38.                varargin{i_int(j)} = double(varargin{i_int(j)});
  39.            end
  40.            flagClass = [flagClass; i_int(:)];
  41.        end
  42.    end
  43.    if ~isempty(flagClass)
  44.        disp(['Warning: Input arguments at position [',num2str(flagClass'),'] contain integer values']);
  45.        disp(['(now converted to double).'])
  46.    end

  47.       
  48.    i_double=find(cellfun('isclass',varargin,'double'));
  49.    i_char=find(cellfun('isclass',varargin,'char'));
  50.       check_meth={'ma','eu','mi','nr','rr','fa','in','om','op','di'};         % maxnorm, euclidean, nrmnorm,  fan, distance
  51.       check_gui={'gui','nog','sil'};                % gui, nogui, silent
  52.       check_norm={'non','nor'};                        % nonormalize, normalize
  53.    
  54.    if nargin & ischar(varargin{1})
  55.         set(0,'ShowHidden','on');h=findobj('Tag','Msgbox_Check Input');delete(h)
  56.         action=varargin{1};
  57.         h=findobj('Tag','crqa_Fig');
  58.         temp=get(h(1),'UserData');
  59.         x=temp{1}; y=temp{2};
  60.         h=findobj('Tag','crqa_axes_Data','Parent',h(1)); % get handle of plot-axes object
  61.         h_crqa_axes_Data = h(1);
  62.         h=findobj('Type','line','Parent',h(1)); % get handle of line-object
  63.         xscale=get(h(1),'xdata');
  64.         h=findobj('Tag','crqa_m');
  65.         m=str2num(get(h(1),'String'));
  66.         h=findobj('Tag','crqa_maxLag');
  67.         t=str2num(get(h(1),'String'));
  68.         h=findobj('Tag','crqa_eps');
  69.         e=str2num(get(h(1),'String'));
  70.         h=findobj('Tag','crqa_method');
  71.         method={'Maximum Norm','Euclidean Norm','Minimum Norm','Normalized Norm','Maximum Norm, fixed RR','FAN','Interdependent','Order Matrix','Order Pattern','Distance Plot'};
  72.         method=method{get(h(1),'Value')};
  73.         method_n = get(h(1),'Value');
  74.         nonorm=get(h(1),'UserData');
  75.         h=findobj('Tag','crqa_lmin');
  76.         lmin=str2num(get(h(1),'String'));
  77.         h=findobj('Tag','crqa_vmin');
  78.         vmin=str2num(get(h(1),'String'));
  79.         h=findobj('Tag','crqa_theiler');
  80.         theiler_window=str2num(get(h(1),'String'));
  81.         h=findobj('Tag','crqa_w');
  82.         w=str2num(get(h(1),'String'));
  83.         h=findobj('Tag','crqa_ws');
  84.         wstep=str2num(get(h(1),'String'));

  85.    elseif nargin & isnumeric(varargin{1})

  86.        % check the text input parameters for method, gui
  87.         temp_meth=0;
  88.         temp_norm=0;
  89.         temp_gui=0;
  90.         if ~isempty(i_char)
  91.              for i=1:length(i_char),
  92.                 varargin{i_char(i)}(4)='0';
  93.                 temp_gui=temp_gui+strcmpi(varargin{i_char(i)}(1:3),check_gui');
  94.                 temp_norm=temp_norm+strcmpi(varargin{i_char(i)}(1:3),check_norm');
  95.                 temp_meth=temp_meth+strcmpi(varargin{i_char(i)}(1:2),check_meth');
  96.              end
  97.              method_n=min(find(temp_meth));
  98.              nogui=min(find(temp_gui))-1;
  99.              nonorm=min(find(temp_norm))-1;
  100.              for i=1:length(i_char); temp2(i,:)=varargin{i_char(i)}(1:3); end
  101.              i_char(strmatch(check_gui(find(temp_gui)),temp2))=[];
  102.              if isempty(nonorm), nonorm=1; end
  103.              if nonorm>1, nonorm=1; end
  104.              if isempty(nogui), nogui=0; end
  105.              if isempty(method_n), method_n=1; end
  106.              if nogui>2, nogui=1; end
  107.              if method_n>length(check_meth), method0=length(check_meth); end
  108.              method=check_meth{method_n};
  109.         else
  110.              nogui=0;
  111.              if nargout
  112.                 nogui=1;
  113.                 action='compute';
  114.              end
  115.         end
  116.         if nogui==0
  117.             action='init';
  118.         else
  119.             action='compute';
  120.         end
  121.       
  122.         % get the parameters for creating RP
  123.         if max(size(varargin{1}))<=3
  124.             disp('Error using ==> crqa')
  125.             disp('To less values in data X.')
  126.             return
  127.         end
  128.         x=double(varargin{1});
  129.         if isempty(varargin{2}) | ~isnumeric(varargin{2}), y=x; else
  130.         y=double(varargin{2}); end
  131.   %      if sum(double(diff(x(:,1))<=0)), time_scale_flag=0; end

  132.         if (isnumeric(varargin{2}) & max(size(varargin{2}))==1) | ~isnumeric(varargin{2})
  133.             y=x;
  134.             if ~isempty(varargin{i_double(2)}), m=varargin{i_double(2)}(1); else m=1; end
  135.             if ~isempty(varargin{i_double(3)}), t=varargin{i_double(3)}(1); else t=1; end
  136.             if ~isempty(varargin{i_double(4)}), e=varargin{i_double(4)}(1); else e=.1; end
  137.             if ~isempty(varargin{i_double(5)}), w=varargin{i_double(5)}(1); else w=varargin{i_double(5)}; end
  138.             if ~isempty(varargin{i_double(6)}), wstep=varargin{i_double(6)}(1); else wstep=1; end
  139.             if ~isempty(varargin{i_double(7)}), lmin=varargin{i_double(7)}(1); end
  140.             if ~isempty(varargin{i_double(8)}), vmin=varargin{i_double(8)}(1); end
  141.             if ~isempty(varargin{i_double(9)}), theiler_window=varargin{i_double(9)}(1); end
  142.         else
  143.             if ~isempty(varargin{i_double(3)}), m=varargin{i_double(3)}(1); else m=1; end
  144.             if ~isempty(varargin{i_double(4)}), t=varargin{i_double(4)}(1); else t=1; end
  145.             if ~isempty(varargin{i_double(5)}), e=varargin{i_double(5)}(1); else e=.1; end
  146.             if ~isempty(varargin{i_double(6)}), w=varargin{i_double(6)}(1); else w=varargin{i_double(6)}; end
  147.             if ~isempty(varargin{i_double(7)}), wstep=varargin{i_double(7)}(1); else wstep=1; end
  148.             if ~isempty(varargin{i_double(8)}), lmin=varargin{i_double(8)}(1); end
  149.             if ~isempty(varargin{i_double(9)}), vmin=varargin{i_double(9)}(1); end
  150.             if ~isempty(varargin{i_double(10)}), theiler_window=varargin{i_double(10)}(1); end
  151.         end
  152.    else
  153.         disp('Error using ==> crqa')
  154.         disp('No valid arguments.')
  155.         return
  156.    end
  157.    if method==8 & m > 1,
  158.        m=1;
  159.        disp('Warning: For order matrix a dimension of one is used.')
  160.    end
  161.    
  162.    
  163.    Nx=length(x); Ny=length(y);
  164.    if size(x,1)<size(x,2), x=x'; end
  165.    if size(y,1)<size(y,2), y=y'; end


  166.    if (strcmpi(method,'Order Pattern') | strcmpi(method,'op')) & m == 1 & size(x,2) < 2
  167.        m=2;
  168.        h = findobj('Tag','crqa_m');
  169.        if ~isempty(h)
  170.            errordlg(['For order patterns recurrence plots the',10,'dimension must be larger than one.'],'Dimension too small')
  171.            set(h(1),'String',num2str(m))
  172.        else
  173.            disp(['Warning: For order patterns recurrence plots the dimension must',10,...
  174.                 'be larger than one. ',...
  175.                 'Embedding dimension is set to ',num2str(m),'.'])
  176.        end
  177.    end

  178.    if size(x,2)>=2
  179.       xscale=x(:,1);
  180.       if ~isempty(find(diff(xscale)<0)) % multi-column data vector, each column used as vector component
  181.           time_scale_flag=0;
  182.           time_scale_flag_x=0;
  183.           xscale=(1:length(x))';
  184.       end
  185.    else
  186.       xscale=(1:length(x))';
  187.       time_scale_flag=0;
  188.       time_scale_flag_x=0;
  189.    end

  190.    if size(y,2)>=2
  191.       yscale=y(:,1);
  192.       time_scale_flag=1;
  193.       if ~isempty(find(diff(yscale)<0))
  194.           time_scale_flag=0;
  195.           yscale=(1:length(y))';
  196.       end
  197.       if time_scale_flag & ~time_scale_flag_x % if time-scale given in y, but not in x -> error
  198.           if ~nogui
  199.              errordlg(['A time-scale for the second data is series given, but not for the first!',10,'(The time-scale has to be inlcuded as the first colummn of the first data vector.)'],'Check Data')
  200.              waitforbuttonpress
  201.              return
  202.           else
  203.              error(['A time-scale for the second data series is given, but not for the first!',10,'(The time-scale has to be inlcuded as the first colummn of the first data vector.)'])
  204.           end
  205.       end
  206.    else
  207.        yscale=(1:length(y))';
  208.        time_scale_flag=0;
  209.    end
  210.    if time_scale_flag_x & ~time_scale_flag % if time-scale given in x, but not in y
  211.        if length(x) ~= length(y)
  212.           if ~nogui
  213.              errordlg(['If you are using the time-scale given by the first vector also for',10,'the second vector, both vectors should have the same size!'],'Check Data')
  214.              waitforbuttonpress
  215.              return
  216.           else
  217.              error(['If you are using the time-scale given by the first vector also for',10,'the second vector, both vectors should have the same size!'])
  218.           end
  219.        end
  220.        y = [xscale, y];
  221.        yscale = xscale;
  222.        time_scale_flag=1;
  223.    end

  224.    if max(size(x))~=max(size(y)),
  225.         if ~nogui, errordlg('Data must have the same length.','Check Data'), waitforbuttonpress, return, else error('Data must have the same length.'), end
  226.    end
  227.    if e<0,
  228.        e=1;
  229.        if ~nogui
  230.           warndlg('The threshold size E can not be negative and is now set to 1.','Check Data')
  231.           waitforbuttonpress
  232.           h=findobj('Tag','crqa_eps');
  233.           if ~isempty(h), set(h(1),'String',num2str(e)), end
  234.        else
  235.           disp('The threshold size E can not be negative and is now set to 1.'),
  236.        end
  237.    end
  238.    if t<1,
  239.      t=1;
  240.      if ~nogui
  241.         warndlg('The delay T can not be smaller than one and is now set to 1.','Check Data')
  242.         waitforbuttonpress
  243.         h=findobj('Tag','crqa_maxLag');
  244.         if ~isempty(h), set(h(1),'String',num2str(t)), end
  245.      else
  246.         disp('The delay T can not be smaller than one and is now set to 1.')
  247.      end
  248.    end
  249.    if m < 1; m = 1; end


  250.    if (Nx - (m-1) * t) < 5
  251.         disp('Error using ==> crqa')
  252.         disp('Too less data.')
  253.         xout = [];
  254.         return
  255.    end


  256. %   if isempty(w), w=Nx-(m-1)*t; wstep=1; end
  257.    if isempty(w), w=Nx; wstep=1; end
  258.    if w < 5+(m-1)*t,
  259.      w=5+(m-1)*t;
  260.      if w > Nx, w = Nx; end
  261.      if ~nogui, warndlg('The window size W falls below the valid range.','Check Data')
  262.         waitforbuttonpress
  263.         h=findobj('Tag','crqa_w');
  264.         if ~isempty(h), set(h(1),'String',num2str(w)), end
  265.      else, disp('The window size W falls below the valid range.'), end
  266.    end
  267. %   if w>Nx-(m-1)*t,
  268.    if w>Nx,
  269. %     w=Nx-(m-1)*t; wstep=1;;
  270.      w=Nx; wstep=1;;
  271.      if ~nogui, warndlg('The window size W exceeds the valid range.','Check Data')
  272.         waitforbuttonpress
  273.         h=findobj('Tag','crqa_w');
  274.         if ~isempty(h), set(h(1),'String',num2str(w)), end
  275.      else, disp('The window size W exceeds the valid range.'), end
  276.    end
  277.    if wstep<1 | wstep>Nx/3,
  278.      wstep=2;
  279.      if ~nogui, warndlg('The window shifting value WS exceeds the valid range.','Check Data')
  280.         waitforbuttonpress
  281.         h=findobj('Tag','crqa_ws');
  282.         if ~isempty(h), set(h(1),'String',num2str(wstep)), end
  283.      else, disp('The window shifting value WS exceeds the valid range.'), end
  284.    end
  285.    if vmin<1 | vmin>Nx,
  286.      vmin=2;
  287.      if ~nogui, warndlg('The minimal length for vertical lines is not valid.','Check Data')
  288.         waitforbuttonpress
  289.         h=findobj('Tag','crqa_vmin');
  290.         if ~isempty(h), set(h(1),'String',num2str(vmin)), end
  291.      else, disp('The minimal length for vertical lines is not valid.'), end
  292.    end
  293.    if lmin<1 | lmin>Nx,
  294.      lmin=2;
  295.      if ~nogui, warndlg('The minimal length for diagonal lines is not valid.','Check Input')
  296.         waitforbuttonpress
  297.         h=findobj('Tag','crqa_lmin');
  298.         if ~isempty(h), set(h(1),'String',num2str(lmin)), end
  299.      else, disp('The minimal length for diagonal lines is not valid.'), end
  300.    end
  301.    if theiler_window<0 | theiler_window>Nx,
  302.      theiler_window=1;
  303.      if ~nogui, warndlg('The value for the Theiler window is not valid.','Check Input')
  304.         waitforbuttonpress
  305.         h=findobj('Tag','crqa_theiler');
  306.         if ~isempty(h), set(h(1),'String',num2str(theiler_window)), end
  307.      else, disp('The value for the Theiler window is not valid.'), end
  308.    end
  309.    if x~=y, theiler_window=0; end
  310.    t=round(t); m=round(m); w=round(w); wstep=round(wstep); vmin=round(vmin); lmin=round(lmin); theiler_window=round(theiler_window);
  311.    

  312.    % normalize data if necessary
  313.    if nonorm
  314.        x = (x - repmat(mean(x),length(x),1)) ./ repmat(std(x),length(x),1);
  315.        y = (y - repmat(mean(y),length(y),1)) ./ repmat(std(y),length(y),1);
  316.    end
  317.       

  318. switch(action)

  319.   
  320. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% create gui

  321. case 'init'

  322.   errcode=3;
  323.       
  324.   oldunit=get(0,'unit');
  325.   set(0,'Unit','char')
  326.   scr=get(0,'ScreenSize');
  327.   set(0,'Unit',oldunit)
  328.   
  329.   h8=figure(props.window,...                                % Plot Figure
  330.             'Tag','crqa_Fig',...
  331.             'MenuBar','Figure',...
  332.             'Position',[(scr(3)-150)/2 scr(4)-50 150.0000 44],...
  333.             'PaperType','a4',...
  334.             'PaperPosition',[0.25 0.25 7.7677 11.193],...
  335.             'PaperOrientation','portrait',...
  336.             'MenuBar','none', ...
  337.             'UserData',{x,y,time_scale_flag},...
  338.             'Name','Cross Recurrence Quantification Analysis');
  339.   
  340.   set(0,'showhidden','on')
  341.   h=findobj('Label','&Help','Type','uimenu');
  342.   if isempty(h)
  343.     h=uimenu('Label','&Help');
  344.     h2=uimenu('Parent',h(1),'Label','&Help Cross Recurrence Quantification Analysis','Callback','helpwin crqa');
  345.   else
  346.     h1=flipud(get(h(1),'Children'));
  347.     set(h1(1),'Separator','on')
  348.     h2=uimenu('Parent',h(1),'Label','&Help Cross Recurrence Quantification Analysis','Callback','helpwin crqa');
  349.     copyobj(h1,h(1))
  350.     delete(h1)
  351.   end
  352.   set(0,'showhidden','off')


  353.   h=axes(props.axes,...
  354.             'Position',[89+30 24.8+14.5 6.8 3.5]);   
  355.   logo=load('logo');
  356.   h2=imagesc([logo.logo fliplr(logo.logo)]);
  357.   set(h2,'Tag','uniLogo')
  358.   set(h,props.logo,'Tag','axes_logo')
  359.   h=uicontrol(props.text,...
  360.             'Tag','text_logo',...
  361.             'String','Uni Potsdam',...
  362.             'Position',[97+30 24.2143+14.5 22  3.5714]);   
  363.   h2=textwrap(h,{[char(169),' AGNLD'],'University of Potsdam','1998-2007'});
  364.   set(h,'String',h2)


  365. %%%%%%%%%%% plots

  366.   axes_height = 5.8;
  367.   axes_base = 3;
  368.   axes_hoffset = 2.5;
  369.   h=axes(props.axes,...
  370.             'Tag','crqa_axes_Data',...
  371.                 'Box','On',...
  372.             'Position',[11.2017  axes_base+4*(axes_height+axes_hoffset)    28.1785+15    axes_height]);   

  373.   if time_scale_flag
  374.       plot(xscale,x(:,2:end),'color',props.line.Color)
  375.       if ~all(x(:)==y(:)) hold on; plot(yscale,y(:,2:end),'r'), end
  376.   else
  377.       plot(xscale,x(:,1:end),'color',props.line.Color)
  378.       if ~all(x(:)==y(:)) hold on; plot(yscale,y(:,1),'r'), end
  379.   end
  380.   set(h,'Tag','crqa_axes_Data','color',props.axes.Color)
  381.   ylabel('Data')

  382.   h=axes(props.axes,...
  383.             'Tag','crqa_axes_Var',...
  384.             'Box','On',...
  385.             'Position',[49.8023+15   axes_base+4*(axes_height+axes_hoffset)   28.1785+15    axes_height]);   
  386.   if time_scale_flag
  387.      x_var = winplot(x(:,2:end),w,wstep,2);
  388.   else
  389.      x_var = winplot(x(:,1),w,wstep,2);
  390.   end
  391.   if size(x_var,1) > 2
  392.     h2=stairs(xscale(round(x_var(:,1))),x_var(:,2));
  393.     set(h2,'color',props.line.Color)
  394.   else
  395.       cla
  396.       text(0.5,0.5,sprintf('%6.4f',x_var(1,2)),'FontWeight','bold','HorizontalAlign','Center')
  397.   end
  398.   if ~all(x(:)==y(:))
  399.     hold on;
  400.     if time_scale_flag
  401.         y_var = winplot(y(:,2:end),w,wstep,2);
  402.     else
  403.         y_var = winplot(y(:,1),w,wstep,2);
  404.     end
  405.     if size(y_var,1) > 2
  406.       stairs(yscale(round(y_var(:,1))),y_var(:,2),'r')
  407.     else
  408.         cla
  409.       text(0.5,0.5,sprintf('%6.5f, %6.5f',x_var(2,2),y_var(1,2)),'FontWeight','bold','HorizontalAlign','Center')
  410.     end
  411.     h3=axes('Units','Char',...
  412.               'Pos',get(h,'Pos'),...
  413.               'XLim',get(h,'XLim'),...
  414.               'YLim',get(h,'YLim'),...
  415.               'YAxisLocation','right',...
  416.               'Color','none',...
  417.               'Tag','crqa_axes_CoVar',...
  418.               'visible','off');
  419.   end
  420.   set(gcf,'CurrentAxes',h);
  421.   ylabel('Variance')
  422.   set(h,'Tag','crqa_axes_Var','color',props.axes.Color)


  423.   h=axes(props.axes,...
  424.             'Tag','crqa_axes_RR',...
  425.             'Box','On',...
  426.             'Position',[11.2017   axes_base+3*(axes_height+axes_hoffset)   28.1785+15    axes_height]);   
  427.   ylabel('RR')

  428.   h=axes(props.axes,...
  429.             'Tag','crqa_axes_DET',...
  430.             'Box','On',...
  431.             'Position',[49.8023+15   axes_base+3*(axes_height+axes_hoffset)   28.1785+15    axes_height]);   
  432.   ylabel('DET')

  433.   h=axes(props.axes,...
  434.             'Tag','crqa_axes_L',...
  435.             'Box','On',...
  436.             'Position',[11.2017   axes_base+2*(axes_height+axes_hoffset)   28.1785+15    axes_height]);   
  437.   ylabel('L')

  438.   h=axes(props.axes,...
  439.             'Tag','crqa_axes_ENTR',...
  440.             'Box','On',...
  441.             'Position',[49.8023+15   axes_base+2*(axes_height+axes_hoffset)   28.1785+15    axes_height]);   
  442.   ylabel('ENTR')

  443.   h=axes(props.axes,...
  444.             'Tag','crqa_axes_LAM',...
  445.             'Box','On',...
  446.             'Position',[11.2017    axes_base+1*(axes_height+axes_hoffset)   28.1785+15    axes_height]);   
  447.   ylabel('LAM')

  448.   h=axes(props.axes,...
  449.             'Tag','crqa_axes_TT',...
  450.             'Box','On',...
  451.             'Position',[49.8023+15    axes_base+1*(axes_height+axes_hoffset)   28.1785+15    axes_height]);   
  452.   ylabel('TT')

  453.   h=axes(props.axes,...
  454.             'Tag','crqa_axes_T1',...
  455.             'Box','On',...
  456.             'Position',[11.2017    axes_base+0*(axes_height+axes_hoffset)   28.1785+15    axes_height]);   
  457.   ylabel('T_1')

  458.   h=axes(props.axes,...
  459.             'Tag','crqa_axes_T2',...
  460.             'Box','On',...
  461.             'Position',[49.8023+15    axes_base+0*(axes_height+axes_hoffset)   28.1785+15    axes_height]);   
  462.   ylabel('T_2')

  463. %%%%%%%%%%% embedding
  464.   h=uicontrol(props.frame,...
  465.             'Tag','frame',...
  466.             'Position',[86+30 29.+2.8 29 5.7]);   

  467.   h=uicontrol(props.text,...
  468.             'Tag','text',...
  469.             'Fontangle','italic',...
  470.             'String','Embedding parameters',...
  471.             'Position',[87+30 34.2+1.6 16.8333  1.5000]);   

  472.   h=uicontrol(props.text,...
  473.             'Tag','text',...
  474.             'String','Dimension:',...
  475.             'Position',[89+30 32+2.2 16.8333  1.5000]);   

  476.   h=uicontrol(props.edit,...
  477.             'Tag','crqa_m',...
  478.             'String',num2str(m),...
  479.             'ToolTip','Select the embedding dimension.',...
  480.             'Position',[104+30 32+.2+2.2 7  1.5000]);   

  481.   h=uicontrol(props.text,...
  482.             'Tag','text',...
  483.             'String','Delay:',...
  484.             'Position',[89+30 30+2.32 16.8333  1.5000]);   

  485.   h=uicontrol(props.edit,...
  486.             'Tag','crqa_maxLag',...
  487.             'String',num2str(t),...
  488.             'ToolTip','Insert the embedding delay time.',...
  489.             'Position',[104+30 30+.2+2.32 7  1.5000]);   

  490. %%%%%%%%%%% neigbourhood
  491.   h=uicontrol(props.frame,...
  492.             'Tag','frame',...
  493.             'Position',[86+30 21.9+2.5 29 6.7]);   

  494.   h=uicontrol(props.text,...
  495.             'Tag','text',...
  496.             'Fontangle','italic',...
  497.             'String','Neighbourhood',...
  498.             'Position',[87+30 26.8+2.5 23  1.5000]);   

  499.   h=uicontrol(props.popup,...
  500.             'Tag','text',...
  501.             'Tag','crqa_method',...
  502.             'UserData',nonorm,...
  503.             'Value',method_n,...
  504.             'String','Maximum Norm|Euclidean Norm|Minimum Norm|Normalized Norm|Fixed RR|Fixed Amount|Interdependent|Order Matrix|Order Patterns|Distance Plot',...
  505.             'Position',[89+30 24.6+.2+2.5 22  1.7]);   

  506.   h=uicontrol(props.text,...
  507.             'Tag','text',...
  508.             'String','Threshold:',...
  509.             'Position',[89+30 22.6+2.5 16.8333  1.5]);   

  510.   h=uicontrol(props.edit,...
  511.             'Tag','crqa_eps',...
  512.             'String',num2str(e),...
  513.             'ToolTip','Insert the size of neighbourhood.',...
  514.             'Position',[104+30 22.6+.2+2.5 7  1.5000]);   

  515. %%%%%%%%%%% crqa parameters
  516.   h=uicontrol(props.frame,...
  517.             'Tag','frame',...
  518.             'Position',[86+30 11+.5 29 12.2]);   

  519.   h=uicontrol(props.text,...
  520.             'Tag','text',...
  521.             'Fontangle','italic',...
  522.             'String','CRQA parameters',...
  523.             'Position',[87+30 19.4+2.5 23  1.5000]);   

  524.   h=uicontrol(props.text,...
  525.             'Tag','text',...
  526.             'String','min. Diagonal:',...
  527.             'Position',[89+30 17.6+2.5 16.8333  1.5]);   

  528.   h=uicontrol(props.edit,...
  529.             'Tag','crqa_lmin',...
  530.             'String',num2str(lmin),...
  531.             'ToolTip','Insert the minimal length of a diagonal line.',...
  532.             'Position',[104+30 17.6+.2+2.5 7  1.5000]);   

  533.   h=uicontrol(props.text,...
  534.             'Tag','text',...
  535.             'String','min. Vertical:',...
  536.             'Position',[89+30 15.6+2.5 16.8333  1.5]);   

  537.   h=uicontrol(props.edit,...
  538.             'Tag','crqa_vmin',...
  539.             'String',num2str(vmin),...
  540.             'ToolTip','Insert the minimal length of a vertical line.',...
  541.             'Position',[104+30 15.6+.2+2.5 7  1.5000]);   

  542.   h=uicontrol(props.text,...
  543.             'Tag','text',...
  544.             'String','Theiler wind.:',...
  545.             'Position',[89+30 15.6+.5 16.8333  1.5]);   

  546.   h=uicontrol(props.edit,...
  547.             'Tag','crqa_theiler',...
  548.             'String',num2str(theiler_window),...
  549.             'ToolTip','Insert the size for the Theiler window.',...
  550.             'Position',[104+30 15.6+.2+.5 7  1.5000]);   
  551.   if x~=y; set(h,'enable','off'); end

  552.   h=uicontrol(props.text,...
  553.             'Tag','text',...
  554.             'String','Window size:',...
  555.             'Position',[89+30 13.6+.5 16.8333  1.5]);   

  556.   h=uicontrol(props.edit,...
  557.             'Tag','crqa_w',...
  558.             'String',num2str(w),...
  559.             'ToolTip','Insert the size of the sliding window.',...
  560.             'Position',[104+30 13.6+.2+.5 7  1.5000]);   

  561.   h=uicontrol(props.text,...
  562.             'Tag','text',...
  563.             'String','Window step:',...
  564.             'Position',[89+30 11.6+.5 16.8333  1.5]);   

  565.   h=uicontrol(props.edit,...
  566.             'Tag','crqa_ws',...
  567.             'String',num2str(wstep),...
  568.             'ToolTip','Insert the step width for sliding the window.',...
  569.             'Position',[104+30 11.6+.2+.5 7  1.5000]);   


  570. %%%%%%%%%%% buttons

  571.   h=uicontrol(props.frame,...
  572.             'Tag','frame',...
  573.             'Position',[86+30 1.3+.5 29 9]);   


  574.   h=uicontrol(props.button,...
  575.                 'String','Store',...
  576.                 'Tag','crqa_button_store',...
  577.               'Enable','Off',...
  578.                 'ToolTip','Stores the CRQA analysis into a variable in the workspace.',...
  579.                 'Callback','crqa store',...
  580.                 'Position',[100.5+30  7.4+.5 10.5  2.2143]);

  581.   h=uicontrol(props.button,...
  582.             'Tag','crqa_button_print',...
  583.             'CallBack','crqa print',...
  584.                 'ToolTip','Prints the CRQA window.',...
  585.             'String','Print',...
  586.             'Position',[89+30  7.4+.5 10.5  2.2143]);   

  587.   h=uicontrol(props.button,...
  588.             'Tag','crqa_button_close',...
  589.             'CallBack','crqa close',...
  590.                 'ToolTip','Closes the CRQA window.',...
  591.             'String','Close',...
  592.             'Position',[89+30  2.1+.5 22  2.2143]);   
  593.   
  594.   h=uicontrol(props.button,...
  595.                 'String','Apply',...
  596.                 'Tag','crqa_button_apply',...
  597.                 'ToolTip','Starts the computation.',...
  598.                 'Callback','crqa compute',...
  599.                 'Position',[89+30  4.75+.5 22  2.2143]);
  600.   
  601.   set(0,'ShowHidden','on')
  602.   set(h8, 'HandleVis','CallBack')
  603.   tags={'crqa_Fig';'axes_logo';'text_logo';'crqa_theiler';'frame';'text';'crqa_axes_Data';'crqa_axes_Var';'crqa_axes_CoVar';'crqa_axes_RR';'crqa_axes_DET';'crqa_axes_L';'crqa_axes_ENTR';'crqa_axes_LAM';'crqa_axes_TT';'crqa_axes_T1';'crqa_axes_T2';'crqa_m';'crqa_maxLag';'crqa_method';'crqa_eps';'crqa_lmin';'crqa_vmin';'crqa_w';'crqa_ws';'crqa_button_store';'crqa_button_print';'crqa_button_close';'crqa_button_apply'};
  604.   h=[];
  605.   for i=1:length(tags); h=[h; findobj('Tag',tags{i})]; end
  606.   set(h,'Units','Norm')
  607.   if nargout; xout=h8; end
  608.   
  609. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% close windows

  610. case 'close'
  611.   errcode=101;
  612.   set(0,props.root)
  613.   h=findobj('Tag','crqa_Fig');
  614.   if ~isempty(h), close(h(1)), end
  615.   clear all

  616. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% store

  617. case 'store'
  618.   errcode=0;
  619.   if ~isempty(findobj('Tag','crqa_button_store'))
  620.     h=findobj('Tag','crqa_button_store');
  621.     h1=findobj('Tag','crqa_button_close');
  622.     if ~isempty(h1), vname_old=get(h1(1),'UserData'); else vname_old=''; end
  623.     if isempty(vname_old), vname_old=''; end
  624.     vname=char(inputdlg('Choose a variable name.','Store output',1,{vname_old}));
  625.     if isempty(vname)
  626.       return
  627.     else
  628.       crqa_values=get(h(1),'UserData');
  629.       assignin('base',vname, [crqa_values])
  630.       warndlg(['CRQA measures have been assigned to the workspace variable ''',vname,'''.'],'Store output');
  631.            waitforbuttonpress
  632.       set(h1(1),'UserData',vname)
  633.     end
  634.   end
  635.   set(0,props.root)

  636. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% print
  637.   case 'print'

  638.     errcode=91;
  639.     h=findobj('Tag','crqa_axes_Data','Parent',gcf); h_axes.h(1)=h(1);
  640.     h=findobj('Tag','crqa_axes_Var','Parent',gcf); h_axes.h(2)=h(1);
  641.     h=findobj('Tag','crqa_axes_CoVar','Parent',gcf); if ~isempty(h), h_axes.h(11)=h(1); end
  642.     h=findobj('Tag','crqa_axes_RR','Parent',gcf); h_axes.h(3)=h(1);
  643.     h=findobj('Tag','crqa_axes_DET','Parent',gcf); h_axes.h(4)=h(1);
  644.     h=findobj('Tag','crqa_axes_L','Parent',gcf); h_axes.h(5)=h(1);
  645.     h=findobj('Tag','crqa_axes_ENTR','Parent',gcf); h_axes.h(6)=h(1);
  646.     h=findobj('Tag','crqa_axes_LAM','Parent',gcf); h_axes.h(7)=h(1);
  647.     h=findobj('Tag','crqa_axes_TT','Parent',gcf); h_axes.h(8)=h(1);
  648.     h=findobj('Tag','crqa_axes_T1','Parent',gcf); h_axes.h(9)=h(1);
  649.     h=findobj('Tag','crqa_axes_T2','Parent',gcf); h_axes.h(10)=h(1);
  650.     h=findobj('Tag','uniLogo');
  651.     tags={'text_logo';'frame';'text';'crqa_m';'crqa_maxLag';'crqa_method';'crqa_eps';'crqa_lmin';'crqa_vmin';'crqa_theiler';'crqa_w';'crqa_ws';'crqa_button_store';'crqa_button_print';'crqa_button_close';'crqa_button_apply';};
  652.     for i=1:length(tags); h=[h; findobj('Tag',tags{i},'Parent',gcf)]; end
  653.     set(h,'Visible','Off')
  654.    
  655.     set(h_axes.h,'Units','Character');
  656.     h_axes.old_pos=get(h_axes.h,'Position');

  657.     axes_height = .13;
  658.     axes_base = 0.065;
  659.     axes_hoffset = .06;
  660.    
  661.     for i=2:2:10
  662.         set(h_axes.h(i-1),  'Units','normalize','Position',[0.1300    axes_base+(5-i/2)*(axes_height+axes_hoffset)    0.3270    axes_height])
  663.         set(h_axes.h(i),'Units','normalize','Position',[0.5780    axes_base+(5-i/2)*(axes_height+axes_hoffset)    0.3270    axes_height])
  664.     end
  665.     if length(h_axes.h) > 10
  666.         set(h_axes.h(11),  'Units','normalize','Position',[0.5780    axes_base+(5-2/2)*(axes_height+axes_hoffset)    0.3270    axes_height])
  667.     end
  668.     h_dlg=printdlg;
  669.     waitfor(h_dlg)

  670.     for i=1:10, set(h_axes.h(i),'Units','Character','Position',h_axes.old_pos{i}), set(h_axes.h(i),'Units','Norm'),end
  671.     if length(h_axes.h) > 10
  672.         set(h_axes.h(11),'Units','Character','Position',h_axes.old_pos{11}), set(h_axes.h(11),'Units','Norm')
  673.     end
  674.     set(h,'Visible','On')
  675.     set(0,props.root)







  676. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% compute
  677. case 'compute'

  678.   errcode=11;
  679.   if length(method)>1 & strcmpi(method(1:2),'di')
  680.       disp('Warning: RQA from distance plot not possible!')
  681.       return
  682.   end
  683.   
  684.   if ~nogui
  685.     h_fig=findobj('tag','crqa_Fig');
  686.     setptr(gcf,'watch'),
  687.     obj=({'text';'crqa_m';'crqa_maxLag';'crqa_method';'crqa_eps';'crqa_lmin';'crqa_vmin';'crqa_theiler';'crqa_w';'crqa_ws';'crqa_button_store';'crqa_button_print';'crqa_button_close'});
  688.     for j=1:length(obj);
  689.         h=findobj('Tag',obj{j},'Parent',h_fig(1));
  690.         if ~isempty(h)
  691.           set(h,'Enable','Off')
  692.         end
  693.     end
  694.     h=findobj('tag','crqa_button_apply');
  695.     set(h(1),'ToolTip','Stops the computation.','String','Stop','Callback','set(0,''ShowHidden'',''on'');h=findobj(''tag'',''crqa_button_apply'');set(h(1),''String'',''Stopped'');set(0,''ShowHidden'',''off'')')
  696.   end

  697. if Nx==w & wstep<2, wstep=1; Nx=w+1; end
  698. if Nx==w, Nx=w+1; end
  699. if nogui~=2, hw=waitbar(0,['0/',num2str(Nx-w)]);set(hw,'Name','Please Wait!');h1=get(hw,'chil');h1=get(h1,'title'); drawnow; end
  700. if strcmpi(method,'Order Pattern') method = 'op'; end
  701. if strcmpi(method,'Order Matrx') method = 'om'; end
  702. if strcmpi(method,'Maximum Norm, fixed RR') method = 'rr'; end


  703. % check if plugin exist and is executable
  704. [plugin_exist, plugin_name, plugin_path] = is_crp_plugin;
  705. if nogui == 1 & plugin_exist & ( method_n < 4 | method_n == 8 ) & length(x) == length(y)
  706.     disp('(plugin used)')
  707. end

  708. errcode=20;

  709. % general histograms of line structures for significance test
  710. hist_l = []; hist_v = []; hist_w = [];

  711. for i=1:wstep:Nx-w;
  712.      if ~nogui
  713.          set(0,'ShowHidden','on')
  714.          h=findobj('tag','crqa_button_apply','Parent',h_fig(1));
  715.          if strcmpi(get(h(1),'string'),'stopped')
  716.               Y(i:Nx-w,1:6)=NaN;
  717.               break
  718.          end
  719.      end


  720.      if time_scale_flag
  721.         x_var=var(x(i:i+w-1,2:end)); y_var=var(y(i:i+w-1,2:end));
  722.         temp=cov(x(i:i+w-1,2:end),y(i:i+w-1,2:end));
  723.      else
  724.         x_var=var(x(i:i+w-1,1)); y_var=var(y(i:i+w-1,1));
  725.         temp=cov(x(i:i+w-1,1),y(i:i+w-1,1));
  726.      end
  727.      xy_var=temp(1,2);

  728.          
  729.      do_norm = {'non';'nor'};

  730.      % if plugin exist and method is MAX, MIN or EUC
  731.      if plugin_exist & ( method_n < 4 | method_n == 9 ) & length(x) == length(y)

  732.          errcode=21;
  733.          warning off
  734.          while 1
  735.              tmp_xdatafile = tempname;
  736.              if ~exist(tmp_xdatafile), break, end
  737.          end
  738.          while 1
  739.              tmp_ydatafile = tempname;
  740.              if ~exist(tmp_ydatafile), break, end
  741.          end
  742.          while 1
  743.              tmp_rqadatafile = tempname;
  744.              if ~exist(tmp_rqadatafile), break, end
  745.          end
  746.          
  747.          
  748.          x_tmp = x(i:i+w-1,:);
  749.          y_tmp = y(i:i+w-1,:);
  750.          
  751.          % save data in temporary file
  752.          save(tmp_xdatafile,'x_tmp','-ascii','-tabs');
  753.          save(tmp_ydatafile,'y_tmp','-ascii','-tabs');

  754.          % call extern rp programme
  755.          m_str = {'MAX', 'EUC', 'MIN', 'NR', 'RR', 'FAN', 'IN', 'OM', 'OP', 'EUC'};

  756.          [status ] = system([plugin_path,filesep,plugin_name,' -m ',num2str(m), ...
  757.                                        ' -t ',num2str(t), ...
  758.                                        ' -e ',num2str(e), ...
  759.                                        ' -n ',m_str{method_n}, ...
  760.                                        ' -w ',num2str(theiler_window), ...
  761.                                        ' -l ',num2str(lmin), ...
  762.                                        ' -v ',num2str(vmin), ...
  763.                                        ' -i ',tmp_xdatafile, ...
  764.                                        ' -j ',tmp_ydatafile, ...
  765.                                        ' -o ',tmp_rqadatafile, ...
  766.                                        ' -s']);
  767.          errcode=22;
  768.          % import RQA
  769.          rqa_in = [];
  770.          try
  771.              fid = fopen(tmp_rqadatafile,'r'); % open RQA data file
  772.              while 1
  773.                  dataStr = fgetl(fid); % read RQA data
  774.                  if ~ischar(dataStr), break, end % leave the loop if end of file
  775.                  if isempty(findstr(dataStr, '#')) % neglect comments line (e.g. header)
  776.                      rqa_in = str2num(dataStr); % import RQA measures into local variable rqa
  777.                  end
  778.              end
  779.              fclose(fid); % close RQA data file

  780.              RR = rqa_in(1);
  781.              DET = rqa_in(2);
  782.              LAM = rqa_in(4);
  783.              Lmax = rqa_in(6);
  784.              L = rqa_in(7);
  785.              ENTR = rqa_in(8);
  786.              Vmax = rqa_in(10);
  787.              TT = rqa_in(11);
  788.              t1 = rqa_in(13);
  789.              t2 = rqa_in(14);
  790.              RT = rqa_in(16);
  791.              RTmax = rqa_in(15);
  792.              RF = rqa_in(19);
  793.              ENTW = rqa_in(17);
  794.              warning off
  795.              delete(tmp_rqadatafile);
  796.              delete(tmp_xdatafile);
  797.              delete(tmp_ydatafile);
  798.              warning on
  799.          catch
  800.              warning off
  801.              delete(tmp_rqadatafile);
  802.              delete(tmp_xdatafile);
  803.              delete(tmp_ydatafile);
  804.              warning on
  805.          end

  806.          if nogui~=2 & ishandle(h1), set(h1,'str',[num2str(i),'/',num2str(Nx-w)]); waitbar(i/(Nx-w)); drawnow, end



  807.      % use builtin implementation
  808.      else
  809.      
  810.          errcode=25;
  811.          try
  812.              if ~flag_pdist
  813.                  if time_scale_flag
  814.                    if length(x(i:i+w-1,:)) > 2000
  815.                       X=crp_big(x(i:i+w-1,:),y(i:i+w-1,:),m,t,e,method,'nonorm','silent');
  816.                    else
  817.                       X=crp(x(i:i+w-1,:),y(i:i+w-1,:),m,t,e,method,'nonorm','silent');
  818.                    end
  819.                  else
  820.                    X=crp2(x(i:i+w-1,:),y(i:i+w-1,:),m,t,e,method,'nonorm','silent');
  821.                  end
  822.            %  X=crp(x(i:i+w-1,:),y(i:i+w-1,:),m,t,e,varargin{i_char},'silent');
  823.            else
  824.                %%%%%%%%%%%%
  825.                % alternative using pdist

  826.                xcor = @(x,y) sqrt(sum((repmat(x,size(y,1),1)-y).^2,2));

  827.                x_dist = pdist(x(i:i+w-1,:),xcor);
  828.                X = squareform(x_dist);
  829.            end
  830.            
  831.            %%%%%%%%%%%%
  832.            
  833.            warning off
  834.            if nogui~=2 & ishandle(h1), set(h1,'str',[num2str(i),'/',num2str(Nx-w)]); waitbar(i/(Nx-w)); drawnow, end

  835.          %if 0
  836.          catch
  837.              error(lasterr)
  838.              if nogui~=2 & ishandle(hw), close(hw), end
  839.          end

  840.          N=size(X);
  841.          if theiler_window > 0
  842.              X_theiler=double(triu(X,theiler_window))+double(tril(X,-theiler_window));
  843.          else
  844.              X_theiler=X;
  845.          end
  846.          errcode=26;

  847.          % compute recurrence times of 1st and 2nd type
  848.          if size(X_theiler,2) > 1000
  849.              t1=[];t2=[];
  850.              rps2=find(diff(double(X_theiler(:)))==1);
  851.              rps=find(X_theiler(:));
  852.              t1=diff(rps);
  853.              t2=diff(rps2);
  854.          else
  855.              t1 = []; t2 = [];
  856.              for i2=1:size(X_theiler,2)
  857.                  if nogui~=2 & (Nx-w < 2) & ~rem(i2,25), waitbar(i2/size(X_theiler,2)), end
  858.                  rps2=find(diff(double(X_theiler(:,i2)))==1);
  859.                  rps=find(X_theiler(:,i2));
  860.                  t1=[t1;diff(rps)];
  861.                  t2=[t2;diff(rps2)];
  862.              end
  863.          end
  864.          t1=mean(t1);
  865.          t2=mean(t2);

  866.          errcode=27;
  867.          [a b]=dl(X_theiler);
  868.          hist_l = [hist_l; b];
  869.          N_hist_l(i) = length(b);

  870.          warning off
  871.          errcode=271;
  872.          b(b<lmin)=[];
  873.          [c d dw]=tt(X_theiler);
  874.          hist_v = [hist_v; d];
  875.          hist_w = [hist_w; dw];         
  876.          N_hist_v(i) = length(d);
  877.          N_hist_w(i) = length(dw);
  878.          
  879.          warning off
  880.          errcode=272;
  881.          d(find(d<vmin))=[];

  882.          errcode=273;
  883.          N_all = (N(1)*N(2));
  884.          % reduce the number of possible states by the Theiler window;
  885.          % because the Theiler window is applied symmetrically (on the LOI)
  886.          % we only use N(1) and not N(2)
  887.          if theiler_window >= 1
  888.              N_all = N_all - N(1) - 2*((theiler_window-1)*N(1) - sum(1:(theiler_window-1)));
  889.          end
  890.          
  891.          RR=sum(X_theiler(:))/N_all;
  892.          %b(find(b>=max(N)-lmin))=[]; if isempty(b), b=0; end
  893.          if isempty(b), b=0; end
  894.          errcode=274;
  895.          if sum(X_theiler(:)) > 0
  896.            DET=sum(b)/sum(X_theiler(:));
  897.          else
  898.            DET=NaN;
  899.          end
  900.          errcode=275;
  901.          L=mean(b);
  902.          histL=hist(b(:),[1:min(N)]);
  903.          ENTR=entropy(histL(:));
  904.          errcode=276;
  905.          if sum(X_theiler(:))>0
  906.            LAM=sum(d)/sum(sum(X_theiler));
  907.          else
  908.            LAM=NaN;
  909.          end
  910.       
  911.          % recurrence times
  912.          RT = mean(dw);

  913.          [dwh dwi] = hist(dw,[1:max(dw)]);
  914.          if dwh
  915.              [dws dwsi] = sort(dwh);
  916.              RTp = dwi(dwsi(end)); % most probable recurrence time
  917.          else
  918.              RTp = 0;
  919.          end
  920.          RTmax = max(dw); % maximal recurrence time
  921.          RF = 1/RTmax; % minimal recurrence frequency
  922.          ENTW = entropy(dwh(:));

  923.          errcode=277;
  924.          TT=mean(d);
  925.          b=[b;0]; Lmax=max(b);
  926.          d=[d;0]; Vmax=max(d);
  927.          
  928.      end % end plugin
  929.   
  930.      warning on

  931.      errcode=28;
  932.      Y(i,1)=RR;
  933.      Y(i,2)=DET;
  934.      Y(i,3)=L;
  935.      Y(i,4)=Lmax;
  936.      Y(i,5)=ENTR;
  937.      Y(i,6)=LAM;
  938.      Y(i,7)=TT;
  939.      Y(i,8)=Vmax;
  940.      Y(i,9)=t1;
  941.      Y(i,10)=t2;
  942.      if undocumented
  943.          Y(i,11)=RT;
  944.          Y(i,12)=RTmax;
  945.          Y(i,13)=RF;
  946.          Y(i,14)=ENTW;
  947.      end
  948.      Y(i,15)=x_var;
  949.      Y(i,16)=y_var;
  950.      Y(i,17)=xy_var;
  951. end % end window loop

  952. % significance by bootstrap

  953. % nboot = 100;
  954. % nD = round(mean(N_hist_l(N_hist_l>0)));
  955. % nV = round(mean(N_hist_v(N_hist_v>0)));
  956. % nW = round(mean(N_hist_w(N_hist_w>0)));
  957. % for i = 1:nboot
  958. %       onesample = ceil(length(hist_l)*rand(length(hist_l),1));
  959. %       onesample = onesample(ceil(nD*rand(nD,1)));
  960. %       tmp = sum(hist_l(onesample,:) >= lmin )/ sum(hist_l(onesample,:));
  961. %       bootstatDET(i,:) = (tmp(:))';
  962. %       tmp = mean(hist_l(onesample,:) >= lmin);
  963. %       bootstatL(i,:) = (tmp(:))';
  964. %
  965. %       onesample = ceil(length(hist_v)*rand(length(hist_v),1));
  966. %       onesample = onesample(ceil(nV*rand(nV,1)));
  967. %       tmp = sum(hist_v(onesample,:) >= vmin )/ sum(hist_v(onesample,:));
  968. %       bootstatLAM(i,:) = (tmp(:))';
  969. %       tmp = mean(hist_v(onesample,:) >= vmin);
  970. %       bootstatTT(i,:) = (tmp(:))';
  971. %
  972. %       onesample = ceil(length(hist_w)*rand(length(hist_w),1));
  973. %       onesample = onesample(ceil(nW*rand(nW,1)));
  974. %       tmp = mean(hist_w(onesample,:));
  975. %       bootstatT2(i,:) = (tmp(:))';
  976. % end


  977. if ishandle(hw), waitbar(1); drawnow; close(hw), end % close waitbar

  978.   if ~nogui
  979.     h=findobj('tag','crqa_button_apply');
  980.     set(h(1),'ToolTip','Starts the computation.','String','Apply','Callback','crqa compute')
  981.     for j=1:length(obj);
  982.         h=findobj('Tag',obj{j},'Parent',h_fig(1));
  983.         if ~isempty(h)
  984.           set(h,'Enable','On')
  985.         end
  986.     end
  987.   end

  988.   if ~nogui,
  989.     h=findobj('Tag','crqa_Fig');
  990.     if ~isempty(h), set(0,'CurrentFigure',h(1)); end
  991.     setptr(gcf,'arrow'),
  992.   end

  993. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% plot
  994. if ~nogui
  995.     set(0,'showhidden','on')
  996.     errcode=30;
  997.     h=findobj('Tag','crqa_Fig'); if ~isempty(h), set(0,'CurrentFigure',h(1)); end
  998.     tx={'RR';'DET';'L';'ENTR';'LAM';'TT';'T_1';'T_2';'Variance';'Covariance'};
  999.     index=[1,2,3,5,6,7,9,10,15,16,17];
  1000.     tags={'crqa_axes_RR','crqa_axes_DET','crqa_axes_L','crqa_axes_ENTR','crqa_axes_LAM','crqa_axes_TT','crqa_axes_T1','crqa_axes_T2','crqa_axes_Var','crqa_axes_CoVar'};
  1001.     h=findobj('Tag','crqa_axes_RR','Parent',gcf); h_axes.h(1)=h(1);
  1002.     h=findobj('Tag','crqa_axes_DET','Parent',gcf); h_axes.h(2)=h(1);
  1003.     h=findobj('Tag','crqa_axes_L','Parent',gcf); h_axes.h(3)=h(1);
  1004.     h=findobj('Tag','crqa_axes_ENTR','Parent',gcf); h_axes.h(4)=h(1);
  1005.     h=findobj('Tag','crqa_axes_LAM','Parent',gcf); h_axes.h(5)=h(1);
  1006.     h=findobj('Tag','crqa_axes_TT','Parent',gcf); h_axes.h(6)=h(1);
  1007.     h=findobj('Tag','crqa_axes_T1','Parent',gcf); h_axes.h(7)=h(1);
  1008.     h=findobj('Tag','crqa_axes_T2','Parent',gcf); h_axes.h(8)=h(1);
  1009.     h=findobj('Tag','crqa_axes_Var','Parent',gcf); h_axes.h(9)=h(1);
  1010.     if ~all(x(:)==y(:)), h=findobj('Tag','crqa_axes_CoVar','Parent',gcf); h_axes.h(10)=h(1); end
  1011.    for i=1:9,
  1012.      set(gcf,'CurrentAxes',h_axes.h(i))
  1013.      if size(Y,1)==1
  1014.          cla
  1015.        text(0.5,0.5,sprintf('%6.4f',Y(index(i))),'FontWeight','bold','HorizontalAlign','Center')
  1016. %        if ~all(x(:)==y(:)) & i==9
  1017. %          cla
  1018. %              text(0.5,0.5,sprintf('%6.5f, %6.5f',Y(index(i)),Y(index(i+1))),'FontWeight','bold','HorizontalAlign','Center')
  1019. %              set(gcf,'CurrentAxes',h_axes.h(i+1));cla
  1020. %          set(h_axes.h(i+1),'visible','off');
  1021. %        end
  1022.      else
  1023.        if i==9
  1024.            cla
  1025.              h2=stairs(xscale(1:wstep:length(Y)),Y(1:wstep:end,index(i)));
  1026.              set(h2,'color',props.line.Color)
  1027.          if ~all(x(:)==y(:))
  1028.            set(gca,'Color','none')
  1029.            hold on; h2=stairs(xscale(1:wstep:length(Y)),Y(1:wstep:end,index(10)),'r');
  1030.            set(gcf,'CurrentAxes',h_axes.h(i+1));cla
  1031.            set(h_axes.h(10),'visible','on');
  1032.            
  1033.            h3=stairs(xscale(1:wstep:length(Y)),Y(1:wstep:end,index(11))); set(h3,'color',[0 .4 0]);
  1034.            ylabel(tx(i+1));
  1035.            set(h_axes.h(i+1),'Tag',tags{i+1},'Units','Norm','Color','none','YAxisLocation','right','YColor',[0 .4 0])
  1036.          end
  1037.        else
  1038.          plot(xscale(1:wstep:length(Y)),Y(1:wstep:end,index(i)),'color',props.line.Color)
  1039.        end
  1040.      end
  1041.      set(gcf,'CurrentAxes',h_axes.h(i));
  1042.      ylabel(tx(i));
  1043.      set(gca,'Tag',tags{i},'color',props.axes.Color,'Units','Norm')
  1044.    end
  1045.    h=findobj('Tag','crqa_button_store');
  1046.    set(h(1),'UserData',Y,'Enable','On')
  1047.    xlim = get(h_axes.h(9),'xlim');
  1048.    if length(Y(:,1)) > 1, set(h_crqa_axes_Data,'xlim',xlim), end
  1049.    if ~all(x(:)==y(:)) & length(Y(:,1)) == 1, set(h_axes.h(10),'visible','off'); delete(get(h_axes.h(10),'children')), end
  1050. else
  1051.   if nargout, xout=Y(:,argout_index); end
  1052. end

  1053. if nargout, xout=Y(:,argout_index); end


  1054. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% the end

  1055. end




  1056. %if 0
  1057. catch
  1058.   if nogui~=2, if ishandle(hw), close(hw), end , end
  1059.       
  1060.   z=whos;x=lasterr;y=lastwarn;in=varargin{1};
  1061.   print_error('crqa',z,x,y,in,method,action)
  1062.   try, if ~nogui
  1063.     h=findobj('tag','crqa_button_apply');
  1064.     set(h(1),'ToolTip','Starts the computation.','String','Apply','Callback','crqa compute')
  1065.     for j=1:length(obj);
  1066.         h=findobj('Tag',obj{j},'Parent',h_fig(1));
  1067.         if ~isempty(h)
  1068.           set(h,'Enable','On')
  1069.         end
  1070.     end, end
  1071.   end
  1072.   set(0,'showhidden','on')
  1073.     h=findobj('Tag','crqa_Fig'); if ~isempty(h), setptr(h(1),'arrow'); end
  1074.   set(0,'showhidden','off')
  1075. end


  1076. try, set(0,props.root), end



  1077. try
  1078.   set(0,'ShowHidden','off')
  1079. end
复制代码


新手

7 麦片

财富积分


050


2

主题

6

帖子

0

最佳答案
 楼主| 发表于 2019-3-16 15:25:40 | 显示全部楼层
自己顶一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表