[Master Index] [Index for Toolbox]

get_user_directory

(Toolbox/get_user_directory.m in BrainStorm 2.0 (Alpha))


Function Synopsis

Users = get_user_directory;

Help Text

GET_USER_DIRECTORY - Get the user's root directory information
 function Users = get_user_directory;
 User = get_user_directory;
 Accesses the Preferences to get the current Users structure and
  CurrentData, as a subfield fo Users, e.g. Users.CurrentData.

 Every attempt to get the current user database should call this mfile, which will in 
  in turn call database_manager only if there is a problem.

 LOGIC: if the user has an active BrainStorm session running, then the structure
  will be found in the BrainStormTaskbar as application data BrainStormDataBase.
 If there is something wrong with that information, send the user to the data manager

 If the BrainStormTaskbar is not running, then we may be in batch mode, so get
  the information from the BrainStorm preferences. Send error messages to the
  standard output.

 Returns the structure with fields:
  Comment, string commenting on the location of the files
  STUDIES, string giving the root location of all studies
  SUBJECTS, string giving the root for subjects.
  FILELIST, structure, result of browse_study_folder(SUBJECTS)
  CurrentData with fields and examples:
      StudyFile: 'jcm_spont08-31.ds\jcm_brainstormstudy.mat'
    SubjectFile: 'jcm_mri\jcm_brainstormsubject.mat'

 Idea is that we then call load(fullfile(User.STUDIES,<filename>));
  i.e. all filenames are referential to a root.

Cross-Reference Information

This function calls
This function is called by

Listing of function C:\BrainStorm_2001\Toolbox\get_user_directory.m

function Users = get_user_directory;
%GET_USER_DIRECTORY - Get the user's root directory information
% function Users = get_user_directory;
% User = get_user_directory;
% Accesses the Preferences to get the current Users structure and
%  CurrentData, as a subfield fo Users, e.g. Users.CurrentData.
%
% Every attempt to get the current user database should call this mfile, which will in 
%  in turn call database_manager only if there is a problem.
%
% LOGIC: if the user has an active BrainStorm session running, then the structure
%  will be found in the BrainStormTaskbar as application data BrainStormDataBase.
% If there is something wrong with that information, send the user to the data manager
%
% If the BrainStormTaskbar is not running, then we may be in batch mode, so get
%  the information from the BrainStorm preferences. Send error messages to the
%  standard output.
%
% Returns the structure with fields:
%  Comment, string commenting on the location of the files
%  STUDIES, string giving the root location of all studies
%  SUBJECTS, string giving the root for subjects.
%  FILELIST, structure, result of browse_study_folder(SUBJECTS)
%  CurrentData with fields and examples:
%      StudyFile: 'jcm_spont08-31.ds\jcm_brainstormstudy.mat'
%    SubjectFile: 'jcm_mri\jcm_brainstormsubject.mat'
%
% Idea is that we then call load(fullfile(User.STUDIES,<filename>));
%  i.e. all filenames are referential to a root.

