Show
Ignore:
Timestamp:
11/25/09 12:46:08 (15 years ago)
Author:
mido
Message:

a few moves of code from h to cpp, however, only part of the whole library is done

Files:
1 modified

Legend:

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

    r737 r738  
    251251} 
    252252 
     253RV RV::expand_delayes() const { 
     254        RV rvt = this->remove_time(); //rv at t=0 
     255        RV tmp = rvt; 
     256        int td = mint(); 
     257        for ( int i = -1; i >= td; i-- ) { 
     258                rvt.t_plus ( -1 ); 
     259                tmp.add ( rvt ); //shift u1 
     260        } 
     261        return tmp; 
     262} 
     263 
    253264str RV::tostr() const { 
    254265        ivec idlist ( dsize ); 
     
    323334} 
    324335 
     336std::string RV::scalarname ( int scalat ) const { 
     337        bdm_assert ( scalat < dsize, "Wrong input index" ); 
     338        int id = 0; 
     339        int scalid = 0; 
     340        while ( scalid + SIZES ( ids ( id ) ) <= scalat )  { 
     341                scalid += SIZES ( ids ( id ) ); 
     342                id++; 
     343        }; 
     344        //now id is the id of variable of interest 
     345        if ( size ( id ) == 1 ) 
     346                return  NAMES ( ids ( id ) ); 
     347        else 
     348                return  NAMES ( ids ( id ) ) + "_" + num2str ( scalat - scalid ); 
     349 
     350} 
     351 
    325352ivec RV::findself ( const RV &rv2 ) const { 
    326353        int i, j; 
     
    398425} 
    399426 
     427int logger::add_vector ( const RV &rv, string prefix ) { 
     428        int id; 
     429        if ( rv._dsize() > 0 ) { 
     430                id = entries.length(); 
     431                names = concat ( names, prefix ); // diff 
     432                entries.set_length ( id + 1, true ); 
     433                entries ( id ) = rv; 
     434        } else { 
     435                id = -1; 
     436        } 
     437        return id; // identifier of the last entry 
     438} 
     439 
     440int logger::add_setting ( const string &prefix ) { 
     441        Setting &root = setting_conf.getRoot(); 
     442        int id = root.getLength(); //root must be group!! 
     443        if ( prefix.length() > 0 ) { 
     444                settings.set_length ( id + 1, true ); 
     445                settings ( id ) = &root.add ( prefix, Setting::TypeList ); 
     446        } else { 
     447                id = -1; 
     448        } 
     449        return id; 
     450} 
     451 
     452void epdf::log_register ( logger &L, const string &prefix ) { 
     453        RV r; 
     454        if ( isnamed() ) { 
     455                r = _rv(); 
     456        } else { 
     457                r = RV ( "", dimension() ); 
     458        }; 
     459        root::log_register ( L, prefix ); 
     460 
     461        // log full data 
     462        if ( log_level == 10 ) { 
     463                logrec->ids.set_size ( 1 ); 
     464                logrec->ids ( 0 ) = logrec->L.add_setting ( prefix ); 
     465        } else { 
     466                // log only 
     467                logrec->ids.set_size ( 3 ); 
     468                if ( log_level > 0 ) { 
     469                        logrec->ids ( 0 ) = logrec->L.add_vector ( r, prefix + logrec->L.prefix_sep() + "mean" ); 
     470                } 
     471                if ( log_level > 1 ) { 
     472                        logrec->ids ( 1 ) = logrec->L.add_vector ( r, prefix + logrec->L.prefix_sep() + "lb" ); 
     473                        logrec->ids ( 2 ) = logrec->L.add_vector ( r, prefix + logrec->L.prefix_sep() + "ub" ); 
     474                } 
     475        } 
     476} 
     477 
     478void epdf::log_write() const { 
     479        if ( log_level == 10 ) { 
     480                to_setting ( logrec->L.log_to_setting ( logrec->ids ( 0 ) ) ); 
     481        } else { 
     482                if ( log_level > 0 ) { 
     483                        logrec->L.log_vector ( logrec->ids ( 0 ), mean() ); 
     484                } 
     485                if ( log_level > 1 ) { 
     486                        vec lb; 
     487                        vec ub; 
     488                        qbounds ( lb, ub ); 
     489                        logrec->L.log_vector ( logrec->ids ( 1 ), lb ); 
     490                        logrec->L.log_vector ( logrec->ids ( 2 ), ub ); 
     491                } 
     492        } 
     493} 
     494 
     495void datalink_buffered::set_connection ( const RV &rv, const RV &rv_up ) { 
     496        // create link between up and down 
     497        datalink_part::set_connection ( rv, rv_up.remove_time() ); // only non-delayed version 
     498 
     499        // create rvs of history 
     500        // we can store only what we get in rv_up - everything else is removed 
     501        ivec valid_ids = rv.findself_ids ( rv_up ); 
     502        RV rv_hist = rv.subselect ( find ( valid_ids >= 0 ) ); // select only rvs that are in rv_up 
     503        RV rv_hist0 = rv_hist.remove_time(); // these RVs will form history at time =0 
     504        // now we need to know what is needed from Up 
     505        rv_hist = rv_hist.expand_delayes(); // full regressor - including time 0 
     506        Hrv = rv_hist.subt ( rv_hist0 );   // remove time 0 
     507        history = zeros ( Hrv._dsize() ); 
     508 
     509        // decide if we need to copy val to history 
     510        if ( Hrv._dsize() > 0 ) { 
     511                v2h_up = rv_hist0.dataind ( rv_up ); // indeces of elements of rv_up to be copied 
     512        } // else v2h_up is empty 
     513 
     514        Hrv.dataind ( rv, h2v_hist, h2v_down ); 
     515 
     516        downsize = v2v_down.length() + h2v_down.length(); 
     517        upsize = v2v_up.length(); 
     518} 
     519 
     520void datalink_buffered::set_history ( const RV& rv1, const vec &hist0 ) { 
     521        bdm_assert ( rv1._dsize() == hist0.length(), "hist is not compatible with given rv1" ); 
     522        ivec ind_H; 
     523        ivec ind_h0; 
     524        Hrv.dataind ( rv1, ind_H, ind_h0 ); // find indeces of rv in 
     525        set_subvector ( history, ind_H, hist0 ( ind_h0 ) ); // copy given hist to appropriate places 
     526} 
     527 
     528void DS::log_register ( logger &L,  const string &prefix ) { 
     529        bdm_assert ( ytsize == Yrv._dsize(), "invalid DS: ytsize (" + num2str ( ytsize ) + ") different from Drv " + num2str ( Yrv._dsize() ) ); 
     530        bdm_assert ( utsize == Urv._dsize(), "invalid DS: utsize (" + num2str ( utsize ) + ") different from Urv " + num2str ( Urv._dsize() ) ); 
     531 
     532        root::log_register ( L, prefix ); 
     533        //we know that 
     534        if ( log_level > 0 ) { 
     535                logrec->ids.set_size ( 2 ); 
     536                logrec->ids ( 0 ) = logrec->L.add_vector ( Yrv, prefix ); 
     537                logrec->ids ( 1 ) = logrec->L.add_vector ( Urv, prefix ); 
     538        } 
     539} 
     540 
     541void DS::log_write ( ) const { 
     542        if ( log_level > 0 ) { 
     543                vec tmp ( Yrv._dsize() + Urv._dsize() ); 
     544                getdata ( tmp ); 
     545                // d is first in getdata 
     546                logrec->L.log_vector ( logrec->ids ( 0 ), tmp.left ( Yrv._dsize() ) ); 
     547                // u follows after d in getdata 
     548                logrec->L.log_vector ( logrec->ids ( 1 ), tmp.mid ( Yrv._dsize(), Urv._dsize() ) ); 
     549        } 
     550} 
     551 
     552void BM::set_options ( const string &opt ) { 
     553        if ( opt.find ( "logfull" ) != string::npos ) { 
     554                const_cast<epdf&> ( posterior() ).set_log_level ( 10 ) ; 
     555        } else { 
     556                if ( opt.find ( "logbounds" ) != string::npos ) { 
     557                        const_cast<epdf&> ( posterior() ).set_log_level ( 2 ) ; 
     558                } else { 
     559                        const_cast<epdf&> ( posterior() ).set_log_level ( 1 ) ; 
     560                } 
     561                if ( opt.find ( "logll" ) != string::npos ) { 
     562                        log_level = 1; 
     563                } 
     564        } 
     565} 
     566 
     567void BM::log_register ( logger &L, const string &prefix ) { 
     568        root::log_register ( L, prefix ); 
     569 
     570        const_cast<epdf&> ( posterior() ).log_register ( L, prefix + L.prefix_sep() + "apost" ); 
     571 
     572        if ( ( log_level ) > 0 ) { 
     573                logrec->ids.set_size ( 1 ); 
     574                logrec->ids ( 0 ) = L.add_vector ( RV ( "", 1 ), prefix + L.prefix_sep() + "ll" ); 
     575        } 
     576} 
     577 
     578void BM::log_write ( ) const { 
     579        posterior().log_write(); 
     580        if ( log_level > 0 ) { 
     581                logrec->L.logit ( logrec->ids ( 0 ), ll ); 
     582        } 
     583} 
     584 
    400585void BM::bayes_batch ( const mat &Data, const vec &cond ) { 
    401586        for ( int t = 0; t < Data.cols(); t++ ) { 
     
    403588        } 
    404589} 
     590 
    405591void BM::bayes_batch ( const mat &Data, const mat &Cond ) { 
    406592        for ( int t = 0; t < Data.cols(); t++ ) { 
     
    408594        } 
    409595} 
    410 } 
     596 
     597}