Changeset 727 for library/bdm/base

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

Logger change. Loggers can now store settings.

Unit Tests and fixes.

Location:
library/bdm/base
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • 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