[Master Index] [Index for Toolbox]

make_default_database

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


Function Synopsis

UserDefault = make_default_database(isAll, NameOnly);

Help Text

MAKE_DEFAULT_DATABASE - Confirm or Create a default database, default study, default subject
 function UserDefault = make_default_database(isAll, NameOnly);
 Call this routine to get the correct convention on default data used in BrainStorm.
 Confirm or create a default database exists in the BrainStorm home directory.
 Confirm or create a default data folder and default subject folder in the
  default database.
 Confirm or create a default data folder and default subject folder in every
  database of the user. When creating a new study or subject in a database, simply copy
  the example in the default database.
 isAll and NameOnly are logicals, {0,1}.
 If isAll (optional, default 0, i.e. not all),
  then apply to all directories in the database,
 else just apply to the current database.

 If NameOnly (optional, default 0), the confirm the default names only, do not create.


 Returns the structure UserDefault with fields
  .Comment the name of the default user database, e.g. "Default Database"
  .STUDIES the full path of the default study in the default database
  .SUBJECTS the full path of the default subject in the default database
  .FILELIST the list of files in the STUDIES, in browse_study_folder format
 and this structure is augmented by the following fields for convenience
  .StudyName the default name of the study folder, e.g. 'default_study' without the
             directory path prepended.
  .SubjectName the default name of the subject folder

 See also MAKE_DEFAULT_SUBJECT, MAKE_DEFAULT_STUDY

Cross-Reference Information

This function calls
This function is called by

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

function UserDefault = make_default_database(isAll, NameOnly);
%MAKE_DEFAULT_DATABASE - Confirm or Create a default database, default study, default subject
% function UserDefault = make_default_database(isAll, NameOnly);
% Call this routine to get the correct convention on default data used in BrainStorm.
% Confirm or create a default database exists in the BrainStorm home directory.
% Confirm or create a default data folder and default subject folder in the
%  default database.
% Confirm or create a default data folder and default subject folder in every
%  database of the user. When creating a new study or subject in a database, simply copy
%  the example in the default database.
% isAll and NameOnly are logicals, {0,1}.
% If isAll (optional, default 0, i.e. not all),
%  then apply to all directories in the database,
% else just apply to the current database.
%
% If NameOnly (optional, default 0), the confirm the default names only, do not create.
%
%
% Returns the structure UserDefault with fields
%  .Comment the name of the default user database, e.g. "Default Database"
%  .STUDIES the full path of the default study in the default database
%  .SUBJECTS the full path of the default subject in the default database
%  .FILELIST the list of files in the STUDIES, in browse_study_folder format
% and this structure is augmented by the following fields for convenience
%  .StudyName the default name of the study folder, e.g. 'default_study' without the
%             directory path prepended.
%  .SubjectName the default name of the subject folder
%
% See also MAKE_DEFAULT_SUBJECT, MAKE_DEFAULT_STUDY

%<autobegin> ---------------------- 26-May-2004 11:30:52 -----------------------
% --------- Automatically Generated Comments Block Using AUTO_COMMENTS ---------
%
% CATEGORY: Database Management
%
% Alphabetical list of external functions (non-Matlab):
%   toolbox\browse_study_folder.m
%   toolbox\bst_message_window.m
%   toolbox\make_default_study.m
%   toolbox\make_default_subject.m
%
% Group : Preference data and their calls in this file:
%   'BrainStorm' : 'UserDataBase'
%   'BrainStorm' : 'iUserDataBase'
%   
%   setpref('BrainStorm','UserDataBase',UserDB);
%   setpref('BrainStorm','iUserDataBase',i);
%   setpref('BrainStorm','iUserDataBase',iDefault);
%   setpref('BrainStorm','iUserDataBase',iUserDB);
%   setpref('BrainStorm',{'UserDataBase','iUserDataBase'},{UserDB,1});
%   setpref('BrainStorm',{'UserDataBase','iUserDataBase'},{UserDB,iDefault});
%   setpref('BrainStorm',{'UserDataBase','iUserDataBase'},{UserDB,iUserDB});
%   
%   UserDB = getpref('BrainStorm','UserDataBase');
%   UserDB = getpref('BrainStorm','UserDataBase',[]);
%   brainstormHomeDir = getpref('BrainStorm','brainstormHomeDir');
%   iUserDB = getpref('BrainStorm','iUserDataBase',1);
%
% At Check-in: $Author: Mosher $  $Revision: 26 $  $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:52 -----------------------

