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