BIE |
/home/weinberg/src/BIE/PopModel/PopModelCacheJMC.h00001 // This may look like C code, but it is really -*- C++ -*- 00002 // $Id: PopModelCacheJMC.h 1542 2006-04-17 21:00:59Z weinberg $ 00003 00004 00005 #ifndef PopModelCacheJMC_h 00006 #define PopModelCacheJMC_h 00007 00008 #include <gaussQ.h> 00009 #include <Model.h> 00010 #include <Histogram1D.h> 00011 #include <BIEconfig.h> 00012 00013 #include <ModelPops.h> 00014 00015 #include "Serializable.h" 00016 00017 00018 namespace BIE { 00019 00020 typedef vector<double> dvector; 00021 typedef vector<real> rvector; 00022 typedef uint64_t key_type; 00023 00024 00026 class PopCacheJMC: public Serializable 00027 { 00028 00029 public: 00030 00032 double L, B; 00033 00035 key_type key; 00036 00038 00039 vector<real> bins, R, z, fac, dmod; 00040 vector<rvector> ext; 00042 00044 PopCacheJMC() {} 00045 00047 PopCacheJMC(double ll, double bb, key_type kk) { 00048 L = ll; 00049 B = bb; 00050 key = kk; 00051 } 00052 00053 // AUTO GENERATED BY ../persistence/autopersist.py 00054 private: 00055 friend class boost::serialization::access; 00056 template<class Archive> 00057 void serialize(Archive & ar, const unsigned int version) { 00058 this->pre_serialize(ar, version); 00059 try { 00060 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Serializable); 00061 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00062 } 00063 try { 00064 ar & BOOST_SERIALIZATION_NVP(L); 00065 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00066 } 00067 try { 00068 ar & BOOST_SERIALIZATION_NVP(B); 00069 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00070 } 00071 try { 00072 ar & BOOST_SERIALIZATION_NVP(key); 00073 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00074 } 00075 try { 00076 ar & BOOST_SERIALIZATION_NVP(bins); 00077 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00078 } 00079 try { 00080 ar & BOOST_SERIALIZATION_NVP(R); 00081 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00082 } 00083 try { 00084 ar & BOOST_SERIALIZATION_NVP(z); 00085 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00086 } 00087 try { 00088 ar & BOOST_SERIALIZATION_NVP(fac); 00089 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00090 } 00091 try { 00092 ar & BOOST_SERIALIZATION_NVP(dmod); 00093 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00094 } 00095 try { 00096 ar & BOOST_SERIALIZATION_NVP(ext); 00097 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00098 } 00099 this->post_serialize(ar, version); 00100 } 00101 00102 }; 00103 00104 00105 //+ CLICLASS PopModelCacheJMC SUPER Model 00109 class PopModelCacheJMC : public Model 00110 { 00111 typedef uint64_t key_type; 00112 typedef map<key_type, PopCacheJMC*> cache_map; 00113 typedef map<key_type, PopCacheJMC*>::iterator cache_iter; 00114 00115 public: 00116 00118 PopModelCacheJMC() { intgr=0; pops=0; } 00119 00120 //+ CLICONSTR int int SampleDistribution* 00122 PopModelCacheJMC(int ndim, int mdim, SampleDistribution *dist); 00123 //+ CLICONSTR float float float float float float int int int int int SampleDistribution* 00125 PopModelCacheJMC(float jmin, float jmax, float kmin, float kmax, float jkmin, float jkmax, 00126 int j, int k, int jk, int ndim, int mdim, SampleDistribution *dist); 00127 00129 ~PopModelCacheJMC(); 00130 00131 //+ CLIMETHOD void SetKnots int 00133 void SetKnots(int num) 00134 { 00135 NUM = num; 00136 delete intgr; 00137 intgr = new JacoQuad(NUM, ALPHA, BETA); 00138 } 00139 00141 00142 void Initialize(State&); 00143 void Initialize(vector<double>& w, vector<double>*& p); 00145 00147 void reset(float jmin, float jmax, float kmin, float kmax, float jkmin, float jkmax); 00148 00150 virtual double NormEval(double x, double y, SampleDistribution *d); 00151 00153 virtual vector<double> Evaluate(double x, double y, SampleDistribution *d); 00154 00156 string ParameterDescription(int i); 00157 00159 int DataDimension() { return 1; } 00160 00161 00164 00166 static int NUM; 00167 00169 static double METAL; 00170 00172 00173 static double ALPHA; 00174 static double BETA; 00176 00178 static double R0; 00179 00181 static double A1; 00182 00184 static double Z1; 00185 00187 static double Z0; 00188 00190 static double EFAC; 00191 00193 00194 static bool RING; 00195 static double RINGWIDTH; 00196 static double RINGAMP; 00197 static double RINGLOC; 00198 static double CENTERWIDTH; 00199 static double CENTERAMP; 00200 static double NEARBYWIDTH; 00201 static double NEARBYAMP; 00203 00205 static double EXTRAD; 00206 00208 static double RMIN; 00209 00211 static double RMAX; 00212 00214 static bool RLOG; 00215 00217 00218 static double AMIN; // Defaults: 0.2 00219 static double AMAX; // 8.0 00220 static double HMIN; // 50.0 00221 static double HMAX; // 1200.0 00223 00225 //static BirthRate Model; // Default: Exponential 00226 00228 static double BURST; // Defaults: 0.0 00229 00231 static double NU; // Defaults: 1.0 00232 00234 static string DataDir; // Defaults: "/proj/weinberg/3Mtab"; 00235 00237 static unsigned maxCache; // Default: 20000 00239 00240 protected: 00241 00243 key_type key_convert(double L, double B) 00244 { 00245 const double prec = 1.0e-5; 00246 union conv { 00247 float f[2]; 00248 key_type i; 00249 } x; 00250 00251 x.f[0] = static_cast<float>(prec*floor(L/prec)); 00252 x.f[1] = static_cast<float>(prec*floor(B/prec)); 00253 00254 return x.i; 00255 } 00256 00258 bool getCacheElement(double L, double B); 00259 00261 00262 static double Log10; 00263 static double onedeg; 00265 00267 ModelPops * pops; 00268 00270 00271 int nbins; 00272 vector<dvector> lowb, highb; 00274 00276 vector<double> flux; 00277 00279 int Nflux; 00280 00282 00283 int nparam; 00284 vector<double> w; 00285 vector<dvector> pos, sig; 00287 00289 JacoQuad * intgr; 00290 00292 int M, Mcur; 00293 00295 00296 int Ndim; 00297 vector<double> wt; 00298 vector<dvector> pt; 00299 vector<double> work; 00301 00302 00304 virtual void generate(double L, double B); 00306 virtual void compute_bins(SampleDistribution *sd); 00307 00309 bool good_bounds; 00311 void check_bounds(); 00312 00314 00315 00316 cache_map cache; 00318 deque<PopCacheJMC*> fifo; 00320 PopCacheJMC* curElem; 00322 00324 EvalType type; 00325 00326 // AUTO GENERATED BY ../persistence/autopersist.py 00327 private: 00328 friend class boost::serialization::access; 00329 template<class Archive> 00330 void serialize(Archive & ar, const unsigned int version) { 00331 this->pre_serialize(ar, version); 00332 try { 00333 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Model); 00334 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00335 } 00336 try { 00337 ar & BOOST_SERIALIZATION_NVP(NUM); 00338 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00339 } 00340 try { 00341 ar & BOOST_SERIALIZATION_NVP(METAL); 00342 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00343 } 00344 try { 00345 ar & BOOST_SERIALIZATION_NVP(ALPHA); 00346 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00347 } 00348 try { 00349 ar & BOOST_SERIALIZATION_NVP(BETA); 00350 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00351 } 00352 try { 00353 ar & BOOST_SERIALIZATION_NVP(R0); 00354 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00355 } 00356 try { 00357 ar & BOOST_SERIALIZATION_NVP(A1); 00358 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00359 } 00360 try { 00361 ar & BOOST_SERIALIZATION_NVP(Z1); 00362 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00363 } 00364 try { 00365 ar & BOOST_SERIALIZATION_NVP(Z0); 00366 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00367 } 00368 try { 00369 ar & BOOST_SERIALIZATION_NVP(EFAC); 00370 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00371 } 00372 try { 00373 ar & BOOST_SERIALIZATION_NVP(RING); 00374 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00375 } 00376 try { 00377 ar & BOOST_SERIALIZATION_NVP(RINGWIDTH); 00378 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00379 } 00380 try { 00381 ar & BOOST_SERIALIZATION_NVP(RINGAMP); 00382 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00383 } 00384 try { 00385 ar & BOOST_SERIALIZATION_NVP(RINGLOC); 00386 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00387 } 00388 try { 00389 ar & BOOST_SERIALIZATION_NVP(CENTERWIDTH); 00390 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00391 } 00392 try { 00393 ar & BOOST_SERIALIZATION_NVP(CENTERAMP); 00394 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00395 } 00396 try { 00397 ar & BOOST_SERIALIZATION_NVP(NEARBYWIDTH); 00398 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00399 } 00400 try { 00401 ar & BOOST_SERIALIZATION_NVP(NEARBYAMP); 00402 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00403 } 00404 try { 00405 ar & BOOST_SERIALIZATION_NVP(EXTRAD); 00406 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00407 } 00408 try { 00409 ar & BOOST_SERIALIZATION_NVP(RMIN); 00410 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00411 } 00412 try { 00413 ar & BOOST_SERIALIZATION_NVP(RMAX); 00414 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00415 } 00416 try { 00417 ar & BOOST_SERIALIZATION_NVP(RLOG); 00418 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00419 } 00420 try { 00421 ar & BOOST_SERIALIZATION_NVP(AMIN); 00422 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00423 } 00424 try { 00425 ar & BOOST_SERIALIZATION_NVP(AMAX); 00426 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00427 } 00428 try { 00429 ar & BOOST_SERIALIZATION_NVP(HMIN); 00430 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00431 } 00432 try { 00433 ar & BOOST_SERIALIZATION_NVP(HMAX); 00434 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00435 } 00436 try { 00437 ar & BOOST_SERIALIZATION_NVP(BURST); 00438 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00439 } 00440 try { 00441 ar & BOOST_SERIALIZATION_NVP(NU); 00442 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00443 } 00444 try { 00445 ar & BOOST_SERIALIZATION_NVP(DataDir); 00446 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00447 } 00448 try { 00449 ar & BOOST_SERIALIZATION_NVP(maxCache); 00450 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00451 } 00452 try { 00453 ar & BOOST_SERIALIZATION_NVP(Log10); 00454 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00455 } 00456 try { 00457 ar & BOOST_SERIALIZATION_NVP(onedeg); 00458 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00459 } 00460 try { 00461 ar & BOOST_SERIALIZATION_NVP(pops); 00462 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00463 } 00464 try { 00465 ar & BOOST_SERIALIZATION_NVP(nbins); 00466 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00467 } 00468 try { 00469 ar & BOOST_SERIALIZATION_NVP(lowb); 00470 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00471 } 00472 try { 00473 ar & BOOST_SERIALIZATION_NVP(highb); 00474 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00475 } 00476 try { 00477 ar & BOOST_SERIALIZATION_NVP(flux); 00478 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00479 } 00480 try { 00481 ar & BOOST_SERIALIZATION_NVP(Nflux); 00482 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00483 } 00484 try { 00485 ar & BOOST_SERIALIZATION_NVP(nparam); 00486 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00487 } 00488 try { 00489 ar & BOOST_SERIALIZATION_NVP(w); 00490 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00491 } 00492 try { 00493 ar & BOOST_SERIALIZATION_NVP(pos); 00494 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00495 } 00496 try { 00497 ar & BOOST_SERIALIZATION_NVP(sig); 00498 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00499 } 00500 try { 00501 ar & BOOST_SERIALIZATION_NVP(intgr); 00502 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00503 } 00504 try { 00505 ar & BOOST_SERIALIZATION_NVP(M); 00506 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00507 } 00508 try { 00509 ar & BOOST_SERIALIZATION_NVP(Mcur); 00510 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00511 } 00512 try { 00513 ar & BOOST_SERIALIZATION_NVP(Ndim); 00514 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00515 } 00516 try { 00517 ar & BOOST_SERIALIZATION_NVP(wt); 00518 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00519 } 00520 try { 00521 ar & BOOST_SERIALIZATION_NVP(pt); 00522 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00523 } 00524 try { 00525 ar & BOOST_SERIALIZATION_NVP(work); 00526 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00527 } 00528 try { 00529 ar & BOOST_SERIALIZATION_NVP(good_bounds); 00530 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00531 } 00532 try { 00533 ar & BOOST_SERIALIZATION_NVP(cache); 00534 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00535 } 00536 try { 00537 ar & BOOST_SERIALIZATION_NVP(fifo); 00538 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00539 } 00540 try { 00541 ar & BOOST_SERIALIZATION_NVP(type); 00542 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00543 } 00544 this->post_serialize(ar, version); 00545 } 00546 00547 }; 00548 00549 } 00550 00551 BIE_CLASS_TYPE_INFO(BIE::PopCacheJMC) 00552 BIE_CLASS_TYPE_INFO(BIE::PopModelCacheJMC) 00553 BIE_CLASS_EXPORT_KEY(BIE::PopCacheJMC) 00554 BIE_CLASS_EXPORT_KEY(BIE::PopModelCacheJMC) 00555 #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
|