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

📄 fmri_session_profile_ui.m

📁 绝对经典,老外制作的功能强大的matlab实现PLS_TOOBOX
💻 M
📖 第 1 页 / 共 4 页
字号:
%      msg = sprintf('One condition onsets is empty across run.');
      msg = sprintf('onset field should not be empty.');
      set(findobj(gcf,'Tag','MessageLine'),'String',['ERROR: ', msg]);
      return;
   end


   if session_info.across_run
      session_info.num_conditions = session_info.num_conditions0;
      session_info.condition = session_info.condition0;
      session_info.condition_baseline = session_info.condition_baseline0;
   else
      session_info.num_conditions = session_info.num_runs * session_info.num_conditions0;

      for i = 1:session_info.num_runs
         for j = 1:session_info.num_conditions0
            session_info.condition{ (i-1)*session_info.num_conditions0 + j } = ...
		[ 'Run' num2str(i) session_info.condition0{j} ];
         end
      end

      session_info.condition_baseline = ...
	repmat(session_info.condition_baseline0, [session_info.num_runs 1]);
      session_info.condition_baseline = session_info.condition_baseline';
      session_info.condition_baseline = [session_info.condition_baseline(:)]';
   end

   setappdata(gcf,'SessionNumConditions',session_info.num_conditions);
   setappdata(gcf,'SessionConditions',session_info.condition);
   setappdata(gcf,'SessionConditionBaseline',session_info.condition_baseline);


   if (save_as_flag ~= 0) | isempty(session_file)
      [filename, pathname] = ...
           uiputfile([session_info.datamat_prefix '_fMRIsession.mat'], ...
		'Save the PLS session information');

      if isequal(filename,0)
         return;
      end;

      if ~rri_chkfname(filename, 'fMRI', 'session')
         msg = ['File name must be ended with _fMRIsession.mat'];
         set(findobj(gcf,'Tag','MessageLine'),'String',['ERROR: ', msg]);
         return;
      end

      session_file = [pathname, filename];
   else
      [pathname, filename] = rri_fileparts(session_file);
   end;

   create_ver = plsgui_vernum;

   try
      save (session_file, 'session_info','create_ver');
   catch
      msg = sprintf('Cannot save session information to ''%s'' ',filename);
      set(findobj(gcf,'Tag','MessageLine'),'String',['ERROR: ', msg]);
      return;
   end;

   [fpath, fname, fext] = fileparts(session_file);
   msg = sprintf('Session information has been saved into ''%s'' ',[fname, fext]);
   set(findobj(gcf,'Tag','MessageLine'),'String',msg);
   setappdata(gcf,'SessionFile',session_file);
   setappdata(gcf,'OldSessionInfo',session_info);
   setappdata(gcf,'SessionRunInfo',session_info.run)

   set(gcf,'Name',['Session File: ' session_file]);
   set(findobj(gcf,'Tag','STDDatamatMenu'),'enable','on');
   set(findobj(gcf,'Tag','ModifyBehavMenu'),'enable','on');
   set(findobj(gcf,'Tag','PathPLSsessionMenu'),'enable','on');

   status = 1;

   msg1 = ['WARNING: Do not change file name manually in command window.'];
   uiwait(msgbox(msg1,'File has been saved'));

   return;						% SaveSessionInfo


%----------------------------------------------------------------------------
function status = CloseSessionInput()

   if (ChkModified == 0)
        status = 0;
        return;			% error
   end;

   status = 1;
   return;						% CloseSessionInput


%----------------------------------------------------------------------------
function ShowSessionInfo()

   h = findobj(gcf,'Tag','SessionDescriptionEdit'); 
   set(h,'String',getappdata(gcf,'SessionDescription'));

   h = findobj(gcf,'Tag','PLSDataDirectoryEdit'); 
   set(h,'String',getappdata(gcf,'SessionPLSDir'));

   h = findobj(gcf,'Tag','DatamatPrefixEdit'); 
   set(h,'String',getappdata(gcf,'SessionDatamatPrefix'));

   num_conds = getappdata(gcf,'SessionNumConditions0');
   h = findobj(gcf,'Tag','NumberConditionsEdit'); 
   set(h,'String',num_conds);

   if (num_conds <= 0),
     set(findobj(gcf,'Tag','MergeConditionsMenu'),'Enable','off');
   else
     set(findobj(gcf,'Tag','MergeConditionsMenu'),'Enable','on');
   end;

   num_runs = getappdata(gcf,'SessionNumRuns');
   h = findobj(gcf,'Tag','NumberRunsEdit'); 
   if (num_runs <= 0)
     set(h,'String','0');
     set(findobj(gcf,'Tag','NumberRunsButton'),'Enable','off');
   else
     set(h,'String',num2str(num_runs));
     set(findobj(gcf,'Tag','NumberRunsButton'),'Enable','on');
   end;

   h1 = findobj(gcf,'Tag','MergeDataAcrossRunsButton'); 
   h2 = findobj(gcf,'Tag','MergeDataWithinRunButton'); 
   if getappdata(gcf,'SessionAcrossRun')
      set(h1,'value',1);
      set(h2,'value',0);
   else
      set(h1,'value',0);
      set(h2,'value',1);
   end

   return;						% ShowSessionInfo


