BIE |
/home/weinberg/src/BIE/include/MultipleChains.h00001 // This is really -*- C++ -*- 00002 00003 #ifndef MultipleChains_h 00004 #define MultipleChains_h 00005 00006 #include "Serializable.h" 00007 00008 00009 #include <LikelihoodComputation.h> 00010 #include <MHWidth.h> 00011 #include <MHWidthOne.h> 00012 #include <Simulation.h> 00013 #include <Chain.h> 00014 00015 namespace BIE { 00016 00017 class MixturePrior; 00018 00019 //+ CLICLASS MultipleChains SUPER Simulation 00046 class MultipleChains : public Simulation 00047 { 00048 00049 public: 00050 00053 00055 enum Control { 00056 parallel, 00057 serial 00058 }; 00059 00061 static Control cntrl; 00062 00064 static unsigned nfifo; 00065 00067 static int state_iter; 00068 00070 00071 //+ CLICONSTR int int int MHWidth* BaseDataTree* Model* Integration* Converge* MixturePrior* LikelihoodComputation* MCAlgorithm* 00073 MultipleChains(int max, int ndim, int number, 00074 MHWidth *width, 00075 BaseDataTree* d, 00076 Model* m, 00077 Integration* i, 00078 Converge* c, 00079 MixturePrior* mp, 00080 LikelihoodComputation* l, 00081 MCAlgorithm* mca); 00082 00083 //+ CLICONSTR int int int MHWidth* BaseDataTree* Model* Integration* Converge* MixturePrior* LikelihoodComputation* MCAlgorithm* Simulation* 00085 MultipleChains(int max, int ndim, int number, 00086 MHWidth *width, 00087 BaseDataTree* d, 00088 Model* m, 00089 Integration* i, 00090 Converge* c, 00091 MixturePrior* mp, 00092 LikelihoodComputation* l, 00093 MCAlgorithm* mca, 00094 Simulation *last); 00096 virtual ~MultipleChains(); 00097 00099 00100 00103 void NewState(int Mcur, vector<double>& w, vector< vector<double> >& p); 00105 void NewState(Chain& ch); 00107 void NewState(State& s); 00109 00111 virtual void Initialize(); 00112 00114 virtual void Reinitialize(MHWidth* width, MixturePrior *mp); 00115 00117 00118 //+ CLIMETHOD void SetControl int 00123 void SetControl(int); 00125 00126 //+ CLIMETHOD void EnableLogging 00128 void EnableLogging() { caching = true; CreateChains(); } 00129 00132 00134 double GetValue(); 00135 00137 double GetPrior(); 00138 00140 double GetLikelihood(); 00141 00143 State GetState(); 00144 00146 virtual void ReportState(); 00147 00149 00150 00151 virtual void LogState(string& logfile); 00153 virtual void LogState(int level, int iterno, string& outfile); 00155 00156 00158 void PrintState() { chains[0].PrintState(); } 00159 00160 00164 virtual void PrintStepDiagnostic(); 00165 00169 virtual void PrintStateDiagnostic(); 00170 00172 vector<double> GetStat(void); 00173 00175 void AdditionalInfo(); 00176 00178 00179 protected: 00180 00182 virtual void MCMethod(); 00183 00185 MHWidth * width; 00186 00188 bool caching; 00189 00191 00192 00194 vector<unsigned char> update_flag; 00195 00197 vector<unsigned char> update_flag1; 00198 00200 vector<unsigned long> nstat0; 00201 00203 vector<unsigned long> nstat1; 00204 00206 deque< vector<unsigned char> > arate; 00207 00209 00211 void CreateChains(); 00212 00214 00215 00216 void SampleNewState(int k); 00218 void SampleNewStateParallel(int k); 00220 void SampleNewStateSerial(int k); 00221 00223 00224 00225 unsigned ncount; 00227 unsigned totalnum; 00229 unsigned totaltry; 00231 00233 void ResetChainStats(); 00234 vector<int> stat0, stat1; 00235 void getChainCounts(); 00236 00238 bool chains_initialized; 00239 00240 private: 00241 // Save the RNG 00242 // 00243 template<class Archive> 00244 void post_save(Archive &ar, const unsigned int file_version) const { 00245 vector<Serializable*> s; 00246 s.push_back(BIEgen); 00247 ar << BOOST_SERIALIZATION_NVP(s); 00248 } 00249 // Reassign pointer to fiducial chain and restore the RNG 00250 // 00251 template<class Archive> 00252 void post_load(Archive &ar, const unsigned int file_version) { 00253 vector<Serializable *>s; 00254 ar >> BOOST_SERIALIZATION_NVP(s); 00255 BIEgen = dynamic_cast<BIEACG*>(s[0]); 00256 chfid = &chains[0]; 00257 } 00258 00259 // AUTO GENERATED BY ../persistence/autopersist.py 00260 protected: 00261 MultipleChains() {} 00262 private: 00263 friend class boost::serialization::access; 00264 BOOST_SERIALIZATION_SPLIT_MEMBER(); 00265 00266 template<class Archive> 00267 void save(Archive & ar, const unsigned int version) const { 00268 this->pre_save(ar, version); 00269 try { 00270 ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(Simulation); 00271 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00272 } 00273 try { 00274 ar << BOOST_SERIALIZATION_NVP(cntrl); 00275 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00276 } 00277 try { 00278 ar << BOOST_SERIALIZATION_NVP(nfifo); 00279 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00280 } 00281 try { 00282 ar << BOOST_SERIALIZATION_NVP(state_iter); 00283 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00284 } 00285 try { 00286 ar << BOOST_SERIALIZATION_NVP(width); 00287 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00288 } 00289 try { 00290 ar << BOOST_SERIALIZATION_NVP(caching); 00291 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00292 } 00293 try { 00294 ar << BOOST_SERIALIZATION_NVP(update_flag); 00295 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00296 } 00297 try { 00298 ar << BOOST_SERIALIZATION_NVP(update_flag1); 00299 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00300 } 00301 try { 00302 ar << BOOST_SERIALIZATION_NVP(nstat0); 00303 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00304 } 00305 try { 00306 ar << BOOST_SERIALIZATION_NVP(nstat1); 00307 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00308 } 00309 try { 00310 ar << BOOST_SERIALIZATION_NVP(arate); 00311 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00312 } 00313 try { 00314 ar << BOOST_SERIALIZATION_NVP(ncount); 00315 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00316 } 00317 try { 00318 ar << BOOST_SERIALIZATION_NVP(totalnum); 00319 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00320 } 00321 try { 00322 ar << BOOST_SERIALIZATION_NVP(totaltry); 00323 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00324 } 00325 try { 00326 ar << BOOST_SERIALIZATION_NVP(chains_initialized); 00327 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00328 } 00329 this->post_save(ar, version); 00330 } 00331 00332 template<class Archive> 00333 void load(Archive & ar, const unsigned int version) { 00334 this->pre_load(ar, version); 00335 try { 00336 ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(Simulation); 00337 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00338 } 00339 try { 00340 ar >> BOOST_SERIALIZATION_NVP(cntrl); 00341 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00342 } 00343 try { 00344 ar >> BOOST_SERIALIZATION_NVP(nfifo); 00345 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00346 } 00347 try { 00348 ar >> BOOST_SERIALIZATION_NVP(state_iter); 00349 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00350 } 00351 try { 00352 ar >> BOOST_SERIALIZATION_NVP(width); 00353 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00354 } 00355 try { 00356 ar >> BOOST_SERIALIZATION_NVP(caching); 00357 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00358 } 00359 try { 00360 ar >> BOOST_SERIALIZATION_NVP(update_flag); 00361 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00362 } 00363 try { 00364 ar >> BOOST_SERIALIZATION_NVP(update_flag1); 00365 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00366 } 00367 try { 00368 ar >> BOOST_SERIALIZATION_NVP(nstat0); 00369 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00370 } 00371 try { 00372 ar >> BOOST_SERIALIZATION_NVP(nstat1); 00373 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00374 } 00375 try { 00376 ar >> BOOST_SERIALIZATION_NVP(arate); 00377 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00378 } 00379 try { 00380 ar >> BOOST_SERIALIZATION_NVP(ncount); 00381 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00382 } 00383 try { 00384 ar >> BOOST_SERIALIZATION_NVP(totalnum); 00385 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00386 } 00387 try { 00388 ar >> BOOST_SERIALIZATION_NVP(totaltry); 00389 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00390 } 00391 try { 00392 ar >> BOOST_SERIALIZATION_NVP(chains_initialized); 00393 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00394 } 00395 this->post_load(ar, version); 00396 } 00397 00398 }; 00399 00400 } 00401 BIE_CLASS_TYPE_INFO(BIE::MultipleChains) 00402 BIE_CLASS_EXPORT_KEY(BIE::MultipleChains) 00403 #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
|