Commit 54a831e5 authored by jayd1860's avatar jayd1860
Browse files

v1.42.4

-- Fix bugs found by Meryem in fNIRS 2018 course SS_DEMO_1, Finger_Tapping_*.snirf.

Errors when running processing stream in
1. hmrR_MotionArtifact fixed by getting rid of 'reshape' option to DataTimeSeries()
2. hmrR_OD2Conc.m fixed by getting rid of 'reshape' option to DataTimeSeries()
3. hmrR_GLM.m fixed in DataClass.m by NOT assuming source and detector indices do not skip numbers

-- Just like for hmrR_MotionArtifact.m no need to reshape for hmrR_MotionArtifactByChannel.m since the

-- Better error/warning logging in DataFilesClass.m and FileLoadSaveClass.m
parent 1c45ec6d
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -472,19 +472,19 @@ classdef DataFilesClass < handle
                if obj.files(ii).isdir
                    continue;
                end
                filename = obj.files(ii).name;
                filename = [obj.rootdir, obj.files(ii).name];
                eval( sprintf('o = %s(filename);', constructor) );
                if  o.GetError() < 0
                    obj.logger.Write('DataFilesClass.ErrorCheck - ERROR: In file "%s" %s. File will not be added to data set\n', filename, o.GetErrorMsg());
                    obj.logger.Write('DataFilesClass.ErrorCheck - ERROR: In file "%s" %s. File will not be added to data set\n', obj.files(ii).name, o.GetErrorMsg());
                    errorIdxs = [errorIdxs, ii]; %#ok<AGROW>
                elseif  contains(o.GetErrorMsg(), '''data'' field corrupt and unusable')                    
                    obj.logger.Write('DataFilesClass.ErrorCheck - WARNING: In file "%s" %s. File will not be added to data set\n', filename, o.GetErrorMsg());
                    obj.logger.Write('DataFilesClass.ErrorCheck - WARNING: In file "%s" %s. File will not be added to data set\n', obj.files(ii).name, o.GetErrorMsg());
                    errorIdxs = [errorIdxs, ii]; %#ok<AGROW>
                elseif  contains(o.GetErrorMsg(), '''data'' field is invalid')                    
                    obj.logger.Write('DataFilesClass.ErrorCheck - WARNING: In file "%s" %s. File will not be added to data set\n', filename, o.GetErrorMsg());
                    obj.logger.Write('DataFilesClass.ErrorCheck - WARNING: In file "%s" %s. File will not be added to data set\n', obj.files(ii).name, o.GetErrorMsg());
                    errorIdxs = [errorIdxs, ii]; %#ok<AGROW>
                elseif ~isempty(o.GetErrorMsg())
                    obj.logger.Write('DataFilesClass.ErrorCheck - WARNING: In file  "%s"  %s. File will be added anyway.\n', filename, o.GetErrorMsg());
                    obj.logger.Write('DataFilesClass.ErrorCheck - WARNING: In file  "%s"  %s. File will be added anyway.\n', obj.files(ii).name, o.GetErrorMsg());
                    dataflag = true;
                else
                    dataflag = true;
+0 −1
Original line number Diff line number Diff line
@@ -144,7 +144,6 @@ classdef FileLoadSaveClass < matlab.mixin.Copyable
        function err = GetError(obj)
            err = [];
            if isempty(obj)
                fprintf('Warning: object is empty.')
                return
            end
            err = obj.err;
+12 −12
Original line number Diff line number Diff line
@@ -476,11 +476,11 @@ classdef DataClass < FileLoadSaveClass
                        for iD = 1:length(dets)
                            
                            for ii = 1:length(obj.measurementList)
                                if obj.measurementList(ii).sourceIndex == iS && ...
                                   obj.measurementList(ii).detectorIndex == iD &&  ...
                                if obj.measurementList(ii).sourceIndex == srcs(iS) && ...
                                   obj.measurementList(ii).detectorIndex == dets(iD) &&  ...
                                   obj.measurementList(ii).wavelengthIndex == iWl
                                    
                                    iSrcDetPair = find(ml(:,1)==iS & ml(:,2)==iD);
                                    iSrcDetPair = find(ml(:,1)==srcs(iS) & ml(:,2)==dets(iD));
                                    d(:, iWl, iSrcDetPair) = obj.dataTimeSeries(:,ii); %#ok<*FNDSB>
                                    
                                    
@@ -503,12 +503,12 @@ classdef DataClass < FileLoadSaveClass
                            for iCond = 1:nCond
                            
                                for ii = 1:length(obj.measurementList)
                                    if obj.measurementList(ii).sourceIndex == iS && ...
                                       obj.measurementList(ii).detectorIndex == iD &&  ...
                                    if obj.measurementList(ii).sourceIndex == srcs(iS) && ...
                                       obj.measurementList(ii).detectorIndex == dets(iD) &&  ...
                                       obj.measurementList(ii).wavelengthIndex == iWl && ...
                                       obj.measurementList(ii).dataTypeIndex == iCond
                                        
                                        iSrcDetPair = find(ml(:,1)==iS & ml(:,2)==iD);
                                        iSrcDetPair = find(ml(:,1)==srcs(iS) & ml(:,2)==dets(iD));
                                        d(:, iWl, iSrcDetPair, iCond) = obj.dataTimeSeries(:,ii);
                                        
                                        order(kk) = ii;
@@ -530,11 +530,11 @@ classdef DataClass < FileLoadSaveClass
                        for iD = 1:length(dets)
                            
                            for ii = 1:length(obj.measurementList)
                                if obj.measurementList(ii).sourceIndex == iS && ...
                                   obj.measurementList(ii).detectorIndex == iD && ...
                                if obj.measurementList(ii).sourceIndex == srcs(iS) && ...
                                   obj.measurementList(ii).detectorIndex == dets(iD) && ...
                                   ~isempty(strfind(lower(obj.measurementList(ii).dataTypeLabel), hbTypes{iHbType}))

                                    iSrcDetPair = find(ml(:,1)==iS & ml(:,2)==iD);
                                    iSrcDetPair = find(ml(:,1)==srcs(iS) & ml(:,2)==dets(iD));
                                    d(:, iHbType, iSrcDetPair) = obj.dataTimeSeries(:,ii);

                                    order(kk) = ii;
@@ -557,12 +557,12 @@ classdef DataClass < FileLoadSaveClass
                            for iCond = 1:nCond
                            
                                for ii = 1:length(obj.measurementList)
                                    if obj.measurementList(ii).sourceIndex == iS && ...
                                       obj.measurementList(ii).detectorIndex == iD &&  ...
                                    if obj.measurementList(ii).sourceIndex == srcs(iS) && ...
                                       obj.measurementList(ii).detectorIndex == dets(iD) &&  ...
                                       ~isempty(strfind(lower(obj.measurementList(ii).dataTypeLabel), hbTypes{iHbType})) && ...
                                       obj.measurementList(ii).dataTypeIndex == iCond
                                        
                                        iSrcDetPair = find(ml(:,1)==iS & ml(:,2)==iD);
                                        iSrcDetPair = find(ml(:,1)==srcs(iS) & ml(:,2)==dets(iD));
                                        d(:, iHbType, iSrcDetPair, iCond) = obj.dataTimeSeries(:,ii);
                                        
                                        order(kk) = ii;
+17 −27
Original line number Diff line number Diff line
@@ -92,9 +92,9 @@ end

for iBlk=1:length(data)

    d           = data(iBlk).GetDataTimeSeries('reshape');
    d           = data(iBlk).GetDataTimeSeries();
    fs          = data(iBlk).GetTime();
    MeasList    = data(iBlk).GetMeasList('reshape');
    MeasList    = data(iBlk).GetMeasList();
    Lambda      = probe.GetWls();
    nWav        = length(Lambda);
    
@@ -113,20 +113,17 @@ for iBlk=1:length(data)
    end
    MeasListAct = mlActMan{iBlk} & mlActAuto{iBlk};        
      
    % Calculate the diff of d to to set the threshold if ncssesary
    diff_d = diff(d);
    
    % set artifact buffer for tMask seconds on each side of spike
    art_buffer = round(tMask*fs); % time in seconds times sample rate
    
    % get list of active channels
    lstAct = zeros(size(MeasList,1),1);
    lst1 = find(MeasList(:,4)==1);
    for ii=1:nWav
    for iW = 1:nWav
        for jj = 1:length(lst1)
            lst(jj) = find(MeasList(:,1) == MeasList(lst1(jj),1) & ...
                           MeasList(:,2) == MeasList(lst1(jj),2) & ...
                MeasList(:,4)==ii );
                           MeasList(:,4) == iW );
            lstAct(lst(jj)) = MeasListAct(jj);
        end
    end
