Show
Ignore:
Timestamp:
08/08/09 13:42:18 (15 years ago)
Author:
smidl
Message:

1st step of mpdf redesign - BROKEN compile

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • library/bdm/stat/emix.h

    r477 r487  
    4545        //!datalink between conditional and nom 
    4646        datalink_m2e dl; 
     47        //! dummy epdf that stores only rv and dim 
     48        epdf iepdf; 
    4749public: 
    4850        //!Default constructor. By default, the given epdf is not copied! 
    4951        //! It is assumed that this function will be used only temporarily. 
    50         mratio ( const epdf* nom0, const RV &rv, bool copy = false ) : mpdf ( ), dl ( ) { 
     52        mratio ( const epdf* nom0, const RV &rv, bool copy = false ) : mpdf ( ), dl ( ),iepdf() { 
    5153                // adjust rv and rvc 
    5254                rvc = nom0->_rv().subt ( rv ); 
    5355                dimc = rvc._dsize(); 
    54                 set_ep ( shared_ptr<epdf> ( new epdf ) ); 
    55                 e()->set_parameters ( rv._dsize() ); 
    56                 e()->set_rv ( rv ); 
     56                set_ep ( iepdf ); 
     57                iepdf.set_parameters ( rv._dsize() ); 
     58                iepdf.set_rv ( rv ); 
    5759 
    5860                //prepare data structures 
     
    7274        double evallogcond ( const vec &val, const vec &cond ) { 
    7375                double tmp; 
    74                 vec nom_val ( e()->dimension() + dimc ); 
     76                vec nom_val ( dimension() + dimc ); 
    7577                dl.pushup_cond ( nom_val, val, cond ); 
    7678                tmp = exp ( nom->evallog ( nom_val ) - den->evallog ( cond ) ); 
    77                 it_assert_debug ( std::isfinite ( tmp ), "Infinite value" ); 
    7879                return tmp; 
    7980        } 
     
    278279class mprod: public compositepdf, public mpdf { 
    279280protected: 
    280         //! pointers to epdfs - shortcut to mpdfs().posterior() 
    281         Array<epdf*> epdfs; 
    282281        //! Data link for each mpdfs 
    283282        Array<datalink_m2m*> dls; 
    284283 
    285         //! dummy ep 
    286         shared_ptr<epdf> dummy; 
     284        //! dummy epdf used only as storage for RV and dim 
     285        epdf iepdf; 
    287286 
    288287public: 
    289288        /*!\brief Constructor from list of mFacs, 
    290289        */ 
    291         mprod() : dummy ( new epdf() ) { } 
     290        mprod() : iepdf( ) { } 
    292291        mprod ( Array<mpdf*> mFacs ) : 
    293                         dummy ( new epdf() ) { 
     292                        iepdf ( ) { 
    294293                set_elements ( mFacs ); 
    295294        } 
     
    299298                compositepdf::set_elements ( mFacs, own ); 
    300299                dls.set_size ( mFacs.length() ); 
    301                 epdfs.set_size ( mFacs.length() ); 
    302  
    303                 set_ep ( dummy ); 
     300 
     301                set_ep ( iepdf); 
    304302                RV rv = getrv ( true ); 
    305303                set_rv ( rv ); 
    306                 dummy->set_parameters ( rv._dsize() ); 
    307                 setrvc ( e()->_rv(), rvc ); 
     304                iepdf.set_parameters ( rv._dsize() ); 
     305                setrvc (_rv(), rvc ); 
    308306                // rv and rvc established = > we can link them with mpdfs 
    309307                for ( int i = 0; i < mpdfs.length(); i++ ) { 
     
    312310                } 
    313311 
    314                 for ( int i = 0; i < mpdfs.length(); i++ ) { 
    315                         epdfs ( i ) = mpdfs ( i )->e(); 
    316                 } 
    317312        }; 
    318313 
     
    352347        vec samplecond ( const vec &cond ) { 
    353348                //! Ugly hack to help to discover if mpfs are not in proper order. Correct solution = check that explicitely. 
    354                 vec smp = std::numeric_limits<double>::infinity() * ones ( e()->dimension() ); 
     349                vec smp = std::numeric_limits<double>::infinity() * ones ( dimension() ); 
    355350                vec smpi; 
    356351                // Hard assumption here!!! We are going backwards, to assure that samples that are needed from smp are already generated! 
    357352                for ( int i = ( mpdfs.length() - 1 ); i >= 0; i-- ) { 
    358                         if ( mpdfs ( i )->dimensionc() ) { 
    359                                 mpdfs ( i )->condition ( dls ( i )->get_cond ( smp , cond ) ); // smp is val here!! 
    360                         } 
    361                         smpi = epdfs ( i )->sample(); 
     353                        // generate contribution of this mpdf 
     354                        smpi = mpdfs(i)->samplecond(dls ( i )->get_cond ( smp , cond ));                         
    362355                        // copy contribution of this pdf into smp 
    363356                        dls ( i )->pushup ( smp, smpi ); 
    364                         // add ith likelihood contribution 
    365357                } 
    366358                return smp; 
     
    483475 
    484476*/ 
    485 class mmix : public mpdf { 
    486 protected: 
    487         //! Component (epdfs) 
    488         Array<mpdf*> Coms; 
    489  
    490         //!Internal epdf 
    491         shared_ptr<emix> iepdf; 
    492  
    493 public: 
    494         //!Default constructor 
    495         mmix() : iepdf ( new emix() ) { 
    496                 set_ep ( iepdf ); 
    497         } 
    498  
    499         //! Set weights \c w and components \c R 
    500         void set_parameters ( const vec &w, const Array<mpdf*> &Coms ) { 
    501                 Array<epdf*> Eps ( Coms.length() ); 
    502  
    503                 for ( int i = 0; i < Coms.length(); i++ ) { 
    504                         Eps ( i ) = Coms ( i )->e(); 
    505                 } 
    506  
    507                 iepdf->set_parameters ( w, Eps ); 
    508         } 
    509  
    510         void condition ( const vec &cond ) { 
    511                 for ( int i = 0; i < Coms.length(); i++ ) { 
    512                         Coms ( i )->condition ( cond ); 
    513                 } 
    514         }; 
    515 }; 
     477// class mmix : public mpdf { 
     478// protected: 
     479//      //! Component (epdfs) 
     480//      Array<mpdf*> Coms; 
     481//  
     482//      //!Internal epdf 
     483//      emix iepdf; 
     484//  
     485// public: 
     486//      //!Default constructor 
     487//      mmix() : iepdf ( ) { 
     488//              set_ep ( iepdf ); 
     489//      } 
     490//  
     491//      //! Set weights \c w and components \c R 
     492//      void set_parameters ( const vec &w, const Array<mpdf*> &Coms ) { 
     493//              Array<epdf*> Eps ( Coms.length() ); 
     494//  
     495//              for ( int i = 0; i < Coms.length(); i++ ) { 
     496//                      Eps ( i ) = Coms ( i )->e(); 
     497//              } 
     498//  
     499//              iepdf->set_parameters ( w, Eps ); 
     500//      } 
     501//  
     502//      void condition ( const vec &cond ) { 
     503//              for ( int i = 0; i < Coms.length(); i++ ) { 
     504//                      Coms ( i )->condition ( cond ); 
     505//              } 
     506//      }; 
     507// }; 
    516508 
    517509}