root/library/bdm/base/datasources.cpp @ 895

Revision 895, 3.0 kB (checked in by smidl, 14 years ago)

get rid of Yrv in DS

  • Property svn:eol-style set to native
RevLine 
[263]1
[384]2#include "datasources.h"
[357]3
[254]4using namespace bdm;
[18]5
[676]6void MemDS::getdata ( vec &dt ) const {
[19]7        int i;
[263]8
[565]9        bdm_assert_debug ( dt.length() == rowid.length(), "MemDS:getdata incompatible dt" );
[477]10        for ( i = 0; i < rowid.length(); i++ ) {
[609]11                dt ( i ) = Data ( rowid ( i ), time );
[18]12        }
13}
14
[477]15void MemDS::getdata ( vec &dt, const ivec &indeces ) {
16        int j, i;
[565]17        bdm_assert_debug ( dt.length() == indeces.length(), "MemDS:getdata incompatible dt" );
[477]18        for ( i = 0; i < indeces.length(); i++ ) {
[263]19                j = indeces ( i );
[737]20                dt ( i ) = Data ( rowid ( j ), time );
[18]21        }
22}
23
24void MemDS::step() {
[477]25        if ( time < Data.cols() ) {
26                time++;
27        }
[18]28}
29
[737]30void MemDS::set_drv ( const RV &drv, const RV &urv ) {
[565]31        bdm_assert_debug ( drv._dsize() == rowid.length(), "MemDS::set_rvs incompatible drv" );
32        bdm_assert_debug ( urv._dsize() == 0, "MemDS does not support urv." );
[263]33
[737]34        DS::set_drv ( drv, urv );
[18]35}
36
[737]37MemDS::MemDS ( mat &Dat, ivec &rowid0 ) : rowid ( rowid0 ) {
[565]38        bdm_assert_debug ( max ( rowid ) <= Dat.rows(), "MemDS rowid is too high for given Dat." );
[263]39
[609]40        time = 0;
[18]41        Data = Dat;
[19]42}
[263]43
[892]44void ITppFileDS::from_setting ( const Setting &set ) {
45        shared_ptr<RV> rvtmp = UI::build<RV> ( set, "rv" , UI::compulsory );
46
47        it_file it ( set["filename"] );
48        it << Name ( set["varname"] );
49        it >> Data;
50        time = 0;
51        //rowid and delays are ignored
52        rowid = linspace ( 0, Data.rows() - 1 );
53        set_drv ( *rvtmp, RV() );
54}
55
[738]56void PdfDS::step() {
57        yt2rgr.store_data ( yt ); // y is now history
58        ut2rgr.filldown ( ut, rgr );
59        yt2rgr.filldown ( yt, rgr );
60        yt = ipdf->samplecond ( rgr );
61        ut2rgr.store_data ( ut ); //u is now history
62}
63
64void PdfDS::getdata ( vec &dt_out ) const {
[895]65        bdm_assert_debug ( dt_out.length() >= dtsize, "Short output vector" );
[738]66        dt_out.set_subvector ( 0, yt );
[895]67        dt_out.set_subvector ( yt.length(), ut );
[738]68}
69
70void StateDS::step() {
71        vec imc ( IM->dimensionc() );
72        imc.set_subvector ( 0, xt );
73        u2imc.filldown ( ut, imc );
74        xt = IM->samplecond ( imc );
75
76        vec omc ( OM->dimensionc() );
77        omc.set_subvector ( 0, xt );
78        u2omc.filldown ( ut, omc );
79        vec yt;
80        yt = OM->samplecond ( omc );
81        //fill all data
82        dt.set_subvector ( 0, yt );
83        dt.set_subvector ( yt.length(), xt );
[895]84        dt.set_subvector ( yt.length()+xt.length(), ut );
[738]85}
86
[695]87void StateDS::from_setting ( const Setting &set ) {
[693]88        IM = UI::build<pdf> ( set, "IM", UI::compulsory );
89        OM = UI::build<pdf> ( set, "OM", UI::compulsory );
[357]90
[695]91        //todo test if IM->rvc contains IM->rv
92        //todo test if OM->rvc contains IM->rv
[737]93
94        UI::get ( xt, set, "x0", UI::optional );
95
[695]96}
[477]97
[737]98void StateDS::validate() {
[795]99        DS::validate();
100
[895]101        RV Yrv = concat ( OM->_rv() , IM->_rv() ); // export also true state
102        int ytsize = Yrv._dsize();
[737]103
104        RV tmp = concat ( OM->_rvc(), IM->_rvc() ); // what i not in rvc
105        Urv = tmp.subt ( Yrv ); // remove dt,xt and
106        Urv = Urv.subt ( Yrv.copy_t ( -1 ) ); // remove dt,xt and
107        utsize = Urv._dsize();
108
109        set_drv ( Yrv, Urv );
[695]110        dtsize = utsize + ytsize;
[737]111
[695]112        dt.set_length ( dtsize );
[737]113        if ( xt.length() != IM->dimension() ) {
114                xt = zeros ( IM->dimension() );
[695]115        }
116        ut.set_length ( Urv._dsize() );
[737]117
[695]118        //create data links
[737]119        u2imc.set_connection ( IM->_rvc(), Urv );
120        u2omc.set_connection ( OM->_rvc(), Urv );
[357]121}
Note: See TracBrowser for help on using the browser.