mixpp: mex_BM.h Source File

mex_BM.h

00001 #include <mex/mex_parser.h>
00002 #include <mex/mex_pdf.h>
00003 class mexBM: public BM {
00004 protected:
00005     mxArray *data;
00006     mexEpdf est;
00007 public:
00008     mexBM() {};
00009     void from_setting(const Setting &S)  {
00010         Setting &So=S["object"];
00011         data = (mxArray*)long(So);
00012     }
00013     void validate() {
00014         mxArray *tmp;
00015         mexCallMATLAB(1, &tmp, 1, &data,  "validate");
00016         // new object is in tmp
00017         data = tmp;
00018
00019         mexCallMATLAB(1, &tmp, 1, &data, "dimensions");
00020         vec v=mxArray2vec(tmp);
00021         if (v.length()<3) {
00022             bdm_error("Three dimensions are expected in mexBM.dimensions");
00023         }
00024         set_dim(v(0));
00025         dimy = v(1);
00026         dimc = v(2);
00027
00028         mexCallMATLAB(1, &tmp, 1, &data, "get_rv");
00029         UImxArray rvtmp(tmp);
00030         shared_ptr<RV> r = UI::build<RV>(rvtmp);
00031         set_rv(*r);
00032
00033         mexCallMATLAB(1, &tmp, 1, &data, "get_rvc");
00034         UImxArray rvtmpc(tmp);
00035         shared_ptr<RV> rc = UI::build<RV>(rvtmpc);
00036         rvtmpc.writeFile("tmpc.cfg");
00037         rvc=*rc;
00038
00039         mexCallMATLAB(1, &tmp, 1, &data, "get_rvy");
00040         UImxArray rvtmpy(tmp);
00041         rvtmpy.writeFile("tmpy.cfg");
00042         shared_ptr<RV> ry = UI::build<RV>(rvtmpy);
00043         yrv = *ry;
00044
00045     }
00046     void bayes(const vec &dt, const vec &cond) {
00047         mxArray *tmp;
00048         mxArray *in[3];
00049         in[0]=data;
00050         in[1]=mxCreateDoubleMatrix(dt.length(),1,mxREAL);
00051         vec2mxArray(dt,in[1]);
00052         in[2]=mxCreateDoubleMatrix(cond.length(),1,mxREAL);
00053         vec2mxArray(cond,in[2]);
00054
00055         mexCallMATLAB(1, &tmp, 3, in, "bayes");
00056         data = tmp;
00057     }
00058     epdf* predictor(const vec &cond) const {
00059         mxArray *tmp;
00060         mxArray *in[3];
00061         in[0]=data;
00062         in[1]=mxCreateDoubleMatrix(cond.length(),1,mxREAL);
00063         vec2mxArray(cond,in[1]);
00064
00065         mexCallMATLAB(1, &tmp, 3, in, "predictor");
00066
00067         UImxArray uitmp(tmp);
00068         shared_ptr<epdf> pred = UI::build<epdf>(uitmp);
00069         return pred.get();
00070         //
00071     }
00072     const epdf& posterior() const {
00073         mxArray *tmp;
00074         mexCallMATLAB(1, &tmp, 1,(mxArray **) &data,  "posterior");
00075         const_cast<mexEpdf*>(&est)->set_data(tmp);
00076         return est;
00077     }
00078 };
00079 UIREGISTER(mexBM);

Generated on 2 Dec 2013 for mixpp by  doxygen 1.4.7