Changeset 727

Show
Ignore:
Timestamp:
11/17/09 00:54:12 (14 years ago)
Author:
smidl
Message:

Logger change. Loggers can now store settings.

Unit Tests and fixes.

Files:
1 added
8 modified

Legend:

Unmodified
Added
Removed
  • applications/dual/src/iterativemc.cpp

    r723 r727  
    9191        RV y("y",1); // name random variable 
    9292        RV u("u",1); // name random variable 
    93         int L_yt=L->add(y,"S"); 
    94         int L_ut=L->add(u,"S"); 
     93        int L_yt=L->add_vector(y,"S"); 
     94        int L_ut=L->add_vector(u,"S"); 
    9595        C->log_register(*L,"C"); 
    9696        L->init(); 
  • library/bdm/base/bdmbase.h

    r723 r727  
    319319                //!separator of prefixes of entries 
    320320                const string separator; 
     321                //! Root Setting for storing Settings 
     322                Config setting_conf; 
     323                //! list of Settings for specific ids 
     324                Array<Setting*> settings; 
    321325        public: 
    322326                //!Default constructor 
     
    325329                //! returns an identifier which will be later needed for calling the \c logit() function 
    326330                //! For empty RV it returns -1, this entry will be ignored by \c logit(). 
    327                 virtual int add ( const RV &rv, string prefix = "" ) { 
     331                virtual int add_vector ( const RV &rv, string prefix = "" ) { 
    328332                        int id; 
    329333                        if ( rv._dsize() > 0 ) { 
     
    337341                        return id; // identifier of the last entry 
    338342                } 
     343                virtual int add_setting(const string &prefix){ 
     344                        Setting &root=setting_conf.getRoot(); 
     345                        int id=root.getLength(); //root must be group!! 
     346                        if (prefix.length()>0){ 
     347                                settings.set_length(id+1,true); 
     348                                settings(id) = &root.add(prefix, Setting::TypeList); 
     349                        } else {id=-1;} 
     350                        return id; 
     351                } 
    339352                 
    340353                //! log this vector 
    341                 virtual void logit ( int id, const vec &v ) { 
     354                virtual void log_vector ( int id, const vec &v ) { 
    342355                        bdm_error ( "Not implemented" ); 
    343356                }; 
     357                 
     358                virtual Setting & log_to_setting (int id){ 
     359                        return settings(id)->add(Setting::TypeGroup); 
     360                } 
     361                 
    344362                //! log this double 
    345363                virtual void logit ( int id, const double &d ) { 
     
    595613                logrec->ids.set_size(3); 
    596614                if (log_level >0){ 
    597                         logrec->ids(0) = logrec->L.add ( r, prefix + logrec->L.prefix_sep()+ "mean" ); 
     615                        logrec->ids(0) = logrec->L.add_vector ( r, prefix + logrec->L.prefix_sep()+ "mean" ); 
    598616                } 
    599617                if (log_level >1){ 
    600                         logrec->ids(1) = logrec->L.add ( r, prefix + logrec->L.prefix_sep()+ "lb" ); 
    601                         logrec->ids(2) = logrec->L.add ( r, prefix + logrec->L.prefix_sep()+ "ub" ); 
     618                        logrec->ids(1) = logrec->L.add_vector ( r, prefix + logrec->L.prefix_sep()+ "lb" ); 
     619                        logrec->ids(2) = logrec->L.add_vector ( r, prefix + logrec->L.prefix_sep()+ "ub" ); 
    602620                } 
    603621        } 
    604622        void log_write() const { 
    605623                if (log_level>0) { 
    606                         logrec->L.logit( logrec->ids(0), mean() ); 
     624                        logrec->L.log_vector( logrec->ids(0), mean() ); 
    607625                } 
    608626                if (log_level>1) { 
    609627                        vec lb; vec ub; 
    610628                        qbounds(lb,ub); 
    611                         logrec->L.logit( logrec->ids(1), lb ); 
    612                         logrec->L.logit( logrec->ids(2), ub ); 
     629                        logrec->L.log_vector( logrec->ids(1), lb ); 
     630                        logrec->L.log_vector( logrec->ids(2), ub ); 
    613631                } 
    614632        } 
     
    10131031                if (log_level >0){ 
    10141032                        logrec->ids.set_size(2); 
    1015                         logrec->ids(0) = logrec->L.add ( Yrv, prefix ); 
    1016                         logrec->ids(1) = logrec->L.add ( Urv, prefix ); 
     1033                        logrec->ids(0) = logrec->L.add_vector ( Yrv, prefix ); 
     1034                        logrec->ids(1) = logrec->L.add_vector ( Urv, prefix ); 
    10171035                } 
    10181036        } 
     
    10231041                        getdata ( tmp ); 
    10241042                        // d is first in getdata 
    1025                         logrec->L.logit ( logrec->ids(0), tmp.left ( Yrv._dsize() ) ); 
     1043                        logrec->L.log_vector ( logrec->ids(0), tmp.left ( Yrv._dsize() ) ); 
    10261044                        // u follows after d in getdata 
    1027                         logrec->L.logit ( logrec->ids(1), tmp.mid ( Yrv._dsize(), Urv._dsize() ) ); 
     1045                        logrec->L.log_vector ( logrec->ids(1), tmp.mid ( Yrv._dsize(), Urv._dsize() ) ); 
    10281046                } 
    10291047        } 
     
    11891207        //! Set boolean options from a string, recognized are: "logbounds,logll" 
    11901208        virtual void set_options ( const string &opt ) { 
    1191                 if ( opt.find ( "logbounds" ) != string::npos ) { 
    1192                         const_cast<epdf&>(posterior()).set_log_level(2) ; 
     1209                if ( opt.find ( "logstat" ) != string::npos ) { 
     1210                        const_cast<epdf&>(posterior()).set_log_level(3) ; 
    11931211                } else { 
    1194                         const_cast<epdf&>(posterior()).set_log_level(1) ; 
    1195                 } 
    1196                 if ( opt.find ( "logll" ) != string::npos ) { 
    1197                         log_level = 1; 
     1212                        if ( opt.find ( "logbounds" ) != string::npos ) { 
     1213                                const_cast<epdf&>(posterior()).set_log_level(2) ; 
     1214                        } else { 
     1215                                const_cast<epdf&>(posterior()).set_log_level(1) ; 
     1216                        } 
     1217                        if ( opt.find ( "logll" ) != string::npos ) { 
     1218                                log_level = 1; 
     1219                        } 
    11981220                } 
    11991221        } 
     
    12101232                if ((log_level) > 0){ 
    12111233                        logrec->ids.set_size(1); 
    1212                         logrec->ids(0) = L.add(RV("ll",1), prefix+L.prefix_sep()+"ll"); 
     1234                        logrec->ids(0) = L.add_vector(RV("",1), prefix+L.prefix_sep()+"ll"); 
    12131235                } 
    12141236        } 
  • library/bdm/base/loggers.h

    r685 r727  
    4949        } 
    5050 
    51         void logit ( int id, const vec &v ) { 
     51        void log_vector ( int id, const vec &v ) { 
    5252                bdm_assert ( id < vectors.length(), "Logger was not initialized, run init()." ); 
    5353                if ( id >= 0 ) { 
     
    6767        void finalize() { 
    6868                if ( itfilename.length() > 0 ) itsave ( itfilename.c_str() ); 
     69                if (settings.length()>0){ 
     70                        setting_conf.writeFile("memlog_setting.cfg"); 
     71                } 
    6972        }; 
    7073 
  • library/bdm/stat/exp_family.h

    r725 r727  
    293293                                logrec->ids.set_length(2); 
    294294                                int th_dim=dimension()-dimx*(dimx+1)/2; 
    295                                 logrec->ids(0)=L.add(RV("",th_dim), prefix + logrec->L.prefix_sep() +"mean"); 
    296                                 logrec->ids(1)=L.add(RV("",th_dim*th_dim),prefix + logrec->L.prefix_sep() + "variance");  
     295                                logrec->ids(0)=L.add_vector(RV("",th_dim), prefix + logrec->L.prefix_sep() +"mean"); 
     296                                logrec->ids(1)=L.add_vector(RV("",th_dim*th_dim),prefix + logrec->L.prefix_sep() + "variance");  
    297297                        } else { 
    298298                                epdf::log_register(L,prefix); 
     
    305305                                ldmat Vz; 
    306306                                factorize(M,Vz,Lam); 
    307                                 logrec->L.logit(logrec->ids(0), est_theta() ); 
    308                                 logrec->L.logit(logrec->ids(1), cvectorize(est_theta_cov().to_mat())); 
     307                                logrec->L.log_vector(logrec->ids(0), est_theta() ); 
     308                                logrec->L.log_vector(logrec->ids(1), cvectorize(est_theta_cov().to_mat())); 
    309309                        } else { 
    310310                                epdf::log_write(); 
  • library/tests/mat_checks.h

    r722 r727  
    5757inline itpp::vec make_close_tolerance ( const itpp::vec & variance, int nsamples ) { 
    5858        // simplify overloading for Visual Studio 
    59         return 2 * ( sqrt ( variance ) / sqrt ( static_cast<double> ( nsamples ) ) ); 
     59        return 3 * ( sqrt ( variance ) / sqrt ( static_cast<double> ( nsamples ) ) ); 
    6060} 
    6161 
  • library/tests/testsuite/epdf_test.cpp

    r725 r727  
    4343 
    4444TEST ( ewishart_test ) { 
    45         mat wM = "10.0 0.9; 0.9 1.0"; 
     45        mat wM = "1.1 0.9; 0.9 1.0"; 
    4646        eWishartCh eW; 
    4747        eW.set_parameters ( wM / 100, 100 ); 
  • library/tests/testsuite/logger_test.cpp

    r723 r727  
    4141        memlog logger ( 100, ls ); 
    4242 
    43         int rid = logger.add ( r, "" ); 
    44         int thid = logger.add ( th, "th" ); 
     43        int pol = 11; 
     44         
     45        int rid = logger.add_vector ( r, "" ); 
     46        int thid = logger.add_vector ( th, "th" ); 
     47        int polid = logger.add_setting("pols"); 
    4548 
    4649        logger.init(); 
    4750 
    4851        for ( int i = 0; i < 10; i++ ) { 
    49                 logger.logit ( rid, vec_2 ( ( double ) i, ( double ) ( i + 1 ) ) ); 
    50                 logger.logit ( thid, vec_2 ( ( double ) ( 100 - i ), ( double ) ( i - 50 ) ) ); 
     52                logger.log_vector ( rid, vec_2 ( ( double ) i, ( double ) ( i + 1 ) ) ); 
     53                logger.log_vector ( thid, vec_2 ( ( double ) ( 100 - i ), ( double ) ( i - 50 ) ) ); 
     54                UI::save(pol, logger.log_to_setting(polid), "polozka"); 
    5155                logger.step(); 
    5256        } 
     
    5559 
    5660        CHECK_EQUAL ( get_file_size ( "logger_test.matrix" ), get_file_size ( ls.c_str() ) ); 
     61        CHECK_EQUAL ( get_file_size ( "memlog_setting.cfg.check" ), get_file_size ( "memlog_setting.cfg" ) ); 
    5762} 
    5863 
     
    6873        dirfilelog L ( "dirfilelog_files", 10 ); 
    6974 
    70         int rid = L.add ( r, "" ); 
    71         int thid = L.add ( th, "th" ); 
     75        int rid = L.add_vector ( r, "" ); 
     76        int thid = L.add_vector ( th, "th" ); 
    7277 
    7378        L.init(); 
    7479 
    7580        for ( int i = 0; i < 150; i++ ) { 
    76                 L.logit ( rid, vec_2 ( ( double ) i, ( double ) ( i + 1 ) ) ); 
    77                 L.logit ( thid, vec_2 ( ( double ) ( 100 - i ), ( double ) ( i - 50 ) ) ); 
     81                L.log_vector ( rid, vec_2 ( ( double ) i, ( double ) ( i + 1 ) ) ); 
     82                L.log_vector ( thid, vec_2 ( ( double ) ( 100 - i ), ( double ) ( i - 50 ) ) ); 
    7883                L.step(); 
    7984        } 
  • library/tests/testsuite/logger_test_dirfile_format.matrix

    r721 r727  
    1 r.0 RAW d 1 
    2 r.1 RAW d 1 
    3 th.alog RAW d 1 
    4 th.blog RAW d 1 
     1r_0 RAW d 1 
     2r_1 RAW d 1 
     3th_alog RAW d 1 
     4th_blog RAW d 1