www.gusucode.com > mbctools 工具箱 matlab 源码程序 > mbctools/@mdevtestplan/makechildren.m

    function presp=makechildren(T,OpenDialog)
%MAKECHILDRREN
%
% presp=makechildren(T,OpenDialog)

%  Copyright 2000-2015 The MathWorks, Inc. and Ford Global Technologies, Inc.

if nargin<2
    OpenDialog=0;
end

% default is to return null pointer to say nothing has been created
presp=xregpointer;

if T.Matched    
    D= DataLink(T);
    
    % data 
    Yind= get(D,'Name');
    [X,Yptr]     = dataptr(T);
    [NewY,pdatum]= i_AddNew(T,Yind);
    
    % new response variable (default)
    if ~isempty(NewY)
        ssf= sweepsetfilter(Yptr);
        Y= setVarsFilter(ssf,NewY(1));
    else
        xregerror('New Response','No new response variables are available.');
        return
    end
    
    m = HSModel(T.DesignDev);
    switch numstages(T)
        case 1
            % onestage model
            [T,presp] = i_MakeOneStage(T,X,Y,m);
        case 2
            % twostage model
            [T,presp] = i_MakeTS(T,X,Y,m,pdatum);
        otherwise
            return
    end
    
    mdev= info(presp);
    
    if OpenDialog
        % open response setup dialog
        [mdev,ok]=gui_response(mdev);
        drawnow;
    else
        py= Tp.dataptr('Y');
        YTP= py.info;

        if ~any( strcmp(NewY,get(YTP,'Name')) );
            % add variable to testplan data
            py.info= setVarsFilter(YTP,[get(YTP,'Name'); {NewY} ]);
        end
        
        ok = true;
    end
    
    if ok
        presp=address(mdev);
        
        switch numstages(T)
            case 1
                try %#OK<TRYNC>
                    % fit onestage model
                    presp.fitmodel;
                end
            case 2
                if strcmp(presp.guid,'twostage')
                    % set up more nodes
                    TS=presp.model;
                    % create local and global modeldev objects
                    modeldev(TS,presp,0);
                else
                    % fit point-by-point model
                    presp.fitmodel;
                end
        end
        presp.name(presp.varname);
        % add validation data if possible
        ValSSF= valdata(T);
        if ~isempty(ValSSF)
            dpVal= dataptr(ValSSF);
            Y= getdata(T,'Y');
            if all( ismember( get(Y,'Name'), get(dpVal.info,'Name')) )
                % Reset variables in the validation ssf to current
                % testplan set
                ValSSF= setVarsFilter(ValSSF,get(Y,'Name'));
            else
                % delete validation data
                ValSSF= [];
            end
            % update validation data
            valdata(info(T),ValSSF);
        end
    else
        delete(mdev);
        presp=xregpointer;
    end
    
else
    % no data is selected
    
    View = GetViewData(MBrowser);
    % hide current test plan - close other figures
    OK = closeSubFigures(View.MessageService);
    if OK
        % have to select some data first
        datawizard(T);
        % the datawizard creates responses after it has finished so we do
        % need to do this here
    end

end



%------------------------------------------------
% SUBROUTINE i_MakeTS
%------------------------------------------------
function [T,presp]= i_MakeTS(T,X,Y,m,pdatum)

DatumType= get(m,'DatumType');
L = get(m,'Local');
if isa(L,'localmulti')
    mdev = mdev_local('PtByPt',{L,X(1),Y,'ptbypt'});
    mdev = modelstage(mdev,1);
    L = getModel(T.DesignDev,1);
    TPModel = HSModel(T.DesignDev);
    if ~isa(get(TPModel,'Local'),'localmulti');
        % update test plan model to localmulti
        TPModel = set(TPModel,'Local',L);
        T.DesignDev = HSModel(T.DesignDev,TPModel);
        xregpointer(T);
    end
else
    mdev = modeldev('TS',{m,X(1),Y,'twostage'});
    mdev = modelstage(mdev,0);
end
    presp= address(mdev);

T= AddChild(T,mdev);

if DatumType==3
    AssignData(mdev,'data',pdatum);
end
return

%------------------------------------------------
% SUBROUTINE i_MakeOneStage
%------------------------------------------------
function [T,presp]= i_MakeOneStage(T,X,Y,m)

mdev = modeldev('model',{m,X,Y,'global'});
mdev = modelstage(mdev,1);
presp= address(mdev);

T= AddChild(T,mdev);
return


%------------------------------------------------
% SUBROUTINE i_ADDNEW
%------------------------------------------------
function [NewY,pdatum]= i_AddNew(T,Yind)

X= factors(T);

if numChildren(T)>0
    R1= children(T,1);
    pdatum= R1.dataptr('data');
    Existing= [children(T,'varname','Y')' ; X(:)];
else
    pdatum  = xregpointer;
    Existing= X(:);
end

NewY= setdiff(Yind,Existing);