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

Revision 384, 3.7 kB (checked in by mido, 15 years ago)

possibly broken?

  • Property svn:eol-style set to native
Line 
1
2#include "datasources.h"
3
4using namespace bdm;
5
6void MemDS::getdata ( vec &dt ) {
7        int i;
8
9        it_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-delays ( i ) );
12        }
13}
14
15void MemDS::getdata ( vec &dt,const ivec &indeces ) {
16        int j,i;
17        it_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-delays ( j ) );
21        }
22}
23
24void MemDS::step() {
25        if ( time<Data.cols() ) {time++;}
26}
27
28void MemDS::set_rvs ( RV &drv, RV &urv ) {
29        it_assert_debug ( drv._dsize() ==rowid.length(),"MemDS::set_rvs incompatible drv" );
30        it_assert_debug ( urv._dsize() ==0,"MemDS does not support urv." );
31
32        Drv = drv;
33}
34
35MemDS::MemDS ( mat &Dat, ivec &rowid0, ivec &delays0 ) : rowid(rowid0),delays(delays0){
36        it_assert_debug ( max ( rowid ) <=Dat.rows(),"MemDS rowid is too high for given Dat." );
37        it_assert_debug ( max ( delays ) <Dat.cols(),"MemDS delays are too high." );
38
39        time = max ( delays );
40        Data = Dat;
41}
42
43void ArxDS::step() {
44        //shift history
45        H.shift_right ( 0, dt_size );
46
47        H.set_subvector ( dt_size-utsize, U ); // write U after Drv
48
49        //get regressor
50        rgr = rgrlnk.pushdown ( H );
51        // Eval Y
52        H.set_subvector ( 0, model.samplecond ( rgr ) );
53
54}
55
56void ArxDS::from_setting( const Setting &set ) 
57{       
58        RV *yrv = UI::build<RV>( set, "y" );
59        RV *urv = UI::build<RV>( set, "u" );
60        RV *rrv = UI::build<RV>( set, "rgr" ); 
61                               
62        mat Th;
63        UI::get( Th, set, "theta" );
64
65        vec mu0;
66        if( set.exists( "offset" ))
67                UI::get( mu0, set, "offset" );
68        else
69                mu0= zeros( yrv->_dsize() );
70
71        mat sqR;
72        UI::get( sqR, set, "r" );
73        set_parameters(Th,mu0,sqR);
74        set_drv(*yrv,*urv,*rrv);
75
76        if(set.exists("opt"))
77                set_options(set["opt"]);
78}
79
80/*void ArxDS::to_setting( Setting &set ) const
81{       
82        Transport::to_setting( set );
83
84        Setting &kilometers_setting = set.add("kilometers", Setting::TypeInt );
85        kilometers_setting = kilometers;
86
87        UI::save( passengers, set, "passengers" );
88}*/
89
90
91CsvFileDS::CsvFileDS ( const string& fname, const string& orientation ) :FileDS() {
92        time = 0;
93               
94        vec data_line;
95        string line;
96
97        ifstream fs;
98        fs.open(fname.c_str());
99        if(fs.is_open()) {
100             while ( getline(fs, line) ) {
101                 data_line.set(line);
102                 Data.append_row(data_line);
103             }
104        }
105       
106        if(orientation == "BY_ROW") {
107             transpose(Data, Data);
108        }
109
110       
111}
112
113//! Auxiliary function building full history of rv0
114RV fullrgr ( const RV &drv0, const RV &urv0, const RV &rrv0 ) {
115        RV T ( urv0 );
116        RV pom = concat ( drv0, urv0 );
117        int mint = rrv0.mint();
118        for ( int i=0; i>mint; i-- ) {
119                pom.t ( -1 );
120                T.add ( pom );
121        }
122        return T;
123}
124
125void ITppFileDS::from_setting( const Setting &set ) 
126{       
127        RV* rvtmp = UI::build<RV>(set, "rv" );
128
129        it_file it ( set["filename"] );
130        it << Name ( set["varname"] ); 
131        it >> Data;
132        time = 0;
133        //rowid and delays are ignored
134
135        set_drv(*rvtmp,RV());
136}
137
138/*void ITppFileDS::to_setting( Setting &set ) const
139{       
140        Transport::to_setting( set );
141
142        Setting &kilometers_setting = set.add("kilometers", Setting::TypeInt );
143        kilometers_setting = kilometers;
144
145        UI::save( passengers, set, "passengers" );
146}*/
147
148void stateDS::from_setting( const Setting &set ) 
149{       
150        IM = UI::build<mpdf>(set, "IM");
151        OM = UI::build<mpdf>(set, "OM");
152
153        dt.set_length( OM->dimension() );
154        xt.set_length( IM->dimension() );
155        ut.set_length(0);
156       
157        RV* rvtmp = UI::build<RV>(set["IM"], "rvu");                   
158        //set_drv(rvtmp);
159}
160
161/*void stateDS::to_setting( Setting &set ) const
162{       
163        Transport::to_setting( set );
164
165        Setting &kilometers_setting = set.add("kilometers", Setting::TypeInt );
166        kilometers_setting = kilometers;
167
168        UI::save( passengers, set, "passengers" );
169}*/
170
Note: See TracBrowser for help on using the browser.