%----------------------------------------------------------------------------
function EditPLSDataDir

   pls_dir = deblank(strjust(get(gcbo,'String'),'left')); 
   set(gcbo,'String',pls_dir);
   
   %  
   if ( exist(pls_dir,'dir') == 7 ) 	   % specified directory exists
      setappdata(gcf,'SessionPLSDir',pls_dir);
      return;
   end;

   if ( exist(pls_dir,'file') == 2 )	   % it is a file!
      msg = 'ERROR: The specified direcotry is a file!';
      set(findobj(gcf,'Tag','MessageLine'),'String',msg);
      return;
   end;

   %   the directory does not exist, how about the parent directory ?
   %
   [fpath,fname,fext] = fileparts(pls_dir);

   if ( exist(fpath,'dir') == 7 ) 	   % parent directory exists
      dlg_title = 'PLS Directory';
      msg = 'The directory does not exist.  Do you want to create it?';
      response = questdlg(msg,dlg_title,'Yes','No','Yes');

      switch response,
         case 'Yes',
            status = mkdir(fpath,[fname fext]);
            if (status ~= 1)
              msg = sprintf('ERROR: Directory cannot be created');
              set(findobj(gcf,'Tag','MessageLine'),'String',msg);
            end;
	    cd (fpath);
         case 'No',
            set(gcbo,'String','');
      end; 
   else   
      msg = 'ERROR: Invalid input direcotry!'; 
      set(findobj(gcf,'Tag','MessageLine'),'String',msg);
   end;

   return;						% EditPLSDataDir

%----------------------------------------------------------------------------
function SelectPLSDataDir

   h = findobj(gcf,'Tag','PLSDataDirectoryEdit');
 
   pls_data_dir = rri_getdirectory({get(h,'String')});

   if ~isempty(pls_data_dir),
       set(h,'String',pls_data_dir); 
       set(h,'TooltipString',pls_data_dir); 
       setappdata(gcf,'SessionPLSDir',pls_data_dir);
   end;

   return;						% SelectPLSDataDir


%----------------------------------------------------------------------------
function EditConditions()

   condition0 = getappdata(gcf,'SessionConditions0');
   condition_baseline0 = getappdata(gcf,'SessionConditionBaseline0');
   num_conditions0 = getappdata(gcf,'SessionNumConditions0');

   run_info = getappdata(gcf,'SessionRunInfo');


   % determine which conditions that cannot be removed as onsets are defined
   % for some of the runs
   %
   used_conditions = zeros(1,num_conditions0);
   for i=1:length(run_info),
         cond_idx = find(used_conditions == 0);
         for j=1:length(cond_idx),
            if ~isempty(run_info(i).evt_onsets{cond_idx(j)}),
               used_conditions(cond_idx(j)) = 1;
            end;
         end;
   end;
   protected_cond = []; % find(used_conditions == 1);

   % edit the names of the conditions 
   %
   [new_condition0,new_condition_baseline0,removed_condition_idx] = ...
        fmri_input_condition_ui(condition0,condition_baseline0,protected_cond);

   % remove the deleted conditions from the runs
   %
   keep_conditions = ones(1,num_conditions0);
   keep_conditions(removed_condition_idx) = 0;
   cond_idx = find(keep_conditions == 1);

   for i=1:length(run_info),
      new_onsets = cell(1,length(new_condition0));
      new_onsets(1:length(cond_idx)) = run_info(i).evt_onsets(cond_idx);  
      run_info(i).evt_onsets = new_onsets;
   end;

   num_conds = num2str(length(new_condition0));
   set(findobj(gcf,'Tag','NumberConditionsEdit'),'String',num_conds);

   if (num_conds <= 0),
     set(findobj(gcf,'Tag','MergeConditionsMenu'),'Enable','off');
   else
     set(findobj(gcf,'Tag','MergeConditionsMenu'),'Enable','on');
   end;

   setappdata(gcf,'SessionConditions0',new_condition0);
   setappdata(gcf,'SessionConditionBaseline0',new_condition_baseline0);
   setappdata(gcf,'SessionNumConditions0',length(new_condition0));
   setappdata(gcf,'SessionRunInfo',run_info);

   return;						% EditConditions

