[Master Index] [Index for Toolbox]

find_brainstorm_files

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


Function Synopsis

[DataDir,DataPopup,Leader] = find_brainstorm_files(Type,DirPath,hf);

Help Text

FIND_BRAINSTORM_FILES - Find BrainStorm subjects or study files, create Menu
 function [DataDir,DataPopup,Leader] = find_brainstorm_files(Type,DirPath,hf);
 Type is either 
  "studies"
  "subjects"
  "tri" or "tess" for tessellation files
  "data"
  "results"
  "anatomy" (subjectimage files)
  "headmodel"
  "ctf"
  "neuromag"
  "besa"
  "neuroscan"
  "gis image"
 If no DirPath is given or is null, searches the 
  folders located in Users.STUDIES or Users.SUBJECTS; 
  otherwise searches subfolders of DirPath.
 Returns cell array DataDir of referentially qualified directory names.
 Returns character array DataPopup with '|' separators needed for 
  the uicontrol popup.
 Leader is such that fullfile(Leader,DataDir{i}) gives fully qualified name.

 If hf is given, and type is 'studies' or 'subjects', then a menubar is created
  in the given figure.

 If Type is not 'studies' or 'subjects', then Type is assumed to be a specific
  filename. The Users.STUDIES and Users.SUBJECTS are searched for exactly this
  name, and the fully qualified filename is returned.
 
 Run find_brainstorm_structure to get all files associated with name

Cross-Reference Information

This function calls
This function is called by

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

function [DataDir,DataPopup,Leader] = find_brainstorm_files(Type,DirPath,hf);
%FIND_BRAINSTORM_FILES - Find BrainStorm subjects or study files, create Menu
% function [DataDir,DataPopup,Leader] = find_brainstorm_files(Type,DirPath,hf);
% Type is either 
%  "studies"
%  "subjects"
%  "tri" or "tess" for tessellation files
%  "data"
%  "results"
%  "anatomy" (subjectimage files)
%  "headmodel"
%  "ctf"
%  "neuromag"
%  "besa"
%  "neuroscan"
%  "gis image"
% If no DirPath is given or is null, searches the 
%  folders located in Users.STUDIES or Users.SUBJECTS; 
%  otherwise searches subfolders of DirPath.
% Returns cell array DataDir of referentially qualified directory names.
% Returns character array DataPopup with '|' separators needed for 
%  the uicontrol popup.
% Leader is such that fullfile(Leader,DataDir{i}) gives fully qualified name.
%
% If hf is given, and type is 'studies' or 'subjects', then a menubar is created
%  in the given figure.
%
% If Type is not 'studies' or 'subjects', then Type is assumed to be a specific
%  filename. The Users.STUDIES and Users.SUBJECTS are searched for exactly this
%  name, and the fully qualified filename is returned.
% 
% Run find_brainstorm_structure to get all files associated with name

%<autobegin> ---------------------- 12-Oct-2004 01:11:14 -----------------------
% --------- Automatically Generated Comments Block Using AUTO_COMMENTS ---------
%
% CATEGORY: Utility - General
%
% Alphabetical list of external functions (non-Matlab):
%   toolbox\find_subdir.m
%   toolbox\get_user_directory.m
%
% At Check-in: $Author: Mosher $  $Revision: 29 $  $Date: 10/11/04 11:32p $
%
% This software is part of BrainStorm Toolbox Version 2.0 (Alpha) 23-Sep-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> ------------------------ 12-Oct-2004 01:11:14 -----------------------


% /---Script Authors--------------------------------------\
% |  *** 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
%
% Script History -------------------------------------------------------------------------------------
% 06-Jun-1999     upgraded to bring out prefixes of the flagfiles
% 16-Jun-1999     modified to handle null returns on find files
% 26-Oct-1999     modified to handle specific filenames.
% 06-Nov-1999     modified to give REFERENTIAL file names, referenced to 
% ...........     Users.STUDIES or .SUBJECTS.  Used local variable Leader to distinguish
% 08-Apr-2002 SB  added 'headmodel' file type
% 16-Apr-2002 SB  gathered all file types in a shorter switchyard to keep file search general.
% ...........     and removed all reference to platform dependency.
% 29-Apr-2002 SB  Fixed typo in Header.
% ...........     Fixed search for general type of files (see 'otherwise' case on Type below).
% 24-May-2002 SB  Added 'tess' file type.
% ........... SB  Secured subdir search.
% ........... SB  Come back to original folder rather than stay in last visited folder  
% 27-May-2002 SB  Search for TESS files does not return associated VERTCONN and TRICONN files anymore
% 11-Jun-2002 JCM If DirPath is empty, set it to '.' (the current directory), also minor comments
%                 fixes.
% 09-Jul-2002 SB  Updated comments with all available file types
% 23-Jul-2002 SB  Added Neuromag and CTF file types (find_*_data.m are now obsolete and are deleted from Toolbox)
% 02-Sep-2002 SB  Return to original folder when no file was found.
% 31-Oct-2002 JCM referential names should not begin with \, so ensured DirPath ends in a filesep
% 03-Jun-2003 SB  Added the 'results' file type 
% 15-May-2004 JCM Added Pantazis "dsgl" modification for file type extension
% 17-May-2004 JCM Added Pantazis "dfs" modification
% 20-Jul-2004 DB  Added GIS and MESH formats
% 08-Oct-2004 DP  Changed EGI format
% ---------------------------------------------------------------------------------------------------

