Commit f0b7e845 authored by Jay Dubb's avatar Jay Dubb
Browse files

v1.28.2

-- Backed out first step change to allow child GUIs to disable/enable synchronized browsing of data tree with MainGUI. It is not a good approach to change the currElem in datatree works and will needlessly overcomplicate things. Will revisit this feature in next commit with simpler approach that dos not involve major change to currElem mechanism, but rather ewach GUI will be responsible for creating it's own copy of currElem and this code will be generilized in a single utility so it can be eaily reused by any GUI.
parent 2c7986d6
Loading
Loading
Loading
Loading
+30 −68
Original line number Diff line number Diff line
@@ -20,14 +20,12 @@ classdef DataTreeClass < handle
            global logger
            
            obj.groups              = GroupClass().empty();
            obj.currElem            = TreeNodeClass().empty();
            obj.reg                 = RegistriesClass().empty();
            obj.config              = ConfigFileClass().empty();
            obj.dirnameGroups       = {};
            obj.logger              = InitLogger(logger, 'DataTree');
            obj.currElem            = TreeNodeClass().empty();
            for ii = 1:length(10)
                obj.currElem(ii) = TreeNodeClass();
            end
            
            
            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
            % Parse args
@@ -106,11 +104,8 @@ classdef DataTreeClass < handle
        
        
        % --------------------------------------------------------------
        function Copy(obj, obj2, iC)
            if ~exist('iC','var') || isempty(iC)
                iC = 1;
            end
            idx = obj2.currElem(iC).GetIndexID();
        function Copy(obj, obj2)
            idx = obj2.currElem.GetIndexID();
            iG = idx(1);
            iS = idx(2);
            iR = idx(3);
@@ -119,17 +114,14 @@ classdef DataTreeClass < handle
            else
                obj.groups(iG).Copy(obj.groups(iG))
            end
            obj.SetCurrElem(iG, iS, iR, iC);
            obj.SetCurrElem(iG, iS, iR);
            obj.groups(iG).SetConditions();
        end
        
        
        % --------------------------------------------------------------
        function CopyStims(obj, obj2, iC)
            if ~exist('iC','var') || isempty(iC)
                iC = 1;
            end
            idx = obj2.currElem(iC).GetIndexID();
        function CopyStims(obj, obj2)
            idx = obj2.currElem.GetIndexID();
            iG = idx(1);
            obj.groups(iG).CopyStims(obj2.groups(iG));            
        end
@@ -444,17 +436,16 @@ classdef DataTreeClass < handle
            if isempty(obj.groups)
                return;
            end
            err = obj.currElem(1).Load();
            err = obj.currElem.Load();
        end


        % ----------------------------------------------------------
        function iC = SetCurrElem(obj, iGroup, iSubj, iRun, new)
            
            %%%% Parse arguments
        function SetCurrElem(obj, iGroup, iSubj, iRun)
            if isempty(obj.groups)
                return;
            end
            
            if nargin==1
                iGroup = 0;
                iSubj = 0;
@@ -465,59 +456,36 @@ classdef DataTreeClass < handle
            elseif nargin==3
                iRun  = 0;
            end
            if ~exist('new','var')
                new = '';
            end

            % We can have multiple current elements simultaneously. 
            % Decide which current element we are setting 
            iC = 1;            
            if isnumeric(new)                
                iC = new;
            elseif strcmp(new, 'new')
                for ii = 1:length(obj.currElem)
                    if ~obj.busy
                        break;
                    end
                end
                iC = ii;
            end
                        
            if obj.currElem(iC).IsSame(iGroup, iSubj, iRun)
            if obj.currElem.IsSame(iGroup, iSubj, iRun)
                return;
            end
            
            % Free up memory of current element before reassigning it to
            % another node. 
            obj.currElem(iC).FreeMemory();
            obj.currElem.FreeMemory();
            
            if iSubj==0 && iRun==0
                obj.currElem(iC) = obj.groups(iGroup);
                obj.currElem = obj.groups(iGroup);
            elseif iSubj>0 && iRun==0
                obj.currElem(iC) = obj.groups(iGroup).subjs(iSubj);
                obj.currElem = obj.groups(iGroup).subjs(iSubj);
            elseif iSubj>0 && iRun>0
                obj.currElem(iC) = obj.groups(iGroup).subjs(iSubj).runs(iRun);
                obj.currElem = obj.groups(iGroup).subjs(iSubj).runs(iRun);
            end
        end


        % ----------------------------------------------------------
        function procElem = GetCurrElem(obj, iC)
            if ~exist('iC','var') || isempty(iC)
                iC = 1;
            end
            procElem = obj.currElem(iC);
        function procElem = GetCurrElem(obj)
            procElem = obj.currElem;
        end


        % ----------------------------------------------------------
        function [iGroup, iSubj, iRun] = GetCurrElemIndexID(obj, iC)
            if ~exist('iC','var') || isempty(iC)
                iC = 1;
            end
            iGroup = obj.currElem(iC).iGroup;
            iSubj = obj.currElem(iC).iSubj;
            iRun = obj.currElem(iC).iRun;
        function [iGroup, iSubj, iRun] = GetCurrElemIndexID(obj)
            iGroup = obj.currElem.iGroup;
            iSubj = obj.currElem.iSubj;
            iRun = obj.currElem.iRun;
        end


