Show
Ignore:
Timestamp:
04/09/10 09:31:37 (14 years ago)
Author:
mido
Message:

cleanup of MemDS and its descendants
bdmtoolbox/CMakeLists.txt slightly changed to avoid unnecessary MEX condition
"indeces" replaced by "indices"

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • library/bdm/base/datasources.cpp

    r895 r896  
    1  
    21#include "datasources.h" 
    32 
    43using namespace bdm; 
    54 
    6 void 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         } 
     5MemDS::MemDS ( mat &Dat ) : Data( Dat ) { 
    136} 
    147 
    15 void 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  
    24 void MemDS::step() { 
    25         if ( time < Data.cols() ) { 
     8void MemDS::step( ) { 
     9        if ( time < max_length() ) { 
    2610                time++; 
    2711        } 
    2812} 
    2913 
    30 void 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 ); 
     14void MemDS::getdata ( vec &dt ) const { 
     15        bdm_assert_debug ( dt.length() == Data.rows(), "MemDS:getdata incompatible dt" ); 
     16        dt = Data.get_col ( time ); 
    3517} 
    3618 
    37 MemDS::MemDS ( mat &Dat, ivec &rowid0 ) : rowid ( rowid0 ) { 
    38         bdm_assert_debug ( max ( rowid ) <= Dat.rows(), "MemDS rowid is too high for given Dat." ); 
     19void MemDS::getdata ( vec &dt, const ivec &indices ) { 
     20        bdm_assert_debug ( dt.length() == indices.length(), "MemDS:getdata incompatible dt" ); 
     21        vec tmp = Data.get_col ( time ); 
     22        dt = tmp ( indices ); 
     23} 
     24 
     25void MemDS::set_drv ( const RV &drv ) { 
     26        bdm_assert_debug ( drv._dsize() == Data.rows(), "MemDS::set_rvs incompatible drv" ); 
     27        DS::set_drv ( drv, RV() ); 
     28} 
     29 
     30void MemDS::from_setting ( const Setting &set ) { 
     31        DS::from_setting ( set ); 
     32 
     33        UI::get ( Data, set, "Data", UI::compulsory ); 
     34         
     35        if ( !UI::get ( time, set, "time", UI::optional ) ) { 
     36                time = 0; 
     37        } 
     38         
     39        shared_ptr<RV> r = UI::build<RV> ( set, "drv", UI::optional ); 
     40        if ( !r ) { 
     41                r = new RV(); 
     42                for ( int i = 0; i < Data.rows(); i++ ) { 
     43                        r->add ( RV ( "ch" + num2str ( i ), 1, 0 ) ); 
     44                } 
     45        } 
     46         
     47        set_drv ( *r ); 
     48        dtsize = r->_dsize(); 
     49        utsize = 0; 
     50} 
     51 
     52void FileDS::from_setting ( const Setting & set ) { 
     53        // here we do not call MemDS::from_setting intentionally as we can not load any Data matrix directly 
     54        DS::from_setting ( set ); 
     55 
     56        string filename; 
     57        UI::get ( filename, set, "filename", UI::compulsory ); 
    3958 
    4059        time = 0; 
    41         Data = Dat; 
     60 
     61        shared_ptr<RV> r = UI::build<RV> ( set, "drv", UI::optional ); 
     62        if ( !r ) { 
     63                r = new RV(); 
     64                for ( int i = 0; i < Data.rows(); i++ ) { 
     65                        r->add ( RV ( "ch" + num2str ( i ), 1, 0 ) ); 
     66                } 
     67        } 
     68         
     69        set_drv ( *r ); 
     70        dtsize = r->_dsize(); 
     71        utsize = 0; 
    4272} 
    4373 
    44 void ITppFileDS::from_setting ( const Setting &set ) { 
    45         shared_ptr<RV> rvtmp = UI::build<RV> ( set, "rv" , UI::compulsory ); 
     74void CsvFileDS::from_setting ( const Setting & set ) { 
     75        FileDS::from_setting ( set ); 
    4676 
    47         it_file it ( set["filename"] ); 
    48         it << Name ( set["varname"] ); 
     77        vec data_line; 
     78        string line; 
     79 
     80        ifstream fs; 
     81        fs.open ( filename.c_str() ); 
     82        if ( fs.is_open() ) { 
     83                while ( getline ( fs, line ) ) { 
     84                        data_line.set ( line ); 
     85                        Data.append_row ( data_line ); 
     86                } 
     87        } 
     88 
     89        string orientation; 
     90        if( UI::get ( orientation, set, "orientation", UI::optional ) & orientation == "BY_ROW" )  
     91                transpose ( Data, Data ); 
     92} 
     93 
     94void ITppFileDS::from_setting ( const Setting & set ) { 
     95        FileDS::from_setting ( set ); 
     96 
     97        string varname; 
     98        UI::get ( varname, set, "varname", UI::compulsory ); 
     99 
     100        it_file it ( filename ); 
     101        it << Name ( varname ); 
    49102        it >> Data; 
    50         time = 0; 
    51         //rowid and delays are ignored 
    52         rowid = linspace ( 0, Data.rows() - 1 ); 
    53         set_drv ( *rvtmp, RV() ); 
    54103} 
    55104 
     
    62111} 
    63112 
    64 void PdfDS::getdata ( vec &dt_out ) const { 
     113void PdfDS::getdata ( vec & dt_out ) const { 
    65114        bdm_assert_debug ( dt_out.length() >= dtsize, "Short output vector" ); 
    66115        dt_out.set_subvector ( 0, yt ); 
     
    85134} 
    86135 
    87 void StateDS::from_setting ( const Setting &set ) { 
     136void StateDS::from_setting ( const Setting & set ) { 
    88137        IM = UI::build<pdf> ( set, "IM", UI::compulsory ); 
    89138        OM = UI::build<pdf> ( set, "OM", UI::compulsory );