@@ -142,7 +139,6 @@ for iBlk=1:length(data)
    end
    
    % find indices with motion artifacts based on std_thresh or amp_thresh
    bad_inds = [];
    mc_thresh = std_diff*std_thresh;
    bad_inds = find( max(max_diff  >  ones(size(max_diff,1),1) * mc_thresh, [], 2) == 1 | ...
                     max(max_diff,[],2) > amp_thresh );
@@ -159,12 +155,6 @@ for iBlk=1:length(data)
        tIncAuto{iBlk}(1+bad_inds) = 0; % bad inds calculated on diff so add 1        
    end
       
    % calculate the variance due to motion relative to total variance
    lst = find(tIncAuto{iBlk}==0);
    dstd0 = std(d(lst,:),[],1);
    lst = find(tIncAuto{iBlk}==1);
    dstd1 = std(d(lst,:),[],1);
    
end

+14 −21
Original line number Diff line number Diff line
@@ -91,9 +91,9 @@ end

for iBlk = 1:length(data)
    
    d           = data(iBlk).GetDataTimeSeries('reshape');
    d           = data(iBlk).GetDataTimeSeries();
    fs          = data(iBlk).GetTime();
    MeasList    = data(iBlk).GetMeasList('reshape');
    MeasList    = data(iBlk).GetMeasList();
    Lambda      = probe.GetWls();
    
    if length(fs)~=1
