Show
Ignore:
Timestamp:
04/19/10 12:44:57 (14 years ago)
Author:
mido
Message:

LOG LEVEL improved and hopefully finished

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • library/bdm/base/bdmbase.cpp

    r899 r907  
    9999} 
    100100 
     101RV::RV ( int sz, int tm ) { 
     102        Array<string> A ( 1 ); 
     103        A ( 0 ) = ""; 
     104        init ( A, vec_1 ( sz ), vec_1 ( tm ) ); 
     105} 
     106 
    101107bool RV::add ( const RV &rv2 ) { 
    102108        if ( rv2.len > 0 ) { //rv2 is nonempty 
     
    426432} 
    427433 
    428 int logger::add_vector ( const RV &rv, const string &prefix, const string &name ) { 
    429         int id; 
    430         if ( rv._dsize() > 0 ) { 
    431                 id = entries.length(); 
    432                 if( name.length() > 0 ) { 
    433                         names = concat ( names, prefix + separator + name); // diff 
    434                 } else { 
    435                         names = concat ( names, prefix ); // diff 
    436                 } 
    437                 entries.set_length ( id + 1, true ); 
    438                 entries ( id ) = rv; 
    439         } else { 
    440                 id = -1; 
    441         } 
    442         return id; // identifier of the last entry 
    443 } 
    444  
    445 int logger::add_setting ( const string &prefix ) { 
    446         Setting &root = setting_conf.getRoot(); 
    447         int id = root.getLength(); //root must be group!! 
    448         if ( prefix.length() > 0 ) { 
    449                 settings.set_length ( id + 1, true ); 
    450                 settings ( id ) = &root.add ( prefix, Setting::TypeList ); 
    451         } else { 
    452                 id = -1; 
    453         } 
    454         return id; 
     434 
     435string logger::remove_log_prefix_if_possible( string name_with_prefix ) 
     436{ 
     437        string possible_log_prefix = name_with_prefix.substr(0,3); 
     438        if( possible_log_prefix == "log" ) 
     439                return name_with_prefix.substr(3,name_with_prefix.length()-3); 
     440        else return name_with_prefix; 
    455441} 
    456442 
    457443void epdf::log_register ( logger &L, const string &prefix ) { 
     444        root::log_register ( L, prefix ); 
     445 
    458446        RV r; 
    459447        if ( isnamed() ) { 
    460448                r = _rv(); 
    461449        } else { 
    462                 r = RV ( "", dimension() ); 
     450                r = RV ( dimension() ); 
    463451        }; 
    464         root::log_register ( L, prefix ); 
    465  
    466         // log full data 
     452 
    467453        if ( log_level[logfull] ) { 
    468                 logrec->ids.set_size ( 1 ); 
    469                 logrec->ids ( 0 ) = logrec->L.add_setting ( prefix ); 
     454                // log full data 
     455                registered_logger->add_setting ( log_level, logfull, prefix ); 
    470456        } else { 
    471457                // log only 
    472                 logrec->ids.set_size ( 3 ); 
    473                 if ( log_level[logmean] ) { 
    474                         logrec->ids ( 0 ) = logrec->L.add_vector ( r, prefix, "mean" ); 
    475                 } 
    476                 if ( log_level[loglbound]  ) { 
    477                         logrec->ids ( 1 ) = logrec->L.add_vector ( r, prefix, "lb" ); 
    478                 }        
    479                 if ( log_level[logubound]  ) { 
    480                         logrec->ids ( 2 ) = logrec->L.add_vector ( r, prefix, "ub" ); 
    481                 } 
    482          
     458 
     459                if ( log_level[logmean] ) 
     460                        registered_logger->add_vector ( log_level, logmean, r, prefix );                         
     461                if ( log_level[loglbound] ) 
     462                        registered_logger->add_vector ( log_level, loglbound, r, prefix ); 
     463                if ( log_level[logubound] ) 
     464                        registered_logger->add_vector ( log_level, logubound, r, prefix ); 
    483465        } 
    484466} 
     
    486468void epdf::log_write() const { 
    487469        if ( log_level[logfull] ) { 
    488                 UI::save(this,  logrec->L.log_to_setting ( logrec->ids ( 0 ) ) ); 
     470                log_level.store( logfull, this ); 
    489471        } else { 
    490472                if ( log_level[logmean] ) { 
    491                         logrec->L.log_vector ( logrec->ids ( 0 ), mean() ); 
     473                        log_level.store( logmean, mean() ); 
    492474                } 
    493475                if ( log_level[loglbound] || log_level[logubound] ) { 
     
    496478                                qbounds ( lb, ub ); 
    497479                                if (log_level[loglbound]) 
    498                                         logrec->L.log_vector ( logrec->ids ( 1 ), lb ); 
     480                                        log_level.store( loglbound, lb ); 
    499481                                if (log_level[logubound]) 
    500                                         logrec->L.log_vector ( logrec->ids ( 2 ), ub ); 
     482                                        log_level.store( logubound, ub ); 
    501483                        } 
    502484                } 
     
    543525 
    544526        root::log_register ( L, prefix ); 
    545         //we know that 
    546         if ( log_level.any() ) { 
    547                 logrec->ids.set_size ( 1 ); 
    548                 logrec->ids ( 0 ) = logrec->L.add_vector ( Drv, prefix ); 
    549         //      logrec->ids ( 1 ) = logrec->L.add_vector ( Urv, prefix ); 
    550         } 
     527 
     528 
     529        if ( log_level[logdt] ) 
     530                registered_logger->add_vector ( log_level, logdt, Drv, prefix );         
     531        if ( log_level[logut] ) 
     532                registered_logger->add_vector ( log_level, logut, Urv, prefix ); 
    551533} 
    552534 
    553535void DS::log_write ( ) const { 
    554         if ( log_level.any() ) { 
     536        if( log_level[logdt] ) { 
    555537                vec tmp ( Drv._dsize()); 
    556538                getdata ( tmp ); 
    557539                // d is first in getdata 
    558                 logrec->L.log_vector ( logrec->ids ( 0 ), tmp ); 
     540                log_level.store( logdt, tmp ); 
     541        } 
     542        if( log_level[logut] ) {  
     543                bdm_warning("We are sorry, but DS::log_write() is not able to log \"ut\" at the moment, would you be so kind and code this functionality?"); 
     544        } 
     545} 
     546 
     547 
     548void DS::from_setting ( const Setting &set ) { 
     549        shared_ptr<RV> r = UI::build<RV> ( set, "drv", UI::optional ); 
     550        if ( r )         
     551                set_drv ( *r, RV() ); 
     552} 
     553 
     554void DS::validate() { 
     555        if( !Drv._dsize() && dtsize > 0 ) 
     556        { 
     557                RV *r = new RV(); 
     558                for ( int i = 0; i < dtsize; i++ ) { 
     559                        r->add ( RV ( "ch" + num2str ( i ), 1, 0 ) ); 
     560                } 
     561                set_drv ( *r, RV() ); 
     562                delete r; 
    559563        } 
    560564} 
     
    563567        root::log_register ( L, prefix ); 
    564568 
    565         if ( log_level.any() ) { 
    566                 logrec->ids.set_size ( 1 ); 
    567                 logrec->ids ( 0) = L.add_vector ( RV ( "", 1 ), prefix, "ll" ); 
    568         } 
    569          
     569        if ( log_level[logevidence] ) 
     570                registered_logger->add_vector ( log_level, logevidence, RV ( 1 ), prefix );      
     571 
    570572        if (log_level[logbounds]){ 
    571573                prior().log_level[epdf::loglbound]=true; 
     
    580582void BM::log_write ( ) const { 
    581583        posterior().log_write(); 
    582         if ( log_level.any() ) { 
    583                 logrec->L.logit ( logrec->ids ( 0 ), ll ); 
    584         } 
     584 
     585        if( log_level[logevidence] )  
     586                log_level.store( logevidence, ll ); 
    585587} 
    586588