00001 #include <estim/arx.h>
00002 #include <itpp/itmex.h>
00003 #include <mex/config2mxstruct.h>
00004 #include "mex_parser.h"
00005 
00006 namespace bdm {
00015 using namespace bdm;
00016 
00017 class mexEpdf: public epdf{
00018         protected:
00019                 string name;
00020                 mxArray *data;
00021         public:
00022                 mexEpdf() {};
00023                 void from_setting(const Setting &S)  {
00024                         name = (const char *) S["name"];
00025                         UImxConfig conf(S);
00026                         data = mxDuplicateArray(conf.mxconfig);
00027                         
00028                         
00029                         
00030                         
00031                         
00032                 } 
00033                 vec mean() const {
00034                         mxArray *tmp;
00035                         string fname = name+"_mean";
00036                         mexCallMATLAB(1, &tmp, 1, (mxArray **) &data, fname.c_str());
00037                         return mxArray2vec(tmp);
00038                 } 
00039 };
00040 UIREGISTER(mexEpdf);
00041 
00042 class mexBM: public BM{
00043         protected :
00044                 string name;
00045                 mexEpdf est;
00046                 mxArray *data;
00047         public:
00048                 mexBM() {}
00049 
00050                 mxArray *get_data() {
00051                         
00052                         return mxDuplicateArray(data);
00053                 }
00054 
00055                 void from_setting(const Setting &S)  {
00056                         BM::from_setting(S);
00057                         name = (const char *) S["name"];
00058                         UImxConfig conf(S);
00059                         data = mxDuplicateArray(conf.mxconfig);
00060                         
00061                         
00062                         
00063                         
00064                         
00065                         
00066                         Setting &posterior = S["posterior"]; 
00067                         est.from_setting(posterior);
00068                 }
00069                 void bayes(const vec &dt)  {
00070                 
00071                         mxArray *tmp, *old;
00072                         mxArray *in[2];
00073                         in[0] = data;
00074                         in[1] = mxCreateDoubleMatrix(dt.size(), 1, mxREAL);
00075                         vec2mxArray(dt, in[1]);
00076                         mexCallMATLAB(1, &tmp, 2, in, (name+"_bayes").c_str());
00077                         old = data;
00078                         data = mxDuplicateArray(tmp);
00079                         if (old) mxDestroyArray(old);
00080                         if (tmp) mxDestroyArray(tmp);
00081                         
00082                 } 
00083                 const mexEpdf& posterior() const  {
00084                         return est;
00085                 } 
00086                 const mexEpdf* _e() const  {
00087                         return &est;
00088                 } 
00089 };
00090 UIREGISTER(mexBM);
00091 
00092 }