www.gusucode.com > mbcmodels 工具箱 matlab 源码程序 > mbcmodels/IndptSweeps.m
function varargout= IndptSweeps(Action,varargin) % INDPTSWEEPS test plots for MBC model evaluation tool % Copyright 2000-2014 The MathWorks, Inc. and Ford Global Technologies, Inc. switch lower(Action) case 'create' [varargout{1:2}]= i_Create(varargin{:}); case {'modelselect','draw'} i_draw(gcbf); case 'view' i_View(varargin{:}); case 'plotopts' i_PlotOpts; case 'print' i_Print(varargin{:}); end function [Tool, mainLyt]= i_Create(hParent,NumSweeps,~) Tool.Name= '&Tests'; Tool.mfile= mfilename; Tool.Icon = 'validatesweeps.bmp'; Tool.NumSweeps= NumSweeps; Tool.NumRows=2; Tool.SperPage = Tool.NumRows*2; Tool.NumPages = floor((NumSweeps-1)/Tool.SperPage)+1; Tool.MultiSelect=1; Tool.Renderer = 'painters'; %%-----------the subplot axes----------------------%% MarkerStyles= {'o','x','square','diamond','v','^','>','<','pentagram','hexagram'}; axHand = cell(1, Tool.NumRows*2); axPanel = mbcgui.container.layoutpanel(... 'Parent', hParent, .... 'Visible', 'off'); for i=1:Tool.NumRows*2 axHand{i}=axes('Parent',axPanel,... 'ButtonDownFcn',@(h,evt) mv_zoom(h),... 'Box','on',... 'Units','pixels',... 'XGrid','on','YGrid','on',... 'Position',[0 0 1 1],... 'Tag','subplots',... 'FontSize',8,... 'LineStyleOrder',MarkerStyles,... 'NextPlot','replacechildren'); end Tool.AxHand = [axHand{:}]; Tool.AxPanel = axPanel; els = reshape(axHand, 2, Tool.NumRows)'; axGrid = xreggridbaglayout(axPanel, ... 'dimension', [Tool.NumRows 2], ... 'border', [50 45 20 20], ... 'gapx', 50, ... 'gapy', 55, ... 'elements', els); set(axPanel, 'LayoutComponent', {axGrid}); %---------selection grid--------------------% infoFrame = mbcgui.container.layoutpanel(... 'Parent', hParent, ... 'Visible', 'off', ... 'BorderType', 'etchedin'); SweepClickTxt = uicontrol('Parent',infoFrame,... 'Style','Text',... 'Units','pixels',... 'String','Page:'); Tool.SweepClick = mbcgui.widget.Spinner('Parent', infoFrame,... 'Min',1,... 'Max',Tool.NumPages,... 'Callback',{@i_SweepChange, 'SweepClick', hParent}); SelectBtn = uicontrol('Parent',infoFrame,... 'Style','push',... 'Units','pixels',... 'String','Select Test...',... 'TooltipString','Select Test Number',... 'Tag','SelectBtn',... 'Callback',{@i_SweepChange, 'SelectBtn', hParent}); ConfIntTxt=uicontrol('Parent',infoFrame,... 'Style','text',... 'Enable','inactive',... 'HorizontalAlignment','left',... 'String','Confidence Interval:'); CILevel =mbcgui.widget.Spinner('Parent',infoFrame,... 'Callback',{@i_CILevel, hParent},... 'Rule','list',... 'List',[90 95 99 99.9]); Tool.CILevel= CILevel; %-----------------Legend--------------------% legendText=uicontrol('Parent',infoFrame,... 'Position',[1 1 10 10],... 'Style','text',... 'HorizontalAlignment','left',... 'String','Legend:'); hLegend=axes('Parent',infoFrame,... 'Units','pixels',... 'Position',[1 1 10 10],... 'XLim',[0 1],'YLim',[0 1],... 'Box','on',... 'XTick',[],'YTick',[],... 'DefaultTextFontSize',8,... 'DefaultTextFontName','Lucida Console'); legendWrapper = mbcgui.widget.AxesContainer(... 'AxesHandle', hLegend); %---------------LAYOUTS----------------------% infoGrid=xreggridbaglayout(infoFrame,... 'packstatus','off',... 'dimension',[11 7],... 'rowsizes',[3 4 8 7 1 2 10 4 15 1 -1],... 'colsizes',[30 60 15 70 30 150 -1],... 'gapx',5,... 'border', [10 10 10 10], ... 'mergeblock',{[1 6],[3 4]},... 'mergeblock',{[2 5],[2 2]},... 'mergeblock',{[3 4],[1 1]},... 'mergeblock',{[8 10],[4 4]},...%% spinner 'mergeblock',{[9 9],[1 3]},...%% conf text 'mergeblock',{[1 3],[6 7]},...%%legend text 'mergeblock',{[4 11],[6 7]},...%% legend 'elements',{... [],[],SweepClickTxt,[],[],[],[],[],ConfIntTxt,[],[],... [],Tool.SweepClick,[],[],[],[],[],[],[],[],[],... SelectBtn,[],[],[],[],[],[],[],[],[],[],... [],[],[],[],[],[],[],CILevel,[],[],[],... [],[],[],[],[],[],[],[],[],[],[],... legendText,[],[],legendWrapper}); set(infoFrame, 'LayoutComponent', {infoGrid}); mainLyt=xreggridbaglayout(hParent, ... 'dimension',[3 3],... 'gapy', 5, .... 'rowsizes',[0 120 -1],... 'colsizes', [8 -1 8], ... 'mergeblock', {[3 3], [1 3]}, ... 'elements',{[], [], axPanel, [], infoFrame}); Tool.mainLyt=mainLyt; %-----------------Context Menu-------------------% uic= uicontextmenu('Parent',ancestor(hParent, 'figure')); labs= {'Show &Outliers',... '&Transformed Units',... '&Confidence Intervals',... '&Absolute X',... 'Model &Range'}; checked= {'on','off','on','on','on'}; uicm= xregmenutool('create',uic,'Label',labs,'checked',checked); set(uicm,'Callback',{@i_PlotOpts,hParent}); set(axPanel, 'HitTest', 'on', 'UIContextMenu',uic); set(Tool.AxHand, 'UIContextMenu',uic); Tool.Context= uicm; Tool.Hand= {ConfIntTxt,CILevel}; Tool.Legend= hLegend; Tool.PageNo=1; % help options Tool.helpmenus={'&Tests Help','xreg_modEval_tests'}; % ----------------------------------------------------- % SUBFUNCTION i_View % ----------------------------------------------------- function i_View(hParent,varargin) if nargin == 1 [Tool,ModelInfo,ModelList]= i_GetTool(hParent); else [Tool,ModelInfo,ModelList]= deal(varargin{:}); end i_draw(hParent,Tool,ModelInfo{:},ModelList); % ----------------------------------------------------- % SUBFUNCTION i_draw % ----------------------------------------------------- function i_draw(hParent,Tool,ModelNos,p,m,~,ModelList) % get the data [ValX,ValY]= valdata(p.info); Xloc= ValX{1}; Xg = ValX{2}; G= model(p.mdevtestplan); VarSym= char(get(G,'symbol')); % set all axes vis=on since some may have been off in last view % (will do necessary turn vis off below) set(Tool.AxHand, 'Visible', 'on'); PageNo=Tool.PageNo; % Find out the loop size...depends if we are on last page if PageNo== Tool.NumPages; % we are on the last page... N=size(ValX{1},3) - (Tool.NumPages-1)*Tool.SperPage; % do not necessarily want to display all graphs set(Tool.AxHand(N+1:end), 'Visible', 'off'); else N=Tool.SperPage; end % select the sweeps for this page SNos= (PageNo-1)*Tool.SperPage+1:(PageNo-1)*Tool.SperPage+N; AllModelNos= cat(2,ModelNos{:}); TS= m(AllModelNos); figHandle = ancestor(hParent,'figure'); ptr= get(figHandle,'Pointer'); set(figHandle,'Pointer','watch'); ax= Tool.AxHand; % Clear axes, if already drawn... h1=get(ax(1:end),{'Children'}); ph=cat(1,h1{:}); delete(ph); Colors= get(ax(1),'ColorOrder'); Markers= get(ax(1),'LineStyleOrder'); PlotOpts= num2cell(strcmp(get(Tool.Context,'Checked'),'on')); % if conf int checked - get user specified value if PlotOpts{3} PlotOpts{3} = get(Tool.CILevel,'Value'); end for k=1:N % N=1,2 or 3; Xs= Xloc(:,:,SNos(k)); Ys= ValY(:,:,SNos(k)); Xgs = Xg(:,:,SNos(k)); % Display Experimental Point (Natural and Code values) % data to display Experimental Point (Natural and Coded values) natural= double(Xgs); coded= code(G,natural); globVarStr= [VarSym, blanks(size(coded,2))',... num2str(natural','%10.4g'), blanks(size(coded,2))',... num2str(coded','%5.2f')]; numBlankLines = size(globVarStr,1)-2; % plot results (Blue points real data , blue line Local regression fit , Green Line set(figHandle,'CurrentAxes',ax(k)) cla(ax(k)); set(ax(k),... 'XLimMode','auto','YLimMode','auto',... 'NextPlot','add',... 'ButtonDownFcn',@(h,evt) mv_zoom(h)); set(get(ax(k),'ZLabel'),'UserData',[]); for i=1:length(TS) % validation plot sNumStr = sweep_plot(TS{i},{Xs,Xgs},Ys,ax(k),PlotOpts); %%create info str for tooltip patch if numBlankLines==0 infoStr= char(sprintf('%10s','s'),sNumStr); else blnks = repmat(' ',[size(globVarStr,1)-2,1]); infoStr= char(sprintf('%10s','s'),sNumStr,blnks); end infoStr = strcat(globVarStr, infoStr); end set(get(ax(k),'Title'),'String',sprintf('Test %1d',testnum(Xgs))) set(ax(k),'NextPlot','replacechildren',... 'ButtonDownFcn',{@i_AxButtonDown, infoStr}); end %----------- LEGEND STUFF ---------------- delete(get(Tool.Legend,'Children')); ht= .98; Markers= repmat(Markers,ceil(length(AllModelNos)/length(Markers)),1); Colors= repmat(Colors,ceil(length(AllModelNos)/length(Colors)),1); for i=1:length(AllModelNos); line('XData',[.02 .08],'YData',[ht ht]-0.05,... 'Marker',Markers{i},... 'LineWidth',1.5,... 'Color',Colors(i,:),... 'Parent',Tool.Legend); th=text('Position',[.1 ht],'String',ModelList{i},... 'HorizontalAlignment','left','VerticalAlignment','top',... 'Clipping','on',... 'Interpreter','none',... 'Parent',Tool.Legend); Textent= get(th,'Extent'); ht= ht-Textent(4); end % XLABELS OF AXES xlh=get(ax,{'XLabel'}); if ~isempty(xlh) set([xlh{:}]' ,'Visible','off'); end xlh=get(ax(max(1,N-1):N),{'XLabel'}); set([xlh{:}]' ,'Visible','on','FontSize',8); set(figHandle,'Pointer',ptr); %---------------------------------------------------------------------- % function i_CILevel %---------------------------------------------------------------------- function i_CILevel(~, ~, hParent) h=MBrowser; PR=xregGui.PointerRepository; ID=PR.stackSetPointer(h.Figure,'watch'); i_View(hParent); PR.stackRemovePointer(h.Figure,ID); % --------------------------------------------------------------------------------------- % function i_SweepChange % --------------------------------------------------------------------------------------- function i_SweepChange(~, ~, str, hParent) [Tool,ModelInfo,ModelList]= i_GetTool(hParent); switch str case 'SweepClick' OK=1; Tool.PageNo=Tool.SweepClick.Value; case 'SelectBtn' p= ModelInfo{2}; VMap= p.valdata; [p,OK]=mv_listdlg('ListString',num2str(testnum(VMap{1})'),... 'InitialValue',1,... 'PromptString','Select test by Log Number',... 'Name','Select Test',... 'ListSize',[140 200],... 'fus',15,'ffs',15,... 'uh',25,... 'SelectionMode','single'); if OK Tool.PageNo=floor((p-1)/Tool.SperPage)+1; Tool.SweepClick.Value = Tool.PageNo; end end %%switch if OK i_SetTool(hParent,Tool) i_View(hParent,Tool,ModelInfo,ModelList); end % --------------------------------------------------------------------------------------- % function i_PlotOpts % --------------------------------------------------------------------------------------- function i_PlotOpts(h,~,hParent) % toggle uimenus cs= get(h,'Checked'); if strcmp(cs,'on'); set(h,'Checked','off'); else set(h,'Checked','on'); end % redraw i_View(hParent); % --------------------------------------------------------------------------------------- % function i_Print % --------------------------------------------------------------------------------------- function i_Print(Tool,Name) aH = reshape(Tool.AxHand,2,length(Tool.AxHand)/2)'; lyt1= findobj(aH,'flat','Visible','on'); lyt2= Tool.Legend; printlayout1(lyt1,lyt2,Name); % --------------------------------------------------------------------------------------- % function i_GetTool % --------------------------------------------------------------------------------------- function [Tool,ModelInfo,ModelList]=i_GetTool(hParent) if nargout>1 [Tool,ModelInfo,ModelList]=mv_ValidationTool('get',hParent); else [Tool]=mv_ValidationTool('get',hParent); end % --------------------------------------------------------------------------------------- % function i_SetTool % --------------------------------------------------------------------------------------- function i_SetTool(hParent,Tool) mv_ValidationTool('set',hParent,Tool); % --------------------------------------------------------------------------------------- % function i_AxButtonDown % --------------------------------------------------------------------------------------- function i_AxButtonDown(ax, ~, str) hFig = ancestor(ax,'figure'); downtype=get(hFig,'SelectionType'); switch downtype case {'extend','open'} mv_zoom(ax); case 'normal' xregDisplayDataPatch(ax, str, [], false) end