www.gusucode.com > mbctools 工具箱 matlab 源码程序 > mbctools/+mbcmodelview/ModelMessageService.m

    classdef ModelMessageService < mbcmodelview.MessageService
    %ModelMessageService abstract model view Message Service
    
    %  Copyright 2015-2015 The MathWorks, Inc. and Ford Global Technologies, Inc.
    
    properties (SetAccess=protected)
        %Model fitted model
        Model
        %BoundaryModel boundary model
        BoundaryModel
        %XData input fitting data
        XData
        %YData response fitting data
        YData
        %DataOK logical array of data used for fitting
        DataOK
        %ValidationXData validation input data
        ValidationXData
        %ValidationYData validation response data
        ValidationYData
        %OutlierLine 
        OutlierLine
        %Diagnostics 
        Diagnostics
        %DiagnosticFactors 
        DiagnosticFactors
    end
    
    properties (AbortSet,SetObservable)
        %ShowTestNumbers flag to show test numbers in views
        %  Views listen for this property being set
        ShowTestNumbers = false
    end        
    
    properties (Dependent,SetAccess=private)
        %Status status of model fit (0=not fitted, 1=fitted, 2=best)
        Status
        %NumInputs number of inputs to model
        NumInputs
    end
    
    properties (Dependent,SetAccess=private)
        %ModelDev update-to-date modeldev
        ModelDev
    end        
    
    properties(Dependent)
       CrossSection 
    end
    
    methods
        function obj = ModelMessageService
        %MessageService constructor
        
        % create an OutlierLine for sharing among users
        obj.OutlierLine = mbcmodelview.OutlierLine;

        end
        
    end
    
    methods(Abstract)
        update(obj,p)
        showTestNumbers(obj,ax)
        [data,factors,olIndex]= diagnosticStats(obj)
        [data,factors] = validationDiagnostics(ms)
        addOutliers(obj,olindex)
        OK = restoreOutliers(obj,olindex)
        [lineh,legLabels] = legendLabels(obj,AxHand)
    end
    
    methods
        function s = get.Status(obj)
        s = getStatus(obj);
        end
        
        function n = get.NumInputs(obj)
        
        n = nfactors(obj.Model);
        end
        
        function mdev = get.ModelDev(obj)
        mdev = obj.Node;
        end              
        
        % used by surface viewer for now
        function cs=get.CrossSection(obj)
        cs= getCrossSection(obj.Pointer.mdevtestplan,obj.Model);
        end
        
        function set.CrossSection(obj,cs)
        T = obj.Pointer.mdevtestplan;
        setCrossSection(T,obj.Model,cs);
        end
        
        function evaluateFitData(ms,Action) 
        %evaluateFitData Use evaluation UI with fit data
        
        if nargin<2
            Action = 'create';
        end
        mbh = MBrowser;
        EvalTitle= sprintf('Model Evaluation for %s using Fit Data',ms.Title);
        hEvalFig= Validate_Indpt(Action,ms.Pointer,mbh.Figure,'fit',ms.Model,ms.XData(ms.DataOK,:),ms.YData(ms.DataOK,:),EvalTitle,ms.Status);
        if isgraphics(hEvalFig,'figure')
            % set up listener so figure is updated whenever NodeUpdated is
            % fired
            list = event.listener(ms,'NodeUpdated',@(ms,evt) evaluateFitData(ms,'update'));
            setappdata(hEvalFig,'MBCUpdateEval',list)
            registerSubFigure(ms,hEvalFig)
        end

        end
        
        function evaluateValData(ms,Action) 
        %evaluateValData Use evaluation UI with validation data
        
        if nargin<2
            Action = 'create';
        end
        mbh = MBrowser;
        
        EvalTitle= sprintf('Model Validation for %s using Test Plan Validation Data',ms.Title);
        hEvalFig= Validate_Indpt(Action,ms.Pointer,mbh.Figure,'validate',ms.Model,ms.ValidationXData,ms.ValidationYData,EvalTitle,ms.Status);
        if isgraphics(hEvalFig,'figure')
            % set up listener so figure is updated whenever NodeUpdated is
            % fired
            list = event.listener(ms,'NodeUpdated',@(ms,evt) evaluateValData(ms,'update'));
            setappdata(hEvalFig,'MBCUpdateEval',list)
            registerSubFigure(ms,hEvalFig)
        end
        end        
        
        function evaluateNoData(ms,Action) 
        %evaluateNoData Use evaluation UI with no data

        if nargin<2
            Action = 'create';
        end
        
        mbh = MBrowser;
        
        EvalTitle= sprintf('Model Evaluation for %s',ms.Title);
        hEvalFig= Validate_Indpt(Action,ms.Pointer,mbh.Figure,'none',ms.Model,[],[],EvalTitle,ms.Status);
        if isgraphics(hEvalFig,'figure')
            % set up listener so figure is updated whenever NodeUpdated is
            % fired
            list = event.listener(ms,'NodeUpdated',@(ms,evt) evaluateNoData(ms,'update'));
            setappdata(hEvalFig,'MBCUpdateEval',list)
            
            registerSubFigure(ms,hEvalFig)
        end
        end    
        
        function evaluateOtherData(ms,Action) 
        %evaluateOtherData Use evaluation UI with other data
        if nargin<2
            Action = 'create';
        end
        
        mbh = MBrowser;
        if strcmp(Action,'update')
            OK = true;
            [Xdata,Ydata] = valdata(ms.ModelDev);
        else
            [ssf,OK]= ValDataWizard(ms.Pointer,'Select Data for Evaluation');
            if ~isempty(ssf)
                Xdata= ssf(:,1:end-1);
                Ydata= ssf(:,end);
            else
                OK = false;
            end
        end
        
        if OK
            EvalTitle= sprintf('Model Validation for %s using Other Data',ms.Title);
            hEvalFig= Validate_Indpt(Action,ms.Pointer,mbh.Figure,'validate',ms.Model,Xdata,Ydata,EvalTitle,ms.Status);
            if isgraphics(hEvalFig,'figure')
                % set up listener so figure is updated whenever NodeUpdated is
                % fired
                list = event.listener(ms,'NodeUpdated',@(ms,evt) evaluateFitData(ms,'update'));
                setappdata(hEvalFig,'MBCUpdateEval',list)
                registerSubFigure(ms,hEvalFig)
            end
        end
        end         
        
        
    end
    
    methods (Access=protected)
        function s = getStatus(obj)
        if isvalid(obj.Pointer)
            s =  status(obj.ModelDev);
        else
            s = 0;
        end        
        end
        
    end

    
end