www.gusucode.com > mbcdata 工具箱 matlab 源码程序 > mbcdata/@cgoptimdatasetfiller/fill.m
function [success, statusmsg, datasetname] = fill(obj, pOut, pPROJ) %FILL Fill tables in optimization filling object % % [SUCCESS, STATUSMSG] = FILL(OBJ, pOUT, pPROJ) writes the data from the % supplied optimization results, pOUT, to the selected data set in OBJ. % The results are appended to the data set in the CAGE Project, pPROJ. % % [SUCCESS, STATUSMSG, DATASETNAME] = FILL(OBJ, pOUT, pPROJ) also % returns the name of the data set that the data was exported to. % % See also CGOPTIMDATASETFILLER/GUISETUP % Copyright 2006-2007 The MathWorks, Inc. % Return if no data set has been specified and the fill action is overwrite % or append if isnull(obj.pDataset) && obj.FillAction > 1 success = false; statusmsg = 'No data set specified to export to'; datasetname = ''; return end % Get the optimization results [seldata, colnames, ptrlist, coninds] = getExportData(obj, pOut, pPROJ); nInput = size(seldata, 2); if getUseAcceptableOnly(obj) seldata = seldata(coninds, :); end ptrlist = ptrlist(1:nInput); colnames = colnames(1:nInput); % Return if there is no data if isempty(seldata) success = false; statusmsg = 'No optimization results to export'; datasetname = ''; return end % If here, we have a valid data set to write to. if obj.FillAction == 1 [success, statusmsg, datasetname] = ... i_new(obj, seldata, colnames, ptrlist, pPROJ); elseif obj.FillAction == 2 [success, statusmsg, datasetname] = ... i_append(obj, seldata, colnames, ptrlist); else [success, statusmsg, datasetname] = ... i_overwrite(obj, seldata, colnames, ptrlist); end %-------------------------------------------------------------------------- function [success, statusmsg, datasetname] = ... i_new(obj, seldata, colnames, ptrlist, pPROJ) %-------------------------------------------------------------------------- % Create data set from exported optimization data opOptimRes = i_createExportedOptimResDataset(seldata, ptrlist, colnames); % Ensure that the data set has a unique name. [NewDatasetName, DatasetNameChanged] = uniquename(pPROJ.info, ... obj.NewDatasetName); opOptimRes = setname(opOptimRes, NewDatasetName); if DatasetNameChanged statusmsg = sprintf('%s%s%s\n\n%s%s', ... 'Data Set, ', obj.NewDatasetName, ', already exists.', ... 'Optimization results have been exported to ', ... NewDatasetName, '.'); else statusmsg = ''; end % Add data set to project. pDataset = xregpointer(opOptimRes); pDSNode = cgnode(opOptimRes, [], pDataset, 1); addnodestoproject(pPROJ.info, pDSNode); % Return success flag success = true; % Return name of data set exported to datasetname = NewDatasetName; %-------------------------------------------------------------------------- function [success, statusmsg, datasetname] = ... i_append(obj, seldata, colnames, ptrlist) %-------------------------------------------------------------------------- % Create data set from exported optimization data opOptimRes = i_createExportedOptimResDataset(seldata, ptrlist, colnames); % Return name of the data set exported to datasetname = getname(obj.pDataset.info); % Merge exported optimization data set into existing data set [obj.pDataset.info, dataAppendedFlag] = ... append(obj.pDataset.info, opOptimRes); success = logical(dataAppendedFlag); if success statusmsg = ''; else statusmsg = sprintf('No data appended to %s', datasetname); end %-------------------------------------------------------------------------- function [success, statusmsg, datasetname] = ... i_overwrite(obj, seldata, colnames, ptrlist) %-------------------------------------------------------------------------- % Create data set from exported optimization data op = i_createExportedOptimResDataset(seldata, ptrlist, colnames); % Set the name in the new data set dsName = getname(obj.pDataset.info); op = setname(op, dsName); % Copy the data set into the existing pointer location obj.pDataset.info = op; % This should just work - should we do this in a try/catch just in case? success = true; statusmsg = ''; % Return name of data set exported to datasetname = getname(obj.pDataset.info); %-------------------------------------------------------------------------- function op = i_createExportedOptimResDataset(seldata, ptrlist, colnames) %-------------------------------------------------------------------------- % Target data set op = cgoppoint; % Add the expressions idxExpr = isvalid(ptrlist); exprNames = pveceval(ptrlist(idxExpr), @getname); op = addfactor(op, ptrlist(idxExpr), ... seldata(:, idxExpr), 'grid_flag', 7, ... 'created_flag', 0, 'orig_name', exprNames); % Add the exported data columns op = addfactor(op, colnames(~idxExpr), seldata(:, ~idxExpr), ... 'factor_type', 2, 'grid_flag', 7, 'created_flag', 0);