[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

    browse_study_folder                C:\BrainStorm_2001\Toolbox\browse_study_folder.m
    bst_message_window                 C:\BrainStorm_2001\Toolbox\bst_message_window.m
    make_default_study                 C:\BrainStorm_2001\Toolbox\make_default_study.m
    make_default_subject               C:\BrainStorm_2001\Toolbox\make_default_subject.m

This function is called by

    brainstorm_reset                   C:\BrainStorm_2001\Toolbox\brainstorm_reset.m
    data_manager                       C:\BrainStorm_2001\Toolbox\data_manager.m

### 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 Nov 2 16:17:59 2004
Cross-Directory links are: ON