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

📄 bfm_session_profile_ui.m

📁 绝对经典,老外制作的功能强大的matlab实现PLS_TOOBOX
💻 M
📖 第 1 页 / 共 3 页
字号:
   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).blk_onsets(cond_idx);  
      run_info(i).blk_onsets = new_onsets;

      if isfield(run_info(i),'blk_length') & ...
            ~isempty(run_info(i).blk_length)
         new_length = cell(1,length(new_condition0));
         new_length(1:length(cond_idx)) = run_info(i).blk_length(cond_idx); 
         run_info(i).blk_length = new_length;
      end
   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).blk_onsets;
      new_onsets = cell(1,num_new_conditions);
      idx_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} idx_onsets{j}] = sort(merge_onsets);
      end;
      run_info(i).blk_onsets = new_onsets;

      if isfield(run_info(i),'blk_length') & ...
            ~isempty(run_info(i).blk_length)
         old_length = run_info(i).blk_length;
         new_length = cell(1,num_new_conditions);
         for j=1:num_new_conditions,
            c_idx = merged_conds(j).cond_idx;

            merge_length = [];
            for k=c_idx
               merge_length = [merge_length; old_length{k}];
            end

            new_length{j} = merge_length(idx_onsets{j});
         end;
         run_info(i).blk_length = new_length;
      end
   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] = bfm_input_run_ui(run_info,num_runs,conditions0);

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

      h = findobj(gcf,'Tag','NumberRunsEdit'); 
      set(h,'String',num2str(new_num_runs));
      setappdata(gcf,'SessionNumRuns',new_num_runs);
   end;
   
   return;						% EditRuns


%----------------------------------------------------------------------------
function EditDatamatPrefix

   datamat_prefix = deblank(strjust(get(gcbo,'String'),'left')); 
   set(gcbo,'String',datamat_prefix);

   if ~isempty(findstr(datamat_prefix,' '));
      msg = sprintf('ERROR: Datamat prefix cannot contain any space');
      set(findobj(gcf,'Tag','MessageLine'),'String',msg);
      return;
   end;

   setappdata(gcf,'SessionDatamatPrefix',datamat_prefix);

   return;						% EditDatamatPrefix


%----------------------------------------------------------------------------
function status = ChkModified()
% Output:
%          status = 0, error
% 	   status = 1, ok

   status = 1;

   [session_info,session_file,old_session_info] = GetSessionInfo;

   if (isequal(session_info,old_session_info) == 0),
      dlg_title = 'Session Information has been changed';
      msg = 'WARNING: The session information has been changed.  Do you want to save it?';
      response = questdlg(msg,dlg_title,'Yes','No','Cancel','Yes');

      switch response,
         case 'Yes'
 	      status = SaveSessionInfo;		
         case 'Cancel'
 	      status = 0;
         case 'No'
 	      status = 2;
      end; 
   end;

   return;						% ChkModified


