00001 
00014 #include "libKF.h"
00015 #include <uibuilder.h>
00016 
00017 class UIEKF: public UIbuilder {
00018         public:
00019         UIEKF():UIbuilder("EKF"){};
00020         bdmroot* build ( Setting &S ) const {
00021                 diffbifn* IM; UIbuild(S["IM"],IM);
00022                 diffbifn* OM; UIbuild(S["OM"],OM);
00023                 
00024                 
00025                 EKFCh* E; E=new EKFCh;
00026                 
00027                 
00028                 
00029                 int dim=IM->dimension();
00030                 vec mu0;
00031                 mat P0;
00032                 if (S.exists("mu0")){mu0=getvec(S["mu0"]);}else{mu0=zeros(dim);};
00033                 if (S.exists("P0")){P0=getmat(S["P0"],dim);}else{P0=eye(dim);};
00034                 if (S.exists("dP0")){P0=diag(getvec(S["dP0"]));}else{P0=eye(dim);};
00035                 E->set_statistics(mu0,P0);
00036                 
00037                 
00038                 E->set_parameters(IM, OM, diag(getvec(S["dQ"])), diag(getvec(S["dR"])));
00039 
00040                 
00041                 RV* drv; UIbuild(S["drv"],drv);
00042                 E->set_drv(*drv);
00043                 RV* rv; UIbuild(S["rv"],rv);
00044                 E->set_rv(*rv);
00045                 
00046                 if (S.exists("options")){E->set_options(S["options"]);};
00047                 
00048                 return E;
00049         }       
00050 };
00051 UIREGISTER ( UIEKF );
00052 
00053 class UIMultiModel: public UIbuilder {
00054         public:
00055                 UIMultiModel():UIbuilder("MultiModel"){};
00056                 bdmroot* build ( Setting &S ) const {
00057                         Array<EKFCh*> A;
00058                         MultiModel* MM; MM=new MultiModel;
00059                                 
00060                         Setting& mod=S["models"];
00061                         A.set_length(mod.getLength());
00062                         for (int i=0;i<A.length();i++){
00063                                 UIbuild(mod[i], A(i));
00064                         }
00065                         
00066                         MM->set_parameters(A);
00067                         MM->set_drv(A(0)->_drv());
00068                         
00069                 
00070                         if (S.exists("options")){MM->set_options(S["options"]);};
00071                 
00072                         return MM;
00073                 }       
00074 };
00075 UIREGISTER ( UIMultiModel );
00076