BIE |
/home/weinberg/src/BIE/PopModel/CMDModelCache.h00001 // This is really -*- C++ -*- 00002 00003 00004 #ifndef _CMDModelCache_h 00005 #define _CMDModelCache_h 00006 00007 00008 #include "Serializable.h" 00009 00010 00011 #include <utility> 00012 using namespace std; 00013 00014 #include <boost/serialization/slist.hpp> 00015 #include "hash_map.h" 00016 00017 #include <gaussQ.h> 00018 #include <Model.h> 00019 #include <Histogram1D.h> 00020 #include <BIEconfig.h> 00021 00022 #include <coord.h> 00023 #include <CMD.h> 00024 #include <SFDS.H> 00025 00026 namespace BIE { 00027 00028 typedef vector<double> dvector; 00029 typedef vector<int> ivector; 00030 00031 class CMDCache; 00032 00033 typedef hashers<coordPair, CMDCache*, hash<coordPair>, eqcoord>::MapType mmapCMD; 00034 00035 //+ CLICLASS CMDModelCache SUPER Model 00061 class CMDModelCache : public Model 00062 { 00063 public: 00064 00066 //+ CLICONSTR int SampleDistribution* CMD* 00067 CMDModelCache(int ndim, SampleDistribution *dist, CMD *cmd); 00068 00070 ~CMDModelCache(); 00071 00072 //+ CLIMETHOD void SetKnots int 00074 void SetKnots(int num) 00075 { 00076 NUM = num; 00077 delete intgr; 00078 intgr = new JacoQuad(NUM, ALPHA, BETA); 00079 } 00080 00081 //+ CLIMETHOD void SetDataDir string 00083 void SetDataDir(string datadir) 00084 { 00085 DataDir = datadir; 00086 } 00087 00089 00090 00091 void Initialize(State&); 00093 void Initialize(vector<double>& w, vector<double>*& p); 00095 00097 void ResetCache() {} 00098 00100 virtual double NormEval(double x, double y, SampleDistribution *d); 00101 00103 virtual vector<double> Evaluate(double x, double y, SampleDistribution *d); 00104 00106 string ParameterDescription(int i); 00107 00109 int DataDimension() { return Nflux; } 00110 00112 void PrintCache(); 00113 00115 //+ METHOD void SetExtinctionFactor double 00116 void SetExtinctionFactor(double efac) { EFAC = efac; } 00117 00120 00122 static int NUM; 00123 00125 static double METAL; 00126 00128 static double ALPHA; 00129 static double BETA; 00130 00132 static double R0; 00133 00135 static double Z0; 00136 00138 static double EFAC; 00139 00141 static bool RLOG; 00142 00144 static double RMIN; 00145 00147 static double RMAX; 00148 00150 00151 00152 static double AMIN; // Defaults: 0.2 00154 static double AMAX; // 8.0 00156 static double HMIN; // 50.0 00158 static double HMAX; // 1200.0 00160 static double QMIN; // 0.0 00162 static double QMAX; // 1.0 00164 00165 00167 static double CUTOFF; // Defaults: 5.0 00168 00170 static string DataDir; // Defaults: "/proj/weinberg/3Mtab"; 00171 00173 static double zerotol; // Defaults: 1.0e-12 00174 00176 static double minval; // Defaults: 1.0e-8 00177 00179 00180 protected: 00181 00183 void NormalizePopWeights(vector<double>*& p); 00185 void NormalizePopWeights(State& s); 00186 00188 CMD *cmd; 00189 00191 SFDS *sfd; 00192 00194 00195 00196 static double Log10; 00198 static double onedeg; 00200 00202 00203 00204 int nbins; 00206 vector<dvector> lowb; 00208 vector<dvector> highb; 00210 00212 int Nflux; 00213 00215 00216 // int @autopersist(nparam); 00217 // vector<double> @autopersist(w); 00218 // vector<dvector> @autopersist(pos); 00219 // vector<dvector> @autopersist(sig); 00221 00223 JacoQuad *intgr; 00224 00226 int Ndim; 00227 00229 vector<double> pt; 00231 vector<double> work; 00232 00234 virtual CMDCache* generate(const coordPair& P, SampleDistribution *d); 00235 00237 virtual CMDCache* compute_bins(const coordPair& P, SampleDistribution *d); 00238 00240 bool good_bounds; 00241 00243 void check_bounds(); 00244 00246 mmapCMD cache; 00247 00249 coordPair lastP; 00250 00252 CMDCache *lastC; 00253 00255 vector<ivector> marge; 00256 00258 EvalType type; 00259 00260 // AUTO GENERATED BY ../persistence/autopersist.py 00261 protected: 00262 CMDModelCache() {} 00263 private: 00264 friend class boost::serialization::access; 00265 template<class Archive> 00266 void serialize(Archive & ar, const unsigned int version) { 00267 this->pre_serialize(ar, version); 00268 try { 00269 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Model); 00270 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00271 } 00272 try { 00273 ar & BOOST_SERIALIZATION_NVP(NUM); 00274 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00275 } 00276 try { 00277 ar & BOOST_SERIALIZATION_NVP(METAL); 00278 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00279 } 00280 try { 00281 ar & BOOST_SERIALIZATION_NVP(ALPHA); 00282 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00283 } 00284 try { 00285 ar & BOOST_SERIALIZATION_NVP(BETA); 00286 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00287 } 00288 try { 00289 ar & BOOST_SERIALIZATION_NVP(R0); 00290 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00291 } 00292 try { 00293 ar & BOOST_SERIALIZATION_NVP(Z0); 00294 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00295 } 00296 try { 00297 ar & BOOST_SERIALIZATION_NVP(EFAC); 00298 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00299 } 00300 try { 00301 ar & BOOST_SERIALIZATION_NVP(RLOG); 00302 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00303 } 00304 try { 00305 ar & BOOST_SERIALIZATION_NVP(RMIN); 00306 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00307 } 00308 try { 00309 ar & BOOST_SERIALIZATION_NVP(RMAX); 00310 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00311 } 00312 try { 00313 ar & BOOST_SERIALIZATION_NVP(AMIN); 00314 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00315 } 00316 try { 00317 ar & BOOST_SERIALIZATION_NVP(AMAX); 00318 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00319 } 00320 try { 00321 ar & BOOST_SERIALIZATION_NVP(HMIN); 00322 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00323 } 00324 try { 00325 ar & BOOST_SERIALIZATION_NVP(HMAX); 00326 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00327 } 00328 try { 00329 ar & BOOST_SERIALIZATION_NVP(QMIN); 00330 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00331 } 00332 try { 00333 ar & BOOST_SERIALIZATION_NVP(QMAX); 00334 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00335 } 00336 try { 00337 ar & BOOST_SERIALIZATION_NVP(CUTOFF); 00338 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00339 } 00340 try { 00341 ar & BOOST_SERIALIZATION_NVP(DataDir); 00342 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00343 } 00344 try { 00345 ar & BOOST_SERIALIZATION_NVP(zerotol); 00346 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00347 } 00348 try { 00349 ar & BOOST_SERIALIZATION_NVP(minval); 00350 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00351 } 00352 try { 00353 ar & BOOST_SERIALIZATION_NVP(cmd); 00354 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00355 } 00356 try { 00357 ar & BOOST_SERIALIZATION_NVP(sfd); 00358 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00359 } 00360 try { 00361 ar & BOOST_SERIALIZATION_NVP(Log10); 00362 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00363 } 00364 try { 00365 ar & BOOST_SERIALIZATION_NVP(onedeg); 00366 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00367 } 00368 try { 00369 ar & BOOST_SERIALIZATION_NVP(lowb); 00370 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00371 } 00372 try { 00373 ar & BOOST_SERIALIZATION_NVP(highb); 00374 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00375 } 00376 try { 00377 ar & BOOST_SERIALIZATION_NVP(Nflux); 00378 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00379 } 00380 try { 00381 ar & BOOST_SERIALIZATION_NVP(intgr); 00382 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00383 } 00384 try { 00385 ar & BOOST_SERIALIZATION_NVP(Ndim); 00386 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00387 } 00388 try { 00389 ar & BOOST_SERIALIZATION_NVP(pt); 00390 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00391 } 00392 try { 00393 ar & BOOST_SERIALIZATION_NVP(work); 00394 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00395 } 00396 try { 00397 ar & BOOST_SERIALIZATION_NVP(good_bounds); 00398 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00399 } 00400 try { 00401 ar & BOOST_SERIALIZATION_NVP(cache); 00402 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00403 } 00404 try { 00405 ar & BOOST_SERIALIZATION_NVP(lastP); 00406 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00407 } 00408 try { 00409 ar & BOOST_SERIALIZATION_NVP(lastC); 00410 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00411 } 00412 try { 00413 ar & BOOST_SERIALIZATION_NVP(marge); 00414 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00415 } 00416 try { 00417 ar & BOOST_SERIALIZATION_NVP(type); 00418 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00419 } 00420 this->post_serialize(ar, version); 00421 } 00422 00423 }; 00424 00426 class CMDCache: public Serializable 00427 { 00428 00429 typedef pair<int, double> CMDCacheData; 00430 00431 public: 00432 00434 double L; 00435 00437 double B; 00438 00440 double norm; 00441 00443 00444 00445 vector<real> R; 00447 vector<real> z; 00449 vector<real> cos2; 00451 vector<real> sin2; 00453 00455 00456 00457 list<CMDCacheData> bins; 00459 list<CMDCacheData>::iterator pbin; 00461 void erase_bin(void); 00463 void reset_bin(void); 00465 void add_bin(int i, double x); 00467 double get_bin(int); 00469 00471 00472 00473 list<CMDCacheData> bins1; 00475 list<CMDCacheData>::iterator pbin1; 00477 void erase_bin1(void); 00479 void reset_bin1(void); 00481 void add_bin1(int i, double x); 00483 double get_bin1(int); 00485 00487 CMDCacheData pdata; 00488 00489 00491 CMDCache(double ll, double bb) { 00492 L = ll; 00493 B = bb; 00494 00495 erase_bin1(); 00496 erase_bin(); 00497 } 00498 00499 // AUTO GENERATED BY ../persistence/autopersist.py 00500 protected: 00501 CMDCache() {} 00502 private: 00503 friend class boost::serialization::access; 00504 template<class Archive> 00505 void serialize(Archive & ar, const unsigned int version) { 00506 this->pre_serialize(ar, version); 00507 try { 00508 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Serializable); 00509 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00510 } 00511 try { 00512 ar & BOOST_SERIALIZATION_NVP(L); 00513 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00514 } 00515 try { 00516 ar & BOOST_SERIALIZATION_NVP(B); 00517 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00518 } 00519 try { 00520 ar & BOOST_SERIALIZATION_NVP(norm); 00521 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00522 } 00523 try { 00524 ar & BOOST_SERIALIZATION_NVP(R); 00525 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00526 } 00527 try { 00528 ar & BOOST_SERIALIZATION_NVP(z); 00529 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00530 } 00531 try { 00532 ar & BOOST_SERIALIZATION_NVP(cos2); 00533 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00534 } 00535 try { 00536 ar & BOOST_SERIALIZATION_NVP(sin2); 00537 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00538 } 00539 try { 00540 ar & BOOST_SERIALIZATION_NVP(bins); 00541 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00542 } 00543 try { 00544 ar & BOOST_SERIALIZATION_NVP(bins1); 00545 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00546 } 00547 this->post_serialize(ar, version); 00548 } 00549 00550 }; 00551 } 00552 00553 BIE_CLASS_TYPE_INFO(BIE::CMDModelCache) 00554 BIE_CLASS_TYPE_INFO(BIE::CMDCache) 00555 BIE_CLASS_EXPORT_KEY(BIE::CMDModelCache) 00556 BIE_CLASS_EXPORT_KEY(BIE::CMDCache) 00557 #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
|