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

📄 erp_analysis_ui.m

📁 绝对经典,老外制作的功能强大的matlab实现PLS_TOOBOX
💻 M
📖 第 1 页 / 共 5 页
字号:
   full_path = getappdata(gcf,'full_path');
   DisplayGroupProfiles(full_path);

   UpdateSlider;

   return;						% SelectGroupProfiles


%----------------------------------------------------------------------------
function MoveSlider()

   slider_hdl = findobj(gcf,'Tag','GroupSlider');
   curr_value = round(get(slider_hdl,'Value'));
   total_rows = round(get(slider_hdl,'Max'));

   top_group_idx = total_rows - curr_value + 1;

   setappdata(gcf,'TopGroupIdx',top_group_idx);

   full_path = getappdata(gcf,'full_path');
   DisplayGroupProfiles(full_path);

   return;						% MoveSlider


%----------------------------------------------------------------------------
function UpdateSlider()

   top_group_idx = getappdata(gcf,'TopGroupIdx');
   rows = getappdata(gcf,'NumRows');

   curr_group_profiles = getappdata(gcf,'CurrGroupProfiles');
   num_groups = length(curr_group_profiles);

   total_rows = num_groups + 1;
   slider_hdl = findobj(gcf,'Tag','GroupSlider');

   if (total_rows > 1)           % don't need to update when no group
       set(slider_hdl,'Min',1,'Max',total_rows, ...
                  'Value',total_rows-top_group_idx+1, ...
                  'Sliderstep',[1/(total_rows-1)-0.00001 1/(total_rows-1)]);
   end;

   return;                                              % UpdateSlider


%----------------------------------------------------------------------------
function ShowSlider()

   slider_hdl = findobj(gcf,'Tag','GroupSlider');
   set(slider_hdl,'visible','on'); 

   return;						% ShowSlider


%----------------------------------------------------------------------------
function HideSlider()

   slider_hdl = findobj(gcf,'Tag','GroupSlider');
   set(slider_hdl,'visible','off');

   return;						% HideSlider


%----------------------------------------------------------------------------
function SelectMean;

   if get(findobj(gcf,'Tag','SelectMean'),'Value') == 0		% click itself
      set(findobj(gcf,'Tag','SelectMean'),'Value',1);
   else
%      set(findobj(gcf,'Tag','SelectHelmert'),'Value',0);
      set(findobj(gcf,'Tag','SelectContrastData'),'Value',0);
      set(findobj(gcf,'Tag','SelectBehavData'),'Value',0);
      set(findobj(gcf,'Tag','SelectMultiblockData'),'Value',0);

      set(findobj(gcf,'Tag','ContrastFileEdit'),'BackGroundColor',[0.9 0.9 0.9]);
      set(findobj(gcf,'Tag','ContrastDataLabel'),'Enable','off');
      set(findobj(gcf,'Tag','ContrastFileEdit'),'Enable','off');
      set(findobj(gcf,'Tag','ContrastFileButton'),'Enable','off');

      set(findobj(gcf,'Tag','PosthocDataEdit'),'BackGroundColor',[0.9 0.9 0.9]);
      set(findobj(gcf,'Tag','ModifyBehavdataMenu'),'Enable','off');
      set(findobj(gcf,'Tag','PosthocDataLabel'),'Enable','off');
      set(findobj(gcf,'Tag','PosthocDataEdit'),'Enable','off');
      set(findobj(gcf,'Tag','PosthocDataBn'),'Enable','off');

      set(findobj(gcf,'Tag','ClimEdit'),'BackGroundColor',[0.9 0.9 0.9]);
      set(findobj(gcf,'Tag','ClimLabel'),'Enable','off');
      set(findobj(gcf,'Tag','ClimEdit'),'Enable','off');
      set(findobj(gcf,'Tag','MultiblockDeselectConditionMenu'),'Enable','off');
   end

   return;						% SelectMean


