Changeset 907 for library/bdm/base/bdmbase.cpp
- Timestamp:
- 04/19/10 12:44:57 (14 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
library/bdm/base/bdmbase.cpp
r899 r907 99 99 } 100 100 101 RV::RV ( int sz, int tm ) { 102 Array<string> A ( 1 ); 103 A ( 0 ) = ""; 104 init ( A, vec_1 ( sz ), vec_1 ( tm ) ); 105 } 106 101 107 bool RV::add ( const RV &rv2 ) { 102 108 if ( rv2.len > 0 ) { //rv2 is nonempty … … 426 432 } 427 433 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 435 string 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; 455 441 } 456 442 457 443 void epdf::log_register ( logger &L, const string &prefix ) { 444 root::log_register ( L, prefix ); 445 458 446 RV r; 459 447 if ( isnamed() ) { 460 448 r = _rv(); 461 449 } else { 462 r = RV ( "",dimension() );450 r = RV ( dimension() ); 463 451 }; 464 root::log_register ( L, prefix ); 465 466 // log full data 452 467 453 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 ); 470 456 } else { 471 457 // 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 ); 483 465 } 484 466 } … … 486 468 void epdf::log_write() const { 487 469 if ( log_level[logfull] ) { 488 UI::save(this, logrec->L.log_to_setting ( logrec->ids ( 0 ) ));470 log_level.store( logfull, this ); 489 471 } else { 490 472 if ( log_level[logmean] ) { 491 log rec->L.log_vector ( logrec->ids ( 0 ), mean() );473 log_level.store( logmean, mean() ); 492 474 } 493 475 if ( log_level[loglbound] || log_level[logubound] ) { … … 496 478 qbounds ( lb, ub ); 497 479 if (log_level[loglbound]) 498 log rec->L.log_vector ( logrec->ids ( 1 ), lb );480 log_level.store( loglbound, lb ); 499 481 if (log_level[logubound]) 500 log rec->L.log_vector ( logrec->ids ( 2 ), ub );482 log_level.store( logubound, ub ); 501 483 } 502 484 } … … 543 525 544 526 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 ); 551 533 } 552 534 553 535 void DS::log_write ( ) const { 554 if ( log_level.any()) {536 if( log_level[logdt] ) { 555 537 vec tmp ( Drv._dsize()); 556 538 getdata ( tmp ); 557 539 // 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 548 void 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 554 void 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; 559 563 } 560 564 } … … 563 567 root::log_register ( L, prefix ); 564 568 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 570 572 if (log_level[logbounds]){ 571 573 prior().log_level[epdf::loglbound]=true; … … 580 582 void BM::log_write ( ) const { 581 583 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 ); 585 587 } 586 588