function [xp,xpS,errc] = NAGpred(mr,par,npv,estINFO,errc)
%  PREDIKCE Z ODHADU PARAMETRU SARIMA MODELU REALNE 1-ROZMERNE CASOVE RADY
%            (Gateway to NAG Foundation toolbox routine G13AHF)
% VOLANI: [xp,xpS,errc] = NAGpred(mr,par,npv,estINFO,errc)
% VSTUP:
% mr   ... =[p,d,q,P,D,Q,s] ... vektor radu modelu SARIMA(p,d,q,P,D,Q,s)
%          vytvareny pomocnymi procedurami AR,MA,ARMA,ARIMA,SARIMA:
%          p ... rad nesezonni AR casti modelu (p>=0, cele cislo)
%          d ... rad nesezonniho diferencovani (d>=0, cele cislo)
%          q ... rad nesezonni MA casti modelu (q>=0, cele cislo)
%          P ... rad sezonni AR casti modelu (P>=0, cele cislo)
%          D ... rad sezonniho diferencovani (D>=0, cele cislo)
%          Q ... rad sezonni MA casti modelu (Q>=0, cele cislo)
%          s ... perioda (pocet bodu) sezonni komponenty (s>=0, cele cislo)
%          Podminky korektnosti (jsou kontrolovany - viz errc=1):
%          p,d,q,P,D,Q,s>=0; p+q+P+Q>0; s~=1; s==0 => P+D+Q=0; s>1 => P+D+Q>0.
% par  ... bunecne pole (1 x 4) vsech ctyr typu finalnich odhadu
%          parametru (viz vystup procedury 'NAGest'):
% npv  ... pocet hodnot pozadovane predikce, npv>0.
% estINFO ... struktura vystupnich informacnich parametru odhadu vracenych
%             procedurou 'NAGest'; estINFO muze byt zredukovana tak, aby
%             obsahovala alespon nize uvedene polozky nezbytne pro vypocet:
%   estINFO.xdmi  ... finalni odhad stredni hodnoty diferencovane rady.
%   estINFO.stset ... stavova mnozina informaci (vektor 1 x Nst), kde
%                     Nst = P*s + D*s + d + q + max(p,Q*s).
%   estINFO.rss  ...  rezidualni soucet ctvercu.
%   estINFO.ndf  ...  pocet stupnu volnosti.
% errc ... rizeni vypisu chyboveho hlaseni (nepovinny znakovy parametr):
%          '+' ... povoleni vypisu vysvetlujiciho chyboveho hlaseni
%                  pri vyskytu chyby (implicitni hodnota pri vynechani)
%          '-' ... potlaceni vypisu chyboveho hlaseni
%          Pouziti jakehokoli jineho retezce ma stejny efekt jako '+'.
%
% VYSTUP:
% xp    ... vektor predikovanych hodnot v puvodni nediferencovane rade
%           (npv x 1).
% xpS   ... vektor smerodatnych odchylek predikovanych hodnot xp (npv x 1):
%           xpS(k) je smerodatna odchylka predikce xp(k), k=1,...,npv.
% errc  ... navratovy kod uspesnosti:
%           = 0 ... uspesne provedeni
%           ~=0 ... neuspesne provedeni, kod chyby udava pricinu
%           1   ... chybny 'mr' nebo pocet parametru v par neni p+q+P+Q.
%           2   ... length(stset)~=P*s + D*s + d + q + max(p,Q*s).
%           3   ... npv <= 0.
%           4   ... blize nespecifikovana chyba rozhrani MATLAB->NAG.
%           5   ... v=rss/ndf < 0.
%           Je-li procedura volana z programu, mel by byt vystupni kod vzdy
%           testovan, nebot nasledny vypocet by jinak byl nekorektni.

% (C) 1999, V. Vesely, Masaryk University of Brno (Czech Republic)
%
error(nargchk(4,5,nargin));
if nargin<5, errc = []; end
%
if any(mr<0), error('errc=1: invalid model range ''mr'''); end
p=mr(1); q=mr(3); P=mr(4); Q=mr(6); s=mr(7);
errc = ~strcmp(errc,'-');
%
par = [par{1},-par{2},par{3},-par{4}];
par = reshape(par,p+q+P+Q,1);
st  = estINFO.stset;
c   = estINFO.xdmi;
rms = estINFO.rss/estINFO.ndf;
%
[xp,xpS,ifail] = g13ahf(st,mr,par,c,rms,npv,1); clear mex;
%
if errc
   switch ifail
   case 1, error(['errc=1: invalid model range ''mr'' or number ',...
                  'of parameters in ''par''']);
   case 2, error('errc=2: invalid length of the state set');
   case 3, error('errc=3: negative number of predictions required');
   case 5, error('errc=5: negative residual variance by ''rss'' and ''ndf''');
   otherwise
     if ifail~=0
        error(['errc=',num2str(ifail),': other error']);
     end
   end
end
errc = ifail;