%----------------------------------------------------------------------------
function SelectHelmert;

   if get(findobj(gcf,'Tag','SelectHelmert'),'Value') == 0	% click itself
      set(findobj(gcf,'Tag','SelectHelmert'),'Value',1);
   else
      set(findobj(gcf,'Tag','SelectMean'),'Value',0);
      set(findobj(gcf,'Tag','SelectContrastData'),'Value',0);
      set(findobj(gcf,'Tag','SelectBehavData'),'Value',0);
      set(findobj(gcf,'Tag','SelectMultiblockData'),'Value',0);

      set(findobj(gcf,'Tag','ContrastFileEdit'),'BackGroundColor',[0.9 0.9 0.9]);
      set(findobj(gcf,'Tag','ContrastDataLabel'),'Enable','off');
      set(findobj(gcf,'Tag','ContrastFileEdit'),'Enable','off');
      set(findobj(gcf,'Tag','ContrastFileButton'),'Enable','off');

      set(findobj(gcf,'Tag','PosthocDataEdit'),'BackGroundColor',[0.9 0.9 0.9]);
      set(findobj(gcf,'Tag','ModifyBehavdataMenu'),'Enable','off');
      set(findobj(gcf,'Tag','PosthocDataLabel'),'Enable','off');
      set(findobj(gcf,'Tag','PosthocDataEdit'),'Enable','off');
      set(findobj(gcf,'Tag','PosthocDataBn'),'Enable','off');

      set(findobj(gcf,'Tag','ClimEdit'),'BackGroundColor',[0.9 0.9 0.9]);
      set(findobj(gcf,'Tag','ClimLabel'),'Enable','off');
      set(findobj(gcf,'Tag','ClimEdit'),'Enable','off');
      set(findobj(gcf,'Tag','MultiblockDeselectConditionMenu'),'Enable','off');
   end

   return;						% SelectHelmert


%----------------------------------------------------------------------------
function SelectContrastData;

   if get(findobj(gcf,'Tag','SelectContrastData'),'Value') == 0	% click itself
      set(findobj(gcf,'Tag','SelectContrastData'),'Value',1);
   else
      set(findobj(gcf,'Tag','SelectMean'),'Value',0);
%      set(findobj(gcf,'Tag','SelectHelmert'),'Value',0);
      set(findobj(gcf,'Tag','SelectBehavData'),'Value',0);
      set(findobj(gcf,'Tag','SelectMultiblockData'),'Value',0);

      set(findobj(gcf,'Tag','PosthocDataEdit'),'BackGroundColor',[0.9 0.9 0.9]);
      set(findobj(gcf,'Tag','ModifyBehavdataMenu'),'Enable','off');
      set(findobj(gcf,'Tag','PosthocDataLabel'),'Enable','off');
      set(findobj(gcf,'Tag','PosthocDataEdit'),'Enable','off');
      set(findobj(gcf,'Tag','PosthocDataBn'),'Enable','off');

      set(findobj(gcf,'Tag','ContrastFileEdit'),'BackGroundColor',[1 1 1]);
      set(findobj(gcf,'Tag','ContrastDataLabel'),'Enable','on');
      set(findobj(gcf,'Tag','ContrastFileEdit'),'Enable','on');
      set(findobj(gcf,'Tag','ContrastFileButton'),'Enable','on');

      set(findobj(gcf,'Tag','ClimEdit'),'BackGroundColor',[0.9 0.9 0.9]);
      set(findobj(gcf,'Tag','ClimLabel'),'Enable','off');
      set(findobj(gcf,'Tag','ClimEdit'),'Enable','off');
      set(findobj(gcf,'Tag','MultiblockDeselectConditionMenu'),'Enable','off');
   end

   return;						% SelectContrastData


%----------------------------------------------------------------------------
function SelectBehavData;

   if get(findobj(gcf,'Tag','SelectBehavData'),'Value') == 0	% click itself
      set(findobj(gcf,'Tag','SelectBehavData'),'Value',1);
   else
      set(findobj(gcf,'Tag','SelectMean'),'Value',0);
