BIE |
/home/weinberg/src/BIE/include/MixturePrior.h00001 // This is really -*- C++ -*- 00002 00003 #ifndef MixturePrior_h 00004 #define MixturePrior_h 00005 00006 #include <vector> 00007 #include <string> 00008 00009 #include "Prior.h" 00010 #include "MHWidth.h" 00011 #include "Dirichlet.h" 00012 #include "Chain.h" 00013 #include "Poisson.h" 00014 00015 #include "Serializable.h" 00016 00017 00018 namespace BIE { 00019 00020 //+ CLICLASS MixturePrior 00026 class MixturePrior : public Prior 00027 { 00028 00029 protected: 00031 bool Ordered; 00032 00034 int Iorder; 00035 00037 int Nmix; 00038 00040 vector<double> ret; 00041 00043 double Alpha; 00044 00046 vector<Dirichlet*> mix; 00047 00049 Uniform * unit; 00050 00052 Uniform * useg; 00053 00055 Normal * normal; 00056 00058 double pmean; 00059 00061 Poisson * pois; 00062 00064 double GenGamma(double a); 00065 00067 double GenBeta(double a, double b); 00068 00070 double minW, maxW; 00071 00072 public: 00073 00075 static unsigned ITMAX; 00076 00078 static double min_prob; 00079 00082 00084 MixturePrior(); 00085 00087 MixturePrior(MixturePrior*); 00088 00093 MixturePrior(int nmix, string pfile); 00094 00098 MixturePrior(int nmix, double alpha, string pfile); 00099 00103 MixturePrior(int nmix, double alpha, double pmean, string pfile); 00104 00106 ~MixturePrior(); 00107 00109 00110 //+ CLIMETHOD void setMaxIter int 00115 void setMaxIter(int i) { ITMAX = i; } 00116 00117 //+ CLIMETHOD void setMinMaxWeight double double 00121 void setMinMaxWeight(double minw, double maxw) { minW = minw; maxW = maxw; } 00122 00124 void getMinMaxWeight(double& minw, double& maxw) { minw = minW; maxw = maxW; } 00125 00131 00132 virtual MixturePrior* New() = 0; 00133 00135 virtual double PDF(State&) = 0; 00136 00138 virtual double logPDF(State&) = 0; 00139 00145 virtual double logPDFMarginal(int M, int n, vector<double>& V) = 0; 00146 00148 virtual vector<double> lower(void) = 0; 00149 00151 virtual vector<double> upper(void) = 0; 00152 00153 /* 00155 virtual vector<double> Mean(int m) = 0; 00156 00158 virtual vector<double> StdDev(int m) = 0; 00159 00161 virtual vector<double> Moments(int, int) = 0; 00162 */ 00163 00165 virtual int SampleM(void) { 00166 int m = Nmix; 00167 if (pois) { 00168 do { 00169 m = static_cast<int>(floor((*pois)()+1.0e-6)); 00170 } while (m>Nmix || m<1); 00171 } 00172 return m; 00173 } 00174 00176 virtual vector<double> Sample(void) { return Sample(SampleM()); } 00177 00179 virtual vector<double> Sample(int m) = 0; 00181 00183 virtual void SamplePrior(int&, vector<double>&, vector< vector<double> >&) = 0; 00185 virtual void SamplePrior(int, int, vector<double>&) = 0; 00186 00188 virtual void SampleProposal(Chain &ch, MHWidth* width); 00189 00191 virtual double BirthWeight(int M); 00192 00194 virtual double BirthWeightPDF(int M, double p); 00195 00197 virtual int MinC() { return 1; } 00198 00200 virtual int MaxC() { return Nmix; } 00201 00202 //+ CLIMETHOD void setOrdering int 00211 virtual void setOrdering(int icomp) { Ordered = true; Iorder = icomp; } 00212 00213 //+ CLIMETHOD void unsetOrdering 00215 virtual void unsetOrdering() { Ordered = false; } 00216 00218 virtual bool Order() { return Ordered; } 00219 00221 virtual int Oindx() { return Iorder; } 00222 00223 // AUTO GENERATED BY ../persistence/autopersist.py 00224 private: 00225 friend class boost::serialization::access; 00226 template<class Archive> 00227 void serialize(Archive & ar, const unsigned int version) { 00228 this->pre_serialize(ar, version); 00229 try { 00230 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Prior); 00231 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00232 } 00233 try { 00234 ar & BOOST_SERIALIZATION_NVP(Ordered); 00235 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00236 } 00237 try { 00238 ar & BOOST_SERIALIZATION_NVP(Iorder); 00239 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00240 } 00241 try { 00242 ar & BOOST_SERIALIZATION_NVP(Nmix); 00243 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00244 } 00245 try { 00246 ar & BOOST_SERIALIZATION_NVP(ret); 00247 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00248 } 00249 try { 00250 ar & BOOST_SERIALIZATION_NVP(Alpha); 00251 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00252 } 00253 try { 00254 ar & BOOST_SERIALIZATION_NVP(mix); 00255 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00256 } 00257 try { 00258 ar & BOOST_SERIALIZATION_NVP(unit); 00259 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00260 } 00261 try { 00262 ar & BOOST_SERIALIZATION_NVP(useg); 00263 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00264 } 00265 try { 00266 ar & BOOST_SERIALIZATION_NVP(normal); 00267 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00268 } 00269 try { 00270 ar & BOOST_SERIALIZATION_NVP(pmean); 00271 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00272 } 00273 try { 00274 ar & BOOST_SERIALIZATION_NVP(pois); 00275 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00276 } 00277 try { 00278 ar & BOOST_SERIALIZATION_NVP(ITMAX); 00279 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00280 } 00281 try { 00282 ar & BOOST_SERIALIZATION_NVP(min_prob); 00283 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00284 } 00285 this->post_serialize(ar, version); 00286 } 00287 00288 }; 00289 } // namespace BIE 00290 00291 BIE_CLASS_EXPORT_KEY(BIE::MixturePrior) 00292 #endif Send suggestions, questions, and feedback to WEINBERG at ASTRO dot UMASS dot EDU. Documentation generated at Fri Mar 26 00:35:10 2010 by
|