www.gusucode.com > mbc 工具箱 matlab 源码程序 > mbc/@mbcmodel/@testplan/AddDesign.m

    function D = AddDesign(T,Stage,D,Parent)
%ADDDESIGN add design or designs to test plan
%
% D = AddDesign(T,D);
% D = AddDesign(T,Level,D);
% D = AddDesign(T,Level,D,Parent);
%   D:         Array of designs to be added to the test plan. 
%   Level:     Test plan level. By default the level is the outer level
%              (i.e. Level 1 for One-stage, Level 2 for Two-stage)
%   Parent:    Parent design in design tree. By default designs are added
%              to the top level of the design tree
%
%  In order to ensure that the design names are unique in the test plan,
%  the design name may be changed when adding a design to a test plan. The
%  array of designs with modified names is an output.
%
%  See also mbcmodel.testplan.UpdateDesign, mbcmodel.testplan.RemoveDesign,
%           mbcmodel.testplan.FindDesign 

%  Copyright 2007-2013 The MathWorks, Inc.

pTP = T.Pointer;
dd = pTP.designdev;
NumStages = length(dd);
if ~isnumeric(Stage)
    D = Stage;
    Stage = T.Levels;
end

if nargin<4
    Parent = 1;
else
    Dold = T.Design{Stage};
    [Matched,loc] = ismember(Parent,Dold);
    if ~isscalar(Matched) || ~Matched
        error(message('mbc:mbcmodel:testplan:InvalidModel'))
    end
    Parent = loc+1;
end


m0 = getModel(dd(Stage));
Index = zeros(size(D));
for i=1:length(D)
    des = dataobject(D(i));

    m = model(des);
    if ~hasSameInputs(m,m0)
        m = setInputs(m, getInputs(m0));
        des = model(des,m);
    end
    % need to check localmod and Stage
    if isa(m,'localmod') && Stage==NumStages
       des = globalmodel(des, m);
    elseif ~isa(m,'localmod') && Stage<=NumStages
       des = localmodel(des, m);
    end
    
    dd = addDesign(dd,des,Stage,Parent);
    dtree = dd(Stage).DesignTree;
    des = dtree.designs{end};
    Index(i)= length(dtree.designs);
    D(i) = mbcdoe.design(des);
end

pTP.designdev(dd);

function des = localmodel(des,m)

if DesignType(des)==1
    %optimal designs
    L = xregCreateModel(@localsurface,m);
    L = set(L,'model',m);
else
   % make multimodel
   L = xregCreateModel(@localmulti,m);
   L = set(L,'models',{m});
end
des=safechange(des,@(des) model(des,L));

function des = globalmodel(des,L)
% make global model
if isa(L,'localsurface') || isa(L,'localusermod')
    % get internal model
    m = get(L,'model');
elseif isa(L,'localmulti')
   % get model from multimodel
   m = get(L,'currentmodel');
else
    error(message('mbc:mbcmodel:testplan:InvalidModel1', getType( L )))
end
des=safechange(des,@(des) model(des,m));