%----------------------------------------------------------------------------
function SetSessionInfo(session_info,session_file)

   setappdata(gcf,'SessionDescription',session_info.description);
   setappdata(gcf,'SessionDatamatPrefix',session_info.datamat_prefix);
   setappdata(gcf,'SessionPLSDir',session_info.pls_data_path);
   setappdata(gcf,'SessionNumConditions',session_info.num_conditions);
   setappdata(gcf,'SessionConditions',session_info.condition);
   setappdata(gcf,'SessionNumRuns',session_info.num_runs);
   setappdata(gcf,'SessionRunInfo',session_info.run);

   if ~isfield(session_info,'across_run')
      session_info.across_run = 1;
   end

   setappdata(gcf,'SessionAcrossRun',session_info.across_run);

   if ~isfield(session_info,'condition_baseline')
      session_info.condition_baseline = {};
      for i=1:session_info.num_conditions
         session_info.condition_baseline=[session_info.condition_baseline, ...
                                                {[0 1]}];
      end
   end

   setappdata(gcf,'SessionConditionBaseline',session_info.condition_baseline);

   if ~isfield(session_info,'num_conditions0')
      session_info.num_conditions0 = session_info.num_conditions;
   end

   setappdata(gcf,'SessionNumConditions0',session_info.num_conditions0);

   if ~isfield(session_info,'condition0')
      session_info.condition0 = session_info.condition;
   end

   setappdata(gcf,'SessionConditions0',session_info.condition0);

   if ~isfield(session_info,'condition_baseline0')
      session_info.condition_baseline0 = session_info.condition_baseline;
   end

   setappdata(gcf,'SessionConditionBaseline0',session_info.condition_baseline0);

   if ~isfield(session_info,'behavname_all')
      session_info.behavname_all = {};
      session_info.behavdata_all = [];
   end
   setappdata(gcf,'SessionBehavNameAll',session_info.behavname_all);
   setappdata(gcf,'SessionBehavDataAll',session_info.behavdata_all);

   if ~isfield(session_info,'behavname_each')
      session_info.behavname_each = {};
      session_info.behavdata_each = [];
   end
   setappdata(gcf,'SessionBehavNameEach',session_info.behavname_each);
   setappdata(gcf,'SessionBehavDataEach',session_info.behavdata_each);

   if ~isfield(session_info,'behavname_all_single')
      session_info.behavname_all_single = {};
      session_info.behavdata_all_single = [];
   end
   setappdata(gcf,'SessionBehavNameAllSingle',session_info.behavname_all_single);
   setappdata(gcf,'SessionBehavDataAllSingle',session_info.behavdata_all_single);

   if ~isfield(session_info,'behavname_each_single')
      session_info.behavname_each_single = {};
      session_info.behavdata_each_single = [];
   end
   setappdata(gcf,'SessionBehavNameEachSingle',session_info.behavname_each_single);
   setappdata(gcf,'SessionBehavDataEachSingle',session_info.behavdata_each_single);

   setappdata(gcf,'OldSessionInfo',session_info);
   setappdata(gcf,'SessionFile',session_file);

   if isempty(session_file)
      set(gcf,'Name','New Blocked fMRI Session Information');
   else
      set(gcf,'Name',['Session File: ' session_file]);
   end;

   return;						% SetSessionInfo


%----------------------------------------------------------------------------
function [session_info,session_file,old_session_info] = GetSessionInfo(),

   session_info.description = getappdata(gcf,'SessionDescription');
   session_info.pls_data_path = getappdata(gcf,'SessionPLSDir');
   session_info.datamat_prefix = getappdata(gcf,'SessionDatamatPrefix');
   session_info.num_conditions = getappdata(gcf,'SessionNumConditions');
   session_info.condition = getappdata(gcf,'SessionConditions');
   session_info.condition_baseline = getappdata(gcf,'SessionConditionBaseline');
   session_info.num_conditions0 = getappdata(gcf,'SessionNumConditions0');
   session_info.condition0 = getappdata(gcf,'SessionConditions0');
   session_info.condition_baseline0 = getappdata(gcf,'SessionConditionBaseline0');
   session_info.num_runs = getappdata(gcf,'SessionNumRuns');
   session_info.run = getappdata(gcf,'SessionRunInfo');
   session_info.across_run = getappdata(gcf,'SessionAcrossRun');
   session_info.behavname_all = getappdata(gcf,'SessionBehavNameAll');
   session_info.behavdata_all = getappdata(gcf,'SessionBehavDataAll');
   session_info.behavname_each = getappdata(gcf,'SessionBehavNameEach');
   session_info.behavdata_each = getappdata(gcf,'SessionBehavDataEach');
   session_info.behavname_all_single = getappdata(gcf,'SessionBehavNameAllSingle');
   session_info.behavdata_all_single = getappdata(gcf,'SessionBehavDataAllSingle');
   session_info.behavname_each_single = getappdata(gcf,'SessionBehavNameEachSingle');
   session_info.behavdata_each_single = getappdata(gcf,'SessionBehavDataEachSingle');

   session_file = getappdata(gcf,'SessionFile');
   old_session_info = getappdata(gcf,'OldSessionInfo');

   return;						% GetSessionInfo