% ----------------------- History -----------------
% JCM 15-AUG-2003  First design
% JCM  5-SEP-2003  Changed "Study" to "Data" in the folder name
%                  only. Internally, we will still call the data folder
%                  a "study folder" 
% JCM 11-Sep-2003  Concentrate all "default" activity through here, so that we remain 
%                  consistent on our use of defaults. Added output structure. Search
%                  the database making sure all is okay with the default structure.
%                  Create a default database in the BrainStorm home area, if needed.
%                  When making new defaults in the user's areas, simply copy the files
%                  kept in the BrainStorm home default database.
% SB 17-Oct-2003   Uses brainstormHomeDir preference
% SB 16-Feb-2004   SETPREF is a pretty time-greedy function - made tiny changes with less calls
%                  See also CBB about what should be considered as a default database
% -------------------------------------------------


% In routine use, this function should go quickly, simply confirming the existence
%  of default directories. In reset cases, will rebuild the defaults.


% --------------- Set the parameters of this script ---------------------------
% note that for considerations of mixed-case operating systems, folders should be lower case
% The following names are the same in the user's BrainStorm folder and all of his databases
DB_COMMENT = 'Default Database'; % the name of the default database
DEFAULT_DATABASE = 'default_database'; % name of folder in the home directory
STUDY_NAME = 'default_data'; % the name of the default data folder in the root folder
SUBJECT_NAME = 'default_subject'; % the name of the default subject folder in the root folder
% note that user can shove other datasets into the default_database as well

% check input parameter
if ~exist('isAll','var') | isempty(isAll),
    isAll = 0; % only confirm the current database for defaults
end

if ~exist('NameOnly','var') | isempty(NameOnly),
    NameOnly = 0; % assume want creation as well as confirmation
end


% ----------------- Confirm/Create the default database -----------------------
% setup the directories in the BrainStorm directory
% the following command line may return other startup files that are sitting in e.g. the PublicToolbox folder
% need a more systematic way of finding BrainStorm home directory.
%brainstormHomeDir = fileparts(which('startup.m')); % user's brainstorm directory
try
    brainstormHomeDir = getpref('BrainStorm','brainstormHomeDir');
catch
    brainstormHomeDir = fileparts(which('startup.m')); % user's brainstorm directory
end

% go there
cd(brainstormHomeDir)

% build the full filenames of the defaults in the home directory
defaultDatabase = fullfile(brainstormHomeDir,DEFAULT_DATABASE);
defaultStudy = fullfile(brainstormHomeDir,DEFAULT_DATABASE,STUDY_NAME);
defaultSubject = fullfile(brainstormHomeDir,DEFAULT_DATABASE,SUBJECT_NAME);


% ------------ Confirm the existence of a user database ---------------
UserDB = getpref('BrainStorm','UserDataBase',[]); % creates and returns empty if none
iUserDB = getpref('BrainStorm','iUserDataBase',1); % which database are we pointing at now, default 1

% initialize
isUserDataBase = logical(0); % no user database
isDefaultDataBase = logical(0); % no default data base
iDefault = NaN; % no default database index

if(~isempty(UserDB)),
    
    % there is an existing database
    isUserDataBase = logical(1);
    % Is there a default database?
    tmp = strcmp(DB_COMMENT,{UserDB.Comment}); % lookfor the default comment
    
    if any(tmp),
        % There is a default database
        % we only want one, take the first one
        tmpndx = find(tmp); % the default databases
        if length(tmpndx) > 1,
            UserDB(tmpndx(2:end)) = []; % remove them
            iUserDB = tmpndx(1); % set to the first
            
            % save the reduced database
            setpref('BrainStorm',{'UserDataBase','iUserDataBase'},{UserDB,iUserDB}); 
        end
        tmpndx = tmpndx(1); % trim the reset
        
        % the remaining one, is it valid?
        if strcmp(UserDB(tmpndx).STUDIES,defaultDatabase) & strcmp(UserDB(tmpndx).SUBJECTS,defaultDatabase)
            if exist(defaultStudy,'dir') & exist(defaultSubject,'dir')
                isDefaultDataBase = logical(1);
                iDefault = tmpndx;
            end
            
        else
            % SB Comment | CBB - it's a bit too drastic here. A database is valid as long as directories exist
            % default database should be the one created when no database is found when brainstorm starts
            
            % it has invalid entries
            UserDB(tmpndx) = []; % remove it
            % save the reduced database
            setpref('BrainStorm',{'UserDataBase','iUserDataBase'},{UserDB,1}); 
            
            if isempty(UserDB),
                % we wiped out the database
                isUserDataBase = logical(0);
            end
        end
    end
