| 103 | | void StateDS::step() { |
| 104 | | vec imc ( IM->dimensionc() ); |
| 105 | | imc.set_subvector ( 0, xt ); |
| 106 | | u2imc.filldown ( ut, imc ); |
| 107 | | xt = IM->samplecond ( imc ); |
| 108 | | |
| 109 | | vec omc ( OM->dimensionc() ); |
| 110 | | omc.set_subvector ( 0, xt ); |
| 111 | | u2omc.filldown ( ut, omc ); |
| 112 | | vec yt; |
| 113 | | yt = OM->samplecond ( omc ); |
| 114 | | //fill all data |
| 115 | | dt.set_subvector ( 0, yt ); |
| 116 | | dt.set_subvector ( yt.length(), xt ); |
| 117 | | dt.set_subvector ( yt.length()+xt.length(), ut ); |
| 118 | | } |
| 119 | | |
| 120 | | void StateDS::from_setting ( const Setting & set ) { |
| 121 | | IM = UI::build<pdf> ( set, "IM", UI::compulsory ); |
| 122 | | OM = UI::build<pdf> ( set, "OM", UI::compulsory ); |
| 123 | | |
| 124 | | //todo test if IM->rvc contains IM->rv |
| 125 | | //todo test if OM->rvc contains IM->rv |
| 126 | | |
| 127 | | UI::get ( xt, set, "x0", UI::optional ); |
| 128 | | |
| 129 | | } |
| 130 | | |
| 131 | | void StateDS::validate() { |
| 132 | | DS::validate(); |
| 133 | | |
| 134 | | RV Yrv = concat ( OM->_rv() , IM->_rv() ); // export also true state |
| 135 | | int ytsize = Yrv._dsize(); |
| 136 | | |
| 137 | | RV tmp = concat ( OM->_rvc(), IM->_rvc() ); // what i not in rvc |
| 138 | | Urv = tmp.subt ( Yrv ); // remove dt,xt and |
| 139 | | Urv = Urv.subt ( Yrv.copy_t ( -1 ) ); // remove dt,xt and |
| 140 | | utsize = Urv._dsize(); |
| 141 | | |
| 142 | | set_drv ( Yrv, Urv ); |
| 143 | | dtsize = utsize + ytsize; |
| 144 | | |
| 145 | | dt.set_length ( dtsize ); |
| 146 | | if ( xt.length() != IM->dimension() ) { |
| 147 | | xt = zeros ( IM->dimension() ); |
| 148 | | } |
| 149 | | ut.set_length ( Urv._dsize() ); |
| 150 | | |
| 151 | | //create data links |
| 152 | | u2imc.set_connection ( IM->_rvc(), Urv ); |
| 153 | | u2omc.set_connection ( OM->_rvc(), Urv ); |
| 154 | | } |