%      set(findobj(gcf,'Tag','SelectHelmert'),'Value',0);
      set(findobj(gcf,'Tag','SelectContrastData'),'Value',0);
      set(findobj(gcf,'Tag','SelectMultiblockData'),'Value',0);

      set(findobj(gcf,'Tag','ContrastFileEdit'),'BackGroundColor',[0.9 0.9 0.9]);
      set(findobj(gcf,'Tag','ContrastDataLabel'),'Enable','off');
      set(findobj(gcf,'Tag','ContrastFileEdit'),'Enable','off');
      set(findobj(gcf,'Tag','ContrastFileButton'),'Enable','off');

      set(findobj(gcf,'Tag','PosthocDataEdit'),'BackGroundColor',[1 1 1]);
      set(findobj(gcf,'Tag','ModifyBehavdataMenu'),'Enable','on');
      set(findobj(gcf,'Tag','PosthocDataLabel'),'Enable','on');
      set(findobj(gcf,'Tag','PosthocDataEdit'),'Enable','on');
      set(findobj(gcf,'Tag','PosthocDataBn'),'Enable','on');

      num_boot = str2num(get(findobj(gcf,'Tag','NumBootstrapEdit'),'String'));
      if  ~isempty(num_boot) & num_boot ~= 0
         set(findobj(gcf,'Tag','ClimEdit'),'BackGroundColor',[1 1 1]);
         set(findobj(gcf,'Tag','ClimLabel'),'Enable','on');
         set(findobj(gcf,'Tag','ClimEdit'),'Enable','on');
      end

      set(findobj(gcf,'Tag','MultiblockDeselectConditionMenu'),'Enable','off');
   end

   return;						% SelectBehavData


%----------------------------------------------------------------------------
function SelectMultiblockData;

   if get(findobj(gcf,'Tag','SelectMultiblockData'),'Value') == 0	% click itself
      set(findobj(gcf,'Tag','SelectMultiblockData'),'Value',1);
   else
      set(findobj(gcf,'Tag','SelectMean'),'Value',0);
      set(findobj(gcf,'Tag','SelectBehavData'),'Value',0);
      set(findobj(gcf,'Tag','SelectContrastData'),'Value',0);

      set(findobj(gcf,'Tag','ContrastFileEdit'),'BackGroundColor',[0.9 0.9 0.9]);
      set(findobj(gcf,'Tag','ContrastDataLabel'),'Enable','off');
      set(findobj(gcf,'Tag','ContrastFileEdit'),'Enable','off');
      set(findobj(gcf,'Tag','ContrastFileButton'),'Enable','off');

      set(findobj(gcf,'Tag','PosthocDataEdit'),'BackGroundColor',[1 1 1]);
      set(findobj(gcf,'Tag','ModifyBehavdataMenu'),'Enable','on');
      set(findobj(gcf,'Tag','PosthocDataLabel'),'Enable','on');
      set(findobj(gcf,'Tag','PosthocDataEdit'),'Enable','on');
      set(findobj(gcf,'Tag','PosthocDataBn'),'Enable','on');

      num_boot = str2num(get(findobj(gcf,'Tag','NumBootstrapEdit'),'String'));
      if  ~isempty(num_boot) & num_boot ~= 0
         set(findobj(gcf,'Tag','ClimEdit'),'BackGroundColor',[1 1 1]);
         set(findobj(gcf,'Tag','ClimLabel'),'Enable','on');
         set(findobj(gcf,'Tag','ClimEdit'),'Enable','on');
      end

      set(findobj(gcf,'Tag','MultiblockDeselectConditionMenu'),'Enable','on');
   end

   return;						% SelectMultiblockData


