BIE |
/home/weinberg/src/BIE/PopModel/PopModelCacheF.h00001 // This is really -*- C++ -*- 00002 00003 #ifndef PopModelCacheF_h 00004 #define PopModelCacheF_h 00005 00006 #include "Serializable.h" 00007 00008 00009 #include <unistd.h> 00010 #include <sys/resource.h> 00011 00012 #include "hash_map.h" 00013 #include <utility> 00014 using namespace std; 00015 00016 00017 #include <gaussQ.h> 00018 #include <Model.h> 00019 #include <Histogram1D.h> 00020 #include <BIEconfig.h> 00021 00022 #include <PopulationsApp.h> 00023 #include <coord.h> 00024 #include <list> 00025 #include <map> 00026 00027 namespace BIE { 00028 00029 typedef vector<double> dvector; 00030 typedef vector<real> rvector; 00031 00032 class PopCacheF; 00033 00034 typedef hashers<coordPair, PopCacheF*, hash<coordPair>, eqcoord>::MapType mmap; 00035 typedef list<PopCacheF*> CacheList; 00036 00037 //+ CLICLASS PopModelCacheF SUPER Model 00045 class PopModelCacheF : public Model 00046 { 00047 public: 00048 00049 //+ CLICONSTR int int int SampleDistribution* PopulationsApp* 00051 PopModelCacheF(int ndim, int mdim, int num, 00052 SampleDistribution *histo, PopulationsApp *Pop); 00053 00055 ~PopModelCacheF(); 00056 00057 //+ CLIMETHOD void SetLineOfSight double double bool 00059 void SetLineOfSight(double rmin, double rmax, bool rlog) 00060 { 00061 RMIN = rmin; 00062 RMAX = rmax; 00063 RLOG = rlog; 00064 } 00065 00066 //+ CLIMETHOD void UseVectorCache 00068 void UseVectorCache() 00069 { 00070 use_vector = true; 00071 } 00072 00073 //+ CLIMETHOD void UseHashCache 00075 void UseHashCache() 00076 { 00077 use_vector = false; 00078 } 00079 00080 //+ CLIMETHOD void SetMagNorm double double 00085 void SetMagNorm(double x, double y) 00086 { 00087 mnorm = x * pow(M_PI/(180.0*60.0*60.0), 2.0); 00088 mback = y; 00089 mm_use = true; 00090 } 00091 00092 //+ CLIMETHOD double GetEMag0 00094 double GetEMag0() 00095 { 00096 return m0flux; 00097 } 00098 00099 //+ CLIMETHOD double GetEMag1 00101 double GetEMag1() 00102 { 00103 return m1flux; 00104 } 00105 00106 //+ CLIMETHOD double GetEMag2 00108 double GetEMag2() 00109 { 00110 return m2flux; 00111 } 00112 00114 00115 00116 void Initialize(State&); 00118 void Initialize(vector<double>& w, vector<double>*& p); 00120 00122 void ResetCache() {} 00123 00125 virtual double NormEval(double x, double y, SampleDistribution *d); 00127 virtual vector<double> Evaluate(double x, double y, SampleDistribution *d); 00128 00130 string ParameterDescription(int i); 00131 00133 int DataDimension() { return Nflux; } 00134 00136 void PrintCache(); 00137 00138 //+ METHOD void SetExtinctionFactor double 00140 void SetExtinctionFactor(double efac) { EFAC = efac; } 00141 00144 00146 static double METAL; 00147 00152 00153 static double ALPHA; 00155 static double BETA; 00157 00159 static double R0; 00160 00162 static double A1; 00163 00165 static double Z1; 00166 00168 static double Z0; 00169 00171 static double EFAC; 00172 00174 static double EMAX; 00175 00177 00178 00179 static bool DELTA; 00181 static double RT0; 00183 static double DRT0; 00185 00187 static int NEBV; 00188 00190 00191 00192 static bool RING; 00194 static double RINGWIDTH; 00196 static double RINGAMP; 00198 static double RINGLOC; 00200 static double CENTERWIDTH; 00202 static double CENTERAMP; 00204 static double NEARBYWIDTH; 00206 static double NEARBYAMP; 00208 00210 static bool RLOG; 00211 00213 static double RMIN; 00214 00216 static double RMAX; 00217 00219 00220 00221 static double AMIN; // Defaults: 0.2 00223 static double AMAX; // 8.0 00225 static double HMIN; // 50.0 00227 static double HMAX; // 1200.0 00229 00231 static BirthRate BRmodel; // Default: Exponential 00232 00234 static double BURST; // Defaults: 0.0 00235 00237 static double NU; // Defaults: 1.0 00238 00240 static string DataDir; // Defaults: "/proj/weinberg/3Mtab"; 00241 00243 static double zerotol; // Defaults: 1.0e-12 00244 00246 static bool use_vector; // Defaults: true 00247 00249 00250 protected: 00251 00253 int NUM; 00254 00256 bool cmd; 00257 00259 PopulationsApp *pops; 00260 00262 00263 00264 static double Log10; 00266 static double onedeg; 00268 00270 pid_t pid; 00271 00273 00274 00275 int nbins; 00277 vector<dvector> lowb; 00279 vector<dvector> highb; 00281 00283 int Nflux; 00284 00285 // Stellar components 00286 // int @autopersist(nparam); 00287 // vector<double> @autopersist(w); 00288 // vector<dvector> @autopersist(pos), @autopersist(sig); 00289 00291 JacoQuad *intgr; 00292 00294 int M; 00295 00297 int Mcur; 00298 00300 int Ndim; 00301 00303 vector<double> wt; 00305 vector<double> *pt; 00307 vector<double> work; 00308 00310 virtual PopCacheF* generate(const coordPair& P, SampleDistribution *d); 00312 virtual PopCacheF* compute_bins(const coordPair& P, SampleDistribution *d); 00313 00315 bool good_bounds; 00317 void check_bounds(); 00318 00320 mmap cache; 00322 CacheList cachelist; 00324 coordPair lastP; 00326 int nages; 00328 vector<double> ages; 00330 vector<double> popweight; 00331 00333 vector<bool> marge; 00334 00336 00337 00338 unsigned maxvmsize; 00340 unsigned vmsize; 00342 unsigned max_element; 00344 00346 EvalType type; 00347 00349 00350 00351 double m0flux; 00353 double m1flux; 00355 double m2flux; 00357 double mmean; 00359 double mmean2; 00361 double mavg; 00363 double mnorm; 00365 double mback; 00367 void compute_mm(); 00369 double mm_fraction(double mm); 00371 bool mm_computed; 00373 bool mm_use; 00375 00376 // AUTO GENERATED BY ../persistence/autopersist.py 00377 protected: 00378 PopModelCacheF() {} 00379 private: 00380 friend class boost::serialization::access; 00381 template<class Archive> 00382 void serialize(Archive & ar, const unsigned int version) { 00383 this->pre_serialize(ar, version); 00384 try { 00385 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Model); 00386 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00387 } 00388 try { 00389 ar & BOOST_SERIALIZATION_NVP(METAL); 00390 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00391 } 00392 try { 00393 ar & BOOST_SERIALIZATION_NVP(ALPHA); 00394 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00395 } 00396 try { 00397 ar & BOOST_SERIALIZATION_NVP(BETA); 00398 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00399 } 00400 try { 00401 ar & BOOST_SERIALIZATION_NVP(R0); 00402 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00403 } 00404 try { 00405 ar & BOOST_SERIALIZATION_NVP(A1); 00406 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00407 } 00408 try { 00409 ar & BOOST_SERIALIZATION_NVP(Z1); 00410 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00411 } 00412 try { 00413 ar & BOOST_SERIALIZATION_NVP(Z0); 00414 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00415 } 00416 try { 00417 ar & BOOST_SERIALIZATION_NVP(EFAC); 00418 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00419 } 00420 try { 00421 ar & BOOST_SERIALIZATION_NVP(EMAX); 00422 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00423 } 00424 try { 00425 ar & BOOST_SERIALIZATION_NVP(DELTA); 00426 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00427 } 00428 try { 00429 ar & BOOST_SERIALIZATION_NVP(RT0); 00430 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00431 } 00432 try { 00433 ar & BOOST_SERIALIZATION_NVP(DRT0); 00434 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00435 } 00436 try { 00437 ar & BOOST_SERIALIZATION_NVP(NEBV); 00438 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00439 } 00440 try { 00441 ar & BOOST_SERIALIZATION_NVP(RING); 00442 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00443 } 00444 try { 00445 ar & BOOST_SERIALIZATION_NVP(RINGWIDTH); 00446 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00447 } 00448 try { 00449 ar & BOOST_SERIALIZATION_NVP(RINGAMP); 00450 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00451 } 00452 try { 00453 ar & BOOST_SERIALIZATION_NVP(RINGLOC); 00454 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00455 } 00456 try { 00457 ar & BOOST_SERIALIZATION_NVP(CENTERWIDTH); 00458 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00459 } 00460 try { 00461 ar & BOOST_SERIALIZATION_NVP(CENTERAMP); 00462 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00463 } 00464 try { 00465 ar & BOOST_SERIALIZATION_NVP(NEARBYWIDTH); 00466 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00467 } 00468 try { 00469 ar & BOOST_SERIALIZATION_NVP(NEARBYAMP); 00470 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00471 } 00472 try { 00473 ar & BOOST_SERIALIZATION_NVP(RLOG); 00474 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00475 } 00476 try { 00477 ar & BOOST_SERIALIZATION_NVP(RMIN); 00478 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00479 } 00480 try { 00481 ar & BOOST_SERIALIZATION_NVP(RMAX); 00482 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00483 } 00484 try { 00485 ar & BOOST_SERIALIZATION_NVP(AMIN); 00486 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00487 } 00488 try { 00489 ar & BOOST_SERIALIZATION_NVP(AMAX); 00490 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00491 } 00492 try { 00493 ar & BOOST_SERIALIZATION_NVP(HMIN); 00494 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00495 } 00496 try { 00497 ar & BOOST_SERIALIZATION_NVP(HMAX); 00498 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00499 } 00500 try { 00501 ar & BOOST_SERIALIZATION_NVP(BRmodel); 00502 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00503 } 00504 try { 00505 ar & BOOST_SERIALIZATION_NVP(BURST); 00506 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00507 } 00508 try { 00509 ar & BOOST_SERIALIZATION_NVP(NU); 00510 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00511 } 00512 try { 00513 ar & BOOST_SERIALIZATION_NVP(DataDir); 00514 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00515 } 00516 try { 00517 ar & BOOST_SERIALIZATION_NVP(zerotol); 00518 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00519 } 00520 try { 00521 ar & BOOST_SERIALIZATION_NVP(use_vector); 00522 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00523 } 00524 try { 00525 ar & BOOST_SERIALIZATION_NVP(NUM); 00526 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00527 } 00528 try { 00529 ar & BOOST_SERIALIZATION_NVP(cmd); 00530 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00531 } 00532 try { 00533 ar & BOOST_SERIALIZATION_NVP(pops); 00534 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00535 } 00536 try { 00537 ar & BOOST_SERIALIZATION_NVP(Log10); 00538 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00539 } 00540 try { 00541 ar & BOOST_SERIALIZATION_NVP(onedeg); 00542 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00543 } 00544 try { 00545 ar & BOOST_SERIALIZATION_NVP(pid); 00546 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00547 } 00548 try { 00549 ar & BOOST_SERIALIZATION_NVP(nbins); 00550 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00551 } 00552 try { 00553 ar & BOOST_SERIALIZATION_NVP(lowb); 00554 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00555 } 00556 try { 00557 ar & BOOST_SERIALIZATION_NVP(highb); 00558 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00559 } 00560 try { 00561 ar & BOOST_SERIALIZATION_NVP(Nflux); 00562 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00563 } 00564 try { 00565 ar & BOOST_SERIALIZATION_NVP(intgr); 00566 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00567 } 00568 try { 00569 ar & BOOST_SERIALIZATION_NVP(M); 00570 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00571 } 00572 try { 00573 ar & BOOST_SERIALIZATION_NVP(Mcur); 00574 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00575 } 00576 try { 00577 ar & BOOST_SERIALIZATION_NVP(Ndim); 00578 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00579 } 00580 try { 00581 ar & BOOST_SERIALIZATION_NVP(wt); 00582 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00583 } 00584 try { 00585 ar & BOOST_SERIALIZATION_NVP(pt); 00586 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00587 } 00588 try { 00589 ar & BOOST_SERIALIZATION_NVP(work); 00590 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00591 } 00592 try { 00593 ar & BOOST_SERIALIZATION_NVP(good_bounds); 00594 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00595 } 00596 try { 00597 ar & BOOST_SERIALIZATION_NVP(cache); 00598 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00599 } 00600 try { 00601 ar & BOOST_SERIALIZATION_NVP(cachelist); 00602 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00603 } 00604 try { 00605 ar & BOOST_SERIALIZATION_NVP(lastP); 00606 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00607 } 00608 try { 00609 ar & BOOST_SERIALIZATION_NVP(nages); 00610 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00611 } 00612 try { 00613 ar & BOOST_SERIALIZATION_NVP(ages); 00614 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00615 } 00616 try { 00617 ar & BOOST_SERIALIZATION_NVP(popweight); 00618 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00619 } 00620 try { 00621 ar & BOOST_SERIALIZATION_NVP(marge); 00622 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00623 } 00624 try { 00625 ar & BOOST_SERIALIZATION_NVP(maxvmsize); 00626 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00627 } 00628 try { 00629 ar & BOOST_SERIALIZATION_NVP(vmsize); 00630 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00631 } 00632 try { 00633 ar & BOOST_SERIALIZATION_NVP(max_element); 00634 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00635 } 00636 try { 00637 ar & BOOST_SERIALIZATION_NVP(type); 00638 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00639 } 00640 try { 00641 ar & BOOST_SERIALIZATION_NVP(m0flux); 00642 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00643 } 00644 try { 00645 ar & BOOST_SERIALIZATION_NVP(m1flux); 00646 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00647 } 00648 try { 00649 ar & BOOST_SERIALIZATION_NVP(m2flux); 00650 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00651 } 00652 try { 00653 ar & BOOST_SERIALIZATION_NVP(mmean); 00654 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00655 } 00656 try { 00657 ar & BOOST_SERIALIZATION_NVP(mmean2); 00658 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00659 } 00660 try { 00661 ar & BOOST_SERIALIZATION_NVP(mavg); 00662 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00663 } 00664 try { 00665 ar & BOOST_SERIALIZATION_NVP(mnorm); 00666 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00667 } 00668 try { 00669 ar & BOOST_SERIALIZATION_NVP(mback); 00670 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00671 } 00672 try { 00673 ar & BOOST_SERIALIZATION_NVP(mm_computed); 00674 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00675 } 00676 try { 00677 ar & BOOST_SERIALIZATION_NVP(mm_use); 00678 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00679 } 00680 this->post_serialize(ar, version); 00681 } 00682 00683 }; 00684 00686 class PopCacheF: public Serializable 00687 { 00688 public: 00689 00691 double L; 00693 double B; 00695 00696 00697 vector<real> R; 00699 vector<real> z; 00701 vector<real> s; 00703 vector<real> mm0; 00705 vector<real> mm1; 00707 vector<real> dm; 00709 00711 list<PopCacheF*>::iterator it; 00712 00714 00715 00716 map<int, double, less<int> > bins_map; 00718 vector<real> bins; 00720 void reset_bin(void); 00722 double bin(int j); 00724 00726 00727 00728 map<int, double, less<int> > bins1_map; 00730 vector<real> bins1; 00732 void reset_bin1(void); 00734 double bin1(int j); 00736 00738 PopCacheF(double ll, double bb) { 00739 L = ll; 00740 B = bb; 00741 } 00742 00743 // AUTO GENERATED BY ../persistence/autopersist.py 00744 protected: 00745 PopCacheF() {} 00746 private: 00747 friend class boost::serialization::access; 00748 template<class Archive> 00749 void serialize(Archive & ar, const unsigned int version) { 00750 this->pre_serialize(ar, version); 00751 try { 00752 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Serializable); 00753 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00754 } 00755 try { 00756 ar & BOOST_SERIALIZATION_NVP(L); 00757 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00758 } 00759 try { 00760 ar & BOOST_SERIALIZATION_NVP(B); 00761 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00762 } 00763 try { 00764 ar & BOOST_SERIALIZATION_NVP(R); 00765 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00766 } 00767 try { 00768 ar & BOOST_SERIALIZATION_NVP(z); 00769 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00770 } 00771 try { 00772 ar & BOOST_SERIALIZATION_NVP(s); 00773 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00774 } 00775 try { 00776 ar & BOOST_SERIALIZATION_NVP(mm0); 00777 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00778 } 00779 try { 00780 ar & BOOST_SERIALIZATION_NVP(mm1); 00781 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00782 } 00783 try { 00784 ar & BOOST_SERIALIZATION_NVP(dm); 00785 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00786 } 00787 try { 00788 ar & BOOST_SERIALIZATION_NVP(bins_map); 00789 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00790 } 00791 try { 00792 ar & BOOST_SERIALIZATION_NVP(bins); 00793 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00794 } 00795 try { 00796 ar & BOOST_SERIALIZATION_NVP(bins1_map); 00797 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00798 } 00799 try { 00800 ar & BOOST_SERIALIZATION_NVP(bins1); 00801 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00802 } 00803 this->post_serialize(ar, version); 00804 } 00805 00806 }; 00807 00808 } 00809 00810 BIE_CLASS_TYPE_INFO(BIE::PopModelCacheF) 00811 BIE_CLASS_TYPE_INFO(BIE::PopCacheF) 00812 BIE_CLASS_EXPORT_KEY(BIE::PopModelCacheF) 00813 BIE_CLASS_EXPORT_KEY(BIE::PopCacheF) 00814 #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
|