pdfbgen_tdata.cc
上传用户:l56789
上传日期:2022-02-25
资源大小:2422k
文件大小:2k
源码类别:

图形图像处理

开发平台:

Matlab

  1. //-----------------------------------------------------------------------------
  2. // pdfbgen_tdata.cc  - Generate data from a Tying HMT Model for PDFB
  3. //
  4. // input arguments: 
  5. // nObs - number of observations (trees) to be generated randomly (nRoots)
  6. // modelfile - input file containing HMT parameters used in random generation
  7. //             (for modelfile format, see thmt.hh)
  8. // datafile - output file containing generated data in tree structures
  9. //            (for datafile format, see tree.hh)
  10. //-----------------------------------------------------------------------------
  11. #include <stdlib.h>
  12. #include <iostream>
  13. #include "pdfbthmt.hh"
  14. tree<double>* pdfbgen_tdata(const mxArray* model, int ntrees, int* levndir, 
  15.     int nl)
  16. {
  17.    tree<double>* data = new tree<double>(ntrees, 4, nl, 0);
  18.    THMT thmt(model, levndir);
  19.    // Generate data
  20.    thmt.generate_data(*data, ntrees);
  21.    return data;
  22. }
  23. //---------------------------------------------------------------------------  
  24. void mexFunction( int nlhs, mxArray *plhs[], 
  25.   int nrhs, const mxArray *prhs[] )     
  26. {
  27.     double *data, *templevndir; 
  28.     int nObs, nl, i, n, *levndir, *intptr, temp;
  29.     tree<double>* dataTree;
  30.     const mxArray *constdatacell;
  31.     mxArray *initcell, *datacell;
  32.     
  33.     /* Check for proper number of arguments */
  34.     
  35.     if (nrhs != 4){ 
  36. mexErrMsgTxt("Wrong number of arguments."); 
  37.     } else if (nlhs > 1) {
  38. mexErrMsgTxt("Too many output arguments."); 
  39.     } 
  40.     nl = (int)mxGetScalar(prhs[1]);
  41.     nObs = (int)mxGetScalar(prhs[2]);
  42.     levndir = new int[nl];
  43.     templevndir = mxGetPr(prhs[3]);
  44.     for(i = 0; i<nl; i++)
  45.       levndir[i] = (int)(templevndir[i]);
  46.     intptr = new int(nl);
  47.     plhs[0] = mxCreateCellArray(1, intptr);
  48.     temp = nObs;
  49.     for (i = 0; i < nl; i++)
  50.     {
  51.       initcell = mxCreateDoubleMatrix(temp, 1, mxREAL);
  52.       mxSetCell(plhs[0], i, initcell);
  53.       temp = temp*4;
  54.     }
  55.     dataTree = pdfbgen_tdata(prhs[0], nObs, levndir, nl);
  56.     for (i = 0; i < nl; i++)
  57.     {
  58.       constdatacell = plhs[0];
  59.       datacell = mxGetCell(constdatacell, i);
  60.       constdatacell = datacell;
  61.       data = mxGetPr(constdatacell);
  62.       for (n = 0; n < (*dataTree)[i].size(); n++)
  63. *data++ = (*dataTree)[i][n];
  64.     }
  65.     return;    
  66. }