⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 erp_bs_option_ui.m

📁 绝对经典,老外制作的功能强大的matlab实现PLS_TOOBOX
💻 M
📖 第 1 页 / 共 2 页
字号:
   set(h_min_ratio, 'string', sprintf('%8.5f', bs_field{1}.min_ratio));
   set(h_max_ratio, 'string', sprintf('%8.5f', bs_field{1}.max_ratio));

   setappdata(h01,'bs_option_fig',h01);
   setappdata(h01,'bs_ratio',bs_ratio);
   setappdata(h01,'h_bs_edit',h_bs_edit);
   setappdata(h01,'h_bs_disp',h_bs_disp);
   setappdata(h01,'h_p_value',h_p_value);
   setappdata(h01,'h_thresh',h_thresh);
   setappdata(h01,'h_min_ratio',h_min_ratio);
   setappdata(h01,'h_max_ratio',h_max_ratio);

   setappdata(h01,'bs_selection',getappdata(h0,'bs_selection'));
   setappdata(h01,'bs_field',bs_field);

   return;					%  init


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%   select_all: select all the boot straps
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function select_all

   h_bs_disp = getappdata(gcf, 'h_bs_disp');
   bs_selection = 1 : size(get(h_bs_disp, 'string'), 1);
   set(h_bs_disp, 'value', bs_selection);

   return					% select_all


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%   select_lv: select lv to edit
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function select_lv

   h_p_value = getappdata(gcf,'h_p_value');
   h_thresh = getappdata(gcf,'h_thresh');
   h_min_ratio = getappdata(gcf,'h_min_ratio');
   h_max_ratio = getappdata(gcf,'h_max_ratio');

   lv_idx = get(gco,'value');
   bs_field = getappdata(gcf,'bs_field');

   set(h_p_value, 'string', sprintf('%8.5f', bs_field{lv_idx}.p_value));
   set(h_thresh, 'string', sprintf('%8.5f', bs_field{lv_idx}.thresh));
   set(h_min_ratio, 'string', sprintf('%8.5f', bs_field{lv_idx}.min_ratio));
   set(h_max_ratio, 'string', sprintf('%8.5f', bs_field{lv_idx}.max_ratio));

   return;					% select_lv


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%   edit_thresh: edit threshold field
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function edit_thresh

   h_bs_edit = getappdata(gcf,'h_bs_edit');
   h_p_value = getappdata(gcf,'h_p_value');
   h_thresh = getappdata(gcf,'h_thresh');
   h_min_ratio = getappdata(gcf,'h_min_ratio');
   h_max_ratio = getappdata(gcf,'h_max_ratio');

   bs_field = getappdata(gcf,'bs_field');
   lv_idx = get(h_bs_edit,'value');
   thresh = str2num(get(h_thresh,'string'));
   min_ratio = str2num(get(h_min_ratio,'string'));
   max_ratio = str2num(get(h_max_ratio,'string'));

   if isempty(max_ratio) | isempty(min_ratio) | isempty(thresh) ...
      | (abs(max_ratio) < thresh) | (abs(min_ratio) < thresh)

      msg = 'Invalid Threshold Value';
      set(findobj(gcf,'Tag','MessageLine'),'String',['ERROR: ', msg]);
      set(h_thresh, 'string', sprintf('%8.5f', bs_field{lv_idx}.thresh));
      return;

   end

   %  update p_value
   %
   bs_ratio = getappdata(gcf,'bs_ratio');
   p_value = UpdatePValue(bs_ratio, lv_idx, thresh);
   set(h_p_value, 'string', sprintf('%8.5f', p_value));

   %  update bs_field
   %
   set(h_thresh, 'string', sprintf('%8.5f', thresh));
   bs_field = getappdata(gcf,'bs_field');
   bs_field{lv_idx}.thresh = thresh;
   bs_field{lv_idx}.p_value = p_value;
   setappdata(gcf, 'bs_field', bs_field);

   return;					% edit_thresh


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%   edit_min_ratio: edit minimum bootstrap ratio field to display
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function edit_min_ratio

   h_bs_edit = getappdata(gcf,'h_bs_edit');
   h_p_value = getappdata(gcf,'h_p_value');
   h_thresh = getappdata(gcf,'h_thresh');
   h_min_ratio = getappdata(gcf,'h_min_ratio');
   h_max_ratio = getappdata(gcf,'h_max_ratio');

   bs_field = getappdata(gcf,'bs_field');
   lv_idx = get(h_bs_edit,'value');
   thresh = str2num(get(h_thresh,'string'));
   min_ratio = str2num(get(h_min_ratio,'string'));
   max_ratio = str2num(get(h_max_ratio,'string'));

   if isempty(max_ratio) | isempty(min_ratio) | isempty(thresh) ...
      | (abs(max_ratio) < thresh) | (abs(min_ratio) < thresh)

      msg = 'Invalid Minimum Ratio Value';
      set(findobj(gcf,'Tag','MessageLine'),'String',['ERROR: ', msg]);
      set(h_min_ratio,'string',sprintf('%8.5f',bs_field{lv_idx}.min_ratio));
      return;

   end

   %  update bs_field
   %
   set(h_min_ratio, 'string', sprintf('%8.5f', min_ratio));
   bs_field = getappdata(gcf,'bs_field');
   bs_field{lv_idx}.min_ratio = min_ratio;
   setappdata(gcf, 'bs_field', bs_field);

   return;					% edit_min_ratio


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%   edit_max_ratio: edit maximum bootstrap ratio field to display
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function edit_max_ratio

   h_bs_edit = getappdata(gcf,'h_bs_edit');
   h_p_value = getappdata(gcf,'h_p_value');
   h_thresh = getappdata(gcf,'h_thresh');
   h_min_ratio = getappdata(gcf,'h_min_ratio');
   h_max_ratio = getappdata(gcf,'h_max_ratio');

   bs_field = getappdata(gcf,'bs_field');
   lv_idx = get(h_bs_edit,'value');
   thresh = str2num(get(h_thresh,'string'));
   min_ratio = str2num(get(h_min_ratio,'string'));
   max_ratio = str2num(get(h_max_ratio,'string'));

   if isempty(max_ratio) | isempty(min_ratio) | isempty(thresh) ...
      | (abs(max_ratio) < thresh) | (abs(min_ratio) < thresh)

      msg = 'Invalid Maximum Ratio Value';
      set(findobj(gcf,'Tag','MessageLine'),'String',['ERROR: ', msg]);
      set(h_max_ratio,'string',sprintf('%8.5f',bs_field{lv_idx}.max_ratio));
      return;

   end

   %  update bs_field
   %
   set(h_max_ratio, 'string', sprintf('%8.5f', max_ratio));
   bs_field = getappdata(gcf,'bs_field');
   bs_field{lv_idx}.max_ratio = max_ratio;
   setappdata(gcf, 'bs_field', bs_field);

   return;					% edit_max_ratio


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%   reset_bs_fields: reset bootstrap values to their default values
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function reset_bs_fields

   h_bs_edit = getappdata(gcf,'h_bs_edit');
   h_p_value = getappdata(gcf,'h_p_value');
   h_thresh = getappdata(gcf,'h_thresh');
   h_min_ratio = getappdata(gcf,'h_min_ratio');
   h_max_ratio = getappdata(gcf,'h_max_ratio');

   bs_ratio = getappdata(gcf,'bs_ratio');
   bs_field = set_bs_fields(bs_ratio);
   lv_idx = get(h_bs_edit,'value');
   thresh = bs_field{lv_idx}.thresh;
   p_value = bs_field{lv_idx}.p_value;
   min_ratio = bs_field{lv_idx}.min_ratio;
   max_ratio = bs_field{lv_idx}.max_ratio;

   %  update bs_field
   %
   set(h_thresh, 'string', sprintf('%8.5f', thresh));
   set(h_p_value, 'string', sprintf('%8.5f', p_value));
   set(h_min_ratio, 'string', sprintf('%8.5f', min_ratio));
   set(h_max_ratio, 'string', sprintf('%8.5f', max_ratio));
   setappdata(gcf, 'bs_field', bs_field);

   return;					% reset_bs_fields


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%   set initial bootstrap field
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function bs_field = set_bs_fields(bs_ratio)

   bs_field = [];

   if isempty(bs_ratio)			% no bootstrap data -> return;
      return;
   end

   lv_num = size(bs_ratio,2);

   bs95 = percentile(bs_ratio, 95);

   for lv_idx = 1:lv_num

      bs_value.min_ratio = min(bs_ratio(:,lv_idx));
      bs_value.max_ratio = max(bs_ratio(:,lv_idx));

      %  find 95 percentile as initial threshold
      %
      bs_value.thresh = bs95(lv_idx);
      bs_value.p_value = UpdatePValue(bs_ratio, lv_idx, bs_value.thresh);

      bs_field{lv_idx} = bs_value;
   end

   return;					% set_bs_fields


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%   p_value is updated whenever threshold or LV index is changed
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function p_value = UpdatePValue(bs_ratio, lv_idx, thresh)

   curr_bs_ratio = bs_ratio(:,lv_idx);
   curr_bs_ratio = curr_bs_ratio(find(isnan(curr_bs_ratio) == 0));

   idx = find(abs(curr_bs_ratio) < std(curr_bs_ratio) * 5); % avoid the outliers
   std_ratio = std(curr_bs_ratio(idx));

   p_value = ratio2p(thresh,0,1);	%std_ratio);

   return;					% UpdatePValue


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%   calculate p_value, based on threshold (x) and ratio std (sigma)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function  p_value = ratio2p(x,mu,sigma)

   p_value = (1 + erf( (x - mu) / (sqrt(2)*sigma))) / 2;
   p_value = (1 - p_value) * 2;

   return;					% ratio2p


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%   click_ok
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function click_ok

   h01 = gcbf;
   h0 = getappdata(h01,'main_fig');
   datamat_file = getappdata(h0,'datamat_file');  % get filename for setting
   view_option = getappdata(h0,'view_option');
   setting = getappdata(h0,'setting');
   bsr = getappdata(h0,'bs_ratio');
   bs_amplitude = getappdata(h0,'bs_amplitude');
   [ti, ch, lv] = size(bs_amplitude);
   bs_amplitude = [];

   % listbox value are taken now, no callback fcn for listbox
   %
   bs_selection = get(getappdata(h01,'h_bs_disp'),'value') - 1;
   if ~isempty(bs_selection)
      setappdata(h01,'bs_selection', bs_selection);
   end

   % collecting setting that may have been changed by callback fcn
   %
   setting.bs_selection = getappdata(h01,'bs_selection');
   setting.bs_field = getappdata(h01,'bs_field');

   old_setting = getappdata(h0, 'setting');

   if isequal(setting,old_setting)		%  nothing was changed
      close(h01);
      return;
   end

   try
      switch view_option
         case {2}
            setting2 = setting;
            save(datamat_file, '-append', 'setting2');
         case {3}
            setting3 = setting;
            save(datamat_file, '-append', 'setting3');
      end
   catch
      msg = 'Cannot save setting information';
      set(findobj(h01,'Tag','MessageLine'),'String',['ERROR: ', msg]);
      return;
   end;

   for i = 1:size(bsr,2)

      too_large = find(bsr > (setting.bs_field{i}.max_ratio));
      bsr(too_large) = setting.bs_field{i}.max_ratio;

      too_small = find(bsr < (setting.bs_field{i}.min_ratio));
      bsr(too_small) = setting.bs_field{i}.min_ratio;

      bs_amplitude(:,i) = (abs(bsr(:,i)) >= (setting.bs_field{i}.thresh));

   end

   bs_amplitude = reshape(bs_amplitude, [ti, ch, lv]);

   setappdata(h0,'bs_amplitude',bs_amplitude);
   setappdata(h0,'bs_selection',setting.bs_selection);
   setappdata(h0,'bs_field',setting.bs_field);

   setappdata(h0,'setting',setting);
   setappdata(h0, 'init_option',[]);		% means need to redraw

   close(h01);

   old_pointer0 = get(h0,'pointer');
   set(h0,'pointer','watch');

   erp_showplot_ui(h0);

   set(h0,'pointer',old_pointer0);

   return;					% click_ok


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%   delete_fig
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function delete_fig

   try
      load('pls_profile');
      pls_profile = which('pls_profile.mat');

      erp_bs_option_pos = get(gcbf,'position');

      save(pls_profile, '-append', 'erp_bs_option_pos');
   catch
   end

   return;


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -