www.gusucode.com > mbctools 工具箱 matlab 源码程序 > mbctools/+mbcmodelview/OutlierActions.m
classdef OutlierActions < handle %mbcmodelview.OutlierActions outlier actions for model views % Copyright 2015-2015 The MathWorks, Inc. and Ford Global Technologies, Inc. properties (SetAccess=private) %MultiSelect multiselect outliers MultiSelect %Clear clear outlier selection Clear %Remove remove outliers from fit Remove %Restore restore removed data Restore %Copy copy outliers from another model node Copy %SelectionCriteria setup selection criteria for outlier SelectionCriteria %RemoveAll remove all data from fit RemoveAll end properties(Access=private) %ActionGroup ActionGroup %MessageService store for message service MessageService end methods function obj = OutlierActions(MessageService) obj.MessageService = MessageService; obj.MultiSelect = mbcgui.actions.StatefulAction(@obj.onMultiSelect,... 'Select &Multiple Outliers'); obj.Clear = mbcgui.actions.StatefulAction(@obj.onClear,... '&Clear Outliers'); obj.Remove = mbcgui.actions.StatefulAction(@obj.onRemove,... '&Remove Outliers'); obj.Restore = mbcgui.actions.StatefulAction(@obj.onRestore,... 'Restore Removed &Data...'); obj.Copy = mbcgui.actions.StatefulAction(@obj.onCopy,... 'Co&py Outliers From...'); obj.SelectionCriteria = mbcgui.actions.StatefulAction(@obj.onSelectCriteria,... '&Selection Criteria...'); obj.RemoveAll = mbcgui.actions.StatefulAction(@obj.onRemoveAll,... '&Remove all...'); obj.ActionGroup = mbcgui.actions.ActionGroup('','Outliers'); obj.ActionGroup.Actions = [obj.Clear,obj.Remove,obj.Restore,obj.Copy,obj.SelectionCriteria]; obj.ActionGroup.MenuType = 'separate'; end function createMenus(obj,hParent) hMenu = createMenuItem(obj.ActionGroup,hParent); set(hMenu(2),'Accelerator','A') set(hMenu(3),'Accelerator','Z') end function createLocalMenus(obj,hParent) %createLocalMenus local outlier menu has RemoveAll hMenu = createMenuItem(obj.ActionGroup,hParent); set(hMenu(2),'Accelerator','A') set(hMenu(3),'Accelerator','Z') createMenuItem(obj.RemoveAll,hParent); end function enable(obj) %enable enable outlier actions ms = obj.MessageService; if isa(ms.ModelDev,'mdevmlerf') % can't copy or change selection criteria obj.Copy.Enabled = false; obj.SelectionCriteria.Enabled = false; else if obj.MessageService.Status==0 % model not fitted set(obj.ActionGroup.Actions,'Enabled',false) obj.RemoveAll.Enabled = false; % need to restore data when model not fitted set(obj.Restore,'Enabled',true) else set(obj.ActionGroup.Actions,'Enabled',true) obj.RemoveAll.Enabled = true; end end end end methods(Access=protected) function onRemove(obj,~,~) ms = obj.MessageService; pot_outlier= ms.OutlierLine.OutlierIndices; % get the potential outlier index if ~isempty(pot_outlier) busy(ms); addOutliers(ms,pot_outlier) idle(ms); end end function onRestore(obj,~,~) % get the outlier line % fire up dialogue for outlier restoration ms = obj.MessageService; busy(ms); restoreOutliers(ms); idle(ms); end function onClear(obj,~,~) %clear clear outliers clear(obj.MessageService.OutlierLine); end function onMultiSelect(obj,~,~) %multiselect start multi selection for outliers multiselect(obj.MessageService.OutlierLine); end function onSelectCriteria(obj,~,~) %onSelectCriteria setup outlier selection criteria % outlier selection dialog ms = obj.MessageService; busy(ms); [~,OK]= OutlierDialog(ms.ModelDev); if OK % update outlier lines with suggested outliers from diagnostic % statistics update(ms); end idle(ms); end function onCopy(obj,~,~) %onCopy copy outliers from another node ms = obj.MessageService; busy(ms); [~,OK]=CopyOutliers(ms.ModelDev); if OK update(obj.MessageService,true); end idle(ms); end function onRemoveAll(obj,~,~) %onRemoveAll remove all data from fit ms = obj.MessageService; % remove all points in fit busy(ms); addOutliers(ms,1:nnz(ms.DataOK)); idle(ms); end end end