Changeset 378

Show
Ignore:
Timestamp:
06/17/09 23:53:08 (15 years ago)
Author:
smidl
Message:

details and compositepdf changes

Files:
5 modified
6 moved

Legend:

Unmodified
Added
Removed
  • bdm/stat/emix.h

    r361 r378  
    234234        /*!\brief Constructor from list of mFacs, 
    235235        */ 
    236         mprod ( Array<mpdf*> mFacs ) : compositepdf ( mFacs ), mpdf (), epdfs ( n ), dls ( n ) { 
     236        mprod (){}; 
     237        mprod (Array<mpdf*> mFacs ){set_elements( mFacs );}; 
     238        void set_elements(Array<mpdf*> mFacs ) { 
     239                 
     240                set_elements(mFacs); 
     241                 
    237242                ep=&dummy; 
    238243                RV rv=getrv ( true ); 
     
    240245                setrvc ( ep->_rv(),rvc ); 
    241246                // rv and rvc established = > we can link them with mpdfs 
    242                 for ( int i = 0;i < n;i++ ) { 
     247                for ( int i = 0;i < mpdfs.length(); i++ ) { 
    243248                        dls ( i ) = new datalink_m2m; 
    244249                        dls(i)->set_connection( mpdfs ( i )->_rv(), mpdfs ( i )->_rvc(), _rv(), _rvc() ); 
    245250                } 
    246251 
    247                 for ( int i=0;i<n;i++ ) { 
     252                for ( int i=0; i<mpdfs.length(); i++ ) { 
    248253                        epdfs ( i ) =& ( mpdfs ( i )->_epdf() ); 
    249254                } 
     
    253258                int i; 
    254259                double res = 0.0; 
    255                 for ( i = n - 1;i >= 0;i-- ) { 
     260                for ( i = mpdfs.length() - 1;i >= 0;i-- ) { 
    256261                        /*                      if ( mpdfs(i)->_rvc().count() >0) { 
    257262                                                        mpdfs ( i )->condition ( dls ( i )->get_cond ( val,cond ) ); 
     
    272277                vec smpi; 
    273278                // Hard assumption here!!! We are going backwards, to assure that samples that are needed from smp are already generated! 
    274                 for ( int i = ( n - 1 );i >= 0;i-- ) { 
     279                for ( int i = ( mpdfs.length() - 1 );i >= 0;i-- ) { 
    275280                        if ( mpdfs ( i )->dimensionc() ) { 
    276281                                mpdfs ( i )->condition ( dls ( i )->get_cond ( smp ,cond ) ); // smp is val here!! 
  • bdm/stat/libBM.cpp

    r377 r378  
    255255        RV rv; //empty rv 
    256256        bool rvaddok; 
    257         for ( int i = 0;i < n;i++ ) { 
     257        for ( int i = 0;i < mpdfs.length();i++ ) { 
    258258                rvaddok=rv.add ( mpdfs ( i )->_rv() ); //add rv to common rvs. 
    259259                // If rvaddok==false, mpdfs overlap => assert error. 
     
    264264 
    265265void compositepdf::setrvc ( const RV &rv, RV &rvc ) { 
    266         for ( int i = 0;i < n;i++ ) { 
     266        for ( int i = 0;i < mpdfs.length();i++ ) { 
    267267                RV rvx = mpdfs ( i )->_rvc().subt ( rv ); 
    268268                rvc.add ( rvx ); //add rv to common rvc 
  • bdm/stat/libBM.h

    r377 r378  
    575575}; 
    576576 
    577 //!\brief Abstract composition of pdfs, will be used for specific classes 
     577//!\brief Chain rule of pdfs - abstract part common for mprod and merger.  
    578578//!this abstract class is common to epdf and mpdf 
     579//!\todo Think of better design - global functions rv=get_rv(Array<mpdf*> mpdfs); ?? 
    579580class compositepdf 
    580581{ 
  • bdm/stat/libEF.h

    r377 r378  
    125125                        enorm ( const vec &mu,const sq_T &R ) {set_parameters ( mu,R );} 
    126126                        void set_parameters ( const vec &mu,const sq_T &R ); 
     127                        void from_setting(const Setting &root); 
    127128                        //!@} 
    128129 
     
    141142//      mlnorm<sq_T>* condition ( const RV &rvn ) const ; <=========== fails to cmpile. Why? 
    142143                        mpdf* condition ( const RV &rvn ) const ; 
    143         enorm<sq_T>* marginal ( const RV &rv ) const; 
     144                        enorm<sq_T>* marginal ( const RV &rv ) const; 
    144145//                      epdf* marginal ( const RV &rv ) const; 
    145146                        //!@} 
     
    791792         only allow diagonal covariances! 
    792793 
    793         Density of the form \f$ \log(x)\sim \mathcal{N}(\mu,\sigma^2), i.e. 
     794        Density of the form \f$ \log(x)\sim \mathcal{N}(\mu,\sigma^2) \f$ , i.e. 
    794795        \f[ 
    795796        x \sim \frac{1}{x\sigma\sqrt{2\pi}}\exp{-\frac{1}{2\sigma^2}(\log(x)-\mu)} 
     
    10171018                        //!@{ 
    10181019                        eEmp ( ) :epdf ( ),w ( ),samples ( ) {}; 
     1020                        //! copy constructor 
    10191021                        eEmp ( const eEmp &e ) : epdf ( e ), w ( e.w ), samples ( e.samples ) {}; 
    10201022                        //!@} 
     
    10871089 
    10881090        template<class sq_T> 
     1091        void enorm<sq_T>::from_setting(const Setting &root){ 
     1092                vec mu; 
     1093                UI::get(mu,root,"mu"); 
     1094                mat R; 
     1095                UI::get(R,root,"R"); 
     1096                set_parameters(mu,R); 
     1097                 
     1098                RV* r = UI::build<RV>(root,"rv"); 
     1099                set_rv(*r);  
     1100                delete r; 
     1101        } 
     1102 
     1103        template<class sq_T> 
    10891104        void enorm<sq_T>::dupdate ( mat &v, double nu ) 
    10901105        { 
  • bdm/user_info.h

    r377 r378  
    1717 
    1818#ifndef BDMLIB  
     19//!Macro for registration of classes into map of UserInfos -- registered class is scriptable  
    1920#define UIREGISTER(class_name) template<> const Particular_UI<class_name>& Particular_UI<class_name>::ui = Particular_UI<class_name>(#class_name)  
    2021#else