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 1.4.7