%----------------------------------------------------------------------------
function EditNumBoot

   %  contain behavpls
   %
   if get(findobj(gcf,'Tag','SelectBehavData'),'Value') == 1 | ...
	get(findobj(gcf,'Tag','SelectMultiblockData'),'Value') == 1

      num_boot = str2num(get(findobj(gcf,'Tag','NumBootstrapEdit'),'String'));
      if  ~isempty(num_boot) & num_boot ~= 0
         set(findobj(gcf,'Tag','ClimEdit'),'BackGroundColor',[1 1 1]);
         set(findobj(gcf,'Tag','ClimLabel'),'Enable','on');
         set(findobj(gcf,'Tag','ClimEdit'),'Enable','on');
      else
         set(findobj(gcf,'Tag','ClimEdit'),'BackGroundColor',[0.9 0.9 0.9]);
         set(findobj(gcf,'Tag','ClimLabel'),'Enable','off');
         set(findobj(gcf,'Tag','ClimEdit'),'Enable','off');
      end
   end

   return;						% EditNumBoot


%----------------------------------------------------------------------------
function SwitchFullPath()

   h = findobj(gcf,'Tag','FullPathChkbox');
   full_path = get(h,'Value');

   setappdata(gcf,'full_path',full_path);
   DisplayGroupProfiles(full_path);

   return;					% SwitchFullPath


%----------------------------------------------------------------------------
function status = SavePLSOptions

   status = -1;
   setappdata(gcf,'PLSoptions',[]);

   %  profiles
   %
   curr_profiles = getappdata(gcf,'CurrGroupProfiles');
   num_groups = length(curr_profiles);

   if num_groups == 0
      msg = 'ERROR: Datamat group is not specified.';
      set(findobj(gcf,'Tag','MessageLine'),'String',msg);
      return;
   end

   save_datamat = get(findobj(gcf,'Tag','SaveDatamatChkbox'),'Value');
   ismean = get(findobj(gcf,'Tag','SelectMean'),'Value');
   ishelmert = 0; % get(findobj(gcf,'Tag','SelectHelmert'),'Value');
   iscontrast = get(findobj(gcf,'Tag','SelectContrastData'),'Value');
   isbehav = get(findobj(gcf,'Tag','SelectBehavData'),'Value');
   ismultiblock = get(findobj(gcf,'Tag','SelectMultiblockData'),'Value');

   PLSoptions.save_datamat = save_datamat;
   PLSoptions.cond_selection = getappdata(gcf,'cond_selection');
   PLSoptions.behavname = getappdata(gcf,'behavname');
   PLSoptions.behavdata = getappdata(gcf,'behavdata');
   PLSoptions.behavdata_lst = getappdata(gcf,'behavdata_lst');
   PLSoptions.bscan = getappdata(gcf,'bscan');
   if isempty(PLSoptions.bscan)
      PLSoptions.bscan = 1:sum(PLSoptions.cond_selection);
   end

   PLSoptions.ismean = ismean;
   PLSoptions.ishelmert = ishelmert;
   PLSoptions.iscontrast = iscontrast;
   PLSoptions.isbehav = isbehav;
   PLSoptions.ismultiblock = ismultiblock;

   %  Check data integrity for behavdata & contrastdata
   %
   PLSoptions.profiles = cell(1,num_groups);
   num_behavdata_col = 99999;
   num_contrastdata_col = 99999;

   for i=1:num_groups

      PLSoptions.profiles{i} = curr_profiles{i};
      load(curr_profiles{i},'session_info');

      behavdata = session_info.behavdata;
      contrastdata = session_info.contrastdata;

      if (isbehav | ismultiblock) & isempty(PLSoptions.behavdata_lst) & isempty(behavdata)
         msg = ['ERROR: Behavior data is required'];
         set(findobj(gcf,'Tag','MessageLine'),'String',msg);
         return;
      elseif (isbehav | ismultiblock) & ~isempty(PLSoptions.behavdata_lst)  % behavdata input from run
         num_behavdata_col = size(PLSoptions.behavdata_lst{1},2);
         setappdata(gcf,'num_selected_behav',num_behavdata_col);
      elseif isbehav | ismultiblock					% behavdata from session
         tmp_col = size(behavdata,2);
         if tmp_col < num_behavdata_col
            num_behavdata_col = tmp_col;
         end
      end	% if isbehav & ...

