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