00001 #define __cplusplus__ 00002 #ifndef __POSSMRF__ 00003 #define __POSSMRF__ 00004 00005 #include<iostream> 00006 #include<istream> 00007 #include<fstream> 00008 #include<string> 00009 #include<vector> 00010 #include<sstream> 00011 #include <cmath> 00012 00013 #include <Neighborhood_System.hpp> 00014 00015 using namespace std; 00016 00027 class Conditional_MRF{ 00028 00029 protected : 00031 Neighborhood_System *NHS; 00033 vector<uint> subK; 00034 00036 vector<double> Z_mf; 00037 00038 00039 public : 00040 00042 virtual ~Conditional_MRF(); 00043 00045 void Get_subK(vector<uint> &subk); 00047 uint Get_K(); 00049 uint Get_L(); 00051 uint Get_N(); 00052 00054 void Set_Y(vector<uint> const &y); 00055 00056 bool is_subclass(uint k, uint l); 00057 uint upper_class(uint k); 00058 void Get_index(uint l, vector<uint> & ind); 00059 00061 void Simulate(vector<double> const & PG_Y, vector<uint> & Z); 00063 void Simulate(uint nbiter, vector<double> const & PG_Y, vector<uint> & Z); 00065 void Simulate(uint nbiter, vector<uint> const & Y, vector<uint> & Z); 00066 00068 virtual double H(uint i, uint l, uint k, vector<uint> const & Z); 00070 virtual double Hmf(uint i, uint l, uint k); 00071 00073 void Compute_PG(uint i, vector<double> const & PG_Yi, vector<uint> const & Z, vector<double> & PG); 00075 void Compute_PG_cond(uint i, uint l, vector<uint> const & Z, vector<double> & PG); 00076 00078 void Compute_PGmf(vector<double> const &PG_Y,vector<double> & P_G); 00080 void Compute_PGmf_cond(uint i, uint l, vector<double> & PG); 00081 00083 void Set_Zmf( vector<double> const & z ); 00085 void Set_Zmf( vector<double> const & z , uint i); 00087 void Get_Zmf( vector<double> & z ); 00088 00090 void Set_Z( vector<uint> const & z ); 00091 00093 virtual void Read_Params(istream & is); 00095 virtual void Write_Params(ostream & os); 00096 00098 virtual uint Degrees_Of_Freedom(); 00099 00101 virtual void Info(); 00102 }; 00103 00104 #endif