%      if iscontrast & isempty(contrastdata)
 %        msg = ['ERROR: Contrast data is required'];
  %       set(findobj(gcf,'Tag','MessageLine'),'String',msg);
   %      return;
    %  elseif iscontrast
%         tmp_col = size(contrastdata,2);
 %        if tmp_col < num_contrastdata_col
  %          num_contrastdata_col = tmp_col;
   %      end
    %  end	% if iscontrast & ...

   end		% for i=1:num_groups

   if ~isfield(session_info,'system')
      session_info.system.class = 1;
      session_info.system.type = 1;
   end

   PLSoptions.system = session_info.system;
   PLSoptions.ContrastFile = get(findobj(gcf,'tag','ContrastFileEdit'),'string');

   if iscontrast == 1
      if isempty(PLSoptions.ContrastFile)
         msg = 'ERROR: Contrast file is not specified.';
         set(findobj(gcf,'Tag','MessageLine'),'String',msg);
         return;
      else

         try
            use_contrast = load(PLSoptions.ContrastFile);
            cond_selection = getappdata(gcf,'cond_selection');
            load(curr_profiles{1},'selected_conditions');

            selected_conditions_idx = find(selected_conditions);
            new_cond_selection = zeros(1, length(selected_conditions));
            new_cond_selection(selected_conditions_idx(find(cond_selection))) = 1;

            if size(use_contrast,1) ~= sum(new_cond_selection)*num_groups
                msg = 'ERROR: incompetible number of condition in contrast.';
                set(findobj(gcf,'Tag','MessageLine'),'String',msg);
                return;
            end
         catch
             msg = 'ERROR: cannot load the contrast file.';
             set(findobj(gcf,'Tag','MessageLine'),'String',msg);
             return;
         end;

         %  check if the contrast matrix is rank deficient
         %
         if (rank(use_contrast) ~= size(use_contrast,2))
            msg = 'Your Contrast matrix is rank deficient. Please check your contrasts and run the program again';
            uiwait(msgbox(msg,'Warning: Contrasts are not linear independent','modal'));
%            set(findobj(gcf,'Tag','MessageLine'),'String',msg);
%            return;	
         end;

         %  check if the contrast matrix is orthogonal
         %
%         if abs(sum(sum(use_contrast'*use_contrast-diag(diag(use_contrast'*use_contrast))))) > 1e-6
         check_orth = abs(triu(use_contrast'*use_contrast) - tril(use_contrast'*use_contrast));
         if max(check_orth(:)) > 1e-6
            msg = 'Effects expressed by each contrast are not independent. Check variable lvintercorrs in result file to see overlap of effects between LVs';
            uiwait(msgbox(msg,'Warning: Contrasts are not orthogonal','modal'));
%            set(findobj(gcf,'Tag','MessageLine'),'String',msg);
%            return;	
         end

      end
   end;

   % make sure the profile name not duplicate etc.
   %
   setappdata(gcf,'PLSoptions',PLSoptions);
   total_profiles = ValidateProfiles(PLSoptions.profiles);

   if (total_profiles == -1)
      return;
   end;

   PLSoptions.TotalNumberProfiles = total_profiles;

%   if (iscontrast == 0)				% if not use contrastdata
      PLSoptions.ContrastDataCol = 1;
 %  else						% if use contrastdata
  %    PLSoptions.ContrastDataCol = 1:num_contrastdata_col;
   %end

   if (isbehav == 0 & ismultiblock == 0)		% if not use behavdata
      PLSoptions.BehavDataCol = 1;
      PLSoptions.posthoc = [];
   else						% if use behavdata

      %  behav data column selection
      %
      %h = findobj(gcf,'Tag','BehavDataColEdit');
      %PLSoptions.BehavDataCol = str2num(get(h,'String'));

⌨️ 快捷键说明

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