Show
Ignore:
Timestamp:
07/31/09 13:06:49 (15 years ago)
Author:
vbarta
Message:

mpdf (& its dependencies) reformat: now using shared_ptr, moved virtual method bodies to .cpp

Files:
1 modified

Legend:

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

    r450 r461  
    1515 
    1616 
     17#include "../shared_ptr.h" 
    1718#include "../base/bdmbase.h" 
    1819#include "../math/chmat.h" 
     
    530531                protected: 
    531532                        //! Internal epdf that arise by conditioning on \c rvc 
    532                         enorm<sq_T> epdf; 
     533                        shared_ptr<enorm<sq_T> > iepdf; 
    533534                        mat A; 
    534535                        vec mu_const; 
     
    537538                        //! \name Constructors 
    538539                        //!@{ 
    539                         mlnorm ( ) :mEF (),epdf ( ),A ( ),_mu ( epdf._mu() ) {ep =&epdf; }; 
    540                         mlnorm ( const  mat &A, const vec &mu0, const sq_T &R ) :epdf ( ),_mu ( epdf._mu() ) 
    541                         { 
    542                                 ep =&epdf; set_parameters ( A,mu0,R ); 
    543                         }; 
     540                        mlnorm():iepdf(new enorm<sq_T>()), _mu(iepdf->_mu()) { set_ep(iepdf); }; 
     541                        mlnorm (const mat &A, const vec &mu0, const sq_T &R ) :iepdf(new enorm<sq_T>()), _mu(iepdf->_mu()) 
     542                        { 
     543                                set_ep(iepdf); set_parameters ( A,mu0,R ); 
     544                        } 
     545 
    544546                        //! Set \c A and \c R 
    545547                        void set_parameters ( const  mat &A, const vec &mu0, const sq_T &R ); 
     
    553555                        mat& _A() {return A;} 
    554556                        //!access function 
    555                         mat _R() {return epdf._R().to_mat();} 
     557                        mat _R() { return iepdf->_R().to_mat(); } 
    556558 
    557559                        template<class sq_M> 
     
    577579                protected: 
    578580                        //! Internal epdf that arise by conditioning on \c rvc 
    579                         enorm<sq_T> epdf; 
     581                        shared_ptr<enorm<sq_T> > iepdf; 
    580582                        vec &mu; 
    581583                        fnc* g; 
    582584                public: 
    583585                        //!default constructor 
    584                         mgnorm() :mu ( epdf._mu() ) {ep=&epdf;} 
     586                        mgnorm():iepdf(new enorm<sq_T>()), mu(iepdf->_mu()) { set_ep(iepdf); } 
    585587                        //!set mean function 
    586                         void set_parameters ( fnc* g0, const sq_T &R0 ) {g=g0; epdf.set_parameters ( zeros ( g->dimension() ), R0 );} 
     588                        void set_parameters ( fnc* g0, const sq_T &R0 ) {g=g0; iepdf->set_parameters ( zeros ( g->dimension() ), R0 );} 
    587589                        void condition ( const vec &cond ) {mu=g->eval ( cond );}; 
    588590 
     
    662664                public: 
    663665                        mlstudent ( ) :mlnorm<ldmat> (), 
    664                                         Lambda (),      _R ( epdf._R() ) {} 
     666                                        Lambda (),      _R ( iepdf->_R() ) {} 
    665667                        void set_parameters ( const mat &A0, const vec &mu0, const ldmat &R0, const ldmat& Lambda0 ) 
    666668                        { 
     
    668670                                it_assert_debug ( R0.rows() ==A0.rows(),"" ); 
    669671 
    670                                 epdf.set_parameters ( mu0,Lambda ); // 
     672                                iepdf->set_parameters ( mu0,Lambda ); // 
    671673                                A = A0; 
    672674                                mu_const = mu0; 
     
    705707                protected: 
    706708                        //! Internal epdf that arise by conditioning on \c rvc 
    707                         egamma epdf; 
     709                        shared_ptr<egamma> iepdf; 
     710 
    708711                        //! Constant \f$k\f$ 
    709712                        double k; 
    710                         //! cache of epdf.beta 
     713 
     714                        //! cache of iepdf.beta 
    711715                        vec &_beta; 
    712716 
    713717                public: 
    714718                        //! Constructor 
    715                         mgamma ( ) : mEF ( ), epdf (), _beta ( epdf._beta() ) {ep=&epdf;}; 
     719                        mgamma():iepdf(new egamma()), k(0), 
     720                            _beta(iepdf->_beta()) { 
     721                            set_ep(iepdf); 
     722                        } 
     723 
    716724                        //! Set value of \c k 
    717                         void set_parameters ( double k, const vec &beta0 ); 
     725                        void set_parameters(double k, const vec &beta0); 
     726 
    718727                        void condition ( const vec &val ) {_beta=k/val;}; 
    719728                        //! Load from structure with elements: 
     
    749758                protected: 
    750759                        //! Internal epdf that arise by conditioning on \c rvc 
    751                         eigamma epdf; 
     760                        shared_ptr<eigamma> iepdf; 
     761 
    752762                        //! Constant \f$k\f$ 
    753763                        double k; 
    754                         //! cache of epdf.alpha 
     764 
     765                        //! cache of iepdf.alpha 
    755766                        vec &_alpha; 
    756                         //! cache of epdf.beta 
     767 
     768                        //! cache of iepdf.beta 
    757769                        vec &_beta; 
    758770 
     
    760772                        //! \name Constructors 
    761773                        //!@{ 
    762                         migamma ( ) : mEF (), epdf ( ), _alpha ( epdf._alpha() ), _beta ( epdf._beta() ) {ep=&epdf;}; 
    763                         migamma ( const migamma &m ) : mEF (), epdf ( m.epdf ), _alpha ( epdf._alpha() ), _beta ( epdf._beta() ) {ep=&epdf;}; 
     774                        migamma():iepdf(new eigamma()), 
     775                            k(0), 
     776                            _alpha(iepdf->_alpha()), 
     777                            _beta(iepdf->_beta()) { 
     778                            set_ep(iepdf); 
     779                        } 
     780 
     781                        migamma(const migamma &m):iepdf(m.iepdf), 
     782                            k(0), 
     783                            _alpha(iepdf->_alpha()), 
     784                            _beta(iepdf->_beta()) { 
     785                            set_ep(iepdf); 
     786                        } 
    764787                        //!@} 
    765788 
     
    768791                        { 
    769792                                k=k0; 
    770                                 epdf.set_parameters ( ( 1.0/ ( k*k ) +2.0 ) *ones ( len ) /*alpha*/, ones ( len ) /*beta*/ ); 
     793                                iepdf->set_parameters ( ( 1.0/ ( k*k ) +2.0 ) *ones ( len ) /*alpha*/, ones ( len ) /*beta*/ ); 
    771794                                dimc = dimension(); 
    772795                        }; 
     
    907930        { 
    908931                protected: 
    909                         elognorm eno; 
     932                        shared_ptr<elognorm> eno; 
     933 
    910934                        //! parameter 1/2*sigma^2 
    911935                        double sig2; 
     936 
    912937                        //! access 
    913938                        vec &mu; 
    914939                public: 
    915940                        //! Constructor 
    916                         mlognorm ( ) : eno (), mu ( eno._mu() ) {ep=&eno;}; 
     941                        mlognorm():eno(new elognorm()), 
     942                            sig2(0), 
     943                            mu(eno->_mu()) { 
     944                            set_ep(eno); 
     945                        } 
     946 
    917947                        //! Set value of \c k 
    918948                        void set_parameters ( int size, double k ) 
    919949                        { 
    920950                                sig2 = 0.5*log ( k*k+1 ); 
    921                                 eno.set_parameters ( zeros ( size ),2*sig2*eye ( size ) ); 
     951                                eno->set_parameters ( zeros ( size ),2*sig2*eye ( size ) ); 
    922952 
    923953                                dimc = size; 
     
    10531083        { 
    10541084                protected: 
    1055                         eiWishartCh eiW; 
     1085                        shared_ptr<eiWishartCh> eiW; 
    10561086                        //!square root of \f$ \nu-p-1 \f$ - needed for computation of \f$ \Psi \f$ from conditions 
    10571087                        double sqd; 
     
    10601090                        double l; 
    10611091                        int p; 
    1062                 public: 
     1092 
     1093                public: 
     1094                        rwiWishartCh():eiW(new eiWishartCh()), 
     1095                            sqd(0), l(0), p(0) { 
     1096                            set_ep(eiW); 
     1097                        } 
     1098 
    10631099                        void set_parameters ( int p0, double k, vec ref0, double l0  ) 
    10641100                        { 
     
    10691105                                refl=pow(ref0,1-l); 
    10701106                                 
    1071                                 eiW.set_parameters ( eye ( p ),delta ); 
    1072                                 ep=&eiW; 
    1073                                 dimc=eiW.dimension(); 
     1107                                eiW->set_parameters ( eye ( p ),delta ); 
     1108                                dimc=eiW->dimension(); 
    10741109                        } 
    10751110                        void condition ( const vec &c ) { 
     
    10811116                                } 
    10821117 
    1083                                 eiW._setY ( sqd*z ); 
     1118                                eiW->_setY ( sqd*z ); 
    10841119                        } 
    10851120        }; 
     
    12391274                it_assert_debug ( A0.rows() ==R0.rows(),"" ); 
    12401275 
    1241                 epdf.set_parameters ( zeros ( A0.rows() ),R0 ); 
     1276                iepdf->set_parameters(zeros(A0.rows()), R0); 
    12421277                A = A0; 
    12431278                mu_const = mu0; 
    1244                 dimc=A0.cols(); 
     1279                dimc = A0.cols(); 
    12451280        } 
    12461281 
     
    13321367                os << "A:"<< ml.A<<endl; 
    13331368                os << "mu:"<< ml.mu_const<<endl; 
    1334                 os << "R:" << ml.epdf._R().to_mat() <<endl; 
     1369                os << "R:" << ml.iepdf->_R().to_mat() <<endl; 
    13351370                return os; 
    13361371        };