Commit 9fb39d61 authored by Jay's avatar Jay
Browse files

v1.20.0

-- When SNIRF format (or any other supported file format) changes and old .snirf don't load properly, but .nirs files exist in the same subject folder then offer to delete or move the .snirf in order to regenerate the .snirf from .nirs files.

-- Add textLineWidth parameter to MenuBox.m in order to allow explicit control over the width of the menu box window and override the automatic calculation of the width.

-- Rename DeleteSnirfFiles.m to DeleteDataFiles.m which is a more general utility for any format and which allows the options of moving instead of deleting files or restoring the old files back to their active names (e.g., <filename>.snirf.old to <filename>.snirf) for debugging purposes
parent 529848ce
Loading
Loading
Loading
Loading
+101 −0
Original line number Diff line number Diff line
function DeleteDataFiles(varargin)

% Syntax:
%
%   DeleteDataFiles()
%   DeleteDataFiles(dirname)
%   DeleteDataFiles(dirname, datafiles0)
%   DeleteDataFiles(dirname, format)
%   DeleteDataFiles(dirname, datafiles0, options)
%   DeleteDataFiles(dirname, format, options)
%
% Description:
%   
%   Delete all .<format extension> files in group folder. DeleteDataFiles will find all 
%   .<format extension> data acquisition files in the group folder. If dirname is not supplied it'll 
%   treat the current working directory as the group folder. 
%
% Examples:
%
%   1. Delete all .snirf files in the Homer3 Examples directory
%
%       DeleteDataFiles('C:\jdubb\workspaces\Homer3\DataTree\AcquiredData\Snirf\Examples', '.snirf')
%
%   2. Delete all .nirs files files in the current group folder
%
%       DeleteDataFiles(pwd, '.nirs)
%
%

global supportedFormats
if isempty(supportedFormats)
    supportedFormats = {
    '.snirf',0;
    '.nirs',0;
    };
end


% Set argument defaults
dirname = convertToStandardPath(pwd);
format = supportedFormats{1};
datafiles0 = [];
options = 'delete';


% Parse arguments
if nargin==1
    dirname = convertToStandardPath(varargin{1});
elseif nargin==2
    dirname = convertToStandardPath(varargin{1});
    if ischar(varargin{2})
        format = varargin{2};
    else
        datafiles0 = varargin{2};
    end
elseif nargin==3
    dirname = convertToStandardPath(varargin{1});
    if ischar(varargin{2})
        format = varargin{2};
    else
        datafiles0 = varargin{2};
    end
    options = varargin{3};
end
if isempty(datafiles0)
    datafiles0 = DataFilesClass(dirname, format, 'standalone').files;
end


% Get final list of data files
datafiles = mydir(dirname);
if iscell(datafiles0)
    for ii=1:length(datafiles0)
        datafiles(ii) = mydir([dirname, datafiles0{ii}]);
    end
elseif ischar(datafiles0)
    datafiles = mydir([dirname, datafiles0]);
elseif isa(datafiles0, 'FileClass')
    datafiles = datafiles0;
end


% Delete data files
for ii=1:length(datafiles)
    if datafiles(ii).isdir
        continue;
    end
    if strcmp(options, 'delete')
        fprintf('Deleting %s\n', [datafiles(ii).pathfull, '/', datafiles(ii).name]);
        delete([datafiles(ii).pathfull, '/', datafiles(ii).name]);
    elseif strcmp(options, 'move')
        fprintf('Moving %s to %s\n', [datafiles(ii).pathfull, '/', datafiles(ii).name], [datafiles(ii).pathfull, '/', datafiles(ii).name, '.old']);
        movefile([datafiles(ii).pathfull, '/', datafiles(ii).name], [datafiles(ii).pathfull, '/', datafiles(ii).name, '.old']);
    elseif strcmp(options, 'restore')
        [pname, fname] = fileparts(datafiles(ii).name);
        fprintf('Restoring %s to %s\n', [datafiles(ii).pathfull, '/', datafiles(ii).name], [datafiles(ii).pathfull, '/', pname, '/', fname]);
        movefile([datafiles(ii).pathfull, '/', datafiles(ii).name], [datafiles(ii).pathfull, '/', pname, '/', fname]);
    end
    pause(0.25);
end
+0 −57
Original line number Diff line number Diff line
function DeleteSnirfFiles(dirname, snirffiles0)

% Syntax:
%
%   DeleteSnirfFiles()
%   DeleteSnirfFiles(dirname)
%   DeleteSnirfFiles(dirname, snirffiles0)
%
% Description:
%   
%   Delete all .snirf files in group folder. The group folder is same
%   concept as in Homer3 so DeleteSnirfFiles will find all .snirf data 
%   acquisition files in folder dirname. If dirname is not supplied it'll 
%   treat the current working directory as the group folder. If snirffiles0
%   if supplied it'll delete.
%
% Examples:
%
%   1. Delete all .snirf files in the Homer3 Examples directory
%
%       DeleteSnirfFiles('C:\jdubb\workspaces\Homer3\DataTree\AcquiredData\Snirf\Examples')
%
%   2. Delete all .snirf files in the current group folder
%
%       DeleteSnirfFiles()
%
%

if ~exist('dirname','var')
    dirname = pwd;
end
dirname = convertToStandardPath(dirname);

if ~exist('snirffiles0','var')
    snirffiles0 = DataFilesClass(dirname, '.snirf', 'standalone').files;
end

snirffiles = mydir(dirname);
if iscell(snirffiles0)
    for ii=1:length(snirffiles0)
        snirffiles(ii) = mydir([dirname, snirffiles0{ii}]);
    end
elseif ischar(snirffiles0)
    snirffiles = mydir([dirname, snirffiles0]);
elseif isa(snirffiles0, 'FileClass')
    snirffiles = snirffiles0;
end

for ii=1:length(snirffiles)
    if snirffiles(ii).isdir
        continue;
    end
    fprintf('Deleting %s\n', [snirffiles(ii).pathfull, '/', snirffiles(ii).name]);
    delete([snirffiles(ii).pathfull, '/', snirffiles(ii).name]);
    pause(0.25);
end
+1 −1
Original line number Diff line number Diff line
@@ -65,7 +65,7 @@ while files.isempty()
                        q = MenuBox([msg{:}], {'YES','NO'}, 'center');
                    end
                    if q==2
                        files = DataFilesClass(dirnameGroup);
                        files = [];
                        return;
                    end
                end
+1 −1
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ function demo_snirf()
examplesDir = findexamplesdir(); 

% Delete any previously generated .snirf files to make sure to start from scratch
DeleteSnirfFiles(examplesDir, 'standalone');
DeleteDataFiles(examplesDir, '.snirf');

% Start with .nirs files
nirsfiles = mydir([examplesDir, '*.nirs']);
+64 −5
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@ classdef DataTreeClass < handle
            obj.SetCurrElem(1,1,1);
            
            obj.warningflag = 0;
            
        end
        
        
@@ -79,12 +80,68 @@ classdef DataTreeClass < handle
        
        
        % --------------------------------------------------------------
        function status = SelectOptionsWhenLoadFails(obj, ~)
        function status = FoundDataFilesInOtherFormat(obj, dataInit)            
            global supportedFormats
            status = false;
            k = [];

            format0 = dataInit.type;
            
            % Find index of another file format to try
            for ii = 1:length(supportedFormats)
                if ~isempty(findstr(dataInit.type, supportedFormats{ii,1}))
                   k = ii;
                   break;
                end
            end
            if isempty(k)
                return;
            end
            if k<length(supportedFormats) && k>1
                k = k-1;
            elseif k<length(supportedFormats)
                k = k+1;
            else
                k = [];
            end
            if ~isempty(k)
                dataInit = FindFiles(obj.dirnameGroup, supportedFormats{k});
                if isempty(dataInit) || dataInit.isempty()
                    return;
                end
            else
                dataInit = [];
            end
            
            if ~isempty(dataInit)
                msg{1} = sprintf('Could not load any of the .%s files in the group folder but did find .%s files. ', format0, dataInit.type);
                msg{3} = sprintf('Do you want to rename the .%s files to names with a .old extension, delete them or cancel? ', format0);
                msg{2} = sprintf('NOTE: Renaming or deleting the .%s files will allow Homer3 to regenerate them from .%s file later.', ...
                    format0, dataInit.type);
                q = MenuBox([msg{:}], {'Rename (Recommended)','Delete','CANCEL'}, [], 90);
                if q==1
                    DeleteDataFiles(obj.dirnameGroup, format0, 'move')
                    status = true;
                elseif q==2
                    DeleteDataFiles(obj.dirnameGroup, format0)
                    status = true;
                end
            end            
        end

        
        
        % --------------------------------------------------------------
        function status = SelectOptionsWhenLoadFails(obj)
            status = -1;
    
            %             msg{1} = sprintf('Could not load any of the requested files in the group folder %s. ', obj.dirnameGroup);
            %             msg{2} = sprintf('Do you want to select another group folder?');
            %             q = MenuBox([msg{:}], {'YES','NO'});
                        
            msg{1} = sprintf('Could not load any of the requested files in the group folder %s. ', obj.dirnameGroup);
            msg{2} = sprintf('Do you want to select another group folder?');
            q = MenuBox([msg{:}], {'YES','NO'});
            q = MenuBox([msg{:}], {'YES','NO'}, [], 110);
            if q==2
                obj.logger.Write(sprintf('Skipping group folder %s...\n', obj.dirnameGroup));
                obj.dirnameGroup = 0;
@@ -122,7 +179,9 @@ classdef DataTreeClass < handle
                    
                    obj.LoadGroup(procStreamCfgFile);
                    if length(obj.groups) < iGnew
                        if SelectOptionsWhenLoadFails(obj, dataInit)<0
                        if obj.FoundDataFilesInOtherFormat(dataInit) 
                            continue;
                        elseif obj.SelectOptionsWhenLoadFails()<0
                            break;
                        end
                    end
Loading