| 33 |  |     // Check the number of inputs and output arguments | 
                        | 34 |  | if (n_input!=3) mexErrMsgTxt("Usage:\n"   | 
                        | 35 |  | "result=merger(sources, support, merger)\n" | 
                        | 36 |  | "  sources= { struct('class','epdf'),... };  % cell of pdfs (epdfs or mpdfs) to be merged,\n" | 
                        | 37 |  | "  support= struct(\n" | 
                        | 38 |  | "           grid    = {[dim1_start,dim1_end], [dim2_start, dim2_end]...}  %support boundary \n"    | 
                        | 39 |  | "           nbins   = [bins_in_dim1, bins_in_dim2,...]                    %fixed \n"    | 
                        | 40 |  | "         === OR ==\n" | 
                        | 41 |  | "           pdf     = struct('class','epdf'); % pdf to draw samples from\n" | 
                        | 42 |  | "           nsamples= 100;                    % number of samples\n" | 
                        | 43 |  | "           );\n" | 
                        | 44 |  | "        If all elements are present,  (grid,nbins) is used;\n" | 
                        | 45 |  | "  merger = struct('class','merger_*');       % object to be used for merging,\n\n" | 
                        | 46 |  | "see documentation of classes epdf, mpdf, merger_base and their offsprings in BDM."); | 
                      
                        |  | 33 | // Check the number of inputs and output arguments | 
                        |  | 34 | if (n_input != 3) mexErrMsgTxt ("Usage:\n" | 
                        |  | 35 | "result=merger(sources, support, merger)\n" | 
                        |  | 36 | "  sources= { struct('class','epdf'),... };  % cell of pdfs (epdfs or mpdfs) to be merged,\n" | 
                        |  | 37 | "  support= struct(\n" | 
                        |  | 38 | "           grid    = {[dim1_start,dim1_end], [dim2_start, dim2_end]...}  %support boundary \n" | 
                        |  | 39 | "           nbins   = [bins_in_dim1, bins_in_dim2,...]                    %fixed \n" | 
                        |  | 40 | "         === OR ==\n" | 
                        |  | 41 | "           pdf     = struct('class','epdf'); % pdf to draw samples from\n" | 
                        |  | 42 | "           nsamples= 100;                    % number of samples\n" | 
                        |  | 43 | "           );\n" | 
                        |  | 44 | "        If all elements are present,  (grid,nbins) is used;\n" | 
                        |  | 45 | "  merger = struct('class','merger_*');       % object to be used for merging,\n\n" | 
                        |  | 46 | "see documentation of classes epdf, mpdf, merger_base and their offsprings in BDM."); | 
            
                      
                        | 50 |  | Cfg.addList (input[0],"Sources"); | 
                        | 51 |  | Cfg.addGroup (input[1],"Support"); | 
                        | 52 |  | Cfg.addGroup (input[2],"Merger"); | 
                      
                        |  | 50 | Cfg.addList (input[0], "Sources"); | 
                        |  | 51 | Cfg.addGroup (input[1], "Support"); | 
                        |  | 52 | Cfg.addGroup (input[2], "Merger"); | 
            
                      
                        | 64 |  | Setting& _Sources=Cfg.lookup("Sources"); | 
                        | 65 |  | int Slen=_Sources.getLength(); | 
                        | 66 |  | Sources.set_size(Slen); | 
                        | 67 |  | for (int i=0; i<Slen; i++){ | 
                        | 68 |  | try{ | 
                        | 69 |  | mpdf* mtmp = UI::build<mpdf>(_Sources,i); | 
                        | 70 |  | Sources(i)=mtmp; | 
                        | 71 |  | } | 
                        | 72 |  | catch (UIException){ | 
                      
                        |  | 63 | Setting& _Sources = Cfg.lookup ("Sources"); | 
                        |  | 64 | int Slen = _Sources.getLength(); | 
                        |  | 65 | Sources.set_size (Slen); | 
                        |  | 66 | for (int i = 0; i < Slen; i++) { | 
                        |  | 67 | try { | 
                        |  | 68 | mpdf* mtmp = UI::build<mpdf> (_Sources, i); | 
                        |  | 69 | Sources (i) = mtmp; | 
                        |  | 70 | } catch (UIException) { | 
            
                      
                        | 75 |  | epdf* etmp = UI::build<epdf>(_Sources,i); | 
                        | 76 |  | if (etmp){ | 
                        | 77 |  | Sources(i) = new mepdf(etmp, true); | 
                        | 78 |  | } | 
                      
                        |  | 73 | shared_ptr<epdf> etmp = UI::build<epdf> (_Sources, i); | 
                        |  | 74 | if (etmp) { | 
                        |  | 75 | Sources (i) = new mepdf (etmp); | 
                        |  | 76 | } | 
                        |  | 77 | } catch (UIException e) { | 
                        |  | 78 | it_error ("No mpdfs or epdfs found! " + string (e.what())); | 
                        |  | 79 | } catch (std::exception e) { | 
                        |  | 80 | it_error ("Error in UI at " + _Sources[i].getPath()); | 
            
                      
                        | 96 |  | Setting & _Supp=Cfg.lookup("Support"); | 
                        | 97 |  |  | 
                        | 98 |  | if (_Supp.exists("grid") &&  _Supp.exists("nbins")) { | 
                        | 99 |  | Array<vec> bounds (0); | 
                        | 100 |  | UI::get (bounds, _Supp, "grid"); | 
                        | 101 |  | ivec nbins(0); | 
                        | 102 |  | UI::get (nbins, _Supp, "nbins"); | 
                        | 103 |  | Merger->set_support (bounds,nbins); | 
                        | 104 |  |  | 
                        | 105 |  | }else { | 
                        | 106 |  | if (_Supp.exists("pdf") &&  _Supp.exists("nsamples")){ | 
                        | 107 |  | epdf *g0=UI::build<epdf> (_Supp, "pdf"); | 
                        | 108 |  | int npoints=100; | 
                        | 109 |  | _Supp.lookupValue("nsamples",npoints); | 
                        | 110 |  | Merger->set_support (*g0,npoints); | 
                        | 111 |  | delete g0; | 
                        | 112 |  | } | 
                        | 113 |  | else it_error("Use either [grid,nbins] or [pdf,nsamples]."); | 
                      
                        |  | 90 | Setting & _Supp = Cfg.lookup ("Support"); | 
                        |  | 91 |  | 
                        |  | 92 | if (_Supp.exists ("grid") &&  _Supp.exists ("nbins")) { | 
                        |  | 93 | Array<vec> bounds (0); | 
                        |  | 94 | UI::get (bounds, _Supp, "grid"); | 
                        |  | 95 | ivec nbins (0); | 
                        |  | 96 | UI::get (nbins, _Supp, "nbins"); | 
                        |  | 97 | Merger->set_support (bounds, nbins); | 
                        |  | 98 |  | 
                        |  | 99 | } else { | 
                        |  | 100 | if (_Supp.exists ("pdf") &&  _Supp.exists ("nsamples")) { | 
                        |  | 101 | epdf *g0 = UI::build<epdf> (_Supp, "pdf"); | 
                        |  | 102 | int npoints = 100; | 
                        |  | 103 | _Supp.lookupValue ("nsamples", npoints); | 
                        |  | 104 | Merger->set_support (*g0, npoints); | 
                        |  | 105 | delete g0; | 
                        |  | 106 | } else it_error ("Use either [grid,nbins] or [pdf,nsamples]."); | 
            
                      
                        | 120 |  | Array<vec> source_vals(Sources.length()); | 
                        | 121 |  | for (int i=0;i<Sources.length();i++){ | 
                        | 122 |  | datalink_m2e dl; | 
                        | 123 |  | dl.set_connection(Sources(i)->_rv(), Sources(i)->_rvc(), Merger->_rv()); | 
                        | 124 |  |  | 
                        | 125 |  | vec ll(Merger->_Smp()._samples().length()); | 
                        | 126 |  | for(int j=0; j<Merger->_Smp()._samples().length(); j++){ | 
                        | 127 |  | vec dt=dl.pushdown(Merger->_Smp()._samples()(j)); | 
                        | 128 |  | vec dtc=dl.get_cond(Merger->_Smp()._samples()(j)); | 
                        | 129 |  | ll(j)=Sources(i)->evallogcond(dt,dtc); | 
                        | 130 |  | } | 
                      
                        |  | 113 | Array<vec> source_vals (Sources.length()); | 
                        |  | 114 | for (int i = 0;i < Sources.length();i++) { | 
                        |  | 115 | datalink_m2e dl; | 
                        |  | 116 | dl.set_connection (Sources (i)->_rv(), Sources (i)->_rvc(), Merger->_rv()); | 
            
                      
                        | 153 |  | Array<vec> &samples =Merger->_Smp()._samples(); | 
                        | 154 |  | if (samples.size() >0){ | 
                        | 155 |  | mxArray* fld =mxCreateDoubleMatrix(samples(0).length(), samples.size(), mxREAL); | 
                        | 156 |  | Arrayvec2mxArray(samples,fld); | 
                        | 157 |  | mxReplaceFieldNM(tmp, "support", fld); | 
                      
                        |  | 146 | Array<vec> &samples = Merger->_Smp()._samples(); | 
                        |  | 147 | if (samples.size() > 0) { | 
                        |  | 148 | mxArray* fld = mxCreateDoubleMatrix (samples (0).length(), samples.size(), mxREAL); | 
                        |  | 149 | Arrayvec2mxArray (samples, fld); | 
                        |  | 150 | mxReplaceFieldNM (tmp, "support", fld); | 
            
                      
                        | 167 |  | mxArray* fldm =mxCreateDoubleMatrix(1, w.length(), mxREAL); | 
                        | 168 |  | vec2mxArray (mix_val,fldm); | 
                        | 169 |  | mxReplaceFieldNM (tmp, "mix", fldm); | 
                      
                        |  | 160 | mxArray* fldm = mxCreateDoubleMatrix (1, w.length(), mxREAL); | 
                        |  | 161 | vec2mxArray (mix_val, fldm); | 
                        |  | 162 | mxReplaceFieldNM (tmp, "mix", fldm); | 
            
                      
                        | 173 |  | for (int i =0;i<Sources.length();i++){ | 
                        | 174 |  | sprintf (srcstr,"source%d",i+1); | 
                        | 175 |  | mxArray* fldw =mxCreateDoubleMatrix(1, source_vals(i).length(), mxREAL); | 
                        | 176 |  | vec2mxArray (source_vals(i),fldw); | 
                        | 177 |  | mxReplaceFieldNM (tmp, srcstr, fldw); | 
                        | 178 |  | }                 | 
                      
                        |  | 166 | for (int i = 0;i < Sources.length();i++) { | 
                        |  | 167 | sprintf (srcstr, "source%d", i + 1); | 
                        |  | 168 | mxArray* fldw = mxCreateDoubleMatrix (1, source_vals (i).length(), mxREAL); | 
                        |  | 169 | vec2mxArray (source_vals (i), fldw); | 
                        |  | 170 | mxReplaceFieldNM (tmp, srcstr, fldw); | 
                        |  | 171 | } |