function out1=linproj(arg1, model)
% LINPROJ Linear data projection.
%
Synopsis:
%  Y = linproj(X, model)
%  out_data = linproj(in_data, model)
%
Description:
%  Y = linproj(X, model) linearly projects data in X such that
%    Y = model.W'*X + model.b
%
%  out_data = linproj(in_data, model) projects in_data.X 
%    out_data.X = model.W'*in_data.X + model.b
%    out_data.y = in_data.y
%
Input:
%  model [struct] linear projection:
%   .W [dim x ncomp] Projection matrix.
%   .b [ncomp x 1] Bias.

Example:
%  help pca;
%  help lda;
%
% See also 
%  PCA, LDA, KERNELPROJ.
%

About: Statistical Pattern Recognition Toolbox
% (C) 1999-2003, Written by Vojtech Franc and Vaclav Hlavac
% <a href="http://www.cvut.cz">Czech Technical University Prague</a>
% <a href="http://www.feld.cvut.cz">Faculty of Electrical Engineering</a>
% <a href="http://cmp.felk.cvut.cz">Center for Machine Perception</a>

Modifications:
% 3-may-2004, VF
% 21-jan-03, VF
% 16-Jun-2002, VF


if isstruct(arg1),
  [dim,num_data]=size(arg1.X);

  out1.X = model.W'*arg1.X + model.b(:)*ones(1,num_data);
  out1.y = arg1.y;
  
else
  [dim,num_data]=size(arg1);

  out1 = model.W'*arg1 + model.b(:)*ones(1,num_data);
end

return;