OrigFolder = pwd;

files = [];

if(~exist('Type')),
   DataDir = [];
   DataPopup = [];
   msgbox('FIND_BRAINSTORM_FILES, Must give Type of Studies or Subjects','Error','Modal');
   return
end

if(~exist('DirPath','var')), % user gave no input
   DirPath = []; % default
end

if(~exist('hf','var')), % user gave no figure
   hf = []; % set to empty
end

if(isempty(DirPath)),
   DirPath = '.'; % current directory
end

Users = get_user_directory;% the User directory information

Extension = '.mat'; % default extension, unless overridden below
switch lower(deblank(Type))
   case 'studies'
      FileString = 'brainstormstudy'; % File filter for the dir command
      %DirPath = Users.STUDIES; % Root directory for this file type.
   case 'subjects'
      FileString = 'brainstormsubject';
      %DirPath = Users.SUBJECTS;
   case 'tri'
      FileString = '';
      %DirPath = Users.SUBJECTS;
      Extension = '.tri';
   case 'mesh'
      FileString = '';
      %DirPath = Users.SUBJECTS;
      Extension = '.mesh';
   case 'dsgl'
      FileString = '';
      %DirPath = Users.SUBJECTS;
      Extension = '.dsgl';
   case 'dfs'
      FileString = '';
      %DirPath = Users.SUBJECTS;
      Extension = '.dfs';
   case 'tess'
      FileString = 'tess';
      FileStringFilter = {'vertconn','triconn'}; % don't return files with names that include both FileString and either of the FileStringFilter strings
   case 'results'
      FileString = 'results';
   case 'data'
      FileString = 'data';
      FileStringFilter = {'results'}; % don't return files with names that include both FileString and either of the FileStringFilter strings
   case 'anatomy'
      FileString = 'subjectimage';
      %DirPath = Users.STUDIES;
   case 'headmodel'
      FileString = 'headmodel';
      %DirPath = Users.STUDIES;
      
      % below are system files that we seek, where the type is a System name from
      %  {'magnes','ctf','neuromag','neuroscan','egi','prn','raw'}
      % See importdata routine and the "create" switchyard case for valid
      % Systems
      
   case 'magnes'
     % unknown at this time
      FileString = ''; % No specific string in file name
      Extension = '.magnes'; % extension is specific       
   case 'besa'
       % BESA ASCII file format
       FileString = ''; % No specific string in file name
       Extension = '.avr'; % extension is specific 
   case 'ctf'
      FileString = ''; % No specific string in file name
      Extension = '.ds'; % extension is specific 
   case 'neuromag'
      FileString = ''; % No specific string in file name
      Extension = '.fif';  % extension is specific       
   case 'neuroscan'
      % Neuroscan binary EEG format
      FileString = ''; % No specific string in file name
      Extension = '.avg'; % extension is specific 
   case 'egi'
      % unknown at this time
      FileString = ''; % No specific string in file name
      Extension = '.raw'; % extension is specific 
   case 'prn'
      % unknown at this time
      FileString = ''; % No specific string in file name
      Extension = '.prn'; % extension is specific 
   case 'raw'
      FileString = ''; % No specific string in file name
      Extension = '.raw'; % extension is specific 
  case 'gis image' % GIS MRI format -> see [http://brainvisa.info]
      FileString = ''; % No specific string in file name
      Extension = '.ima'; % extension is specific 
      
  otherwise % try handling as a default case
      FileString = Type;
      Extension = '';
end

% we need DirPath to end in a file separator, in order to cleanly remove
if(~strcmp(DirPath(end),filesep)),
   DirPath(end+1) = filesep;
end

Leader = DirPath; % prefix on the file names


FileList = dir(fullfile(DirPath,sprintf('*%s*%s',FileString,Extension)));
[subdirs] = find_subdir(DirPath); % Looking for all subfolders within current folder - recursive search

dirinit = pwd;
% Now browse every folder and look for files of requested type
for k=1:length(subdirs)
   cd(subdirs{k})
   nFileList = dir(fullfile(subdirs{k},sprintf('*%s*%s',FileString,Extension))); % New file list
   subdirs{k} = strrep(subdirs{k},[DirPath],''); % Make subdirs names relative to root folder
   for kk = 1:length(nFileList)
      nFileList(kk).name = fullfile(subdirs{k},nFileList(kk).name);
   end
   FileList(end+1:end+length(nFileList)) = nFileList; % Add study files to the list
   cd(dirinit)
end


if exist('FileStringFilter','var') % Filter out  some file names that contain string FileStringFilter.
   iok = []; % Indices of the filenames that does not contain FileStringFilter
   for k=1:length(FileList)    
      for filt = 1:length(FileStringFilter)
         if ~isempty(strfind(FileList(k).name,FileStringFilter{filt}))
            iFlag = 1;
         end
      end
      if ~exist('iFlag','var')
         iok = [iok,k]; % Keep this file
      end
      
      clear('iFlag')
      
   end
   
   FileList = FileList(iok);
   
end

try % Secured file search
   cd(DirPath)
catch
   try 
      cd(fullfile(Users.STUDIES,DirPath))
   catch
      cd(fullfile(Users.SUBJECTS,DirPath))
   end
end

if(isempty(FileList)), % there are no files to process   
   % there ain't nothing to process
   DataDir = [];
   DataPopup = [];   
   cd(OrigFolder) % Go back to original calling folder
   return   
else
   FileList = {FileList.name};
end

%Leader = deblank(lower(Leader)); % reduced sensitivity
if(~strcmp(Leader(end),filesep)),
   % does not end in a file separator, add one
   Leader(end+1) = filesep;
end

% 11/6/99 remove the Leader to make a referential list
filess = FileList;
%FileList = strrep(FileList,fullfile(Users.STUDIES,Leader),'');
FileList = strrep(FileList,Leader,'');

DataPopup = char(FileList{:});
DataDir = FileList;

% switch lower(deblank(computer))
% case 'pcwin'
%     %ndx = findstr(char(FileList),sprintf('\n')); 
%     ndx = strmatch(FileList,sprintf('\n')); 
%     % the popup button needs these separated by '|'.
%     DataPopup = FileList; % map the character array
%     if ~isempty(ndx)
%         DataPopup(ndx(1:(end-1))) = '|'; % replace all but the last linefeed
%         DataPopup(ndx(end)) = []; % remove the last linefeed
%         % need convenient cell array. string is already terminated with linefeed
%         DataDir = cell(1,length(ndx)); % null entries
%         ndx = [0 ndx];  %prepend zero
%         
%         % scan through the string, parsing by EOL
%         for i = 1:(length(ndx)-1),
%             temp = FileList([(ndx(i)+1):(ndx(i+1)-1)]);
%             DataDir{i} = temp;
%         end
%     else
%         DataDir = DataPopup;
%     end
%     
% otherwise
%     ndx = 1:length(FileList);
%     DataPopup = FileList; % map the character array
%     for k = 1:length(FileList)
%         %[path,name,ext,ver] = fileparts(filess{k});
%         %tmp = strrep(filess{k},path,'');
%         %DataDir{k} = strrep(tmp,FileList{k},'');
%         DataDir{k} = FileList{k};
%     end
% end


if(~isempty(hf)), % user wants pull down menu of files
   switch lower(deblank(Type))
      case 'studies'
         
         hu = findobj(hf,'Tag','UimenuBSTStudy');
         if(~isempty(hu)), % existing menu
            delete(hu);
         end
         hu = uimenu(hf,'Label','BrainStorm Study','Tag','UimenuBSTStudy');
         
         for i = 1:length(DataDir),
            uimenu(hu,'Label',DataDir{i},'Callback',...
               sprintf('taskbar_userdata(find_brainstorm_structure(''%s''));',DataDir{i}));
         end
         if(0), % 11/4/99 JCM we don't need this
            uimenu(hu,'Label','Refresh Studies','Callback',...
               sprintf('find_brainstorm_files(''studies'',[],%.0f);',hf),...
               'Separator','On','Position',length(DataDir)+1);
         end
         
      case 'subjects'
         
         hu = findobj(hf,'Tag','UimenuBSTSubject');
         if(~isempty(hu)), % no menu
            delete(hu);
         end
         hu = uimenu(hf,'Label','BrainStorm Subject','Tag','UimenuBSTSubject','Position',11);
         
         for i = 1:length(DataDir),
            uimenu(hu,'Label',DataDir{i},'Callback',...
               sprintf('taskbar_userdata(find_brainstorm_structure(''%s''));',DataDir{i}));
         end
         if(0), % 11/4/99 JCM we don't need this
            uimenu(hu,'Label','Refresh Subjects','Callback',...
               sprintf('find_brainstorm_files(''subjects'',[],%.0f);',hf),...
               'Separator','On','Position',length(DataDir)+1);
         end
         
      otherwise
         % do nothing, we were looking for a file
   end
end

cd(OrigFolder) % Go back to original calling folder

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