- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

# libDS.h

Go to the documentation of this file.

    00001
    00013 #ifndef DS_H
    00014 #define DS_H
    00015
    00016
    00017 #include "libBM.h"
    00018 #include "libEF.h"
    00019
    00020
    00021 namespace bdm {
    00029         class MemDS : public DS {
    00031                 mat Data;
    00033                 int time;
    00035                 ivec rowid;
    00037                 ivec delays;
    00038
    00039         public:
    00040                 void getdata ( vec &dt );
    00041                 void getdata ( vec &dt, const ivec &indeces );
    00042                 void linkrvs ( RV &drv, RV &urv );
    00043                 void write ( vec &ut ) {it_error ( "MemDS::write is not supported" );}
    00044                 void write ( vec &ut,ivec &indexes ) {it_error ( "MemDS::write is not supported" );}
    00045                 void step();
    00047                 MemDS ( mat &Dat, ivec &rowid, ivec &delays );
    00048         };
    00049
    00054         class ArxDS : public DS {
    00055         protected:
    00057                 RV Rrv;
    00059                 RV Hrv;
    00061                 vec H;
    00063                 vec U;
    00065                 vec rgr;
    00067                 datalink *rgrlnk;
    00069                 mlnorm<chmat> model;
    00071                 bool opt_L_theta;
    00073                 int L_theta;
    00074                 int L_R;
    00075         public:
    00076                 void getdata ( vec &dt ) {
    00077                         it_assert_debug ( dt.length() ==Drv.count(),"ArxDS" );
    00078                         dt=H.left ( Urv._dsize() +Drv._dsize() );
    00079                 };
    00080                 void getdata ( vec &dt, const ivec &indexes ) {
    00081                         it_assert_debug ( dt.length() ==indeces.length(),"ArxDS" );
    00082                         dt=H ( indexes );
    00083                 };
    00084                 void write ( vec &ut ) {
    00085                         it_assert_debug ( ut.length() ==Urv.count(),"ArxDS" );
    00086                         U=ut;
    00087                 };
    00088                 void write ( vec &ut, const ivec &indexes ) {
    00089                         it_assert_debug ( ut.length() ==indeces.length(),"ArxDS" );
    00090                         set_subvector ( U, indexes,ut );
    00091                 };
    00092                 void step();
    00094                 ArxDS ( ){};
    00096                 void set_parameters ( const mat &Th0, const vec mu0, const chmat &sqR0 )
    00097                 { model.set_parameters ( Th0, mu0, sqR0 ); };
    00099                 void set_options ( const string &s ) {
    00100                         opt_L_theta= ( s.find ( "L_theta" ) !=string::npos );
    00101                 };
    00102                 virtual void log_add ( logger &L ) {
    00103                         DS::log_add ( L );
    00104                         mat &A =model._A();
    00105                         mat R =model._R();
    00106                         if ( opt_L_theta ) {L_theta=L.add ( RV ( "{theta }", vec_1 ( A.rows() *A.cols() ) ),"t" );}
    00107                         if ( opt_L_theta ) {L_R=L.add ( RV ( "{R }", vec_1 ( R.rows() *R.cols() ) ),"r" );}
    00108                 }
    00109                 virtual void logit ( logger &L ) {
    00110                         DS::logit ( L );
    00111                         mat &A =model._A();
    00112                         mat R =model._R();
    00113                         if ( opt_L_theta ) {L.logit ( L_theta,vec ( A._data(), A.rows() *A.cols() ) );};
    00114                         if ( opt_L_theta ) {L.logit ( L_R, vec ( R._data(), R.rows() *R.rows() ) );};
    00115                 }
    00116
    00117         };
    00118
    00119         class ARXDS : public ArxDS {
    00120         public:
    00121                 ARXDS ( ) : ArxDS ( ) {}
    00122
    00123                 void getdata ( vec &dt ) {dt=H;}
    00124                 void getdata ( vec &dt, const ivec &indeces ) {dt=H ( indeces );}
    00125                 virtual RV _drv() const {return Hrv;}
    00126
    00127         };
    00128
    00129         class stateDS : public DS {
    00130         protected:
    00132                 mpdf* IM;
    00134                 mpdf* OM;
    00136                 vec dt;
    00138                 vec xt;
    00140                 vec ut;
    00142                 int L_xt;
    00143         public:
    00144                 void getdata ( vec &dt0 ) {dt0=dt;}
    00145                 void getdata ( vec &dt0, const ivec &indeces ) {dt0=dt ( indeces );}
    00146
    00147                 stateDS ( mpdf* IM0, mpdf* OM0, int usize ) :DS ( ),IM ( IM0 ),OM ( OM0 ),
    00148                                 dt ( OM0->dimension() ), xt ( IM0->dimension() ), ut ( usize) {}
    00149                 ~stateDS() {delete IM; delete OM;}
    00150                 virtual void step() {
    00151                         xt=IM->samplecond(concat ( xt,ut ));
    00152                         dt=OM->samplecond(concat ( xt,ut ));
    00153                 };
    00154
    00155                 virtual void log_add ( logger &L ) {
    00156                         DS::log_add ( L );
    00157                         L_xt=L.add(IM->_rv(),"true");
    00158                 }
    00159                 virtual void logit ( logger &L ) {
    00160                         DS::logit ( L );
    00161                         L.logit ( L_xt,xt);
    00162                 }
    00163
    00164         };
    00165
    00166 }; //namespace
    00167
    00168 #endif // DS_H