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

📄 bfm_session_profile_ui.m

📁 绝对经典,老外制作的功能强大的matlab实现PLS_TOOBOX
💻 M
📖 第 1 页 / 共 3 页
字号:
   h = 0.4 * factor_inputline;

   pos = [x y w h];

   c = uicontrol('Parent',h0, ...		% Message Line
   	'Style','text', ...
   	'Units','normal', ...
   	'BackgroundColor',[0.8 0.8 0.8], ...
   	'ForegroundColor',[0.8 0.0 0.0], ...
	'fontunit','normal', ...
   	'FontSize',fnt, ...
   	'HorizontalAlignment','left', ...
   	'Position',pos, ...
   	'String','', ...
   	'Tag','MessageLine');

   %  menu bar
   %
   h_file = uimenu('Parent',h0, ...
	'Label', '&File', ...
	'Tag', 'FileMenu');
   m1 = uimenu(h_file, ...
        'Label', '&Load', ...
   	'Callback','bfm_session_profile_ui(''MENU_LOAD_PLS_SESSION_INFO'');', ...
        'Tag', 'LoadPLSsession');
   m1 = uimenu(h_file, ...
        'Label', '&Save', ...
   	'Callback','bfm_session_profile_ui(''MENU_SAVE_PLS_SESSION_INFO'');', ...
        'Tag', 'SavePLSsession');
   m1 = uimenu(h_file, ...
        'Label', 'S&ave as', ...
   	'Callback','bfm_session_profile_ui(''MENU_SAVE_AS_PLS_SESSION_INFO'');', ...
        'Tag', 'SaveAsPLSsession');
   m1 = uimenu(h_file, ...
        'Label', '&Close', ...
   	'Callback','bfm_session_profile_ui(''MENU_CLOSE_SESSION_INPUT'');', ...
        'Tag', 'CloseSsessionInput');

   h_file = uimenu('Parent',h0, ...
	'Label', '&Edit', ...
	'Tag', 'EditMenu');
   m1 = uimenu(h_file, ...
        'Label', 'Change Data Paths', ...
   	'Callback','bfm_session_profile_ui(''MENU_PATH_PLS_SESSION_INFO'');', ...
	'Enable','off', ...
        'Tag', 'PathPLSsessionMenu');
   m1 = uimenu(h_file, ...
	'separator', 'on', ...
        'Label', '&Clear Session', ...
   	'Callback','bfm_session_profile_ui(''MENU_CLEAR_PLS_SESSION_INFO'');', ...
        'Tag', 'ClearPLSsessionMenu');
   m1 = uimenu(h_file, ...
        'Label', '&Merge Conditions', ...
   	'Callback','bfm_session_profile_ui(''MENU_MERGE_CONDITIONS'');', ...
        'Enable','off', ...
        'Tag', 'MergeConditionsMenu');
   m1 = uimenu(h_file, ...
        'Label', 'C&reate Contrasts', ...
   	'Callback','bfm_session_profile_ui(''MENU_CREATE_CONTRASTS'');', ...
	'visible', 'off', ...
        'Tag', 'CreateContrastsMenu');

   h_file = uimenu('Parent',h0, ...
	'Label', '&Datamat', ...
	'Tag', 'DatamatMenu');
   m1 = uimenu(h_file, ...
        'Label', '&Create Datamat', ...
   	'Callback','bfm_session_profile_ui(''MENU_CREATE_DATAMAT'');', ...
        'Tag', 'CreateDatamatMenu');
   m1 = uimenu(h_file, ...
        'Label', 'Input Seed PLS Behav Data and Modify Datamat', ...
   	'Callback','fmri_session_profile_ui(''MENU_MODIFY_BEHAV'');', ...
        'Enable','off', ...
	'visible', 'off', ...
        'Tag', 'ModifyBehavMenu');
   m1 = uimenu(h_file, ...
        'Label', 'Apply STD to Datamat', ...
   	'Callback','bfm_session_profile_ui(''MENU_STD'');', ...
	'enable','off', ...
	'visible', 'off', ...
        'Tag', 'STDDatamatMenu');
%   m1 = uimenu(h_file, ...
%        'Label', '&Merge Datamat', ...
%   	'Callback','bfm_session_profile_ui(''MENU_MERGE_DATAMAT'');', ...
%        'Tag', 'MergeDatamatMenu');

   %  Help submenu
   %
   Hm_topHelp = uimenu('Parent',h0, ...
           'Label', '&Help', ...
           'Tag', 'Help');