@@ -565,21 +533,15 @@ classdef DataTreeClass < handle


        % ----------------------------------------------------------
        function CalcCurrElem(obj, iC)
            if ~exist('iC','var') || isempty(iC)
                iC = 1;
            end
            obj.currElem(iC).Calc();
        function CalcCurrElem(obj)
            obj.currElem.Calc();
        end

        
        % ----------------------------------------------------------
        function ResetCurrElem(obj, iC)
            if ~exist('iC','var') || isempty(iC)
                iC = 1;
            end
            obj.currElem(iC).Reset();
            idx = obj.currElem(iC).GetIndexID();
        function ResetCurrElem(obj)
            obj.currElem.Reset();
            idx = obj.currElem.GetIndexID();
            if isa(obj.currElem, 'SubjClass')
                obj.groups(idx(1)).Reset('up')
            elseif isa(obj.currElem, 'RunClass')
+18 −16
Original line number Diff line number Diff line
classdef TreeNodeClass < handle & matlab.mixin.Heterogeneous
classdef TreeNodeClass < handle
    
    properties % (Access = private)        
        name;
@@ -13,15 +13,15 @@ classdef TreeNodeClass < handle & matlab.mixin.Heterogeneous
        updateParentGui;
    end
     
    properties (Access = public)
    properties
        outputVars
        DEBUG
        path
        busy
    end
        
    methods
        
        
        % ---------------------------------------------------------------------------------
        function obj = TreeNodeClass(arg)
            obj.DEBUG = 0;
@@ -35,7 +35,6 @@ classdef TreeNodeClass < handle & matlab.mixin.Heterogeneous
            obj.err = 0;
            obj.CondNames = {};
            obj.path = filesepStandard(pwd);
            obj.busy = 0;
            
            
            obj.InitParentAppFunc();
