Commit 402d7875 authored by jayd1860's avatar jayd1860
Browse files

v1.50.0

-- Fix another channel order bug in DataClass.GetDataTimeSeries. order need to match linear order when squeezing dimensions > 1 into 1D. This caused incorrect results to be displayed for concentration HbT after running  hmrR_MotionCorrectCbsi
-- Fix minor display issue in MainGUI.m icorrectly enabling OD and concentration radio buttons even though no results exists.
-- Add diagnostic/debug functions to unit test to generate simulated data time series whose data identifies the channel it originated in.
parent 48ea9bf4
Loading
Loading
Loading
Loading
+42 −35
Original line number Diff line number Diff line
@@ -479,8 +479,8 @@ classdef DataClass < FileLoadSaveClass
            end
                      
            dataTypeLabels = {};
            srcs = zeros(0,2);
            dets = zeros(0,2);
            srcs = zeros(0,1);
            dets = zeros(0,1);
            conditions = [];
            wavelengths = [];
            hh=1; jj=1; kk=1; ll=1; mm=1;
@@ -507,24 +507,31 @@ classdef DataClass < FileLoadSaveClass
                end
            end
            
            hbTypes         = {'hbo','hbr','hbt'};
            % Sort all the dimension data
            srcs            = sort(srcs);
            dets            = sort(dets);
            wavelengths     = sort(wavelengths);
            hbTypes         = sort(dataTypeLabels);            
            conditions      = sort(conditions);
            
            nWavelengths    = length(wavelengths);
            nDataTypeLabels = length(dataTypeLabels);
            nDataTypeLabels = length(hbTypes);
            nCond           = length(conditions);
            measurementList = obj.GetMeasurementList('matrix');            
            ml              = obj.GetMeasListSrcDetPairs('reshape');

            measurementListFull = obj.GetMeasurementList('matrix');
            measurementListSDpairs = obj.GetMeasListSrcDetPairs('reshape');
            
            kk = 1;
            if nWavelengths > 0 && nCond == 0
                
                for iWl = 1:nWavelengths
                for iS = 1:length(srcs)
                    for iD = 1:length(dets)
                        for iWl = 1:nWavelengths
                            
                            k = find(measurementList(:,1)==srcs(iS) & measurementList(:,2)==dets(iD) & measurementList(:,4)==iWl);
                            k = find(measurementListFull(:,1)==srcs(iS) & measurementListFull(:,2)==dets(iD) & measurementListFull(:,4)==wavelengths(iWl));
                            if ~isempty(k)
                                iSrcDetPair = find(ml(:,1)==srcs(iS) & ml(:,2)==dets(iD));
                                d(:, iWl, iSrcDetPair) = obj.dataTimeSeries(:,k); %#ok<*FNDSB>
                                iSDPair = find(measurementListSDpairs(:,1)==srcs(iS) & measurementListSDpairs(:,2)==dets(iD));
                                d(:, iWl, iSDPair) = obj.dataTimeSeries(:,k); %#ok<*FNDSB>
                                order(kk) = k;
                                kk = kk+1;
                            end
@@ -535,15 +542,15 @@ classdef DataClass < FileLoadSaveClass
                
            elseif nWavelengths > 0 && nCond > 0 
                
                for iWl = 1:nWavelengths
                for iS = 1:length(srcs)
                    for iD = 1:length(dets)
                        for iWl = 1:nWavelengths
                            for iCond = 1:nCond
                                
                                k = find(measurementList(:,1)==srcs(iS) & measurementList(:,2)==dets(iD) & measurementList(:,3)==iCond &  measurementList(:,4)==iWl);
                                k = find(measurementListFull(:,1)==srcs(iS) & measurementListFull(:,2)==dets(iD) & measurementListFull(:,3)==iCond &  measurementListFull(:,4)==wavelengths(iWl));
                                if ~isempty(k)
                                    iSrcDetPair = find(ml(:,1)==srcs(iS) & ml(:,2)==dets(iD));
                                    d(:, iWl, iSrcDetPair, iCond) = obj.dataTimeSeries(:,k);
                                    iSDPair = find(measurementListSDpairs(:,1)==srcs(iS) & measurementListSDpairs(:,2)==dets(iD));
                                    d(:, iWl, iSDPair, iCond) = obj.dataTimeSeries(:,k);
                                    order(kk) = k;
                                    kk = kk+1;
                                end
@@ -555,14 +562,14 @@ classdef DataClass < FileLoadSaveClass
                
            elseif nDataTypeLabels > 0 && nCond == 0 
                
                for iHbType = 1:length(hbTypes)
                for iS = 1:length(srcs)
                    for iD = 1:length(dets)
                        for iHbType = 1:length(hbTypes)
                            
                            k = find(measurementList(:,1)==srcs(iS) & measurementList(:,2)==dets(iD) & measurementList(:,4)==iHbType);
                            k = find(measurementListFull(:,1)==srcs(iS) & measurementListFull(:,2)==dets(iD) & measurementListFull(:,4)==iHbType);
                            if ~isempty(k)
                                iSrcDetPair = find(ml(:,1)==srcs(iS) & ml(:,2)==dets(iD));
                                d(:, iHbType, iSrcDetPair) = obj.dataTimeSeries(:,k);
                                iSDPair = find(measurementListSDpairs(:,1)==srcs(iS) & measurementListSDpairs(:,2)==dets(iD));
                                d(:, iHbType, iSDPair) = obj.dataTimeSeries(:,k);
                                order(kk) = k;
                                kk = kk+1;
                            end
