BIE |
/home/weinberg/src/BIE/include/SubsampleConverge.h00001 // This is really -*- C++ -*- 00002 00003 00004 #ifndef SubsampleConverge_h 00005 #define SubsampleConverge_h 00006 00007 #include <mpi.h> 00008 00009 #include <deque> 00010 00011 #include <Ensemble.h> 00012 #include <Converge.h> 00013 00014 #include "Serializable.h" 00015 00016 00017 namespace BIE { 00018 00019 //+ CLICLASS SubsampleConverge SUPER Converge 00024 class SubsampleConverge : public Converge 00025 { 00026 private: 00027 int count; 00028 int next; 00029 int max; 00030 int nburn; 00031 Ensemble* _dist; 00032 string _id; 00033 00034 // For notational convenience 00035 typedef vector<double> dvec; 00036 // Double-ended queue of vectors for parameters 00037 deque<State> data; 00038 // Double-ended queue for posterior probability 00039 deque<double> prob; 00040 00041 public: 00044 00045 static int Nint; 00047 static int Ngrp; 00049 static int nconsec; 00051 static unsigned ngood; 00053 static unsigned nstart; 00055 static double alpha; 00057 static double rtol; 00059 static bool scale; 00061 static bool verbose; 00063 static double tiny; 00065 00068 //+ CLICONSTR int Ensemble* string 00070 SubsampleConverge(int m, Ensemble* d, string id); 00072 00074 virtual SubsampleConverge* New(int m, Ensemble* d, string id); 00075 00077 virtual bool Converged(); 00078 00079 //+ CLIMETHOD void setNburn int 00081 void setNburn(int n) { nstart = n; } 00082 00083 //+ CLIMETHOD void setConsec int 00085 void setConsec(int n) { nconsec = n; } 00086 00087 //+ CLIMETHOD void setNgood int 00089 void setNgood(int n) 00090 { 00091 ngood = n; nburn = -1; 00092 next = count + (int)sqrt(static_cast<float>(max)); 00093 } 00094 00096 int ConvergedIndex() { return nburn; } 00097 00098 //+ CLIMETHOD int BurnIn 00100 int BurnIn() { 00101 MPI_Bcast(&nburn, 1, MPI_INT, 0, MPI_COMM_WORLD); 00102 return nburn; 00103 } 00104 00105 //+ CLIMETHOD void setRcovTol double 00107 void setRcovTol(double r) { rtol = r; } 00108 00110 virtual bool AccumData(double value, State& state); 00111 00113 virtual bool GetLast(double& value, State& state) { 00114 if (prob.size()>0) { 00115 value = prob.back(); 00116 state = data.back(); 00117 return true; 00118 } else { 00119 return false; 00120 } 00121 } 00122 00125 void ComputeDistribution() { 00126 _dist->ComputeDistribution(); 00127 } 00128 00131 double PDF(State& x) {return _dist->PDF(x);} 00132 double logPDF(State& x) {return _dist->logPDF(x);} 00133 vector<double> lower(void) {return _dist->lower();} 00134 vector<double> upper(void) {return _dist->upper();} 00135 vector<double> Mean() {return _dist->Mean();} 00136 vector<double> StdDev() {return _dist->StdDev();} 00137 vector<double> Moments(int m) {return _dist->Moments(m);} 00138 vector<double> Sample() {return _dist->Sample();} 00140 00142 SubsampleConverge* New() { 00143 SubsampleConverge *p = new SubsampleConverge(max, _dist, _id); 00144 return p; 00145 } 00146 00147 // AUTO GENERATED BY ../persistence/autopersist.py 00148 protected: 00149 SubsampleConverge() {} 00150 private: 00151 friend class boost::serialization::access; 00152 template<class Archive> 00153 void serialize(Archive & ar, const unsigned int version) { 00154 this->pre_serialize(ar, version); 00155 try { 00156 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Converge); 00157 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00158 } 00159 try { 00160 ar & BOOST_SERIALIZATION_NVP(count); 00161 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00162 } 00163 try { 00164 ar & BOOST_SERIALIZATION_NVP(next); 00165 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00166 } 00167 try { 00168 ar & BOOST_SERIALIZATION_NVP(max); 00169 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00170 } 00171 try { 00172 ar & BOOST_SERIALIZATION_NVP(nburn); 00173 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00174 } 00175 try { 00176 ar & BOOST_SERIALIZATION_NVP(_dist); 00177 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00178 } 00179 try { 00180 ar & BOOST_SERIALIZATION_NVP(_id); 00181 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00182 } 00183 try { 00184 ar & BOOST_SERIALIZATION_NVP(data); 00185 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00186 } 00187 try { 00188 ar & BOOST_SERIALIZATION_NVP(prob); 00189 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00190 } 00191 try { 00192 ar & BOOST_SERIALIZATION_NVP(Nint); 00193 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00194 } 00195 try { 00196 ar & BOOST_SERIALIZATION_NVP(Ngrp); 00197 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00198 } 00199 try { 00200 ar & BOOST_SERIALIZATION_NVP(nconsec); 00201 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00202 } 00203 try { 00204 ar & BOOST_SERIALIZATION_NVP(ngood); 00205 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00206 } 00207 try { 00208 ar & BOOST_SERIALIZATION_NVP(nstart); 00209 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00210 } 00211 try { 00212 ar & BOOST_SERIALIZATION_NVP(alpha); 00213 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00214 } 00215 try { 00216 ar & BOOST_SERIALIZATION_NVP(rtol); 00217 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00218 } 00219 try { 00220 ar & BOOST_SERIALIZATION_NVP(scale); 00221 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00222 } 00223 try { 00224 ar & BOOST_SERIALIZATION_NVP(verbose); 00225 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00226 } 00227 try { 00228 ar & BOOST_SERIALIZATION_NVP(tiny); 00229 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00230 } 00231 this->post_serialize(ar, version); 00232 } 00233 00234 }; 00235 } 00236 00237 BIE_CLASS_TYPE_INFO(BIE::SubsampleConverge) 00238 BIE_CLASS_EXPORT_KEY(BIE::SubsampleConverge) 00239 #endif Send suggestions, questions, and feedback to WEINBERG at ASTRO dot UMASS dot EDU. Documentation generated at Fri Mar 26 00:35:11 2010 by
|