@@ -116,7 +116,6 @@ for iBlk=1:length(data)
    MeasListAct = mlActMan{iBlk} & mlActAuto{iBlk};      
        
    % Calculate the diff of d to to set the threshold if ncssesary
    diff_d = diff(d);
       
    % set artifact buffer for tMask seconds on each side of spike
    art_buffer = round(tMask*fs); % time in seconds times sample rate
@@ -155,7 +154,7 @@ for iBlk=1:length(data)
        bad_inds = zeros(size(max_diff));
        mc_thresh = std_diff*std_thresh;
        for ii = 1:length(lstActTmp)
            bad_inds(:,ii) = max( [max_diff(:,ii)>mc_thresh(ii) max_diff(:,ii)>amp_thresh], [],2);
            bad_inds(:,ii) = max( [ max_diff(:,ii)>mc_thresh(ii), max_diff(:,ii)>amp_thresh ], [], 2);
        end
        bad_inds = find(max(bad_inds,[],2)==1);
        
@@ -177,11 +176,5 @@ for iBlk=1:length(data)
    tInc{iBlk}(find(tIncMan{iBlk}==0)) = 0;
    tIncCh{iBlk}(find(tIncMan{iBlk}==0),:) = 0;
    
    % calculate the variance due to motion relative to total variance
    lst = find(tInc{iBlk}==0);
    dstd0 = std(d(lst,:),[],1);
    lst = find(tInc{iBlk}==1);
    dstd1 = std(d(lst,:),[],1);
    
end
Loading