00001
00013 #ifndef BM_H
00014 #define BM_H
00015
00016 #include <itpp/itbase.h>
00017
00018
00019 using namespace itpp;
00020
00026 class RV {
00027 int size,len;
00028 ivec ids;
00029 ivec sizes;
00030 ivec times;
00031 ivec obs;
00032 Array<std::string> names;
00033
00034 private:
00035 void init ( ivec in_ids, Array<std::string> in_names, ivec in_sizes, ivec in_times, ivec in_obs );
00036 public:
00038 RV ( ivec in_ids, Array<std::string> in_names, ivec in_sizes, ivec in_times, ivec in_obs );
00040 RV ( ivec ids );
00042 RV ();
00043
00045 friend std::ostream &operator<< ( std::ostream &os, const RV &rv );
00046
00048 int count() {return size;}
00049
00050
00052 ivec find(RV rv2);
00054 RV add(RV rv2);
00056 RV subt(RV rv2);
00058 RV subselect(ivec ind);
00060 RV operator()(ivec ind);
00062 void t(int delta);
00063 };
00064
00065
00066
00067
00069 class fnc {
00070 RV rv;
00071 };
00072
00074 class BM {
00075 public:
00077 double ll;
00078
00083 virtual void bayes ( const vec &dt, bool evall=true ) = 0;
00085 void bayes ( mat Dt );
00086 };
00087
00089 class epdf {
00090 RV rv;
00091 public:
00093
00095 virtual vec sample ()=0;
00096 virtual double eval(const vec &val){};
00097 };
00098
00100 class mpdf {
00102 RV rv;
00104 RV rvc;
00105 public:
00106
00108
00110 virtual vec samplecond (vec &cond, double lik){};
00111 virtual void condition (vec &cond){};
00112 };
00113
00120 class DS {
00121 protected:
00123 RV Drv;
00125 RV Urv;
00126 public:
00128 void getdata(vec &dt);
00130 void getdata(vec &dt, ivec &indeces);
00132 void write(vec &ut);
00134 void write(vec &ut, ivec &indeces);
00140 void linkrvs(RV &drv, RV &urv);
00141
00143 void step();
00144 };
00145
00146
00147 #endif // BM_H