%<autobegin> ---------------------- 26-May-2004 11:30:20 -----------------------
% --------- Automatically Generated Comments Block Using AUTO_COMMENTS ---------
%
% CATEGORY: Utility - General
%
% Alphabetical list of external functions (non-Matlab):
%   toolbox\browse_study_folder.m
%   toolbox\bst_message_window.m
%   toolbox\data_manager.m
%
% Group : Preference data and their calls in this file:
%   CurrentData = getpref('BrainStorm','CurrentData',[]);
%   CurrentData = getpref('BrainStorm','UserCurrentData');
%   UserDB = getpref('BrainStorm','UserDataBase');
%   iUser = getpref('BrainStorm','iUserDataBase');
%
% Application data and their calls in this file:
%   TASKBAR = getappdata(0,'BrainStormTaskbar');
%   Users = getappdata(TASKBAR,'BrainStormDataBase');
%
% At Check-in: $Author: Mosher $  $Revision: 21 $  $Date: 5/26/04 9:59a $
%
% This software is part of BrainStorm Toolbox Version 2.0 (Alpha) 24-May-2004
% 
% Principal Investigators and Developers:
% ** Richard M. Leahy, PhD, Signal & Image Processing Institute,
%    University of Southern California, Los Angeles, CA
% ** John C. Mosher, PhD, Biophysics Group,
%    Los Alamos National Laboratory, Los Alamos, NM
% ** Sylvain Baillet, PhD, Cognitive Neuroscience & Brain Imaging Laboratory,
%    CNRS, Hopital de la Salpetriere, Paris, France
% 
% See BrainStorm website at http://neuroimage.usc.edu for further information.
% 
% Copyright (c) 2004 BrainStorm by the University of Southern California
% This software distributed  under the terms of the GNU General Public License
% as published by the Free Software Foundation. Further details on the GPL
% license can be found at http://www.gnu.org/copyleft/gpl.html .
% 
% FOR RESEARCH PURPOSES ONLY. THE SOFTWARE IS PROVIDED "AS IS," AND THE
% UNIVERSITY OF SOUTHERN CALIFORNIA AND ITS COLLABORATORS DO NOT MAKE ANY
% WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF
% MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, NOR DO THEY ASSUME ANY
% LIABILITY OR RESPONSIBILITY FOR THE USE OF THIS SOFTWARE.
%<autoend> ------------------------ 26-May-2004 11:30:20 -----------------------


% /---Script Author--------------------------------------\
% | *** John C. Mosher, Ph.D.                            |
% |  Biophysics Group                                    |
% |                                                      |
% | *** Sylvain Baillet, Ph.D.                           |
% | Cognitive Neuroscience & Brain Imaging Laboratory    |
% | CNRS UPR640 - LENA                                   | 
% | Hopital de la Salpetriere, Paris, France             |
% | sylvain.baillet@chups.jussieu.fr                     |
% \------------------------------------------------------/
%  
% Date of creation: January 1999
% Date of modification: September 2001                  
%----------------------------------------------------------------------------------
% JCM 11/9/99     appended filesep if missing
% JCM 10/25/00    changed to use get_user_directory
% SB 11/13/00     Added an error message to force the user to move Users.mat into 
%                 custom if necessary.
% SB 09/03/01     USer guidata to look for User information
% JCM 22-Mar-2002 allowing for get_user_directory to load from bst_prev_session
% JCM 28-May-2002 database_manager has replaced initialize_users, database_manager now
%                 uses getprefs rather than users.mat. Altered help block above to
%                 reflect new changes. Used try, catch to handle errors
% SB  03-Sep-2002 Return [] when database is not loaded properly 
% JCM 30-Oct-2002 Strict enforcement of Preferences only, all other use disabled.
%                 Since startup sets a default if needed, errors should be minimal.
% JCM 20-Aug-2003 empty CurrentData default if necessary
% JCM  5-Sep-2003 Added FILELIST generation if it is missing from the database
% ----------------------------------------------------------------------------------

try 
   UserDB = getpref('BrainStorm','UserDataBase');
   iUser = getpref('BrainStorm','iUserDataBase'); % number of the last one used
   Users = UserDB(iUser);
   
   if(~isfield(Users,'FILELIST')),
      % FILELIST is missing from the user database structure
      Users = setfield(Users,'FILELIST',browse_study_folder(Users.STUDIES));
   end
   
   % the current data is stored in preferences separate from the database
   CurrentData = getpref('BrainStorm','CurrentData',[]); % default blank if not there
   Users = setfield(Users,'CurrentData',CurrentData); % May BST MMII format
   
catch
   Users = [];
end

return


% everything else below disabled by the above return statement

