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

Revision 795, 4.5 kB (checked in by mido, 14 years ago)

validate() finally included into UI::build mechanism and removed from some from_setting methods,
from that point StateDS test does not pass, I do not understand why

  • 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 PdfDS::step() {
45        yt2rgr.store_data ( yt ); // y is now history
46        ut2rgr.filldown ( ut, rgr );
47        yt2rgr.filldown ( yt, rgr );
48        yt = ipdf->samplecond ( rgr );
49        ut2rgr.store_data ( ut ); //u is now history
50}
51
52void PdfDS::getdata ( vec &dt_out ) const {
53        bdm_assert_debug ( dt_out.length() >= utsize + ytsize, "Short output vector" );
54        dt_out.set_subvector ( 0, yt );
55        dt_out.set_subvector ( ytsize, ut );
56}
57
58void StateDS::step() {
59        vec imc ( IM->dimensionc() );
60        imc.set_subvector ( 0, xt );
61        u2imc.filldown ( ut, imc );
62        xt = IM->samplecond ( imc );
63
64        vec omc ( OM->dimensionc() );
65        omc.set_subvector ( 0, xt );
66        u2omc.filldown ( ut, omc );
67        vec yt;
68        yt = OM->samplecond ( omc );
69        //fill all data
70        dt.set_subvector ( 0, yt );
71        dt.set_subvector ( yt.length(), xt );
72        dt.set_subvector ( ytsize, ut );
73}
74
75// void ArxDS::step() {
76//      //shift history
77//      H.shift_right ( 0, dt_size );
78//
79//      H.set_subvector ( dt_size - utsize, U ); // write U after Drv
80//
81//      //get regressor
82//      rgr = rgrlnk.pushdown ( H );
83//      // Eval Y
84//      H.set_subvector ( 0, model.samplecond ( rgr ) );
85//
86// }
87//
88// void ArxDS::from_setting ( const Setting &set ) {
89//      shared_ptr<RV> yrv = UI::build<RV> ( set, "y" , UI::compulsory );
90//      shared_ptr<RV> urv = UI::build<RV> ( set, "u" , UI::compulsory );
91//      shared_ptr<RV> rrv = UI::build<RV> ( set, "rgr" , UI::compulsory );
92//
93//      mat Th;
94//      UI::get ( Th, set, "theta", UI::compulsory );
95//
96//      vec mu0;
97//      if ( !UI::get ( mu0, set, "offset" ) )
98//              mu0 = zeros ( yrv->_dsize() );
99//
100//      mat sqR;
101//      UI::get ( sqR, set, "r", UI::compulsory );
102//      set_parameters ( Th, mu0, sqR );
103//      set_drv ( *yrv, *urv, *rrv );
104//
105//      if ( set.exists ( "opt" ) )
106//              set_options ( set["opt"] );
107// }
108
109CsvFileDS::CsvFileDS ( const string& fname, const string& orientation ) : FileDS() {
110        time = 0;
111
112        vec data_line;
113        string line;
114
115        ifstream fs;
116        fs.open ( fname.c_str() );
117        if ( fs.is_open() ) {
118                while ( getline ( fs, line ) ) {
119                        data_line.set ( line );
120                        Data.append_row ( data_line );
121                }
122        }
123
124        if ( orientation == "BY_ROW" ) {
125                transpose ( Data, Data );
126        }
127
128
129}
130
131//! Auxiliary function building full history of rv0
132RV fullrgr ( const RV &drv0, const RV &urv0, const RV &rrv0 ) {
133        RV T ( urv0 );
134        RV pom = concat ( drv0, urv0 );
135        int mint = rrv0.mint();
136        for ( int i = 0; i > mint; i-- ) {
137                pom.t_plus ( -1 );
138                T.add ( pom );
139        }
140        return T;
141}
142
143void ITppFileDS::from_setting ( const Setting &set ) {
144        shared_ptr<RV> rvtmp = UI::build<RV> ( set, "rv" , UI::compulsory );
145
146        it_file it ( set["filename"] );
147        it << Name ( set["varname"] );
148        it >> Data;
149        time = 0;
150        //rowid and delays are ignored
151        rowid = linspace ( 0, Data.rows() - 1 );
152        set_drv ( *rvtmp, RV() );
153}
154
155void StateDS::from_setting ( const Setting &set ) {
156        IM = UI::build<pdf> ( set, "IM", UI::compulsory );
157        OM = UI::build<pdf> ( set, "OM", UI::compulsory );
158
159        //todo test if IM->rvc contains IM->rv
160        //todo test if OM->rvc contains IM->rv
161
162        UI::get ( xt, set, "x0", UI::optional );
163
164}
165
166void StateDS::validate() {
167        DS::validate();
168
169        Yrv = concat ( OM->_rv() , IM->_rv() ); // export also true state
170        ytsize = Yrv._dsize();
171
172        RV tmp = concat ( OM->_rvc(), IM->_rvc() ); // what i not in rvc
173        Urv = tmp.subt ( Yrv ); // remove dt,xt and
174        Urv = Urv.subt ( Yrv.copy_t ( -1 ) ); // remove dt,xt and
175        utsize = Urv._dsize();
176
177        set_drv ( Yrv, Urv );
178        dtsize = utsize + ytsize;
179
180        dt.set_length ( dtsize );
181        if ( xt.length() != IM->dimension() ) {
182                xt = zeros ( IM->dimension() );
183        }
184        ut.set_length ( Urv._dsize() );
185
186        //create data links
187        u2imc.set_connection ( IM->_rvc(), Urv );
188        u2omc.set_connection ( OM->_rvc(), Urv );
189}
Note: See TracBrowser for help on using the browser.