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);