try
   
   if(isappdata(0,'BrainStormTaskbar')), % a BrainStorm Taskbar is running
      try
         
         TASKBAR = getappdata(0,'BrainStormTaskbar');
         Users = getappdata(TASKBAR,'BrainStormDataBase');
         % NOTE: May BST MMII returns Users.CurrentData as one of the fields, which is
         %  not in the regular structure.
         
      catch
         
         bst_message_window('wrap',{'Something failed in retrieving your latest database.',...
               'Please edit your database and/or select valid data'});
         data_manager; % non-modal call
         return
         
      end
      
   elseif(ispref('BrainStorm','UserDataBase')),
      
      % there is no Taskbar, we may be in batch mode
      % get the latest database information from the Mathworks preferences
      
      try
         
         UserDB = getpref('BrainStorm','UserDataBase');
         iUser = getpref('BrainStorm','iUserDataBase'); % number of the last one used
         Users = UserDB(iUser);
         % the current data is stored in preferences separate from the database
         CurrentData = getpref('BrainStorm','UserCurrentData');
         Users = setfield(Users,'CurrentData',CurrentData); % May BST MMII format
         
      catch
         
         % use fprintf, since brainstorm is apparently not running
         %  and we may be writing standard output out to a file
         fprintf(['Error in loading your database preferences.\n',...
               'BrainStorm is not running, nor is there a ',...
               'valid database structure in the preferences. \n',...
               'Please restart BrainStorm and use the ',...
               'Data Manager to build a proper database.\n']);
         Users = [];
         return
         
      end
      
      
   else 
      
      % The taskbar isn't running, and there are no preferences
      bst_message_window('wrap',{'BrainStorm is not running, nor is there a ',...
            'valid database structure. Please restart BrainStorm and use the ',...
            'Data Manager to build a proper database.'});
      
      return
      
   end
   
   
catch
   
   % if all else fails, call the data manager
   bst_message_window('wrap',{'Something failed in retrieving your latest database.',...
         'Please edit your database and/or select valid data'});
   data_manager; % non-modal call
   return
   
end


% We have a single Users structure, clean up

% some of our commands anticipate at separator at the end, give one:
if(~strcmp(Users.STUDIES(end),filesep)),
   Users.STUDIES(end+1)=filesep;
end

if(~strcmp(Users.SUBJECTS(end),filesep)),
   Users.SUBJECTS(end+1)=filesep;
end

return



% Deprecated code below, not in use as of 3-Sep-2001 (apparently)
if(0), % deprecated code section, marked more clearly 20-Oct-2002 JCM
   
   if(0), %old SB code
      hf = findobj(0,'Tag','TASKBAR'); % where is the taskbar
      Users = guidata(hf);
   end
   
   
   
   if isempty(hf) % User does not use the taskbar figure (may be running bacth processing ?)
      global Users
      [brainstorm_home,tmp] = which('startup'); % find the brainstorm home folder in the user path
      if isempty(brainstorm_home) % Path does not include the BrainStorm folder containing the 'startup' file
         Users.SUBJECTS = pwd;
         Users.STUDIES = pwd;           
      else 
         User.SUBJECTS = brainstorm_home;
         User.STUDIES = brainstorm_home;
      end
   end
   
   default_custom = what('Custom'); % find the custom folder in the users path
   fname = fullfile(default_custom.path,'users.mat'); % the fully qualified name
   if(~exist(fname)),
      %SB 11/13/00 : Error message is necessary for a proper handling of the situation by the user
      errordlg(sprintf('It is necessary to move the Users.mat file in %s first - Please restart BrainStorm when Users.mat is moved.',default_custom.path),'New BrainStorm Version');
      delete(findobj(0,'Tag','TASKBAR'))
      Users = [];   
      return
   else
      load(fullfile(default_custom.path,'users.mat'),'-mat') %  loads the custom folder file 'users.mat'
   end
   
   % the local directory now has the structure Users, comprising .Comment, .STUDIES, and .SUBJECTS
   
   % trim to just the FIRST one
   
   Users = Users(1);
   
   % some of our commands anticipate at separator at the end, give one:
   if(~strcmp(Users.STUDIES(end),filesep)),
      Users.STUDIES(end+1)=filesep;
   end
   
   if(~strcmp(Users.SUBJECTS(end),filesep)),
      Users.SUBJECTS(end+1)=filesep;
   end
   
   return
   
end % deprecated code section

Produced by color_mat2html, a customized BrainStorm 2.0 (Alpha) version of mat2html on Tue Oct 12 12:05:14 2004
Cross-Directory links are: ON