function dec = projectFacetValidityData(dec, facetValidity, mappingMatrix, zerotol)
% project facet validity cones from proper embedding
%
% hProper = mappingMatrix * hNew
%
% THIS IS NO USER FUNCTION

% The elk-library: convex geometry applied to crystallization modeling.
%   Copyright (C) 2013 Alexander Reinhold
%
% This program is free software: you can redistribute it and/or modify it 
%   under the terms of the GNU General Public License as published by the 
%   Free Software Foundation, either version 3 of the License, or (at your 
%   option) any later version.
%
% This program is distributed in the hope that it will be useful, but 
%   WITHOUT ANY WARRANTY; without even the implied warranty of 
%   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
%   General Public License for more details.
%
% You should have received a copy of the GNU General Public License along 
%   with this program.  If not, see <http://www.gnu.org/licenses/>.

%! DEV: Isn't there a removal of zero-rows after constraint mapping 
%       missing?
%/

%% direct projection
% inequalities (cones) are a simple trnasformation, and the assignement of
%   the constraints to the validity of selected facets is retained.
dec.facetValidityData.A = facetValidity.A * mappingMatrix;
dec.facetValidityData.responsibleMatrix = facetValidity.responsibleMatrix;
% trim contraints (not removing zero-rows)
dec.facetValidityData.A = trimConstraintMatrix(dec.facetValidityData.A, ...
    zerotol, 0);

%% remove redundant rows in A
[dec.facetValidityData.A dumpVector reducedIndexVector] = ...
    unique(dec.facetValidityData.A, 'rows');
dec.facetValidityData.responsibleMatrix(:, 1) = reducedIndexVector(...
    dec.facetValidityData.responsibleMatrix(:, 1));

%% remove redundant rows in responsibleMatrix
dec.facetValidityData.responsibleMatrix = unique(...
    dec.facetValidityData.responsibleMatrix, 'rows');