@@ -115,15 +114,24 @@ classdef TreeNodeClass < handle & matlab.mixin.Heterogeneous
        function objnew = copy(obj)
            switch(class(obj))
                case 'RunClass'
                    objnew = RunClass(obj);
                    objnew = RunClass('copy');
                case 'SubjClass'
                    objnew = SubjClass(obj);
                    objnew = SubjClass('copy');
                case 'GroupClass'
                    objnew = GroupClass(obj');
                    objnew = GroupClass('copy');
                case ''
            end
            objnew.name = obj.name;
            objnew.type = obj.type;
            objnew.err = obj.err;
            objnew.CondNames = obj.CondNames;
            objnew.procStream.Copy(obj.procStream, obj.GetFilename);
        end
        
               
        % ----------------------------------------------------------------------------------
        % Copy processing params (procInut and procResult) from
        % obj2 to obj
        % ----------------------------------------------------------------------------------
        function Copy(obj, obj2, conditional)
            if ~isempty(obj2.procStream)
@@ -617,18 +625,11 @@ classdef TreeNodeClass < handle & matlab.mixin.Heterogeneous
        end
        
        
        % ----------------------------------------------------------------------------------
        function FreeMemorySubBranch(obj)
            
        end

        
        % ----------------------------------------------------------------------------------
        function FreeMemory(obj)
            if isempty(obj)
                return
            end
            obj.busy = 0;
            obj.FreeMemorySubBranch();
            obj.procStream.FreeMemory(obj.GetFilename);
        end
@@ -658,6 +659,7 @@ classdef TreeNodeClass < handle & matlab.mixin.Heterogeneous
            filename = obj.SaveMemorySpace(obj.name);
        end
        
                        
    end

    
+4 −4
Original line number Diff line number Diff line
@@ -52,8 +52,8 @@ iCh = maingui.axesSDG.iCh;
iSrcDet     = maingui.axesSDG.iSrcDet;
color       = maingui.axesSDG.linecolor;

SD          = maingui.dataTree.currElem(1).GetSDG();
bbox        = maingui.dataTree.currElem(1).GetSdgBbox();
SD          = maingui.dataTree.currElem.GetSDG();
bbox        = maingui.dataTree.currElem.GetSdgBbox();

% Set axes handle properties and parameters 
if ~ishandles(hAxes)
@@ -83,13 +83,13 @@ nSrcs = size(SD.SrcPos,1);
nDets       = size(SD.DetPos,1);

% get mlActAuto from procResult if it exists and replace ch.MeasListActMan 
nDataBlks = maingui.dataTree.currElem(1).GetDataBlocksNum();
nDataBlks = maingui.dataTree.currElem.GetDataBlocksNum();
MeasList = [];
MeasListActMan = [];
MeasListActAuto = [];
MeasListVis = [];
for iBlk = 1:nDataBlks   
    ch              = maingui.dataTree.currElem(1).GetMeasList(iBlk);
    ch              = maingui.dataTree.currElem.GetMeasList(iBlk);
    MeasList        = [MeasList; ch.MeasList];
    MeasListActMan  = [MeasListActMan; ch.MeasListActMan];
    MeasListActAuto = [MeasListActAuto; ch.MeasListActAuto];
+5 −5
Original line number Diff line number Diff line
@@ -21,15 +21,15 @@ axes(hAxes);
hold on

iCh       = maingui.axesSDG.iCh;
iDataBlks = maingui.dataTree.currElem(1).GetDataBlocksIdxs(iCh);
iDataBlks = maingui.dataTree.currElem.GetDataBlocksIdxs(iCh);
tPtsExclTot = [];
for iBlk = iDataBlks
    if strcmp(mode,'manual')
        tInc = maingui.dataTree.currElem(1).GetTincMan(iBlk);
        tInc = maingui.dataTree.currElem.GetTincMan(iBlk);
    elseif strcmp(mode,'auto')
        tInc = maingui.dataTree.currElem(1).GetTincAuto(iBlk);
        tInc = maingui.dataTree.currElem.GetTincAuto(iBlk);
    elseif strcmp(mode,'autoch')
        tInc = maingui.dataTree.currElem(1).GetTincAutoCh(iBlk);        
        tInc = maingui.dataTree.currElem.GetTincAutoCh(iBlk);        
    else
        continue
    end
@@ -47,7 +47,7 @@ for iBlk = iDataBlks
            break
        end
        col = setColor(mode, ii);
        t = maingui.dataTree.currElem(1).GetTime(iBlk);
        t = maingui.dataTree.currElem.GetTime(iBlk);
        [h, tPtsExclTot] = drawPatches(t, tInc(:, kk), tPtsExclTot, col, handles);        
        if strcmp(mode,'manual')
            for jj=1:length(h)
+6 −6
Original line number Diff line number Diff line
@@ -4,17 +4,17 @@ if isempty(handles)
    return
end

if ~isempty(maingui.dataTree.currElem(1).GetRawData())   
if ~isempty(maingui.dataTree.currElem.GetRawData())   
    set(handles.radiobuttonPlotRaw, 'enable','on')
else
    set(handles.radiobuttonPlotRaw, 'enable','off')
end
if ~isempty(maingui.dataTree.currElem(1).GetDod())
if ~isempty(maingui.dataTree.currElem.GetDod())
    set(handles.radiobuttonPlotOD, 'enable','on')
else
    set(handles.radiobuttonPlotOD, 'enable','off')
end
if ~isempty(maingui.dataTree.currElem(1).GetDc())
if ~isempty(maingui.dataTree.currElem.GetDc())
    set(handles.radiobuttonPlotConc, 'enable','on')
else
    set(handles.radiobuttonPlotConc, 'enable','off')
@@ -41,13 +41,13 @@ end

iCondGrp = get(handles.popupmenuConditions, 'value'); 
CondName = maingui.dataTree.groups(1).CondNames{iCondGrp};
if ~isempty(maingui.dataTree.currElem(1).GetDodAvg(CondName)) || ~isempty(maingui.dataTree.currElem(1).GetDcAvg(CondName))
if ~isempty(maingui.dataTree.currElem.GetDodAvg(CondName)) || ~isempty(maingui.dataTree.currElem.GetDcAvg(CondName))
    set(handles.checkboxPlotHRF, 'enable','on');
    if ~isa(maingui.dataTree.currElem, 'RunClass')
        set(handles.checkboxPlotHRF, 'value',1);
        if ~isempty(maingui.dataTree.currElem(1).GetDcAvg())
        if ~isempty(maingui.dataTree.currElem.GetDcAvg())
            set(handles.radiobuttonPlotConc, 'value',1);
        elseif ~isempty(maingui.dataTree.currElem(1).GetDodAvg())
        elseif ~isempty(maingui.dataTree.currElem.GetDodAvg())
            set(handles.radiobuttonPlotOD, 'value',1);
        end
    end
Loading