www.gusucode.com > mbcmodels 工具箱 matlab 源码程序 > mbcmodels/@xreggpr/gui_globalmodsetup.m

    function [mout,ok]=gui_globalmodsetup(m,action,varargin)
%gui_globalmodsetup setup layout for GPM
%   [mout,ok]=gui_globalmodsetup(m,action,varargin)

%  Copyright 2015-2015 The MathWorks, Inc.

if nargin<2
    action='figure';
end

switch lower(action)
    case 'figure'
        [mout,ok] = gui_ModelDialog(m,'Gaussian Process Model Settings', varargin{:});
    
    case 'layout'       
        figh = varargin{1};
        p = varargin{2};
        mout = i_createlyt(figh,p);
    case 'getclasslevel'
        mout=mfilename('class');
    case 'finalise'
        % called when ok button is pressed
        mout = m; 
        pUD = get(varargin{1},'UserData');
        ud = pUD.info;
        basis = get(ud.PolyOrder,'Value');
        mout.Basis =  ud.PolyOrder.String{basis};
        ok = true;
        
        KernelChoices = ud.KernelChoices;
        mout.Kernel= KernelChoices{get(ud.Kernel,'Value')};
        
        % large scale fit parameters
        mout.LargeScale.Threshold = ud.Threshold.Value;
        mout.LargeScale.ActiveSetSize = ud.ActiveSetSize.Value;
        
        mout.LargeScale.ActiveSetMethod = ud.ActiveSetMethods{ud.ActiveSetMethod.Value};
        mout.LargeScale.FitMethod = ud.FitMethods{ud.LargeFitMethod.Value};
        mout.LargeScale.PredictMethod = ud.PredictMethods{ud.LargePredictMethod.Value};
    otherwise
        error('mbc:xreggpr:InvalidArgument1','Invalid dialog option');
end


function lyt = i_createlyt(Parent,p)