end

% setup a temporary default structure with an empty filelist.
% Want to avoid creating filelist for the default everytime.
UserDefault(1) = struct('Comment',DB_COMMENT,...
   'STUDIES',defaultDatabase,'SUBJECTS',defaultDatabase,'FILELIST',[]);

if NameOnly,
   % we just wanted the names, no action
   return   
end

% do these folders exist in the home directory?
% if not, create them
if ~exist(defaultDatabase),
% CBB, would check the status of the creation.
   [status, message] = mkdir(brainstormHomeDir,DEFAULT_DATABASE);
end

% now make the folders inside this database
if ~exist(defaultStudy,'dir'),
% CBB, would check the status of the creation.
   [status, message] = mkdir(defaultDatabase,STUDY_NAME);
end

if(~exist(defaultSubject,'dir')),
% CBB, would check the status of the creation.
   [status, message] = mkdir(defaultDatabase,SUBJECT_NAME);
end

% we will populate these folders below



% -------- Now ensure that UserDataBase points to the default

if ~isUserDataBase,
   % no present database preferences
   
   UserDB = UserDefault;
   iDefault = 1;
   iUserDB = 1;
   
else
   % there is an existing database
   
   if ~isDefaultDataBase,
      % no default database
      UserDB = [UserDefault UserDB]; % make it the first
      iDefault = 1;
      iUserDB = iUserDB + 1; % current database item gets bumped up one
   end
   
end

% now set these preferences to the default
if 0 % deprecated code | SB 16-Feb-2004
    setpref('BrainStorm','UserDataBase',UserDB);
    setpref('BrainStorm','iUserDataBase',iDefault);
else
    setpref('BrainStorm',{'UserDataBase','iUserDataBase'},{UserDB,iDefault}); % Speeds up the execution
end



% with the UserDataBase pointing at the default, see if any default data are needed
cd(defaultSubject)
tmp = dir('*.mat'); % any mat files in here?
if isempty(tmp)
   % we had to make a new default subject folder. Populate it
   make_default_subject(SUBJECT_NAME);
end

% similarly
cd(defaultStudy)
tmp = dir('*.mat'); % any mat files in here?
if isempty(tmp)
   make_default_study(STUDY_NAME,SUBJECT_NAME);
   % find all of the new files now in the folder
   FILELIST = browse_study_folder(UserDB(iDefault).STUDIES); %update
   UserDB(iDefault).FILELIST = FILELIST;
   setpref('BrainStorm','UserDataBase',UserDB); % rewrite   
end



% ----------- Now confirm/create the defaults in the full user database ---------

UserDB = getpref('BrainStorm','UserDataBase'); % retrieve again for insurance
% locate again the default database
tmp = strcmp(DB_COMMENT,{UserDB.Comment}); % lookfor the default comment
iDefault = min(find(tmp)); % first instance of the default database

% get all the files in these default directories
DefaultStudyFiles = dir(fullfile(defaultStudy,'*.mat'));
DefaultSubjectFiles = dir(fullfile(defaultSubject,'*.mat'));

% reduce to just the filenames
DefaultStudyFiles = {DefaultStudyFiles.name};
DefaultSubjectFiles ={DefaultSubjectFiles.name};

% and now convert to full filenames
for i = 1:length(DefaultStudyFiles),
   DefaultStudyFiles{i} = fullfile(defaultStudy,DefaultStudyFiles{i});
end
for i = 1:length(DefaultSubjectFiles),
   DefaultSubjectFiles{i} = fullfile(defaultSubject,DefaultSubjectFiles{i});
end

% we will use this list of filenames to copy to any new defaults created below


% Are all of the existing databases valid disk locations?
% Do all of the existing databases have a default study and subject?
inValid = zeros(1,length(UserDB)); % we may find invalid directories

if isAll, % input parameter
   ndx = 1:length(UserDB); % update all databases
else
   ndx = iUserDB; % only update the current
end

