Changeset 374

Show
Ignore:
Timestamp:
06/11/09 17:15:06 (15 years ago)
Author:
miro
Message:

mexBM works. An example added (it ignores any underlying theory).
config2mxstruct probably doesn't handle vectors and matrices, to be fixed

Location:
library/mex
Files:
2 added
3 modified

Legend:

Unmodified
Added
Removed
  • library/mex/buildmex.sh

    r341 r374  
    11#!/bin/sh 
    22 
    3 #MATLAB_PATH=/usr/local/matlab7/ 
    4 #BDM_PATH=../../bdm 
     3MATLAB_PATH=/usr/local/matlab7/ 
     4BDM_PATH=../../bdm 
    55 
    6 MATLAB_PATH=/home/smidl/soft/matlab/matlab/ 
    7 BDM_PATH=/home/smidl/work/git/mixpp/bdm 
     6#MATLAB_PATH=/home/smidl/soft/matlab/matlab/ 
     7#BDM_PATH=/home/smidl/work/git/mixpp/bdm 
    88 
    9 #mex -g -l itpp -l bdm -I$MATLAB_PATH/extern/include -I$BDM_PATH  -L ../../bdm/ -L ../../linux/libs/ $1  
    10 mex -l itpp -l bdm -Wfatal-errors -I$MATLAB_PATH/extern/include -I$BDM_PATH  -L ../../bdm/ -L ../../linux/libs/ $1  
     9mex -g -l itpp -l bdm -I$MATLAB_PATH/extern/include -I$BDM_PATH  -L ../../bdm/ -L ../../linux/libs/ $1  
     10#mex -l itpp -l bdm -I$MATLAB_PATH/extern/include -I$BDM_PATH  -L ../../bdm/ -L ../../linux/libs/ $1  
    1111#mxestimator.cpp 
    1212#mex -l bdm -I ../../bdm/ -I /home/smidl/soft/matlab/matlab/extern/include -L ../../bdm/ linefit2.cpp 
  • library/mex/config2mxstruct.h

    r371 r374  
    1616                mxconfig = group2mxstruct(config.getRoot()); 
    1717        } 
    18         /*UImxConfig(const Setting &setting) { 
     18        UImxConfig(const Setting &setting) { 
    1919                mxconfig = group2mxstruct(setting); 
    20         }*/ 
     20        } 
    2121 
    2222private: 
    2323 
    24         mxArray* array2mxvector(Setting &setting)  { 
     24        mxArray* array2mxvector(const Setting &setting)  { 
    2525                if (!setting.isArray()) mexErrMsgTxt("Given setting is not an array"); 
    2626                double *elements = new double[setting.getLength()]; 
     
    3636        } 
    3737 
    38         mxArray* list2mxmatrix(Setting &setting)  { 
     38        mxArray* list2mxmatrix(const Setting &setting)  { 
    3939                if (!setting.isList() || ("matrix" != setting[0])) 
    4040                        mexErrMsgTxt("Given setting is not a matrix"); 
     
    5555        } 
    5656 
    57         mxArray* group2mxstruct(Setting &setting) { 
     57        mxArray* group2mxstruct(const Setting &setting) { 
    5858                if (!setting.isGroup()) mexErrMsgTxt("Given setting is not a group."); 
    5959                const char ** keys = new const char*[setting.getLength()]; 
     
    8585                        case Setting::TypeInt: 
    8686                        case Setting::TypeInt64: 
     87                                mxSetFieldByNumber(result, 0, i, mxCreateDoubleScalar((int) value)); 
     88                                break; 
    8789                        case Setting::TypeFloat: 
    8890                                mxSetFieldByNumber(result, 0, i, mxCreateDoubleScalar(value)); 
     
    9799        } 
    98100         
    99         mxArray* list2mxcell(Setting &setting)  { 
     101        mxArray* list2mxcell(const Setting &setting)  { 
    100102                if (!setting.isList()) mexErrMsgTxt("Given setting is not a list."); 
    101103                if ((setting[0].getType() == Setting::TypeString) && ("matrix" == setting[0])) { 
     
    125127                        case Setting::TypeInt: 
    126128                        case Setting::TypeInt64: 
     129                                mxSetCell(result, i, mxCreateDoubleScalar((int) value)); 
     130                                break; 
    127131                        case Setting::TypeFloat: 
    128132                                mxSetCell(result, i, mxCreateDoubleScalar(value)); 
  • library/mex/mexBM.cpp

    r371 r374  
    11#include <itpp/itmex.h> 
    22#include <estim/arx.h> 
     3#include "config2mxstruct.h" 
    34 
    45using namespace bdm; 
     
    1213                void from_setting(const Setting &S)  { 
    1314                        name = (const char *) S["name"]; 
    14                         string fname = name+"_new"; 
    15                         mexCallMATLAB(1, &data, 0, 0, fname.c_str()); 
     15                        UImxConfig conf(S); 
     16                        data = mxDuplicateArray(conf.mxconfig); 
     17                        //mexCallMATLAB(1, &data, 0, 0, (name+"_new").c_str()); 
    1618                        //TODO (future...): 
    1719                        //mxArray * init_data = setting2mxarray S["init_data"]; 
     
    3537                mexBM() {} 
    3638 
     39                mxArray *get_data() { 
     40                        //mexCallMATLAB(0, NULL, 1, &data, "dump"); 
     41                        return mxDuplicateArray(data); 
     42                } 
     43 
    3744                void from_setting(const Setting &S)  { 
    3845                        name = (const char *) S["name"]; 
    39                         string fname = name+"_new"; 
    40                         mexCallMATLAB(1, &data, 0, 0, (name+"_new").c_str()); 
     46                        UImxConfig conf(S); 
     47                        data = mxDuplicateArray(conf.mxconfig); 
     48                        //string fname = name+"_new"; 
     49                        //mexCallMATLAB(1, &data, 0, 0, (name+"_new").c_str()); 
    4150                        //the following works as long as the posterior is the 
    4251                        //only member object there could be a structure of  
     
    4857                void bayes(const vec &dt)  { 
    4958                //void bayes()  { 
    50                         string fname = name+"_bayes"; 
    51                         mexCallMATLAB(1, &data, 1, &data, fname.c_str()); 
     59                        mxArray *tmp, *old; 
     60                        mxArray *in[2]; 
     61                        in[0] = data; 
     62                        in[1] = mxCreateDoubleMatrix(dt.size(), 1, mxREAL); 
     63                        vec2mxArray(dt, in[1]); 
     64                        mexCallMATLAB(1, &tmp, 2, in, (name+"_bayes").c_str()); 
     65                        old = data; 
     66                        data = mxDuplicateArray(tmp); 
     67                        if (old) mxDestroyArray(old); 
     68                        if (tmp) mxDestroyArray(tmp); 
     69                        //mexCallMATLAB(0, NULL, 1, &data, "dump"); 
    5270                }  
    5371                const mexEpdf& posterior() const  { 
     
    7290        config.readFile(filename.c_str()); 
    7391        mexBM mb; 
    74         mb.from_setting(config.getRoot()); 
    75         vec a = "1.0 2.0 3.0"; 
    76         mb.bayes(a); 
     92        Setting &root = config.getRoot(); 
     93        mb.from_setting(root); 
     94        vec dt = "18.0"; 
     95        mb.bayes(dt); 
     96        if(n_output>0) output[0] = mb.get_data(); 
    7797         
    7898 
     
    80100 
    81101    // Create output vectors 
    82         output[0] = mxCreateDoubleMatrix(1,1, mxREAL); 
     102        //output[0] = mxCreateDoubleMatrix(1,1, mxREAL); 
    83103 
    84104    // Convert the IT++ format to Matlab format for output