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

    classdef (Sealed) xregbdrydata < handle 
%xregbdrydata Interface to the data used in the boundary editor.
    
%  Copyright 2012 The MathWorks, Inc. and Ford Global Technologies, Inc.

    properties (Access=private)
        TestplanPointer = xregpointer;
    end
    
    properties(Dependent, SetAccess=private)
       ResponseData
       GlobalData
       ResponseValidationData
       GlobalValidationData
    end
    
    methods
        
        function obj = xregbdrydata(TestplanPointer)
        if nargin && isa(TestplanPointer, 'xregpointer')
           obj.TestplanPointer = TestplanPointer;
        end
        
        end
        
        function localValData = LocalValidationData(obj, testInd)
        valData = obj.getValidationData;
        fitData = obj.ResponseData;
        
        % find the number of global factors (numGlobal) 
        inputs = obj.TestplanPointer.getInputs;
        numLocal = length(inputs{1});
            
        localValData = zeros(0, numLocal);
        if ~isempty(valData) && ~isempty(fitData)
            % similar to algorithm used in mdev_local\getLocalValidationData
            
            % get hold of the global values of the fit data for the specified testInd
            fitDataForTestInd = fitData{testInd};
            fitDataForTestGlobal = mean(fitDataForTestInd(:, numLocal+1:end));
            % avoid divide by 0
            fitDataForTestGlobal(fitDataForTestGlobal==0) = 1;
            
            % get hold of all the validation data global values
            meanValData = mean(valData);
            valDataGlobal = meanValData(:, numLocal+1:end);
            numValSS = size(valDataGlobal, 1);
            
            % find validation tests that have similar values as the selected fit data
            normErr = valDataGlobal./repmat(fitDataForTestGlobal, numValSS, 1) - 1;
            validTests = sum(normErr.^2, 2) < 1e-4;
            if any(validTests)
                inds = find(validTests);
                for i=inds
                    data = valData{i};
                    localValData = [localValData; data(:,1:numLocal)]; %#ok<AGROW>
                end
            end
        end
        end
        
        function localValData = findLocalValidationDataIndexes(obj)
        valData = obj.getValidationData;
        fitData = obj.ResponseData;
        localValData = zeros(length(fitData),1);
        if ~isempty(valData) && ~isempty(fitData)
            % similar to algorithm used in mdev_local\getLocalValidationData
            
            % find the number of global factors (numGlobal) 
            inputs = obj.TestplanPointer.getInputs;
            numLocal = length(inputs{1});
            
            for testInd=1:length(fitData)
                % get hold of the global values of the fit data for the specified testInd
                fitDataForTestInd = fitData{testInd};
                fitDataForTestGlobal = mean(fitDataForTestInd(:, numLocal+1:end));
                % avoid divide by 0
                fitDataForTestGlobal(fitDataForTestGlobal==0) = 1;

                % get hold of all the validation data global values
                meanValData = mean(valData);
                valDataGlobal = meanValData(:, numLocal+1:end);
                numValSS = size(valDataGlobal, 1);

                % find validation tests that have similar values as the selected fit data
                normErr = valDataGlobal./repmat(fitDataForTestGlobal, numValSS, 1) - 1;
                validTests = sum(normErr.^2, 2) < 1e-4;
                if any(validTests)
                    localValData(testInd) = find(validTests, 1, '-first');
                end
            end
        end
        end
        
        function valData = get.ResponseValidationData(obj)
        
        if ~isnull(obj.TestplanPointer)
            valData = obj.TestplanPointer.getValidationData;
        else
            valData = [];
        end
        
        if isempty(valData)
            valData = zeros(0,obj.numLocalInputs+obj.numGlobalInputs);
        end
        
        end
        
        function valData = get.GlobalValidationData(obj)
        
        if ~isnull(obj.TestplanPointer)
            valData = obj.TestplanPointer.getValidationData;
            if ~isempty(valData)
                % find the number of global factors (numGlobal) 
                inputs = obj.TestplanPointer.getInputs;
                numGlobal = length(inputs{2});
                % then return the last numGlobal columns of the data
                valData = mean(valData(:,(end-numGlobal+1):end));
            end
        else
            valData = [];
        end
        
        if isempty(valData)
            valData = zeros(0,obj.numGlobalInputs);
        end
        
        end
        
        function inputData = get.ResponseData(obj)
        if ~isnull(obj.TestplanPointer)
            [~,Y] = obj.TestplanPointer.getdata('FIT');
            inputData = Y(:,factors(obj.TestplanPointer.info));
        else
            inputData = [];
        end
        
        if isempty(inputData)
            inputData = zeros(0,obj.numLocalInputs+obj.numGlobalInputs);
        end
        end
        
        function inputData = LocalData(obj, testInd)
%LocalData Request local data
% 
        if ~isnull(obj.TestplanPointer)
            TP=obj.TestplanPointer.info;            
            inputData = getdata(TP,'FIT');
            inputData = inputData{1};
            if strcmpi(testInd, 'all')
                % want all of the local data
            else
                % select the test index from the data
                inputData = inputData{testInd};
            end
        else
            inputData = [];
        end
        
        if isempty(inputData)
            inputData = zeros(0,obj.numLocalInputs);
        end
        end
        
        function inputData = get.GlobalData(obj)
        if ~isnull(obj.TestplanPointer)
            inputData = obj.TestplanPointer.getdata('FIT');
            inputData = inputData{2};
        else
            inputData = [];
        end
        
        if isempty(inputData)
            inputData = zeros(0,obj.numGlobalInputs);
        end
        end
        
        function obj = mapptr(obj,RefMap)
        obj.TestplanPointer = mapptr(obj.TestplanPointer,RefMap);
        end
    end
    
    methods (Access=private)
        function valData = getValidationData(obj)
        if ~isnull(obj.TestplanPointer)
            valData = obj.TestplanPointer.getValidationData;
        else
            valData = [];
        end
        end
        
        function numLocal = numLocalInputs(obj)
            numLocal = 0;
            if ~isnull(obj.TestplanPointer)
                inputs = obj.TestplanPointer.getInputs;
                numLocal = length(inputs{1});
            end
        end
        
        function numGlobal = numGlobalInputs(obj)
            numGlobal = 0;
            if ~isnull(obj.TestplanPointer)
                inputs = obj.TestplanPointer.getInputs;
                if numel(inputs)>1
                    numGlobal = length(inputs{2});
                else
                    numGlobal = 0;
                end
            end
        end
    end
    
end