BIE |
/home/weinberg/src/BIE/include/Ensemble.h00001 // This is really -*- C++ -*- 00002 00003 #ifndef Ensemble_h 00004 #define Ensemble_h 00005 00006 #include <deque> 00007 #include <map> 00008 00009 #include "BIEconfig.h" 00010 #include "ACG.h" 00011 #include "Uniform.h" 00012 #include "Normal.h" 00013 #include "DiscUnif.h" 00014 #include "Distribution.h" 00015 #include "Vector.h" 00016 00017 #include "Serializable.h" 00018 00019 00020 using namespace std; 00021 00022 namespace BIE { 00023 00030 class StateData: public Serializable { 00031 public: 00032 00034 double prob; 00035 00037 State p; 00038 00044 00045 StateData() {}; 00047 StateData(double, State&); 00049 StateData(const StateData&); 00051 00053 void Broadcast(); 00054 00055 // AUTO GENERATED BY ../persistence/autopersist.py 00056 private: 00057 friend class boost::serialization::access; 00058 template<class Archive> 00059 void serialize(Archive & ar, const unsigned int version) { 00060 this->pre_serialize(ar, version); 00061 try { 00062 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Serializable); 00063 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00064 } 00065 try { 00066 ar & BOOST_SERIALIZATION_NVP(prob); 00067 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00068 } 00069 try { 00070 ar & BOOST_SERIALIZATION_NVP(p); 00071 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00072 } 00073 this->post_serialize(ar, version); 00074 } 00075 00076 }; 00077 00082 class PairIndex: public Serializable 00083 { 00084 public: 00086 PairIndex() { }; 00087 00089 int index; 00090 00092 double value; 00093 00095 bool operator==(PairIndex t) 00096 { 00097 return (fabs(value - t.value)/(fabs(value) + fabs(t.value)) < 1.0e-12); 00098 } 00099 00100 // AUTO GENERATED BY ../persistence/autopersist.py 00101 private: 00102 friend class boost::serialization::access; 00103 template<class Archive> 00104 void serialize(Archive & ar, const unsigned int version) { 00105 this->pre_serialize(ar, version); 00106 try { 00107 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Serializable); 00108 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00109 } 00110 try { 00111 ar & BOOST_SERIALIZATION_NVP(index); 00112 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00113 } 00114 try { 00115 ar & BOOST_SERIALIZATION_NVP(value); 00116 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00117 } 00118 this->post_serialize(ar, version); 00119 } 00120 00121 }; 00122 00127 class StateCache: public Serializable 00128 { 00129 private: 00130 00131 int begin, key_pos; 00132 00133 int count, cur_index; 00134 deque<StateData> * states; 00135 map<int, vector<PairIndex> > pairs; 00136 map<int, DiscreteUniform *> disc; 00137 00138 public: 00139 00141 StateCache(int nburn, deque<StateData>& states, int keypos=0); 00142 00144 StateCache(const StateCache&); 00145 00147 ~StateCache(); 00148 00150 vector<double> Mean(int m); 00151 00153 vector<double> Sample(int m); 00154 00156 double logPDF(State &P); 00157 00159 unsigned size() { return states->size(); } 00160 00161 // AUTO GENERATED BY ../persistence/autopersist.py 00162 protected: 00163 StateCache() {} 00164 private: 00165 friend class boost::serialization::access; 00166 template<class Archive> 00167 void serialize(Archive & ar, const unsigned int version) { 00168 this->pre_serialize(ar, version); 00169 try { 00170 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Serializable); 00171 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00172 } 00173 try { 00174 ar & BOOST_SERIALIZATION_NVP(begin); 00175 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00176 } 00177 try { 00178 ar & BOOST_SERIALIZATION_NVP(key_pos); 00179 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00180 } 00181 try { 00182 ar & BOOST_SERIALIZATION_NVP(count); 00183 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00184 } 00185 try { 00186 ar & BOOST_SERIALIZATION_NVP(cur_index); 00187 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00188 } 00189 try { 00190 ar & BOOST_SERIALIZATION_NVP(states); 00191 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00192 } 00193 try { 00194 ar & BOOST_SERIALIZATION_NVP(pairs); 00195 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00196 } 00197 try { 00198 ar & BOOST_SERIALIZATION_NVP(disc); 00199 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00200 } 00201 this->post_serialize(ar, version); 00202 } 00203 00204 }; 00205 00206 00207 //+ CLICLASS Ensemble SUPER SampleDistribution [1] 00216 class Ensemble : public SampleDistribution 00217 { 00218 protected: 00220 int M; 00221 00223 vector<int> cnts, mcnt; 00224 00226 int minc; 00227 00229 int maxc; 00230 00232 int N; 00233 00235 00236 00237 int count; 00238 00240 int offset; 00241 00243 int burnIn; 00244 00246 int cur_index; 00247 00249 int ibeg; 00250 00252 int clev; 00253 00255 vector<double> ccum; 00256 00258 vector< pair<double, int> > fraction; 00259 00261 deque<StateData> states; 00262 00264 Uniform * unit; 00265 00267 DiscreteUniform * disc; 00268 00272 bool dimensions_set; 00273 00275 int sampleSubspace(); 00276 00278 void makeSampleFraction(vector<int>&); 00279 00281 bool verbose; 00282 00284 static int instance; 00285 00287 int _id; 00288 00289 public: 00292 00294 static int keep; 00295 00297 static double thresh; 00298 00306 static bool continuous; 00307 00309 static int key_pos; 00310 00312 00313 00314 //+ CLICONSTR 00316 Ensemble(); 00317 00318 //+ CLICONSTR int int 00324 Ensemble(int nmix, int ndim); 00325 00326 //+ CLICONSTR int int int int string int 00336 Ensemble(int nmix, int ndim, 00337 int level, int nburn, string filename, int keypos); 00338 00340 Ensemble(const Ensemble&); 00341 00343 ~Ensemble(); 00344 00345 //+ CLIMETHOD void Reset int int 00347 virtual void Reset(int nmix, int ndim); 00348 00349 //+ CLIMETHOD void Reset int int int int string int 00351 virtual void Reset(int nmix, int ndim, 00352 int level, int nburn, string filename, int keypos); 00353 00354 //+ CLIMETHOD void setDimensions int int 00356 virtual void setDimensions(int nmix, int ndim); 00357 00358 00359 //+ CLIMETHOD void setContinuous 00361 virtual void setContinuous(); 00362 00363 //+ CLIMETHOD void setMaxRange 00365 virtual void setMaxRange(); 00366 00367 //+ CLIMETHOD void setNKeep int 00369 virtual void setNKeep(int n) { keep = n; } 00370 00371 //+ CLIMETHOD void Order int 00376 virtual void Order(int n); 00377 00378 //+ CLIMETHOD void setVerboseOn 00380 virtual void setVerboseOn() { verbose = true; } 00381 00382 //+ CLIMETHOD void setVerboseOff 00384 virtual void setVerboseOff() { verbose = false; } 00385 00387 virtual bool AccumData(double, State&); 00388 00390 virtual bool AccumData(StateData &s) { 00391 return AccumData(s.prob, s.p); 00392 } 00393 00395 virtual bool AccumulateData(double v, RecordBuffer* datapoint) { 00396 cerr << "Not implemented for an Ensemble . . \n"; 00397 return false; 00398 } 00399 00406 virtual void ComputeDistribution() {} 00407 virtual void ComputeDistribution(int n) 00408 { burnIn=n; ComputeDistribution(); } 00409 00416 virtual void stats(int n, double& m, double& s); 00417 00418 virtual int Nstates() { return states.size() + offset; } 00419 00420 virtual double PDFSubspace(int m); 00421 00423 virtual double logPDF(State &p) 00424 { return -INFINITY; } 00425 00432 virtual double logPDFMarginal(int m, int n, vector<double>& V) 00433 { return -INFINITY; } 00434 00436 virtual Ensemble* New() { 00437 return new Ensemble(M, N); 00438 } 00439 00441 virtual vector<double> Mean(int m) 00442 { return vector<double>(N, 0.0); } 00443 00445 virtual vector<double> StdDev(int m) 00446 { return vector<double>(N, 0.0); } 00447 00449 virtual vector<double> StdDev(void) 00450 { return Distribution::StdDev(); } 00451 00453 virtual vector<double> Mean(void) 00454 { return Distribution::Mean(); } 00455 00457 virtual vector<double> Sample(int m) 00458 { return Distribution::Sample(); } 00459 00461 virtual vector<double> Sample() 00462 { return Sample(sampleSubspace()); } 00463 00465 virtual vector<double> Width(int m) 00466 {return vector<double>(N, 0.0); } 00467 00469 virtual vector<double> StdDevMarginal(int m, int n) 00470 { return Distribution::StdDev(); } 00471 00473 virtual vector<double> MeanMarginal(int m, int n) 00474 { return Distribution::Mean(); } 00475 00477 virtual vector<double> SampleMarginal(int m, int n) 00478 { return Distribution::Sample(); } 00479 00481 virtual vector<double> WidthMarginal(int m, int n) 00482 {return vector<double>(N, 0.0); } 00483 00485 virtual void PrintDiag(ostream& out) {} 00486 virtual void PrintDiag(string& outfile) {} 00487 00489 virtual int MinC() { return minc; } 00490 00492 virtual int MaxC() { return maxc; } 00493 00495 virtual void Broadcast(); 00496 00497 // AUTO GENERATED BY ../persistence/autopersist.py 00498 private: 00499 friend class boost::serialization::access; 00500 template<class Archive> 00501 void serialize(Archive & ar, const unsigned int version) { 00502 this->pre_serialize(ar, version); 00503 try { 00504 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(SampleDistribution); 00505 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00506 } 00507 try { 00508 ar & BOOST_SERIALIZATION_NVP(M); 00509 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00510 } 00511 try { 00512 ar & BOOST_SERIALIZATION_NVP(cnts); 00513 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00514 } 00515 try { 00516 ar & BOOST_SERIALIZATION_NVP(mcnt); 00517 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00518 } 00519 try { 00520 ar & BOOST_SERIALIZATION_NVP(minc); 00521 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00522 } 00523 try { 00524 ar & BOOST_SERIALIZATION_NVP(maxc); 00525 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00526 } 00527 try { 00528 ar & BOOST_SERIALIZATION_NVP(N); 00529 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00530 } 00531 try { 00532 ar & BOOST_SERIALIZATION_NVP(count); 00533 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00534 } 00535 try { 00536 ar & BOOST_SERIALIZATION_NVP(offset); 00537 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00538 } 00539 try { 00540 ar & BOOST_SERIALIZATION_NVP(burnIn); 00541 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00542 } 00543 try { 00544 ar & BOOST_SERIALIZATION_NVP(cur_index); 00545 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00546 } 00547 try { 00548 ar & BOOST_SERIALIZATION_NVP(ibeg); 00549 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00550 } 00551 try { 00552 ar & BOOST_SERIALIZATION_NVP(clev); 00553 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00554 } 00555 try { 00556 ar & BOOST_SERIALIZATION_NVP(ccum); 00557 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00558 } 00559 try { 00560 ar & BOOST_SERIALIZATION_NVP(fraction); 00561 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00562 } 00563 try { 00564 ar & BOOST_SERIALIZATION_NVP(states); 00565 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00566 } 00567 try { 00568 ar & BOOST_SERIALIZATION_NVP(unit); 00569 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00570 } 00571 try { 00572 ar & BOOST_SERIALIZATION_NVP(disc); 00573 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00574 } 00575 try { 00576 ar & BOOST_SERIALIZATION_NVP(dimensions_set); 00577 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00578 } 00579 try { 00580 ar & BOOST_SERIALIZATION_NVP(verbose); 00581 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00582 } 00583 try { 00584 ar & BOOST_SERIALIZATION_NVP(instance); 00585 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00586 } 00587 try { 00588 ar & BOOST_SERIALIZATION_NVP(_id); 00589 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00590 } 00591 try { 00592 ar & BOOST_SERIALIZATION_NVP(keep); 00593 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00594 } 00595 try { 00596 ar & BOOST_SERIALIZATION_NVP(thresh); 00597 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00598 } 00599 try { 00600 ar & BOOST_SERIALIZATION_NVP(continuous); 00601 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00602 } 00603 try { 00604 ar & BOOST_SERIALIZATION_NVP(key_pos); 00605 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00606 } 00607 this->post_serialize(ar, version); 00608 } 00609 00610 }; 00611 } // namespace BIE 00612 00613 BIE_CLASS_TYPE_INFO(BIE::StateData) 00614 BIE_CLASS_TYPE_INFO(BIE::PairIndex) 00615 BIE_CLASS_TYPE_INFO(BIE::StateCache) 00616 BIE_CLASS_TYPE_INFO(BIE::Ensemble) 00617 BIE_CLASS_EXPORT_KEY(BIE::StateData) 00618 BIE_CLASS_EXPORT_KEY(BIE::PairIndex) 00619 BIE_CLASS_EXPORT_KEY(BIE::StateCache) 00620 BIE_CLASS_EXPORT_KEY(BIE::Ensemble) 00621 #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
|