BIE |
/home/weinberg/src/BIE/PopModel/PopulationsApp.h00001 // This is really -*- C++ -*- 00002 00003 00004 00005 #ifndef PopulationsApp_h 00006 #define PopulationsApp_h 00007 00008 #include "Serializable.h" 00009 00010 00011 #include <cmath> 00012 #include <ostream> 00013 #include <string> 00014 #include <vector> 00015 #include <algorithm> 00016 00017 using namespace std; 00018 00019 #include <BIEException.h> 00020 #include <Populations.h> 00021 00022 namespace BIE { 00023 00027 enum BirthRate {Burst, Exponential}; 00028 00029 00033 //+ CLICLASS PopulationsApp 00035 class PopulationsApp: public Serializable 00036 { 00037 typedef vector<double> dvector; 00038 typedef vector<int> ivector; 00039 typedef hashers<PopKey, double, hash<PopKey>, eqpopkey>::MapType HMapKey; 00040 00041 private: 00042 00043 bool cmd; 00044 00045 size_t nmetal; 00046 vector<double> metal; 00047 vector<string> smetal; 00048 00049 size_t nages; 00050 vector<double> ages, age_boundary; 00051 vector<string> sages; 00052 00053 size_t ndistm; 00054 vector<double> distm; 00055 vector<string> sdistm; 00056 00057 size_t nflux0, nflux, nMarge, nSize, nSize2; 00058 vector<double> minmag; 00059 vector<double> maxmag; 00060 vector<double> wmag; 00061 vector<int> nmag; 00062 vector<bool> use_flux; 00063 00064 vector<double> flux; 00065 vector<int> ii; 00066 vector<int> iflx, iflx1, jflx, jflx1; 00067 vector<int> iflxmin; 00068 vector<int> iflxmax; 00069 vector<int> iflxoff; 00070 vector<double> flxwght, wght; 00071 vector<dvector> f2; 00072 vector<ivector> i2; 00073 vector<double> ff; 00074 vector<double> vvector; 00075 vector<double> fflux; 00076 00077 int ncorners; 00078 00079 string datadir, isoname; 00080 00081 int AgeIndex(double age); 00082 int MetalIndex(double z); 00083 int DistModIndex(double m); 00084 00085 int get_index(vector<int>&); 00086 int get_index2(vector<int>&); 00087 double array_interp(double *array, double *flux); 00088 double cumul_interp(double *array, double *flux); 00089 void Cumulate(int iage, int idistm, int imetal); 00090 void debug_accumulation(int iage, int idistm, int imetal); 00091 void debug_norm(); 00092 00093 PopKey key; 00094 00095 void read_data(void); 00096 vector< vector<HMapKey> > Hash; 00097 vector< vector< vector< vector<double> > > > 00098 Array, Cumul; 00099 00100 public: 00101 00103 static bool verbose; 00104 00106 static bool use_array; 00107 00108 00109 //+ CLICONSTR string clivectori* bool 00115 PopulationsApp(string directory, vector<int>* Marginalize=NULL, 00116 bool CMD=false); 00117 00118 //+ CLICONSTR string string clivectori* 00125 PopulationsApp(string directory, string isoname, 00126 vector<int>* Marginalize=NULL); 00127 00129 ~PopulationsApp(); 00130 00133 00134 double GetValue(vector<double>& flux, double age, double metal, 00135 double distmod); 00137 double GetValue(vector<int>& indx, int age, int metal, int distmod); 00139 double Interpolate(vector<double>& flux, double age, double metal, 00140 double distmod); 00142 double Bin(vector<double>& fmin, vector<double>& fmax, 00143 double age, double metal, double distmod); 00145 00147 void SetParameters(void) {}; 00148 00150 vector<bool> get_marge(void) const { return use_flux; } 00151 00154 00155 vector<double> Metal() { return metal; } 00157 vector<double> Ages() { return ages; } 00159 vector<double> DistMod() { return distm; } 00161 vector<double> AgeBoundaries() { return age_boundary; } 00163 vector<double> MinMag() { return minmag; } 00165 vector<double> MaxMag() { return maxmag; } 00167 vector<double> MagDelta() { return wmag; } 00169 vector<int> NumMag() { return nmag; } 00171 00173 bool CMDflag(void) { return cmd; } 00174 00177 00178 void VerifyDouble(); 00180 void VerifyInt(); 00182 00183 //+ CLIMETHOD void UseArray 00185 void UseArray() 00186 { 00187 use_array = true; 00188 } 00189 00190 //+ CLIMETHOD void UseHash 00192 void UseHash() 00193 { 00194 use_array = false; 00195 } 00196 00197 // AUTO GENERATED BY ../persistence/autopersist.py 00198 protected: 00199 PopulationsApp() {} 00200 private: 00201 friend class boost::serialization::access; 00202 template<class Archive> 00203 void serialize(Archive & ar, const unsigned int version) { 00204 this->pre_serialize(ar, version); 00205 try { 00206 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Serializable); 00207 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00208 } 00209 try { 00210 ar & BOOST_SERIALIZATION_NVP(cmd); 00211 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00212 } 00213 try { 00214 ar & BOOST_SERIALIZATION_NVP(nmetal); 00215 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00216 } 00217 try { 00218 ar & BOOST_SERIALIZATION_NVP(metal); 00219 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00220 } 00221 try { 00222 ar & BOOST_SERIALIZATION_NVP(smetal); 00223 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00224 } 00225 try { 00226 ar & BOOST_SERIALIZATION_NVP(nages); 00227 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00228 } 00229 try { 00230 ar & BOOST_SERIALIZATION_NVP(ages); 00231 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00232 } 00233 try { 00234 ar & BOOST_SERIALIZATION_NVP(age_boundary); 00235 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00236 } 00237 try { 00238 ar & BOOST_SERIALIZATION_NVP(sages); 00239 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00240 } 00241 try { 00242 ar & BOOST_SERIALIZATION_NVP(ndistm); 00243 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00244 } 00245 try { 00246 ar & BOOST_SERIALIZATION_NVP(distm); 00247 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00248 } 00249 try { 00250 ar & BOOST_SERIALIZATION_NVP(sdistm); 00251 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00252 } 00253 try { 00254 ar & BOOST_SERIALIZATION_NVP(nflux0); 00255 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00256 } 00257 try { 00258 ar & BOOST_SERIALIZATION_NVP(nflux); 00259 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00260 } 00261 try { 00262 ar & BOOST_SERIALIZATION_NVP(nMarge); 00263 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00264 } 00265 try { 00266 ar & BOOST_SERIALIZATION_NVP(nSize); 00267 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00268 } 00269 try { 00270 ar & BOOST_SERIALIZATION_NVP(nSize2); 00271 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00272 } 00273 try { 00274 ar & BOOST_SERIALIZATION_NVP(minmag); 00275 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00276 } 00277 try { 00278 ar & BOOST_SERIALIZATION_NVP(maxmag); 00279 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00280 } 00281 try { 00282 ar & BOOST_SERIALIZATION_NVP(wmag); 00283 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00284 } 00285 try { 00286 ar & BOOST_SERIALIZATION_NVP(nmag); 00287 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00288 } 00289 try { 00290 ar & BOOST_SERIALIZATION_NVP(use_flux); 00291 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00292 } 00293 try { 00294 ar & BOOST_SERIALIZATION_NVP(flux); 00295 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00296 } 00297 try { 00298 ar & BOOST_SERIALIZATION_NVP(ii); 00299 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00300 } 00301 try { 00302 ar & BOOST_SERIALIZATION_NVP(iflx); 00303 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00304 } 00305 try { 00306 ar & BOOST_SERIALIZATION_NVP(iflx1); 00307 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00308 } 00309 try { 00310 ar & BOOST_SERIALIZATION_NVP(jflx); 00311 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00312 } 00313 try { 00314 ar & BOOST_SERIALIZATION_NVP(jflx1); 00315 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00316 } 00317 try { 00318 ar & BOOST_SERIALIZATION_NVP(iflxmin); 00319 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00320 } 00321 try { 00322 ar & BOOST_SERIALIZATION_NVP(iflxmax); 00323 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00324 } 00325 try { 00326 ar & BOOST_SERIALIZATION_NVP(iflxoff); 00327 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00328 } 00329 try { 00330 ar & BOOST_SERIALIZATION_NVP(flxwght); 00331 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00332 } 00333 try { 00334 ar & BOOST_SERIALIZATION_NVP(wght); 00335 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00336 } 00337 try { 00338 ar & BOOST_SERIALIZATION_NVP(f2); 00339 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00340 } 00341 try { 00342 ar & BOOST_SERIALIZATION_NVP(i2); 00343 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00344 } 00345 try { 00346 ar & BOOST_SERIALIZATION_NVP(ff); 00347 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00348 } 00349 try { 00350 ar & BOOST_SERIALIZATION_NVP(vvector); 00351 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00352 } 00353 try { 00354 ar & BOOST_SERIALIZATION_NVP(fflux); 00355 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00356 } 00357 try { 00358 ar & BOOST_SERIALIZATION_NVP(ncorners); 00359 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00360 } 00361 try { 00362 ar & BOOST_SERIALIZATION_NVP(datadir); 00363 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00364 } 00365 try { 00366 ar & BOOST_SERIALIZATION_NVP(isoname); 00367 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00368 } 00369 try { 00370 ar & BOOST_SERIALIZATION_NVP(key); 00371 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00372 } 00373 try { 00374 ar & BOOST_SERIALIZATION_NVP(Hash); 00375 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00376 } 00377 try { 00378 ar & BOOST_SERIALIZATION_NVP(Array); 00379 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00380 } 00381 try { 00382 ar & BOOST_SERIALIZATION_NVP(Cumul); 00383 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00384 } 00385 this->post_serialize(ar, version); 00386 } 00387 00388 }; 00389 } 00390 00391 BIE_CLASS_TYPE_INFO(BIE::PopulationsApp) 00392 BIE_CLASS_EXPORT_KEY(BIE::PopulationsApp) 00393 #endif 00394 Send suggestions, questions, and feedback to WEINBERG at ASTRO dot UMASS dot EDU. Documentation generated at Fri Mar 26 00:35:11 2010 by
|