@@ -573,15 +580,15 @@ classdef DataClass < FileLoadSaveClass
                
            elseif nDataTypeLabels > 0 && nCond > 0 
                
                for iHbType = 1:length(hbTypes)
                for iS = 1:length(srcs)
                    for iD = 1:length(dets)
                        for iHbType = 1:length(hbTypes)
                            for iCond = 1:nCond

                                k = find(measurementList(:,1)==srcs(iS) & measurementList(:,2)==dets(iD) & measurementList(:,3)==iCond &  measurementList(:,4)==iHbType);
                                k = find(measurementListFull(:,1)==srcs(iS) & measurementListFull(:,2)==dets(iD) & measurementListFull(:,3)==iCond &  measurementListFull(:,4)==iHbType);
                                if ~isempty(k)
                                    iSrcDetPair = find(ml(:,1)==srcs(iS) & ml(:,2)==dets(iD));
                                    d(:, iHbType, iSrcDetPair, iCond) = obj.dataTimeSeries(:,k);
                                    iSDPair = find(measurementListSDpairs(:,1)==srcs(iS) & measurementListSDpairs(:,2)==dets(iD));
                                    d(:, iHbType, iSDPair, iCond) = obj.dataTimeSeries(:,k);
                                    order(kk) = k;
                                    kk = kk+1;
                                end
+2 −2
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ if isempty(mlActAuto)
end

for iBlk = 1:length(data_dc)
    dc = data_dc(iBlk).GetDataTimeSeries('reshape');
    [dc, order] = data_dc(iBlk).GetDataTimeSeries('reshape');
    ml = data_dc(iBlk).GetMeasListSrcDetPairs('reshape');
        
    mlActAuto{iBlk} = mlAct_Initialize(mlActAuto{iBlk}, ml);
@@ -71,7 +71,7 @@ for iBlk = 1:length(data_dc)
        dcCbsi(:,2,idx_ch) = -(1/alfa)*dcCbsi(:,1,idx_ch);
        dcCbsi(:,3,idx_ch) = dcCbsi(:,1,idx_ch) + dcCbsi(:,2,idx_ch);
    end
    dcCbsi = reshape(dcCbsi, size(dcCbsi,1), size(dcCbsi,2)*size(dcCbsi,3));    
    dcCbsi(:,order) = dcCbsi(:,:);
    data_dc(iBlk).SetDataTimeSeries(dcCbsi);
end
+7 −3
Original line number Diff line number Diff line
@@ -115,13 +115,15 @@ set(handles.textPanDisplay, 'enable', val);
% Plot type selected panel
set(handles.listboxPlotConc, 'enable', val);
set(handles.listboxPlotWavelength, 'enable', val);

set(handles.radiobuttonPlotRaw, 'enable', val);
set(handles.radiobuttonPlotOD,  'enable', val);
set(handles.radiobuttonPlotConc, 'enable', val);
set(handles.checkboxPlotHRF, 'enable', val);

set(handles.popupmenuAux, 'enable', val);
set(handles.checkboxPlotAux, 'enable', val);
set(handles.popupmenuConditions, 'enable', val);
set(handles.checkboxPlotHRF, 'enable', val);

% Motion artifact panel
set(handles.checkboxShowExcludedTimeManual, 'enable', val);
@@ -252,6 +254,10 @@ InitGuiControls(handles);

% Display data from currently selected processing element
DisplayGroupTree(handles);

% If data set has no errors enable window gui objects
MainGUI_EnableDisableGUI(handles,'on');

Display(handles, hObject);

% Store Original X and Y Lims for AxesSDG
@@ -269,8 +275,6 @@ set(hObject,'name', title);
maingui.logger.InitChapters()
maingui.logger.CurrTime(sprintf('MainGUI: Startup time - %0.1f seconds\n', toc(startuptimer)));

% If data set has no errors enable window gui objects
MainGUI_EnableDisableGUI(handles,'on');



+31 −0
Original line number Diff line number Diff line
function obj = generateSimData(obj)
d = [];
if ischar(obj)
    obj = SnirfClass(obj);
    d = obj.data;
elseif isa(obj, 'SnirfClass')
    d = obj.data;
elseif isa(obj, 'DataClass')
    d = obj;
    obj = SnirfClass(d);
end
ml = d.GetMeasurementList('matrix');
for iBlk = length(d)
    nTpts = size(d(iBlk).dataTimeSeries,1);
    for iM = 1:length(d(iBlk).measurementList)
        data = ml(iM,:);
        stepsize = floor(nTpts / length(data));
        for iDt = 1:length(data)
            y = data(iDt);
            iTptS = (iDt-1) * stepsize + 1;
            iTptE = iTptS + stepsize - 1;            
            if iTptE > nTpts
                iTptE = nTpts;
            end
            d(iBlk).dataTimeSeries(iTptS:iTptE, iM) = y;
        end
    end
end

obj.data = d;
+14 −0
Original line number Diff line number Diff line
function k = plotDataTimeSeries(y, iS, iD, iDt, option)
if ~exist('option','var')
    option = '';
end
ml = y.GetMeasurementList('matrix');
k = find(ml(:,1)==iS & ml(:,2)==iD & ml(:,4)==iDt);
if ishandle(1)
    if ~strcmp(option,'keep') && ~strcmp(option,'keepopen') && ~strcmp(option,'open')
        close(1);
    end
end
figure
plot(y.dataTimeSeries(:,k))
Loading