function eta=mf2th(model,cd,parval,aux,lambda,T)
%MF2TH  Packages user defined model structures into the THETA model format.
%	TH = MF2TH(MODEL,CD,PARVAL,AUX,LAMBDA,T)
%
%	TH: The resulting model matrix
%
%	MODEL: The model structure specified as	the name of a user-written 
%	m-file, which should have the format
%
%		[a,b,c,d,k,x0]=username(parameters,T,AUX)
%
%	Then MODEL='username'. See also SSMODEL for the format.
%
%	CD: CD='c' if 'username' provides a continuous time model when called
%	with a negative value of T. Else CD = 'd'.
%	PARVAL: The values of the free parameters
%	AUX:   The values of auxiliary parameters in the user-written m-file 
%	above.
%	LAMBDA: The covariance matrix of the innovations
%	T: The sampling interval of the data (always a positive number)
%	Default values: AUX=[]; T=1; LAMBDA=identity
%	See also MS2TH, PEM and THETA.

%	L. Ljung 10-2-1990
%	Copyright (c) 1986-95 by the MathWorks, Inc.
%	$Revision: 1.5 $  $Date: 1995/05/16 09:01:05 $


if nargin<3
   disp('Usage: TH = MF2TH(MODEL,CD,PARAMETERS)')
   disp('       TH = MF2TH(MODEL,CD,PARAMETERS,AUX_PAR,LAMBDA,T)')
   disp('       CD is one of ''c'' or ''d''.')
   return
end

if nargin<6, T=[];end
if nargin<5, lambda=[];end
if nargin<4, aux=[];end
if isempty(T),T=1;end
if isempty(aux),aux=0;end % This is due to a bug in feval (destroys results if
	                  % one argument is [])
[prd,pcd]=size(parval);if prd>pcd,parval=parval';end;d=length(parval);
if T<0,error('The sampling interval T must be a positive number. Use ''c'' in the second argument to indicate continuous time model!'),end
[rarg,carg]=size(aux);
if ~isstr(cd),error('The argument cd must be a string'),end
if cd=='c',eta(1,2)=-T;else eta(1,2)=T;end

eta(1,6:7)=[rarg,carg];
eta(1,8:7+length(model))=real(model);
[a,b,c,Dd,k,x0]=feval(model,parval,T,aux);
[nx,nx1]=size(a);[nx2,nu]=size(b);[ny,nx3]=size(c);[ny1,nu2]=size(Dd);
[nx4,ny2]=size(k);[nx5,ett]=size(x0);
if nu==0,nx2=nx;ny1=ny;end,
if nx~=nx1,error('A-matrix in m-file must be square!'),end
if nx~=nx2,error('The B-matrix in m-file must have the same number of rows as A'),end
if nx~=nx3,error('The C-matrix in m-file must have the same number of columns as A!'),end
if nx~=nx4,error('The K-matrix in m-file must have the same number of rows as A!');end
if nx~=nx5,error('Incorrect size of initial value vector!'),end
if ett~=1,error('X0 must be column vector!'),end
if nu~=nu2,error('D-matrix in m-file must have same number of columns as B!'),end
if ny~=ny1,error('D-matrix in m-file must have same number of rows as C!'),end
if ny~=ny2,error('K-matrix in m-file must have same number of columns as C has rows!'),end

if max(abs(eig(a-k*c)))>1+10*eps,disp('WARNING: Predictor unstable!'),end
if isempty(lambda),lambda=eye(ny);end
eta(1,1)=det(lambda);eta(1,[3:5])=[nu ny d];

ti=fix(clock);
ti(1)=ti(1)/100;
eta(2,1)=d;
eta(2,2:6)=ti(1:5);
eta(2,7)=22;
if cd=='c',eta(2,8)=5;else eta(2,8)=4;end
eta(3,1:d)=parval;
%eta(4:3+d,1:d)=zeros(d,d);
eta(4+d:3+d+rarg,1:carg)=aux;
eta(4+d+rarg:3+ny+d+rarg,1:ny)=lambda;