for i = ndx,
   
   % first check for the validity of the database folders
   if ~exist(UserDB(i).STUDIES,'dir') | ~exist(UserDB(i).SUBJECTS,'dir')
      % one of the directories does not exist!
      inValid(i) = 1; % it's invalid
      msg1 = [];
      msg2 = [];
      % build an error message to the user
      if ~exist(UserDB(i).STUDIES,'dir'),
         msg1 = sprintf(['Your Data root folder, %s,  does not exist ', ...
               'setting you to default'],UserDB(i).STUDIES);
      end
      if(~exist(UserDB(i).SUBJECTS,'dir')),
         msg2 = sprintf(['Your Subjects root folder, %s,  does not exist ', ...
               'setting you to default'],UserDB(i).SUBJECTS);
      end
      bst_message_window('wrap',{msg1,msg2,...
            sprintf('Recommend you Edit Database ''%s'' to correct',UserDB(i).Comment)});
      
   else
      % the directory locations test as valid.
   
      % Earlier versions, does this database have the "FILELIST" convention?
      if ~isfield(UserDB(i),'FILELIST') 
         % DB is too old - update by adding field FILELIST
         bst_message_window('Updating FILELIST structure. . .')
         UserDB(i).FILELIST = browse_study_folder(UserDB(k).STUDIES);
         % note that other database entries will be automatically updated to empty entries
         %  which can later be populated by the correct FILELIST. For speed considerations,
         %  only update the ith entry here.
         setpref('BrainStorm','UserDataBase',UserDB);
      end
      
      % build the full filenames of the defaults in the next directory
      thisDefaultStudy = fullfile(UserDB(i).STUDIES,STUDY_NAME);
      thisDefaultSubject = fullfile(UserDB(i).SUBJECTS,SUBJECT_NAME);
      setpref('BrainStorm','iUserDataBase',i); % set the database indexer to this database
      
      % do these default folders exist in this directory
      if ~exist(thisDefaultStudy,'dir'),
         
         bst_message_window('wrap',sprintf(...
            'Creating default data folder in %s.',UserDB(i).STUDIES));
         
         mkdir(UserDB(i).STUDIES,STUDY_NAME);
         
      end
      
      if ~exist(thisDefaultSubject,'dir'),
         
         bst_message_window('wrap',sprintf(...
            'Creating default subject folder in %s.',UserDB(i).SUBJECTS));
         
         mkdir(UserDB(i).SUBJECTS,SUBJECT_NAME);
         
      end
      
      % Are they empty? Then need a copy of the default database in here
      % Simply copy the existing default database files
      cd(thisDefaultStudy)
      tmp = dir('*.mat');
      if(isempty(tmp)),
         for jFile = 1:length(DefaultStudyFiles),
            copyfile(DefaultStudyFiles{jFile},thisDefaultStudy);
         end 
         bst_message_window('Updating FILELIST structure. . .')
         UserDB(i).FILELIST = browse_study_folder(UserDB(i).STUDIES); % update
      end
       
      cd(thisDefaultSubject)
      tmp = dir('*.mat');
      if(isempty(tmp)),
         % now simply copy the existing default database files
         for jFile = 1:length(DefaultSubjectFiles),
            copyfile(DefaultSubjectFiles{jFile},thisDefaultSubject);
         end 
      end
         
      
      % and finally, if the FILELIST is empty, repopulate it
      if isempty(UserDB(i).FILELIST),
         bst_message_window('Updating FILELIST structure. . .')
         UserDB(i).FILELIST = browse_study_folder(UserDB(i).STUDIES); % update
      end
      
      
   end % if the folders are valid disk locations
   
end % for each database found

% clean up
% now save to preferences the updated UserDB
if 0 % deprecated code | SB 16-Feb-2004
    setpref('BrainStorm','UserDataBase',UserDB);
    setpref('BrainStorm','iUserDataBase',iUserDB);
else
    setpref('BrainStorm',{'UserDataBase','iUserDataBase'},{UserDB,iUserDB}); % Speeds up the execution
end

    
% put us back in the original root data folder
if isdir(UserDB(iUserDB).STUDIES),
   cd(UserDB(iUserDB).STUDIES); 
end


% now finish building the output structure with some custom fields, convenient
UserDefault.StudyName = STUDY_NAME;
UserDefault.SubjectName = SUBJECT_NAME;

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