BIE |
/home/weinberg/src/BIE/PopModel/HistogramNDCache.h00001 // This is really -*- C++ -*- 00002 00003 00004 #ifndef HistogramNDCache_h 00005 #define HistogramNDCache_h 00006 00007 #include "Serializable.h" 00008 00009 00010 #include <SmplHist.h> 00011 #include <Distribution.h> 00012 #include <Histogram1D.h> 00013 #include "HistogramCache.h" 00014 #include "clivector.h" 00015 00016 namespace BIE { 00017 00024 //+ CLASS HistogramNDCache SUPER BinnedDistribution 00025 class HistogramNDCache : public BinnedDistribution 00026 { 00027 protected: 00029 int dim; 00031 00032 00033 vector<double> bins; 00035 vector<double> low; 00037 vector<double> high; 00039 vector<double> width; 00041 vector<int> irank; 00043 vector<int> imarg; 00045 double vol; 00047 double mass; 00049 00051 00052 00053 vector<double> mean; 00055 vector<double> square; 00057 vector<double> stdev; 00059 00061 virtual bool OK(vector<double>& x); 00062 00064 void initialize(); 00065 00067 void populate_cache(); 00068 00070 00071 00072 bool AccumulateData(double v, vector<double>& x); 00074 bool AccumulateData(double v, RecordBuffer * datapoint); 00076 00078 HistogramCache *histo; 00079 00081 mmapHK::iterator hitr; 00082 00083 public: 00084 //+ CONSTR 00086 HistogramNDCache(); 00087 00088 //+ CONSTR clivectord* clivectord* clivectord* RecordType* 00090 HistogramNDCache(vector<double> *lo_in, vector<double> *hi_in, 00091 vector<double> *width_in, RecordType* type); 00092 00093 //+ CONSTR clivectord* clivectord* clivectord* clivectors* 00095 HistogramNDCache(vector<double> *lo_in, vector<double> *hi_in, 00096 vector<double> *width_in, vector<string> * names); 00098 virtual ~HistogramNDCache(); 00100 virtual HistogramNDCache* New(); 00101 00103 double PDF(vector<double>& x); 00105 double logPDF(vector<double>& x); 00107 double CDF(vector<double>& x); 00109 vector<double> lower(void) { return low;} 00111 vector<double> upper(void) { return high;} 00113 vector<double> Mean(void) { return mean;} 00115 vector<double> StdDev(void) { return stdev;} 00117 vector<double> Moments(int i) { 00118 if (i==0) return vector<double>(1, 1.0); 00119 if (i==2) return square; 00120 return mean; 00121 } 00122 00124 vector<double> Sample(void) { 00125 cerr << "HistogramNDCache::Sample: Not implemented\n"; 00126 return vector<double>(dim, 0.0); 00127 } 00128 00130 void ComputeDistribution(); 00131 00134 00135 int numberData() { return histo->getNumber(); } 00137 void Reset() { hitr = histo->Reset(); } 00139 void Next() { hitr = histo->Next(); } 00141 double getValue() { return hitr->second; } 00143 vector<double> getLow() { 00144 vector<double> ret(dim, 0.0); 00145 vector<unsigned short> indx = hitr->first.get_I(); 00146 for (int j=0; j<dim; j++) ret[j] = low[j] + width[j]*indx[j]; 00147 return ret; 00148 } 00150 vector<double> getHigh() { 00151 vector<double> ret(dim, 0.0); 00152 vector<unsigned short> indx = hitr->first.get_I(); 00153 for (int j=0; j<dim; j++) ret[j] = low[j] + width[j]*(indx[j]+1); 00154 return ret; 00155 } 00157 int getdim() { return hitr->first.get_dim(); } 00159 00160 // AUTO GENERATED BY ../persistence/autopersist.py 00161 private: 00162 friend class boost::serialization::access; 00163 template<class Archive> 00164 void serialize(Archive & ar, const unsigned int version) { 00165 this->pre_serialize(ar, version); 00166 try { 00167 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(BinnedDistribution); 00168 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00169 } 00170 try { 00171 ar & BOOST_SERIALIZATION_NVP(dim); 00172 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00173 } 00174 try { 00175 ar & BOOST_SERIALIZATION_NVP(bins); 00176 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00177 } 00178 try { 00179 ar & BOOST_SERIALIZATION_NVP(low); 00180 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00181 } 00182 try { 00183 ar & BOOST_SERIALIZATION_NVP(high); 00184 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00185 } 00186 try { 00187 ar & BOOST_SERIALIZATION_NVP(width); 00188 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00189 } 00190 try { 00191 ar & BOOST_SERIALIZATION_NVP(irank); 00192 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00193 } 00194 try { 00195 ar & BOOST_SERIALIZATION_NVP(imarg); 00196 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00197 } 00198 try { 00199 ar & BOOST_SERIALIZATION_NVP(vol); 00200 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00201 } 00202 try { 00203 ar & BOOST_SERIALIZATION_NVP(mass); 00204 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00205 } 00206 try { 00207 ar & BOOST_SERIALIZATION_NVP(mean); 00208 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00209 } 00210 try { 00211 ar & BOOST_SERIALIZATION_NVP(square); 00212 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00213 } 00214 try { 00215 ar & BOOST_SERIALIZATION_NVP(stdev); 00216 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00217 } 00218 try { 00219 ar & BOOST_SERIALIZATION_NVP(histo); 00220 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00221 } 00222 this->post_serialize(ar, version); 00223 } 00224 00225 }; 00226 } 00227 00228 BIE_CLASS_TYPE_INFO(BIE::HistogramNDCache) 00229 BIE_CLASS_EXPORT_KEY(BIE::HistogramNDCache) 00230 #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
|