Changeset 96 for aedes.m


Ignore:
Timestamp:
Oct 20, 2009, 10:21:23 AM (9 years ago)
Author:
tjniskan
Message:
  • Added a possibility of loading ROIs in NIfTI file format.
  • Added custom filter feature to aedes_juigetfiles

M aedes_data_read.m
M aedes.m
M aedes_revision.m
M aedes_juigetfiles.m

File:
1 edited

Legend:

Unmodified
Added
Removed
  • aedes.m

    r94 r96  
    20062006  % Default filepath
    20072007  try
    2008         filepath=getpref('Aedes','GetDataFileDir');
     2008    filepath=getpref('Aedes','GetDataFileDir');
    20092009  catch
    2010         filepath='';
     2010    filepath='';
    20112011  end
    20122012  [filefilt,dataformats] = aedes_getfilefilter;
     
    20142014  % Ask for a file
    20152015  if strcmpi(opt,'single')
    2016         [f_name, f_path, f_index] = uigetfile( ...
    2017           filefilt, ...
    2018           'Select data file',filepath);
    2019         if ( all(f_name==0) | all(f_path==0) ) % Cancel is pressed
    2020           return
    2021         end
     2016    [f_name, f_path, f_index] = uigetfile( ...
     2017      filefilt, ...
     2018      'Select data file',filepath);
     2019    if ( all(f_name==0) | all(f_path==0) ) % Cancel is pressed
     2020      return
     2021    end
    20222022  else
    2023         [f_name, f_path, f_index] = aedes_juigetfiles( ...
    2024           filefilt, ...
    2025           'Select data file(s)',filepath);
    2026         if ~iscell(f_name) && ~iscell(f_path)
    2027           if ( all(f_name==0) | all(f_path==0) ) % Cancel is pressed
    2028                 return
    2029           end
    2030         end
     2023    [f_name, f_path, f_index] = aedes_juigetfiles( ...
     2024      filefilt, ...
     2025      'Select data file(s)',filepath);
     2026    if ~iscell(f_name) && ~iscell(f_path)
     2027      if ( all(f_name==0) | all(f_path==0) ) % Cancel is pressed
     2028        return
     2029      end
     2030    end
    20312031  end
    20322032 
     
    20342034  % time...
    20352035  if ~iscell(f_name)
    2036         f_path = {f_path};
    2037         f_name = {f_name};
     2036    f_path = {f_path};
     2037    f_name = {f_name};
    20382038  end
    20392039 
     
    21092109if strcmpi(opt,'single') || length(f_name)==1
    21102110  try
    2111         DATA=aedes_data_read([f_path{1},f_name{1}]);
     2111    DATA=aedes_data_read([f_path{1},f_name{1}]);
    21122112  catch
    2113         h=errordlg({['Could not read file "',[f_path{1},f_name{1}],'"'],'',lasterr},...
    2114           'Error reading file', ...
    2115           'modal');
    2116         uiwait(h);
    2117         return
     2113    h=errordlg({['Could not read file "',[f_path{1},f_name{1}],'"'],'',lasterr},...
     2114      'Error reading file', ...
     2115      'modal');
     2116    uiwait(h);
     2117    return
    21182118  end
    21192119  % Set to Recent Files menu
    21202120  l_BuildRecentFilesMenu([],[],[],[f_path{1},f_name{1}]);
    2121 else   
     2121else
    21222122  DATA={};
    21232123  count=0;
    21242124  SkippedFiles={};
     2125  SkippedInd = [];
    21252126  [h,txh]=aedes_calc_wait({['Reading file 1/',...
    21262127        num2str(length(f_name))],'""'});
    21272128  for ii=1:length(f_name)
    2128         set(txh,'String',...
    2129           sprintf('%s\n%s',['Reading file ' num2str(ii) '/' num2str(length(f_name))],...
    2130           ['"',f_path{ii},f_name{ii},'"']))
    2131         drawnow
    2132         try
    2133           tmp=aedes_data_read([f_path{ii},f_name{ii}],'wbar','off');
    2134          
    2135           % Determine from the first file if we are reading one slice data into
    2136           % "mixed" cell arrayed format or 3D volumes into a 4D file
    2137           if ii==1
    2138                 if ndims(tmp.FTDATA)==3
    2139                   % Read 3D data into 4D array
    2140                   Read2Mixed = false;
    2141                   DATA = tmp;
    2142                 elseif ndims(tmp.FTDATA)==2
    2143                   % Read 2D slices into mixed cell array...
    2144                   Read2Mixed = true;
    2145                   DATA = {tmp};
    2146                 else
    2147                   % Throw error...
    2148                   Read2Mixed = false;
    2149                   error('Reading of multiple 4D files is not supported.')
    2150                 end
    2151           end
    2152           if ~Read2Mixed
    2153                 if isequal(size(DATA.FTDATA(:,:,:,1)),size(tmp.FTDATA))
    2154                   DATA.FTDATA(:,:,:,ii) = tmp.FTDATA;
    2155                 else
    2156                   count=count+1;
    2157                   SkippedFiles{count} = [f_path{ii},f_name{ii}];
    2158                   disp(['Aedes: Warning: Data size in file "',f_path{ii},...
    2159                         f_name{ii},'" does not match with the first data file! Skipping file...'])
    2160                 end
    2161           elseif Read2Mixed
    2162                 DATA{ii}=tmp;
    2163                 if length(size(tmp.FTDATA))>2
    2164                   count=count+1;
    2165                   SkippedFiles{count} = [f_path{ii},f_name{ii}];
    2166                   DATA{ii}=[];
    2167                   disp(['Aedes: Warning: File "',f_path{ii},...
    2168                         f_name{ii},'" contains multiple slices! Skipping file...'])
    2169                 end
    2170           end
    2171         catch
    2172           if ii==1
    2173                 h=errordlg({'Could not read file',...
    2174                   ['"',f_path{ii},f_name{ii},'"'],...
    2175                   '','Returned error:',lasterr},...
    2176                   'Could not read file','modal');
    2177                 DATA = [];
    2178                 break
    2179           elseif Read2Mixed
    2180                 count=count+1;
    2181                 SkippedFiles{count} = [f_path{ii},f_name{ii}];
    2182                 DATA{ii}=[];
    2183                 disp(['Aedes: Warning: Could not read file "',...
    2184                   f_path{ii},f_name{ii},'". Skipping file...'])
    2185           else
    2186                 % Throw the actual error and break
    2187                 h=errordlg({'Could not read file',...
    2188                   ['"',f_path{ii},f_name{ii},'"'],...
    2189                   '','Returned error:',lasterr},...
    2190                   'Could not read file','modal');
    2191                 DATA = [];
    2192                 break
    2193           end
    2194         end
     2129    set(txh,'String',...
     2130      sprintf('%s\n%s',['Reading file ' num2str(ii) '/' num2str(length(f_name))],...
     2131      ['"',f_path{ii},f_name{ii},'"']))
     2132    drawnow
     2133    try
     2134      tmp=aedes_data_read([f_path{ii},f_name{ii}],'wbar','off');
     2135     
     2136      % Determine from the first file if we are reading one slice data into
     2137      % "mixed" cell arrayed format or 3D volumes into a 4D file
     2138      if ii==1
     2139        if ndims(tmp.FTDATA)==3
     2140          % Read 3D data into 4D array
     2141          Read2Mixed = false;
     2142         
     2143          % Reserve space for data
     2144          DATA = tmp;
     2145          DATA.FTDATA = zeros(size(tmp.FTDATA,1),...
     2146            size(tmp.FTDATA,2),size(tmp.FTDATA,3),...
     2147            length(f_name),class(tmp.FTDATA));
     2148          DATA.FTDATA(:,:,:,1)=tmp.FTDATA;
     2149        elseif ndims(tmp.FTDATA)==2
     2150          % Read 2D slices into mixed cell array...
     2151          Read2Mixed = true;
     2152          DATA = {tmp};
     2153        else
     2154          % Throw error...
     2155          Read2Mixed = false;
     2156          error('Reading of multiple 4D files is not supported.')
     2157        end
     2158      end
     2159      if ~Read2Mixed
     2160        if isequal(size(DATA.FTDATA(:,:,:,1)),size(tmp.FTDATA))
     2161          DATA.FTDATA(:,:,:,ii) = tmp.FTDATA;
     2162        else
     2163          count=count+1;
     2164          SkippedFiles{count} = [f_path{ii},f_name{ii}];
     2165          disp(['Aedes: Warning: Data size in file "',f_path{ii},...
     2166            f_name{ii},'" does not match with the first data file! Skipping file...'])
     2167        end
     2168      elseif Read2Mixed
     2169        DATA{ii}=tmp;
     2170        if length(size(tmp.FTDATA))>2
     2171          count=count+1;
     2172          SkippedInd(end+1) = ii;
     2173          SkippedFiles{count} = [f_path{ii},f_name{ii}];
     2174          DATA{ii}=[];
     2175          disp(['Aedes: Warning: File "',f_path{ii},...
     2176            f_name{ii},'" contains multiple slices! Skipping file...'])
     2177        end
     2178      end
     2179    catch
     2180      if ii==1
     2181        h=errordlg({'Could not read file',...
     2182          ['"',f_path{ii},f_name{ii},'"'],...
     2183          '','Returned error:',lasterr},...
     2184          'Could not read file','modal');
     2185        DATA = [];
     2186        break
     2187      elseif Read2Mixed
     2188        count=count+1;
     2189        SkippedFiles{count} = [f_path{ii},f_name{ii}];
     2190        DATA{ii}=[];
     2191        disp(['Aedes: Warning: Could not read file "',...
     2192          f_path{ii},f_name{ii},'". Skipping file...'])
     2193      else
     2194        % Throw the actual error and break
     2195        h=errordlg({'Could not read file',...
     2196          ['"',f_path{ii},f_name{ii},'"'],...
     2197          '','Returned error:',lasterr},...
     2198          'Could not read file','modal');
     2199        DATA = [];
     2200        break
     2201      end
     2202    end
    21952203  end
    21962204  delete(h)
     
    21982206  % Ensure that there are no empty values in DATA
    21992207  if iscell(DATA)
    2200         empty_val=cellfun('isempty',DATA);
    2201         if all(empty_val)
    2202           DATA=[];
    2203         else
    2204           DATA(empty_val)=[];
    2205         end
     2208    empty_val=cellfun('isempty',DATA);
     2209    if all(empty_val)
     2210      DATA=[];
     2211    else
     2212      DATA(empty_val)=[];
     2213    end
     2214  end
     2215 
     2216  % Remove skipped volumes
     2217  if ~Read2Mixed && ~isempty(SkippedInd)
     2218    DATA.FTDATA(:,:,:,SkippedInd) = [];
    22062219  end
    22072220 
    22082221  % Warn about skipped files
    22092222  if count~=0
    2210         if isempty(DATA)
    2211           h=errordlg(['All files were skipped either due to errors ',...
    2212                 'or because they contained multiple slices.'],...
    2213                 'Could not read files','modal');
    2214           return
    2215         else
    2216           h=warndlg({['The following file(s) were ',...
    2217                 'skipped either due to errors or ',...
    2218                 'because they contained multiple slices:'],'',SkippedFiles{:}},...
    2219                 'Some Files Were Skipped','modal');
    2220           uiwait(h)
    2221         end
     2223    if isempty(DATA)
     2224      h=errordlg(['All files were skipped either due to errors ',...
     2225        'or because they contained multiple slices.'],...
     2226        'Could not read files','modal');
     2227      return
     2228    else
     2229      h=warndlg({['The following file(s) were ',...
     2230        'skipped either due to errors or ',...
     2231        'because they contained multiple slices:'],'',SkippedFiles{:}},...
     2232        'Some Files Were Skipped','modal');
     2233      uiwait(h)
     2234    end
    22222235  end
    22232236end
     
    57975810    isEPI=true;
    57985811  end
     5812
     5813  if isfield(Dat,'fMRIonsets') && ~isempty(Dat.fMRIonsets)
     5814    isEPI=true;
     5815  end
    57995816 
    58005817  % Determine time series dimension
     
    84168433
    84178434        % Ask for the ROI file
    8418         [f_name,f_path,f_index]=uigetfile({'*.roi;*.ROI',...
    8419           'Aedes ROI-Files (*.roi)';...
     8435        [f_name,f_path,f_index]=uigetfile({'*.roi;*.ROI;*.nii;*.NII;*.hdr;*.HDR',...
     8436          'ROI-Files (*.roi,*.nii,*,hdr)';...
    84208437          '*.*','All Files (*.*)'},...
    84218438          'Load ROI(s)',...
     
    84568473        % Store new directory in preferences
    84578474        setpref('Aedes','GetRoiFileDir',f_path)
    8458 
     8475       
     8476        % Get file parts
     8477        [fp,fn,fe]=fileparts([f_path,f_name]);
     8478       
    84598479        % Load ROI(s)
    84608480        try
    8461           tmp=load([f_path,f_name],'-mat');
     8481          if strcmpi(fe,'.roi')
     8482            tmp=load([f_path,f_name],'-mat');
     8483          else
     8484            [tmp_data,msg]=aedes_read_nifti([f_path,f_name]);
     8485            if isempty(tmp_data)
     8486              error(msg)
     8487            else
     8488              if ~strcmpi(class(tmp_data.FTDATA),'uint8') || ...
     8489                  min(tmp_data.FTDATA(:))~=0 || max(tmp_data.FTDATA(:))~=1
     8490                error('Not a valid NIfTI/Analyze75 ROI file.')
     8491              end
     8492            end
     8493           
     8494            % Construct a ROI structure
     8495            tmp.ROI = [];
     8496            %tmp.FileInfo = [];
     8497            tmp.ROI.voxels{1} = tmp_data.FTDATA;
     8498            tmp.ROI.fpath{1} = [fp,filesep];
     8499            tmp.ROI.fname{1} = f_name;
     8500            tmp.ROI.label = 'NIfTI ROI';
     8501            tmp.ROI.color = [255 0 0];
     8502            %tmp.FileInfo.DataFileName{1} = '';
     8503            %tmp.FileInfo.DataPathName{1} = '';
     8504            clear tmp_data
     8505          end
    84628506        catch
    84638507          h=errordlg({'Could not load ROI file',['"',f_path,f_name,'"'],...
     
    84718515        if ~isempty(tmp) && isstruct(tmp)
    84728516          fldnames=fieldnames(tmp);
    8473           if length(find(ismember(fldnames,{'ROI','FileInfo'})))<2
     8517          if ~any(strcmp(fldnames,'ROI'))%length(find(ismember(fldnames,{'ROI','FileInfo'})))<2
    84748518            h=errordlg({'Required fields were not found from the file',...
    84758519              [f_path,f_name]},'Required field not found!','modal');
     
    85768620            %  return
    85778621            %end
    8578             if ~strcmp(tmp.FileInfo.DataFileName{ii},Dat.HDR{ii}.fname) || ...
    8579                 ~strcmp(tmp.FileInfo.DataPathName{ii},Dat.HDR{ii}.fpath)
    8580               equalFiles = false;
     8622            if isfield(tmp,'FileInfo') && ~isempty(tmp.FileInfo.DataFileName{ii})
     8623              if ~strcmp(tmp.FileInfo.DataFileName{ii},Dat.HDR{ii}.fname) || ...
     8624                  ~strcmp(tmp.FileInfo.DataPathName{ii},Dat.HDR{ii}.fpath)
     8625                equalFiles = false;
     8626              end
    85818627            end
    85828628          end
Note: See TracChangeset for help on using the changeset viewer.

Powered by Trac 1.0.9.Copyright © Juha-Pekka Niskanen 2008