%----------------------------------------------------------------------------
function CreateDatamat(),

   %  make sure the session information has been saved
   %
   [session_info,session_file,old_session_info] = GetSessionInfo;

   if isempty(session_file) | isequal(session_info,old_session_info) == 0

       status = ChkModified;

       session_file = getappdata(gcf,'SessionFile');

       if isempty(session_file)
          % status = 2;
          return;
       end

       if (status == 0)
          return;
       elseif (status == 2)
          msg1 = 'ERROR: Please save the session information';
          msg =  [msg1 ' before creating the datamat.'];

          set(findobj(gcf,'Tag','MessageLine'),'String',msg);
          return;
       end
   end;

   all_onsets = [session_info.run(:).blk_onsets];
   all_onsets = reshape(all_onsets, [session_info.num_conditions0 length(all_onsets)/session_info.num_conditions0]);

   all_length = [session_info.run(:).blk_length];
   all_length = reshape(all_length, [session_info.num_conditions0 length(all_length)/session_info.num_conditions0]);

   if ~isequal(cellfun('length',all_onsets),cellfun('length',all_length))
      msg = 'ERROR: Number of onsets and length are not match';

      set(findobj(gcf,'Tag','MessageLine'),'String',msg);
      return;
   end

   empty_cond_across_run = 0;
   any_empty_cond_within_run = 0;

   for i = 1:size(all_onsets,1)
      empty_cond_within_run = 0;

      for j = 1:size(all_onsets,2)
         if isequal(all_onsets(i,j),{-1})
            empty_cond_within_run = empty_cond_within_run + 1;
            any_empty_cond_within_run = 1;
         end
      end

      if isequal(size(all_onsets,2),empty_cond_within_run)
         empty_cond_across_run = 1;
         break;
      end
   end

   if empty_cond_across_run
      msg = 'ERROR: At least one condition has no onset for all the runs';

      set(findobj(gcf,'Tag','MessageLine'),'String',msg);
      return;
   end

   if ~session_info.across_run & any_empty_cond_within_run
      msg = 'ERROR: There is a condition without onset while merging data within each run';

      set(findobj(gcf,'Tag','MessageLine'),'String',msg);
      return;
   end




   num_runs = getappdata(gcf,'SessionNumRuns');

   data_path = session_info.run(1).data_path;
   img_file = session_info.run(1).data_files{1};
   try
      dims = rri_imginfo(fullfile(data_path,img_file));
      num_slices = dims(3); 
   catch
      msg = sprintf('ERROR: Cannot access the image file: %s',img_file);
      set(findobj(gcf,'Tag','MessageLine'),'String',msg);
      return;
   end;

   bfm_create_datamat_ui(session_file,num_runs,num_slices);

   return;						% CreateDatamat


%------------------------------------------------------------------------------
function delete_fig()
    if (CloseSessionInput == 1);
        uiresume
    end

    return


%----------------------------------------------------------------------------
function PathSessionInfo(init_flag)
%  init_flag = 0  for clear operation
%  init_flag = 1  for initialization
%

   if (init_flag == 0 & ChkModified == 0)
      return;			% error
   end;

   old_session_info = getappdata(gcf,'OldSessionInfo');
   session_info = old_session_info;
   session_info = rri_changepath_se(session_info);

   if isempty(session_info)
      session_info = old_session_info;
   end

   setappdata(gcf,'SessionPLSDir',session_info.pls_data_path);
   setappdata(gcf,'SessionRunInfo',session_info.run);

   return;						% PathSessionInfo


%----------------------------------------------------------------------------
function SelectMergeDataWithinRun()

if get(findobj(gcf,'Tag','MergeDataWithinRunButton'),'Value') == 0		% click itself
   set(findobj(gcf,'Tag','MergeDataWithinRunButton'),'Value',1);
else
   set(findobj(gcf,'Tag','MergeDataAcrossRunsButton'),'Value',0);
   setappdata(gcf,'SessionAcrossRun',0);
end

   return;					% SelectMergeDataWithinRun


%----------------------------------------------------------------------------
function SelectMergeDataAcrossRuns()

if get(findobj(gcf,'Tag','MergeDataAcrossRunsButton'),'Value') == 0		% click itself
   set(findobj(gcf,'Tag','MergeDataAcrossRunsButton'),'Value',1);
else
   set(findobj(gcf,'Tag','MergeDataWithinRunButton'),'Value',0);
   setappdata(gcf,'SessionAcrossRun',1);
end

   return;					% SelectMergeDataAcrossRuns

⌨️ 快捷键说明

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