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
Line 
1
2#include "datasources.h"
3
4using namespace bdm;
5
6void MemDS::getdata ( vec &dt ) const {
7        int i;
8
9        bdm_assert_debug ( dt.length() == rowid.length(), "MemDS:getdata incompatible dt" );
10        for ( i = 0; i < rowid.length(); i++ ) {
11                dt ( i ) = Data ( rowid ( i ), time );
12        }
13}
14
15void MemDS::getdata ( vec &dt, const ivec &indeces ) {
16        int j, i;
17        bdm_assert_debug ( dt.length() == indeces.length(), "MemDS:getdata incompatible dt" );
18        for ( i = 0; i < indeces.length(); i++ ) {
19                j = indeces ( i );
20                dt ( i ) = Data ( rowid ( j ), time );
21        }
22}
23
24void MemDS::step() {
25        if ( time < Data.cols() ) {
26                time++;
27        }
28}
29
30void MemDS::set_drv ( const RV &drv, const RV &urv ) {
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." );
33
34        DS::set_drv ( drv, urv );
35}
36
37MemDS::MemDS ( mat &Dat, ivec &rowid0 ) : rowid ( rowid0 ) {
38        bdm_assert_debug ( max ( rowid ) <= Dat.rows(), "MemDS rowid is too high for given Dat." );
39
40        time = 0;
41        Data = Dat;
42}
43
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
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 {
65        bdm_assert_debug ( dt_out.length() >= dtsize, "Short output vector" );
66        dt_out.set_subvector ( 0, yt );
67        dt_out.set_subvector ( yt.length(), ut );
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 );
84        dt.set_subvector ( yt.length()+xt.length(), ut );
85}
86
87void StateDS::from_setting ( const Setting &set ) {
88        IM = UI::build<pdf> ( set, "IM", UI::compulsory );
89        OM = UI::build<pdf> ( set, "OM", UI::compulsory );
90
91        //todo test if IM->rvc contains IM->rv
92        //todo test if OM->rvc contains IM->rv
93
94        UI::get ( xt, set, "x0", UI::optional );
95
96}
97
98void StateDS::validate() {
99        DS::validate();
100
101        RV Yrv = concat ( OM->_rv() , IM->_rv() ); // export also true state
102        int ytsize = Yrv._dsize();
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 );
110        dtsize = utsize + ytsize;
111
112        dt.set_length ( dtsize );
113        if ( xt.length() != IM->dimension() ) {
114                xt = zeros ( IM->dimension() );
115        }
116        ut.set_length ( Urv._dsize() );
117
118        //create data links
119        u2imc.set_connection ( IM->_rvc(), Urv );
120        u2omc.set_connection ( OM->_rvc(), Urv );
121}
Note: See TracBrowser for help on using the browser.