%----------------------------------------------------------------------------
function MergeConditions()

   condition = getappdata(gcf,'SessionConditions0');
   cond_baseline = getappdata(gcf,'SessionConditionBaseline0');
   num_conditions = getappdata(gcf,'SessionNumConditions0');

   run_info = getappdata(gcf,'SessionRunInfo');

   merged_conds = fmri_merge_condition_ui(condition);

   if isempty(merged_conds) 			% cancel merging 
      return;
   end;

   %  update the condition names
   %
   num_new_conditions = length(merged_conds);
   unmatch_cond = [];			% conditions that cond_baseline can not match
   for i=1:num_new_conditions,
      new_condition{i} = merged_conds(i).name;
      idx = merged_conds(i).cond_idx;
      new_cond_baseline{i} = cond_baseline{idx(1)};

      %  compare the cond_baseline consistency for merged_cond
      if length(merged_conds(i).cond_idx) > 1
         same_baseline = 1;
         for j = 2:length(idx)
            if ~isequal(cond_baseline{idx(1)}, cond_baseline{idx(j)})
               same_baseline = 0;
            end
         end
         if ~same_baseline
            unmatch_cond = [unmatch_cond, ' ', new_condition{i}];
            new_cond_baseline{i} = [0 1];
         end
      end
   end;

   if ~isempty(unmatch_cond)
%      msg = ['WARNING: The [ref_scan_onset,num_ref_scan] in condition', unmatch_cond];
      msg = ['WARNING: The [ref_scan_onset,num_ref_scan] in some new conditions'];
      msg = [msg, ' has been reset to [0,1].'];
      set(findobj(gcf,'Tag','MessageLine'),'String',msg);
   end

   %  update the onsets for the new conition
   %
   for i=1:length(run_info),
      old_onsets = run_info(i).evt_onsets;

      new_onsets = cell(1,num_new_conditions);

      for j=1:num_new_conditions,
         c_idx = merged_conds(j).cond_idx;

         merge_onsets = [];
         for k=c_idx
            merge_onsets = [merge_onsets; old_onsets{k}];
         end

         new_onsets{j} = sort(merge_onsets);
      end;
      run_info(i).evt_onsets = new_onsets;
   end;

   h = findobj(gcf,'Tag','NumberConditionsEdit');
   set(h,'String',num2str(num_new_conditions));

   setappdata(gcf,'SessionConditions0',new_condition);
   setappdata(gcf,'SessionNumConditions0',num_new_conditions);
   setappdata(gcf,'SessionConditionBaseline0',new_cond_baseline);
   setappdata(gcf,'SessionRunInfo',run_info);

   return;						% MergeConditions


%----------------------------------------------------------------------------
function EditRunNumber()

   num_runs = str2num(get(gcbo,'String'));

   if isempty(num_runs) | (num_runs <= 0) 
      set(gcbo,'String','');
      h = findobj(gcf,'Tag','NumberRunsButton');
      set(h,'Enable','off');
      return;
   end;

   h = findobj(gcf,'Tag','NumberRunsButton');
   set(h,'Enable','on');
   setappdata(gcf,'SessionNumRuns',num_runs);

   return;						% EditRunNumber


%----------------------------------------------------------------------------
function EditRuns()

   if (getappdata(gcf,'SessionNumConditions0') <= 0);
      msg = 'ERROR: Cannot edit run information without defining the conditions first';
      set(findobj(gcf,'Tag','MessageLine'),'String',msg);
      return;
   end

   run_info = getappdata(gcf,'SessionRunInfo');
   num_runs = getappdata(gcf,'SessionNumRuns');
   conditions0 = getappdata(gcf,'SessionConditions0');

   [new_run_info,new_num_runs] = fmri_input_run_ui(run_info,num_runs,conditions0);

   if ~isempty(new_run_info),
      setappdata(gcf,'SessionRunInfo',new_run_info);

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

⌨️ 快捷键说明

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