if ~isa(Parent,'xregcontainer')
    m = p.info;
    pUD = xregGui.RunTimePointer;
    pUD.LinkToObject(Parent);
    ud.pointer = p;
    ud.figure = Parent;
    
    ud.PolyOrder = uicontrol('Parent',Parent,...
        'Style','popup',...
        'String',classreg.learning.modelparams.GPParams.BuiltInBasisFunctions,...
        'Value',1);
    
    hBasisLabel = xregGui.labelcontrol('parent', Parent, ...
        'String', 'Explicit basis function:', ...
        'LabelSizeMode', 'absolute', ...
        'ControlSizeMode', 'absolute', ...
        'LabelSize', 120, ...
        'ControlSize', 150, ...
        'Control', ud.PolyOrder);
    ud.KernelChoices = classreg.learning.modelparams.GPParams.BuiltInKernelFunctions;
    ud.Kernel = uicontrol('Parent',Parent,...
        'Style','popup',...
        'String',ud.KernelChoices,...
        'Value',1);
    
    hKernelLabel = xregGui.labelcontrol('parent', Parent, ...
        'String', 'Kernel function:', ...
        'LabelSizeMode', 'absolute', ...
        'ControlSizeMode', 'absolute', ...
        'LabelSize', 120, ...
        'ControlSize', 150, ...
        'Control', ud.Kernel);    
    
    ud.ShowLargeScale = uicontrol('Parent',Parent,...
        'Style','checkbox',...
        'String','Show large data fit options',...
        'Callback',{@iShowLargescale,pUD},...
        'Value',0);
    
    
    %  large data options
    pnl = mbcgui.container.layoutpanel('Parent',Parent,...
        'Title','Large data fit options',...
        'LayoutBorder',[10 10 10 10],...
        'BorderType','etchedin');
    
    % threshold to switch to large scale
    ud.Threshold = mbcgui.widget.Spinner('Parent',pnl,...
        'Rule','int');
    largeScale{1} = xregGui.labelcontrol('Parent', pnl, ...
        'String', 'Threshold:', ...
        'LabelSizeMode', 'absolute', ...
        'ControlSizeMode', 'absolute', ...
        'LabelSize', 100, ...
        'ControlSize', 150, ...
        'Control', ud.Threshold);        
    % active set size
    ud.ActiveSetSize = mbcgui.widget.Spinner('Parent',pnl,...
        'Rule','int');
    largeScale{2} = xregGui.labelcontrol('parent', pnl, ...
        'String', 'Active set size:', ...
        'LabelSizeMode', 'absolute', ...
        'ControlSizeMode', 'absolute', ...
        'LabelSize', 100, ...
        'ControlSize', 150, ...
        'Control', ud.ActiveSetSize);    

    % active set method
    ud.ActiveSetMethods = classreg.learning.modelparams.GPParams.BuiltInActiveSetMethods;
    ud.ActiveSetMethod = uicontrol('Parent',pnl,...
        'Style','popupmenu',...
        'String',ud.ActiveSetMethods,...
        'Value',2);  
    largeScale{3} = xregGui.labelcontrol('Parent', pnl, ...
        'String', 'Active set method:', ...
        'LabelSizeMode', 'absolute', ...
        'ControlSizeMode', 'absolute', ...
        'LabelSize', 100, ...
        'ControlSize', 150, ...
        'Control', ud.ActiveSetMethod);    
    
    % large scale fit method
    ud.FitMethods = {'SD','FIC','SR'};
    ud.LargeFitMethod = uicontrol('Parent',pnl,...
        'Style','popupmenu',...
        'String',ud.FitMethods,...
        'Value',2);  
    largeScale{4} = xregGui.labelcontrol('Parent', pnl, ...
        'String', 'Fit method:', ...
        'LabelSizeMode', 'absolute', ...
        'ControlSizeMode', 'absolute', ...
        'LabelSize', 100, ...
        'ControlSize', 150, ...
        'Control', ud.LargeFitMethod);     

    % predict method
    ud.PredictMethods = classreg.learning.modelparams.GPParams.BuiltInPredictMethods;
    ud.LargePredictMethod = uicontrol('Parent',pnl,...
        'Style','popupmenu',...
        'String', ud.PredictMethods,...
        'Value',2);    
    largeScale{5} = xregGui.labelcontrol('Parent', pnl, ...
        'String', 'Predict method:', ...
        'LabelSizeMode', 'absolute', ...
        'ControlSizeMode', 'absolute', ...
        'LabelSize', 100, ...
        'ControlSize', 150, ...
        'Control', ud.LargePredictMethod);
    pnllyt = xreggridbaglayout(pnl, ...
        'Dimension',[5 1],...
        'RowSizes',[20 20 20 20 20],...
        'gapy',5,...
        'Elements',largeScale);
    pnl.LayoutComponent = pnllyt;
    
    ud.LargeScaleCard = xregcardlayout(Parent,'NumCards',2);
    attach(ud.LargeScaleCard,pnl,2);
    
    lyt = xreggridbaglayout(Parent, ...
        'UserData',pUD,...
        'Dimension',[6 1],...
        'RowSizes',[25 25 10,20,160,-1],...
        'gapy',2,...
        'Elements',{hKernelLabel,hBasisLabel,[],ud.ShowLargeScale,ud.LargeScaleCard,[]});    
    
    
    pUD.info = ud;
else
    lyt = Parent;
    pUD = get(lyt, 'UserData');
    ud = pUD.info;
    ud.pointer = p;
    m = ud.pointer.info;
end
set(ud.PolyOrder,'Value',find(strcmpi(m.Basis,ud.PolyOrder.String)));
set(ud.Kernel,'Value',find(strcmpi(m.Kernel,ud.KernelChoices)))
set(ud.Threshold,'Value',m.LargeScale.Threshold);
set(ud.ActiveSetSize,'Value',m.LargeScale.ActiveSetSize);

set(ud.LargeFitMethod,'Value',find(strcmpi(m.LargeScale.FitMethod,ud.FitMethods)))
set(ud.ActiveSetMethod,'Value',find(strcmpi(m.LargeScale.ActiveSetMethod,ud.ActiveSetMethods)))
set(ud.LargePredictMethod,'Value',find(strcmpi(m.LargeScale.PredictMethod,ud.PredictMethods)))
mdef = xreggpr;
if ~isequal(mdef.LargeScale,m.LargeScale)
    % display large data options if different from defaults
    set(ud.LargeScaleCard,'CurrentCard',2);
    set(ud.ShowLargeScale,'Value',1);
end

function iShowLargescale(h,~,pUD)

ud = pUD.info;
if get(h,'Value')
    set(ud.LargeScaleCard,'CurrentCard',2);
else
    set(ud.LargeScaleCard,'CurrentCard',1);
end