BIE |
/home/weinberg/src/BIE/PopModel/ModelPops.h00001 // This is really -*- C++ -*- 00002 00022 00023 #ifndef ModelPops_h 00024 #define ModelPops_h 00025 00026 #include <cmath> 00027 #include <ostream> 00028 #include <string> 00029 #include <vector> 00030 #include <algorithm> 00031 00032 using namespace std; 00033 00034 #include <BIEException.h> 00035 #include <Populations.h> 00036 #include <modelCMD.h> 00037 00038 #include "Serializable.h" 00039 00040 00041 namespace BIE { 00042 00046 //enum BirthRate {Burst, Exponential}; 00047 00048 00052 //+ CLICLASS ModelPops 00054 class ModelPops: public Serializable { 00055 00056 typedef vector<double> dvector; 00057 typedef vector<dvector> d2vector; 00058 typedef vector<d2vector> d3vector; 00059 typedef vector<d3vector> d4vector; 00060 typedef vector<int> ivector; 00061 00062 typedef hashers<PopKey, double, hash<PopKey>, eqpopkey>::MapType HMapKey; 00063 00064 private: 00065 00066 bool cmd; 00067 CMD2 * LMC; 00068 00069 size_t nmetal; 00070 vector<double> metal; 00071 vector<string> smetal; 00072 00073 size_t nages; 00074 vector<double> ages, age_boundary; 00075 vector<string> sages; 00076 00077 size_t ndistm; 00078 vector<double> distm; 00079 vector<string> sdistm; 00080 00081 size_t nflux0, nflux, nMarge, nSize, nSize2; 00082 vector<double> minmag; 00083 vector<double> maxmag; 00084 vector<double> wmag; 00085 vector<int> nmag; 00086 vector<bool> use_flux; 00087 00088 vector<double> flux; 00089 vector<int> ii; 00090 vector<int> iflx, iflx1, jflx, jflx1; 00091 vector<int> iflxmin; 00092 vector<int> iflxmax; 00093 vector<int> iflxoff; 00094 vector<double> flxwght, wght; 00095 vector<dvector> f2; 00096 vector<ivector> i2; 00097 vector<double> ff; 00098 vector<double> vvector; 00099 vector<double> fflux; 00100 00101 int ncorners; 00102 00103 string datadir, isoname; 00104 00105 int AgeIndex(double age); 00106 int MetalIndex(double z); 00107 int DistModIndex(double m); 00108 00109 int get_index(vector<int>&); 00110 int get_index2(vector<int>&); 00111 double array_interp(double *array, double *flux); 00112 double cumul_interp(double *array, double *flux); 00113 void Cumulate(int iage, int idistm, int imetal); 00114 void debug_accumulation(int iage, int idistm, int imetal); 00115 void debug_norm(); 00116 00117 PopKey key; 00118 00119 void read_data(void); 00120 vector< vector<HMapKey> > Hash; 00121 vector< vector< vector < vector<double> > > > Array, Cumul; 00122 00123 public: 00124 00126 static bool verbose; 00127 00129 static bool use_array; 00130 00131 ModelPops() { LMC = 0; } 00132 00133 //+ CLICONSTR string clivectori* bool 00139 ModelPops(string directory, vector<int>* Marginalize=NULL, bool CMD=false); 00140 00141 //+ CLICONSTR string string clivectori* 00148 ModelPops(string directory, string isoname, vector<int>* Marginalize=NULL); 00149 00154 ModelPops(vector<double>& fmin, vector<double>& fmax); 00155 00159 ModelPops(float jmin, float jmax, float kmin, float kmax, float jkmin, float jkmax); 00160 ModelPops(float jmin, float jmax, float kmin, float kmax, float jkmin, float jkmax, int j, int k, int jk); 00161 00163 ~ModelPops(); 00164 00167 00168 double GetValue(vector<double>& flux, double age, double metal, 00169 double distmod); 00171 double GetValue(vector<int>& indx, int age, int metal, int distmod); 00173 double Interpolate(vector<double>& flux, double age, double metal, 00174 double distmod); 00176 double Bin(vector<double>& fmin, vector<double>& fmax, 00177 double age, double metal, double distmod); 00179 double AccessCMD_bar_jk(vector<double>& fmin, vector<double>& fmax); 00180 //double AccessCMD_bar_jkk(vector<double>& fmin, vector<double>& fmax); 00181 double AccessCMD_disk_jk(vector<double>& fmin, vector<double>& fmax); 00182 //double AccessCMD_disk_jkk(vector<double>& fmin, vector<double>& fmax); 00183 float get_jmin(); 00184 float get_jmax(); 00185 float get_kmin(); 00186 float get_kmax(); 00187 void reset(float jmin, float jmax, float kmin, float kmax, float jkmin, float jkmax); 00188 void reset(float jmin, float jmax, float kmin, float kmax, float jkmin, float jkmax, int j, int k); 00190 00192 void SetParameters(void) {}; 00193 00195 vector<bool> get_marge(void) const { return use_flux; } 00196 00199 vector<double> Metal() { return metal; } 00200 vector<double> Ages() { return ages; } 00201 vector<double> DistMod() { return distm; } 00202 vector<double> AgeBoundaries() { return age_boundary; } 00203 vector<double> MinMag() { return minmag; } 00204 vector<double> MaxMag() { return maxmag; } 00205 vector<double> MagDelta() { return wmag; } 00206 vector<int> NumMag() { return nmag; } 00208 00210 bool CMDflag(void) { return cmd; } 00211 00214 void VerifyDouble(); 00215 void VerifyInt(); 00217 00218 //+ CLIMETHOD void UseArray 00220 void UseArray() 00221 { 00222 use_array = true; 00223 } 00224 00225 //+ CLIMETHOD void UseHash 00227 void UseHash() 00228 { 00229 use_array = false; 00230 } 00231 00232 // AUTO GENERATED BY ../persistence/autopersist.py 00233 private: 00234 friend class boost::serialization::access; 00235 template<class Archive> 00236 void serialize(Archive & ar, const unsigned int version) { 00237 this->pre_serialize(ar, version); 00238 try { 00239 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Serializable); 00240 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00241 } 00242 try { 00243 ar & BOOST_SERIALIZATION_NVP(cmd); 00244 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00245 } 00246 try { 00247 ar & BOOST_SERIALIZATION_NVP(LMC); 00248 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00249 } 00250 try { 00251 ar & BOOST_SERIALIZATION_NVP(nmetal); 00252 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00253 } 00254 try { 00255 ar & BOOST_SERIALIZATION_NVP(metal); 00256 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00257 } 00258 try { 00259 ar & BOOST_SERIALIZATION_NVP(smetal); 00260 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00261 } 00262 try { 00263 ar & BOOST_SERIALIZATION_NVP(nages); 00264 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00265 } 00266 try { 00267 ar & BOOST_SERIALIZATION_NVP(ages); 00268 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00269 } 00270 try { 00271 ar & BOOST_SERIALIZATION_NVP(age_boundary); 00272 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00273 } 00274 try { 00275 ar & BOOST_SERIALIZATION_NVP(sages); 00276 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00277 } 00278 try { 00279 ar & BOOST_SERIALIZATION_NVP(ndistm); 00280 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00281 } 00282 try { 00283 ar & BOOST_SERIALIZATION_NVP(distm); 00284 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00285 } 00286 try { 00287 ar & BOOST_SERIALIZATION_NVP(sdistm); 00288 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00289 } 00290 try { 00291 ar & BOOST_SERIALIZATION_NVP(nflux0); 00292 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00293 } 00294 try { 00295 ar & BOOST_SERIALIZATION_NVP(nflux); 00296 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00297 } 00298 try { 00299 ar & BOOST_SERIALIZATION_NVP(nMarge); 00300 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00301 } 00302 try { 00303 ar & BOOST_SERIALIZATION_NVP(nSize); 00304 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00305 } 00306 try { 00307 ar & BOOST_SERIALIZATION_NVP(nSize2); 00308 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00309 } 00310 try { 00311 ar & BOOST_SERIALIZATION_NVP(minmag); 00312 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00313 } 00314 try { 00315 ar & BOOST_SERIALIZATION_NVP(maxmag); 00316 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00317 } 00318 try { 00319 ar & BOOST_SERIALIZATION_NVP(wmag); 00320 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00321 } 00322 try { 00323 ar & BOOST_SERIALIZATION_NVP(nmag); 00324 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00325 } 00326 try { 00327 ar & BOOST_SERIALIZATION_NVP(use_flux); 00328 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00329 } 00330 try { 00331 ar & BOOST_SERIALIZATION_NVP(flux); 00332 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00333 } 00334 try { 00335 ar & BOOST_SERIALIZATION_NVP(ii); 00336 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00337 } 00338 try { 00339 ar & BOOST_SERIALIZATION_NVP(iflx); 00340 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00341 } 00342 try { 00343 ar & BOOST_SERIALIZATION_NVP(iflx1); 00344 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00345 } 00346 try { 00347 ar & BOOST_SERIALIZATION_NVP(jflx); 00348 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00349 } 00350 try { 00351 ar & BOOST_SERIALIZATION_NVP(jflx1); 00352 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00353 } 00354 try { 00355 ar & BOOST_SERIALIZATION_NVP(iflxmin); 00356 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00357 } 00358 try { 00359 ar & BOOST_SERIALIZATION_NVP(iflxmax); 00360 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00361 } 00362 try { 00363 ar & BOOST_SERIALIZATION_NVP(iflxoff); 00364 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00365 } 00366 try { 00367 ar & BOOST_SERIALIZATION_NVP(flxwght); 00368 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00369 } 00370 try { 00371 ar & BOOST_SERIALIZATION_NVP(wght); 00372 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00373 } 00374 try { 00375 ar & BOOST_SERIALIZATION_NVP(f2); 00376 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00377 } 00378 try { 00379 ar & BOOST_SERIALIZATION_NVP(i2); 00380 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00381 } 00382 try { 00383 ar & BOOST_SERIALIZATION_NVP(ff); 00384 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00385 } 00386 try { 00387 ar & BOOST_SERIALIZATION_NVP(vvector); 00388 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00389 } 00390 try { 00391 ar & BOOST_SERIALIZATION_NVP(fflux); 00392 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00393 } 00394 try { 00395 ar & BOOST_SERIALIZATION_NVP(ncorners); 00396 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00397 } 00398 try { 00399 ar & BOOST_SERIALIZATION_NVP(datadir); 00400 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00401 } 00402 try { 00403 ar & BOOST_SERIALIZATION_NVP(isoname); 00404 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00405 } 00406 try { 00407 ar & BOOST_SERIALIZATION_NVP(key); 00408 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00409 } 00410 try { 00411 ar & BOOST_SERIALIZATION_NVP(Hash); 00412 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00413 } 00414 try { 00415 ar & BOOST_SERIALIZATION_NVP(Array); 00416 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00417 } 00418 try { 00419 ar & BOOST_SERIALIZATION_NVP(Cumul); 00420 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00421 } 00422 try { 00423 ar & BOOST_SERIALIZATION_NVP(verbose); 00424 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00425 } 00426 try { 00427 ar & BOOST_SERIALIZATION_NVP(use_array); 00428 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00429 } 00430 this->post_serialize(ar, version); 00431 } 00432 00433 00434 }; 00435 } 00436 BIE_CLASS_TYPE_INFO(BIE::ModelPops) 00437 BIE_CLASS_EXPORT_KEY(BIE::ModelPops) 00438 #endif 00439 Send suggestions, questions, and feedback to WEINBERG at ASTRO dot UMASS dot EDU. Documentation generated at Fri Mar 26 00:35:11 2010 by
|