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

📄 rri_getsubject_ui.m

📁 绝对经典,老外制作的功能强大的matlab实现PLS_TOOBOX
💻 M
📖 第 1 页 / 共 3 页
字号:
        set(slider_hdl,'Enable','On'); 
    else
        slider_hdl = findobj(gcf,'Tag','sliderCondition');
        set(slider_hdl,'Enable','Off'); 
    end

    return;						% DisplayConditions


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%   UpdateSlider: Set slider's (Min, Max, Value, Sliderstep) based on
%	how many rows of image files.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function UpdateSlider()

    top_cond_idx = getappdata(gcf,'top_cond_idx');
    num_cond = length(getappdata(gcf, 'subj_files_row'));

    rows = getappdata(gcf,'NumRows');
    total_rows = num_cond + 1;		% so, Max-Min = total_rows - 1
    slider_hdl = findobj(gcf,'Tag','sliderCondition');

    if (num_cond ~= 0)			% don't need to update when no cond
        set(slider_hdl, 'Min', 1, 'Max', total_rows, ...
		'Value', total_rows - top_cond_idx + 1, ...
		'Sliderstep', [1/(total_rows-1)-0.00001, 1/(total_rows-1)]); 
    end
   
    return;						% UpdateSlider


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%   MoveSlider: Respond to move slider action by changing the top index
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function MoveSlider()

    slider_hdl = findobj(gcf,'Tag','sliderCondition');
    slider_value = round(get(slider_hdl,'Value'));

    total_rows = round(get(slider_hdl,'Max'));

	% when slider_value = 1, top_cond_idx will be total_rows
	%
    top_cond_idx = total_rows - slider_value + 1;	% see above fcn
    setappdata(gcf,'top_cond_idx',top_cond_idx);
    DisplayConditions(0);

    return;						% MoveSlider


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%   UpdateDirectoryList: Respond to go into subdirectory
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function UpdateDirectoryList()

    listed_dir = get(gcbo,'String');
    selected_dir_idx = get(gcbo,'Value');

    if length(selected_dir_idx) > 1
       chksubj = getappdata(gcf,'chksubj');

       if chksubj
          set(findobj(gcf,'Tag','chkSubjConsistency'),'enable','on');
       end

       selected_dir_name = {listed_dir{selected_dir_idx}};
    else
       % set(findobj(gcf,'Tag','chkSubjConsistency'),'enable','off');
       selected_dir_name = listed_dir{selected_dir_idx};
       % selected_dir = [getappdata(gcf,'selected_dir') filesep selected_dir_name];
    end

    h = findobj(gcf,'Tag','editSelectedDir');

    if length(selected_dir_idx) > 1
        selected_dir_name = char(selected_dir_name);
        grp_selected_dir = [get(h,'String') filesep];
        grp_selected_dir = repmat(grp_selected_dir,[length(selected_dir_idx),1]);
        grp_selected_dir = [grp_selected_dir selected_dir_name];
        grp_selected_dir = (cellstr(grp_selected_dir))';

        setappdata(gcf,'grp_selected_dir',grp_selected_dir);
        return;
    end

    selected_dir = [get(h,'String') filesep selected_dir_name];

    %  go into subdirectory
    %
    try
        cd (selected_dir);
    catch
        msg = 'ERROR: Cannot access the directory';
        set(findobj(gcf,'Tag','MessageLine'),'String',msg);
        return;
    end

    if isempty(pwd)
        selected_dir = filesep;
    else
        selected_dir = pwd;
    end

    dir_struct = dir(selected_dir);
    if isempty(dir_struct)
        % msg = 'ERROR: Directory not found!';
        msg1 = 'Cannot find directory "';
        msg2 = '", please enter full path.';
        msg = [msg1,selected_dir,msg2];
        set(findobj(gcf,'Tag','MessageLine'),'String',msg);
        return;
    end

	% preserve old mouse pointer, and make current pointer as 'Busy'
	% it is useful to execute slow process
	%
    old_pointer = get(gcf,'Pointer');
    set(gcf,'Pointer','watch');

    if (sum([dir_struct.isdir]) < 3)		% could be no subdir

        set(gcbo,'max',2);
        dir_list = dir_struct(find([dir_struct.isdir] == 1));

        if (dir_list(1).name == '.' & dir_list(2).name == '..')		% no subdir

            set(gcbo,'Value',selected_dir_idx);

            setappdata(gcf,'selected_dir', selected_dir);
            setappdata(gcf,'duplicate_img',0);

            saved_map = getappdata(gcf,'saved_map');

            % preload saved_map list when reach no subdir situation


            if isempty(saved_map)		% create saved_map list

               num_dir = size(listed_dir,1);
               for i = 3:num_dir

                  selected_dir2 = [get(h,'String') filesep listed_dir{i}];
                  ListDirectory(selected_dir2,0);
                  set(gcbo,'user',i);

                  if i == 3
                     SetupSubjectImageMap(1,0);
                  end

                  SetupSubjectImageMap(1,3);
               end

               ListDirectory(selected_dir,0);
               set(gcbo,'user',get(gcbo,'value'));
               SetupSubjectImageMap(1,3);

            else				% just display subject file

               set(gcbo,'user',get(gcbo,'value'));
               SetupSubjectImageMap(0,0);

            end

            DisplayConditions(0);

            %msg = 'INFO: No more subdirectory.';
            %set(findobj(gcf,'Tag','MessageLine'),'String',msg);

            set(gcf,'Pointer',old_pointer);
            return;

        end

    else

        set(gcbo,'max',1);
        setappdata(gcf,'saved_map',{});		% clean saved subj map list

    end

    setappdata(gcf,'selected_dir', selected_dir);

    h = findobj(gcf,'Tag','editSelectedDir');
    set(h,'String',selected_dir);

    ListDirectory(selected_dir,1);
    setappdata(gcf,'duplicate_img',0);

    SetupSubjectImageMap(0,0);
    DisplayConditions(0);

    set(gcf,'Pointer',old_pointer);
    return;					% UpdateDirectoryList


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%   UpdateImageFilter: Respond to modifying Image Filter Edit
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function UpdateImageFilter()

    imgfile_filter = get(findobj(gcf,'Tag','editImageFilter'),'String');
    setappdata(gcf,'imgfile_filter', imgfile_filter);

    selected_dir = getappdata(gcf,'selected_dir');
    ListDirectory(selected_dir,1);

    setappdata(gcf,'duplicate_img',0);
    setappdata(gcf,'saved_map',{});		% clean saved subj map list
    SetupSubjectImageMap(0,0);
    DisplayConditions(0);

    return;					% UpdateImageFilter


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%   UpdateSelectedDir: Respond to modifying Selected Directory Edit
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function UpdateSelectedDir()

    selected_dir = get(findobj(gcf,'Tag','editSelectedDir'),'String');
    setappdata(gcf,'selected_dir',selected_dir);
    ListDirectory(selected_dir,1);

    setappdata(gcf,'duplicate_img',0);
    setappdata(gcf,'saved_map',{});		% clean saved subj map list
    SetupSubjectImageMap(0,0);
    DisplayConditions(0);

    return;					% UpdateSelectedDir


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%   select_imagefile: Respond to the selection of Image File combo box
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function select_imagefile

    h1 = findobj(gcf,'Tag','listDirs');
    selected_dir_idx = get(h1,'Value');
    listed_dir = get(h1,'String');

    %  Can't select subject file while selecting multiple subject directories
    %
    if length(selected_dir_idx) > 1

        msg = 'For this action, please select one directory only.';
        set(findobj(gcf,'Tag','MessageLine'),'String',msg);
        return;

    end

    setappdata(gcf,'duplicate_img',0);		% reset. added for 'done' check

    subj_files_row = getappdata(gcf, 'subj_files_row');
    imgfile_hdls = getappdata(gcf, 'imgfile_hlist');

    imgfile_filter = getappdata(gcf, 'imgfile_filter');
    selected_dir = getappdata(gcf, 'selected_dir');

    row_idx = get(gcbo, 'UserData');
    cond_idx = str2num(get(imgfile_hdls(row_idx, 1), 'String'));

    %  get new subject order from dialog box generated by rri_getfile1
    %
    subject_file = rri_getfile1('Select a Subject', ...
	selected_dir, imgfile_filter, get(gcbo, 'string'));

    if isempty(subject_file)
        return;
    end

    set(gcbo,'string',subject_file);

    subj_files_row{cond_idx} = subject_file;
    setappdata(gcf, 'subj_files_row', subj_files_row);

    %  update saved map with current subject file order
    %
    saved_map = getappdata(gcf,'saved_map');
    saved_map{selected_dir_idx} = subj_files_row;

    num_dir = size(listed_dir,1);
    h2 = findobj(gcf,'Tag','editSelectedDir');

    setappdata(gcf,'saved_map',saved_map);		% save subj map list

    if get(findobj(gcf,'Tag','chkSubjConsistency'),'value')

       %  update all saved map, using the above subject order as sample
       %
       for i = 3:num_dir
           selected_dir2 = [get(h2,'String') filesep listed_dir{i}];
           ListDirectory(selected_dir2,0);
           set(h1,'user',i);
           SetupSubjectImageMap(1,selected_dir_idx);
       end

       %  update current set_files_row (inside SetupSubjectImageMap)
       %
       ListDirectory(selected_dir,0);
       h1 = findobj(gcf,'Tag','listDirs');
       set(h1,'user',get(h1,'value'));
       SetupSubjectImageMap(1,selected_dir_idx);

    end

    return;					% select_imagefile


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%   DoneButtonPressed: Respond to the DONE button. This is the place
%	to check all user entry, and make sure there is no mistake.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function DoneButtonPressed()

    num_subj_init = getappdata(gcf,'num_subj_init');
    subj_files = getappdata(gcf,'subj_files');

    h = findobj(gcf,'Tag','listDirs');
    selected_dir_idx = get(h,'Value');

    %  the following block executed when user choose multiple subjects
    %
    if length(selected_dir_idx) > 1

       saved_map = getappdata(gcf,'saved_map');
       saved_map = saved_map([selected_dir_idx]);

       first_select = char(saved_map{1});
       first_select = lower(first_select(:,num_subj_init+1:end));

       %  combine cell to make it look like 'subj_files' field in session_info
       %
       subj_files_row = {};

       for i=1:length(saved_map)

          if get(findobj(gcf,'Tag','chkSubjConsistency'),'value')

             curr_select = char(saved_map{i});
             curr_select = lower(curr_select(:,num_subj_init+1:end));

             if ~isequal(curr_select,first_select)
                msg = 'Subject file name convention is not consistent.';
                set(findobj(gcf,'Tag','MessageLine'),'String',msg);
                return;
              end
          end

          subj_files_row = [subj_files_row saved_map{i}];
       end

       selected_dir = getappdata(gcf,'grp_selected_dir');


       condnum = size(subj_files_row, 1);
       subjnum = size(subj_files_row, 2);

       for i = 1:condnum-1
          for j = i+1:condnum
             for n = 1:subjnum
                if length(subj_files_row{i,n}) == length(subj_files_row{j,n}) ...
			& subj_files_row{i,n} == subj_files_row{j,n}
                   setappdata(gcf,'duplicate_img', 1);
                   msg = 'ERROR: No subject should be duplicated.';
                   set(findobj(gcf,'Tag','MessageLine'),'String',msg);
                   return;
                end
             end
          end
       end    

       setappdata(gcf,'selected_dir',selected_dir);
       setappdata(gcf,'subj_files_row',subj_files_row);

       uiresume;

    end

    if(isempty(getappdata(gcf,'filtered_files')))   % no image file available
        msg = 'ERROR: No subject file in the selected directory.';
        set(findobj(gcf,'Tag','MessageLine'),'String',msg);
        return;
    end

    subj_files_row = getappdata(gcf, 'subj_files_row');
    condnum = length(subj_files_row);

    for i = 1:condnum-1
        for j = i+1:condnum

            if isempty(subj_files_row{i}) | isempty(subj_files_row{j})
                msg = 'ERROR: All condition need a subject.';
                set(findobj(gcf,'Tag','MessageLine'),'String',msg);
                return;
            end

            if length(subj_files_row{i}) == length(subj_files_row{j}) ...
				& subj_files_row{i} == subj_files_row{j}
                setappdata(gcf,'duplicate_img', 1);
                msg = 'ERROR: No subject should be duplicated.';
                set(findobj(gcf,'Tag','MessageLine'),'String',msg);
                return;
            end

        end
    end    

    if get(findobj(gcf,'Tag','chkSubjConsistency'),'value') & ...
	~isempty(subj_files)

       first_select = char(subj_files(:, 1));
       first_select = lower(first_select(:,num_subj_init+1:end));

       curr_select = char(subj_files_row(:, 1));
       curr_select = lower(curr_select(:,num_subj_init+1:end));

       if ~isequal(curr_select,first_select)
          msg = 'Subject file name convention is not consistent.';
          set(findobj(gcf,'Tag','MessageLine'),'String',msg);
          return;
        end
    end

    if(getappdata(gcf,'duplicate_img'))
        msg = 'ERROR: No subject should be duplicated.';
        set(findobj(gcf,'Tag','MessageLine'),'String',msg);
    else
        uiresume;
    end

    return;					% DoneButtonPressed


%----------------------------------------------------------------------------
function delete_fig

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

       getsubject_pos = get(gcbf,'position');

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

    return;

⌨️ 快捷键说明

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