00001 
00013 #ifndef BM_H
00014 #define BM_H
00015 
00016 #include <itpp/itbase.h>
00017 
00018 
00019 using namespace itpp;
00020 
00027 class RV {
00028 protected:
00030         int tsize;
00032         int len;
00034         ivec ids;
00036         ivec sizes;
00038         ivec times;
00040         Array<std::string> names;
00041 
00042 private:
00044         void init ( ivec in_ids, Array<std::string> in_names, ivec in_sizes, ivec in_times);
00045 public:
00047         RV ( ivec in_ids, Array<std::string> in_names, ivec in_sizes, ivec in_times);
00049         RV ( ivec ids );
00051         RV ();
00052 
00054         friend std::ostream &operator<< ( std::ostream &os, const RV &rv );
00055 
00057         int count() const {return tsize;} ;
00059         int length() const {return len;} ;
00060 
00061         
00062 
00064         ivec find ( RV rv2 );
00066         void add (const RV &rv2 );
00068         friend RV concat (const RV &rv1, const RV &rv2 );
00070         RV subt ( RV rv2 );
00072         RV subselect ( ivec ind );
00074         RV operator() ( ivec ind );
00076         void t ( int delta );
00078         ivec indexlist();
00079 
00081         Array<std::string>& _names(){return names;};
00082 
00084         int id(int at){return ids(at);};
00086         int size(int at){return sizes(at);};
00088         int time(int at){return times(at);};
00090         std::string name(int at){return names(at);};
00091 };
00092 
00093 
00095 
00096 class fnc {
00097 protected:
00099         int dimy;
00100 public:
00102         fnc(int dy):dimy(dy){};
00104         virtual vec eval ( const vec &cond ) {
00105                 return vec ( 0 );
00106         }; 
00107 
00109         int _dimy() const{return dimy;}
00110 
00112         virtual ~fnc() {};
00113 };
00114 
00115 
00117 
00118 class epdf {
00119 protected:
00121         RV rv;
00122 public:
00124         epdf() :rv ( ivec ( 0 ) ) {};
00125 
00127         epdf ( const RV &rv0 ) :rv ( rv0 ) {};
00128 
00130 
00132         virtual vec sample () const =0;
00134         virtual double eval ( const vec &val ) const {return exp(this->evalpdflog(val));};
00135 
00137         virtual double evalpdflog ( const vec &val ) const =0;
00138 
00140         virtual vec mean() const =0;
00141         
00143         virtual ~epdf() {};
00145         RV _rv() const {return rv;}
00146 };
00147 
00148 
00150 
00151 
00152 class mpdf {
00153 protected:
00155         RV rv;
00157         RV rvc;
00159         epdf* ep;
00160 public:
00161 
00163 
00165         virtual vec samplecond ( vec &cond, double &ll ) {this->condition(cond);vec temp= ep->sample();ll=ep->evalpdflog(temp);return temp;};
00167         virtual void condition ( const vec &cond ) {};
00168         
00170         virtual double evalcond (const vec &dt, const vec &cond ) {this->condition(cond);return ep->eval(dt);};
00171 
00173         virtual ~mpdf() {};
00174 
00176         mpdf ( const RV &rv0, const RV &rvc0 ) :rv ( rv0 ),rvc ( rvc0 ) {};
00178         RV _rvc(){return rvc;}
00180         epdf& _epdf(){return *ep;}
00181 };
00182 
00190 class DS {
00191 protected:
00193         RV Drv;
00195         RV Urv; 
00196 public:
00198         void getdata ( vec &dt );
00200         void getdata ( vec &dt, ivec &indeces );
00202         void write ( vec &ut );
00204         void write ( vec &ut, ivec &indeces );
00210         void linkrvs ( RV &drv, RV &urv );
00211 
00213         void step();
00214 
00215 };
00216 
00221 class BM {
00222 protected:
00224         RV rv;
00226         double ll;
00228         bool evalll;
00229 public:
00230 
00232         BM(const RV &rv0) :rv(rv0), ll ( 0 ),evalll ( true ) {
00233         };
00234 
00238         virtual void bayes ( const vec &dt ) = 0;
00240         void bayes ( mat Dt );
00242         virtual epdf& _epdf()=0;
00243 
00245         virtual ~BM() {};
00247         const RV& _rv() const {return rv;}
00249         double _ll() const {return ll;}
00250 };
00251 
00261 class BMcond {
00262 protected:
00264         RV rvc;
00265 public:
00267         virtual void condition ( const vec &val ) =0;
00269         BMcond(RV &rv0):rvc(rv0){};
00271         virtual ~BMcond(){};
00273         const RV& _rvc() const {return rvc;}
00274 };
00275 
00276 #endif // BM_H