%           'Callback','rri_helpfile_ui(''bfm_session_profile_hlp.txt'',''How to use SESSION PROFILE'');', ...
   Hm_how = uimenu('Parent',Hm_topHelp, ...
           'Label', '&How to use this window?', ...
           'Callback','web([''file:///'', which(''UserGuide.htm''), ''#_Toc128820721'']);', ...
	   'visible', 'on', ...
           'Tag', 'How');

   Hm_new = uimenu('Parent',Hm_topHelp, ...
           'Label', '&What''s new', ...
	   'Callback','rri_helpfile_ui(''whatsnew.txt'',''What''''s new'');', ...
           'Tag', 'New');
   Hm_about = uimenu('Parent',Hm_topHelp, ...
           'Label', '&About this program', ...
           'Tag', 'About', ...
           'Tag', 'About', ...
           'CallBack', 'plsgui_version');

   curr = pwd;
   if isempty(curr)
      curr = filesep;
   end

   setappdata(h0,'curr_dir',curr);
   ClearSessionInfo(1);

   return;						% init


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

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

   curr = getappdata(gcf,'curr_dir');

   session_info.description = '';
   session_info.pls_data_path = curr;
   session_info.datamat_prefix = '';
   session_info.num_conditions = 0;
   session_info.condition = [];
   session_info.condition_baseline = {};
   session_info.num_conditions0 = 0;
   session_info.condition0 = [];
   session_info.condition_baseline0 = {};
   session_info.num_runs = 0;
   session_info.run = [];
   session_info.across_run = 1;

   SetSessionInfo(session_info,'')
   set(findobj(gcf,'Tag','STDDatamatMenu'),'enable','off');
   set(findobj(gcf,'Tag','ModifyBehavMenu'),'enable','off');
   set(findobj(gcf,'Tag','PathPLSsessionMenu'),'enable','off');

   return;						% ClearSessionInfo


%----------------------------------------------------------------------------
function LoadSessionInfo()

   if ~isempty(getappdata(gcf,'OldSessionInfo'))
      if (ChkModified == 0)
         return;			% error
      end;
   end;

   [filename, pathname] = uigetfile( '*_BfMRIsession.mat', 'Load a PLS session file');

   if isequal(filename,0) | isequal(pathname,0)
      return;
   end;

   cd(pathname);   
   session_file = fullfile(pathname, filename);

   try
      pls_session = load(session_file);
   catch
      msg = 'ERROR: Cannot load the session information';
      set(findobj(gcf,'Tag','MessageLine'),'String',msg);
      return;
   end;

   if ~exist(pls_session.session_info.pls_data_path,'dir') | ~exist(pls_session.session_info.run(1).data_path,'dir')
      msg = 'Invalid path inside. Click Edit menu to Change Data Paths';
      set(findobj(gcf,'Tag','MessageLine'),'String',msg);
   end

   %  move to the PLS directory
   %
   pls_dir = pls_session.session_info.pls_data_path;
   if ( exist(pls_dir,'dir') == 7 ) 	   % specified directory exists
%      cd(pls_dir);
   else
%      msg = 'WARNING: The PLS directory does not exist!';
%      set(findobj(gcf,'Tag','MessageLine'),'String',msg);
   end;
   
   SetSessionInfo(pls_session.session_info,session_file)
   set(findobj(gcf,'Tag','STDDatamatMenu'),'enable','on');
   set(findobj(gcf,'Tag','ModifyBehavMenu'),'enable','on');
   set(findobj(gcf,'Tag','PathPLSsessionMenu'),'enable','on');

   return;						% LoadSessionInfo


%----------------------------------------------------------------------------
function status = SaveSessionInfo(save_as_flag)
%  save_as_flag = 0,  save to the loaded file
%  save_as_flag = 1,  save to a new file
%
   status = 0;

   if ~exist('save_as_flag','var')
     save_as_flag = 0;
   end;

   [session_info,session_file,old_session_info] = GetSessionInfo;

   if isempty(session_info.pls_data_path),
      msg = sprintf('PLS directory has to be specified before saving.');
      set(findobj(gcf,'Tag','MessageLine'),'String',['ERROR: ', msg]);
      return;
   end;

   if isempty(session_info.datamat_prefix),
      msg = sprintf('A datamat prefix needs to be specified before saving.');
      set(findobj(gcf,'Tag','MessageLine'),'String',['ERROR: ', msg]);
      return;
   end;

   num_conditions = session_info.num_conditions0;
   num_runs = session_info.num_runs;

   if num_conditions == 0 | num_runs == 0
      msg = sprintf('Need both Condition & Run information.');
      set(findobj(gcf,'Tag','MessageLine'),'String',['ERROR: ', msg]);
      return;
   end

   if ( length(session_info.run) >= num_runs )
      session_info.run = session_info.run(1:num_runs);
   else
      msg = sprintf('Run number exceed existing run.');
      set(findobj(gcf,'Tag','MessageLine'),'String',['ERROR: ', msg]);
      return;
   end;

   %  check if there is any empty condition across run
   %
   for i = 1:num_runs
      run_cond(i,:) = cellfun('isempty', session_info.run(i).blk_onsets);
      run_cond(i,:) = ~run_cond(i,:);
   end

%   run_cond = sum(run_cond, 1);

   if ~isempty(find(run_cond == 0))
%      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 '_BfMRIsession.mat'], ...
			'Save the PLS session information');

      if isequal(filename,0)
         return;
      end;

      if ~rri_chkfname(filename, 'BfMRI', 'session')
         msg = ['File name must be ended with _BfMRIsession.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).blk_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
   %

⌨️ 快捷键说明

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