Changeset 477 for library/bdm/base/datasources.h
- Timestamp:
- 08/05/09 14:40:03 (15 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
library/bdm/base/datasources.h
r384 r477 28 28 */ 29 29 class MemDS : public DS { 30 30 protected: 31 31 //! internal matrix of data 32 32 mat Data; … … 42 42 void getdata ( vec &dt, const ivec &indeces ); 43 43 void set_rvs ( RV &drv, RV &urv ); 44 void write ( vec &ut ) {it_error ( "MemDS::write is not supported" );} 45 void write ( vec &ut,ivec &indices ) {it_error ( "MemDS::write is not supported" );} 44 void write ( vec &ut ) { 45 it_error ( "MemDS::write is not supported" ); 46 } 47 void write ( vec &ut, ivec &indices ) { 48 it_error ( "MemDS::write is not supported" ); 49 } 46 50 void step(); 47 51 //!Default constructor … … 57 61 public: 58 62 void getdata ( vec &dt ) { 59 it_assert_debug ( dt.length() == Data.rows(),"" );60 dt = Data.get_col (time);61 }; 62 void getdata ( vec &dt, const ivec &indeces ) {63 it_assert_debug ( dt.length() == indeces.length(),"" );64 vec tmp (indeces.length());65 tmp = Data.get_col (time);66 dt = tmp (indeces);63 it_assert_debug ( dt.length() == Data.rows(), "" ); 64 dt = Data.get_col ( time ); 65 }; 66 void getdata ( vec &dt, const ivec &indeces ) { 67 it_assert_debug ( dt.length() == indeces.length(), "" ); 68 vec tmp ( indeces.length() ); 69 tmp = Data.get_col ( time ); 70 dt = tmp ( indeces ); 67 71 }; 68 72 //! returns number of data in the file; 69 int ndat(){return Data.cols();} 73 int ndat() { 74 return Data.cols(); 75 } 70 76 //! no sense to log this type 71 77 void log_add ( logger &L ) {}; … … 74 80 }; 75 81 76 /*! 82 /*! 77 83 * \brief Read Data Matrix from an IT file 78 84 … … 83 89 84 90 public: 85 ITppFileDS ( const string &fname, const string &varname ) : FileDS() {91 ITppFileDS ( const string &fname, const string &varname ) : FileDS() { 86 92 it_file it ( fname ); 87 it << Name ( varname ); 93 it << Name ( varname ); 88 94 it >> Data; 89 95 time = 0; … … 91 97 }; 92 98 93 ITppFileDS () : FileDS() {94 }; 95 96 void from_setting ( const Setting &set );99 ITppFileDS () : FileDS() { 100 }; 101 102 void from_setting ( const Setting &set ); 97 103 98 104 // TODO dodelat void to_setting( Setting &set ) const; … … 100 106 }; 101 107 102 UIREGISTER (ITppFileDS);108 UIREGISTER ( ITppFileDS ); 103 109 104 110 /*! … … 113 119 public: 114 120 //! Constructor - create DS from a CSV file. 115 121 CsvFileDS ( const string& fname, const string& orientation = "BY_COL" ); 116 122 }; 117 123 … … 145 151 void getdata ( vec &dt ) { 146 152 //it_assert_debug ( dt.length() ==Drv.count(),"ArxDS" ); 147 dt =H;153 dt = H; 148 154 }; 149 155 void getdata ( vec &dt, const ivec &indices ) { 150 it_assert_debug ( dt.length() == indices.length(),"ArxDS" );151 dt =H ( indices );156 it_assert_debug ( dt.length() == indices.length(), "ArxDS" ); 157 dt = H ( indices ); 152 158 }; 153 159 void write ( vec &ut ) { 154 160 //it_assert_debug ( ut.length() ==Urv.count(),"ArxDS" ); 155 U =ut;161 U = ut; 156 162 }; 157 163 void write ( vec &ut, const ivec &indices ) { 158 it_assert_debug ( ut.length() == indices.length(),"ArxDS" );159 set_subvector ( U, indices, ut );164 it_assert_debug ( ut.length() == indices.length(), "ArxDS" ); 165 set_subvector ( U, indices, ut ); 160 166 }; 161 167 void step(); … … 163 169 ArxDS ( ) {}; 164 170 //! Set parameters of the internal model, H is maximum time delay 165 void set_parameters ( const mat &Th0, const vec mu0, const chmat &sqR0 ) 166 { model.set_parameters ( Th0, mu0, sqR0 );}; 171 void set_parameters ( const mat &Th0, const vec mu0, const chmat &sqR0 ) { 172 model.set_parameters ( Th0, mu0, sqR0 ); 173 }; 167 174 //! Set 168 175 void set_drv ( RV &yrv, RV &urv, RV &rrv ) { 169 176 Rrv = rrv; 170 177 Urv = urv; 171 dt_size = yrv._dsize() + urv._dsize();172 173 RV drv = concat ( yrv, urv );178 dt_size = yrv._dsize() + urv._dsize(); 179 180 RV drv = concat ( yrv, urv ); 174 181 Drv = drv; 175 182 int td = rrv.mint(); 176 H.set_size ( drv._dsize() * ( -td +1 ) );183 H.set_size ( drv._dsize() * ( -td + 1 ) ); 177 184 U.set_size ( Urv._dsize() ); 178 for ( int i =-1;i>=td;i-- ) {185 for ( int i = -1; i >= td; i-- ) { 179 186 drv.t ( -1 ); 180 187 Drv.add ( drv ); //shift u1 181 188 } 182 rgrlnk.set_connection ( rrv, Drv );189 rgrlnk.set_connection ( rrv, Drv ); 183 190 184 191 dtsize = Drv._dsize(); … … 187 194 //! set options from a string 188 195 void set_options ( const string &s ) { 189 opt_L_theta = ( s.find ( "L_theta" ) !=string::npos );196 opt_L_theta = ( s.find ( "L_theta" ) != string::npos ); 190 197 }; 191 198 virtual void log_add ( logger &L ) { 192 199 //DS::log_add ( L ); too long!! 193 L_dt=L.add ( Drv ( 0,dt_size ),"" ); 194 L_ut=L.add ( Urv,"" ); 195 196 mat &A =model._A(); 197 mat R =model._R(); 198 if ( opt_L_theta ) {L_theta=L.add ( RV ( "{th }", vec_1 ( A.rows() *A.cols() ) ),"t" );} 199 if ( opt_L_theta ) {L_R=L.add ( RV ( "{R }", vec_1 ( R.rows() *R.cols() ) ),"r" );} 200 L_dt = L.add ( Drv ( 0, dt_size ), "" ); 201 L_ut = L.add ( Urv, "" ); 202 203 mat &A = model._A(); 204 mat R = model._R(); 205 if ( opt_L_theta ) { 206 L_theta = L.add ( RV ( "{th }", vec_1 ( A.rows() * A.cols() ) ), "t" ); 207 } 208 if ( opt_L_theta ) { 209 L_R = L.add ( RV ( "{R }", vec_1 ( R.rows() * R.cols() ) ), "r" ); 210 } 200 211 } 201 212 virtual void logit ( logger &L ) { … … 204 215 L.logit ( L_ut, U ); 205 216 206 mat &A =model._A(); 207 mat R =model._R(); 208 if ( opt_L_theta ) {L.logit ( L_theta,vec ( A._data(), A.rows() *A.cols() ) );}; 209 if ( opt_L_theta ) {L.logit ( L_R, vec ( R._data(), R.rows() *R.rows() ) );}; 217 mat &A = model._A(); 218 mat R = model._R(); 219 if ( opt_L_theta ) { 220 L.logit ( L_theta, vec ( A._data(), A.rows() *A.cols() ) ); 221 }; 222 if ( opt_L_theta ) { 223 L.logit ( L_R, vec ( R._data(), R.rows() *R.rows() ) ); 224 }; 210 225 } 211 226 … … 242 257 Result is ARX data source offering with full history as Drv. 243 258 */ 244 void from_setting ( const Setting &set );259 void from_setting ( const Setting &set ); 245 260 246 261 // TODO dodelat void to_setting( Setting &set ) const; 247 262 }; 248 263 249 UIREGISTER ( ArxDS );264 UIREGISTER ( ArxDS ); 250 265 251 266 class stateDS : public DS { … … 264 279 int L_xt; 265 280 public: 266 void getdata ( vec &dt0 ) {dt0=dt;} 267 void getdata ( vec &dt0, const ivec &indeces ) {dt0=dt ( indeces );} 268 269 stateDS ( mpdf* IM0, mpdf* OM0, int usize ) :DS ( ),IM ( IM0 ),OM ( OM0 ), 281 void getdata ( vec &dt0 ) { 282 dt0 = dt; 283 } 284 void getdata ( vec &dt0, const ivec &indeces ) { 285 dt0 = dt ( indeces ); 286 } 287 288 stateDS ( mpdf* IM0, mpdf* OM0, int usize ) : DS ( ), IM ( IM0 ), OM ( OM0 ), 270 289 dt ( OM0->dimension() ), xt ( IM0->dimension() ), ut ( usize ) {} 271 290 272 stateDS(){} 273 274 ~stateDS() {delete IM; delete OM;} 291 stateDS() {} 292 293 ~stateDS() { 294 delete IM; 295 delete OM; 296 } 275 297 virtual void step() { 276 xt =IM->samplecond ( concat ( xt,ut ) );277 dt =OM->samplecond ( concat ( xt,ut ) );298 xt = IM->samplecond ( concat ( xt, ut ) ); 299 dt = OM->samplecond ( concat ( xt, ut ) ); 278 300 }; 279 301 280 302 virtual void log_add ( logger &L ) { 281 303 DS::log_add ( L ); 282 L_xt =L.add ( IM->_rv(),"true" );304 L_xt = L.add ( IM->_rv(), "true" ); 283 305 } 284 306 virtual void logit ( logger &L ) { 285 307 DS::logit ( L ); 286 L.logit ( L_xt, xt );287 } 288 289 /*! UI for stateDS 308 L.logit ( L_xt, xt ); 309 } 310 311 /*! UI for stateDS 290 312 291 313 The DS is constructed from a structure with fields: … … 295 317 //Internal model 296 318 IM = { type = "mpdf"; //<-- valid offspring! e.g. "mlnorm" 297 rv = { //description of x_t 319 rv = { //description of x_t 298 320 names=["name1",...]; 299 321 sizes=[2,1]; // optional default=[1,1...]; 300 322 times=[0,0]; // optional default=[0,0...]; 301 323 } 302 rvu= { //description of u_t 324 rvu= { //description of u_t 303 325 //optional default=empty 304 } 326 } 305 327 306 328 // remaining fields depending on the chosen type … … 308 330 //Observation model 309 331 OM = { type = "mpdf-offspring"; 310 rv = {}; //description of d_t 311 rvu = {type="internal", path="system.IM.rvu"}; //description of u_t 312 332 rv = {}; //description of d_t 333 rvu = {type="internal", path="system.IM.rvu"}; //description of u_t 334 313 335 //remaining fields 314 336 } … … 316 338 \endcode 317 339 */ 318 void from_setting ( const Setting &set );340 void from_setting ( const Setting &set ); 319 341 320 342 // TODO dodelat void to_setting( Setting &set ) const; … … 322 344 }; 323 345 324 UIREGISTER (stateDS);346 UIREGISTER ( stateDS ); 325 347 326 348 }; //namespace