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

    function T = cacheTSSF(T)
%CACHETSSF Enable caching in the data if it is supported
%
%  T= cacheTSSF(T) enables caching in the sweepset data object for the
%  testplan, if it is supported.

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


if IsMatched(T)
    if ~isa(T.DataLink,'xregpointer')
        % this is the upgrade route
        T = i_upgrade2TSSF(T);
    end
    % turn caches on for data
    [Xp,Yp] = dataptr(T);
    if Yp.isa('sweepsetfilter')
        Xp(1).info = setCacheState(Xp(1).info, true);
        Yp.info    = setCacheState(Yp.info, true);
    end
    
    ssf= valdata(T);
    if isa(ssf,'sweepsetfilter')
        % update cache for validation data
        ssf = setCacheState(ssf, true);
        T= valdata(T,ssf);
    end

else
    % make sure the datalink is unset
    T.DataLink = xregpointer;
    T = info( xregpointer(T) );
end




function T= i_upgrade2TSSF(T)

[Xp,Yp]= dataptr(T);
% make tssf and put it on the heap
ssf= info(dataptr(T.DataLink));
sindex= get(T.DataLink,'reordersweeps');
if ~isempty(sindex)
    ssf= reorderSweeps(ssf,sindex{1});
end

% make tssf
tssf= testplansweepsetfilter(ssf,T);

if ~isa(ssf,'testplansweepsetfilter')
    % use same location
    pTSSF = dataptr(T.DataLink);
    pTSSF.info= tssf;
else
    % new copy required
    pTSSF = xregpointer(tssf);
    % add to project data list
    pProject= project(T);
    pProject.addData(pTSSF); 
end
T.DataLink= pTSSF;

des= getdesign(T.DesignDev);
% make actual design
xg= Xp(end).double;
xg= code(model(T),xg);
settings= factorsettings(des);
settings(1:size(xg,1),:)= xg;
des = factorsettings(des, settings);
T.DesignDev= setActualDesign(T.DesignDev,des);

if strcmp(name(des), 'Experimental Design')
    % delete old data design from tree
    dtree= T.DesignDev.DesignTree;
    dtree.designs(dtree.chosen)= [];
    dtree.parents(dtree.chosen)= [];
    % Re-link any of the design's children to the parent node
    dtree.parents(dtree.parents==dtree.chosen) = 1;
    % Fix linking for any other designs further down in the tree
    dtree.parents(dtree.parents>dtree.chosen) = dtree.parents(dtree.parents>dtree.chosen)-1;
    dtree.chosen= 1;
    T.DesignDev.DesignTree= dtree;
else
    % free all points in best design
    des= setuserfixed(des, 1:size(des,1), false);
    T.DesignDev= setdesign(T.DesignDev,des);
end

xregpointer(T);

% stage 1 data is now a sweepsetfilter
xOld= Xp(1).info;
xData= sweepsetfilter(pTSSF);

% add the x data initially
xData= setVarsFilter(xData,get(xOld,'Name'));
% we should just get old data + any new factor signals
Xp(1).info= xData;

% data now stored as sweepset filter
yOld = Yp.info;
yData= sweepsetfilter(pTSSF);

% add the x data initially
yData= setVarsFilter(yData,get(yOld,'Name'));
Yp.info= yData;


T= info(T);