BIE |
/home/weinberg/src/BIE/include/HistogramND.h00001 // This is really -*- C++ -*- 00002 00003 00004 #ifndef HistogramND_h 00005 #define HistogramND_h 00006 00007 #include "SmplHist.h" 00008 #include "Distribution.h" 00009 #include "Histogram1D.h" 00010 #include "clivector.h" 00011 00012 #include "Serializable.h" 00013 00014 00015 namespace BIE { 00016 00017 //+ CLICLASS HistogramND SUPER BinnedDistribution 00021 class HistogramND : public BinnedDistribution 00022 { 00023 00024 private: 00025 int dim, nbins; 00026 vector<double> bins; 00027 vector<double> low, high, width; 00028 vector < vector<double> > centers; 00029 vector<int> irank, imarg; 00030 double vol, mass; 00031 vector<double> mean, square, stdev; 00032 00033 inline int IN(vector<int> i) { 00034 int iret = i[dim-1]; 00035 for (int indx=dim-2; indx>=0; indx--) 00036 iret = i[indx] + irank[indx]*iret; 00037 return iret; 00038 } 00039 00040 inline bool OK(State& x) { 00041 for (int i=0; i<dim; i++) 00042 if (x[i]<low[i] || x[i] >= high[i]) return false; 00043 return true; 00044 } 00045 00046 inline int INDX(State& x) { 00047 vector<int> iv(dim); 00048 for (int i=0; i<dim; i++) 00049 iv[i] = (int)( (x[i] - low[i])/width[i] ); 00050 return IN(iv); 00051 } 00052 00053 inline vector<int> IV(int i) { 00054 vector<int> ret(dim); 00055 for (int indx=dim-1; indx>=0; indx--) { 00056 ret[indx] = i/imarg[indx]; 00057 i -= ret[indx]*imarg[indx]; 00058 } 00059 return ret; 00060 } 00061 00063 void initialize(); 00064 00065 bool AccumulateData(double v, State& x); 00066 bool AccumulateData(double v, RecordBuffer * datapoint); 00067 00068 public: 00069 //+ CLICONSTR 00071 HistogramND(); 00072 00073 //+ CLICONSTR clivectord* clivectord* clivectord* RecordType* 00078 HistogramND(vector<double> *lo_in, vector<double> *hi_in, 00079 vector<double> *width_in, RecordType* type); 00080 00081 //+ CLICONSTR clivectord* clivectord* clivectord* clivectors* 00087 HistogramND(vector<double> *lo_in, vector<double> *hi_in, 00088 vector<double> *width_in, vector<string> * names); 00089 00091 ~HistogramND(); 00092 00094 HistogramND* New(); 00095 00097 double PDF(State& x); 00098 00100 double logPDF(State& x); 00101 00103 double CDF(State& x); 00104 00106 vector<double> lower(void) { return low;} 00107 00109 vector<double> upper(void) { return high;} 00110 00112 vector<double> Mean(void) { return mean;} 00113 00115 vector<double> StdDev(void) { return stdev;} 00116 00118 vector<double> Moments(int i) { 00119 if (i==0) return vector<double>(1, 1.0); 00120 if (i==2) return square; 00121 return mean; 00122 } 00123 00125 vector<double> Sample(void) { 00126 cerr << "HistogramND::Sample: Not implemented\n"; 00127 return vector<double>(dim, 0.0); 00128 } 00129 00131 void ComputeDistribution(); 00132 00135 00136 int numberData() {return nbins;} 00137 00139 double getValue(int i) { 00140 if (i>=0 && i<nbins) return bins[i]; 00141 else return 0.0; 00142 } 00143 00145 vector<double> getLow(int i) { 00146 vector<double> ret(dim, 0.0); 00147 if (i>=0 && i<nbins) { 00148 vector<int> in = IV(i); 00149 for (int j=0; j<dim; j++) ret[j] = centers[j][in[j]] - 0.5*width[j]; 00150 }; 00151 return ret; 00152 } 00153 00155 vector<double> getHigh(int i) { 00156 vector<double> ret(dim, 0.0); 00157 if (i>=0 && i<nbins) { 00158 vector<int> in = IV(i); 00159 for (int j=0; j<dim; j++) ret[j] = centers[j][in[j]] + 0.5*width[j]; 00160 }; 00161 return ret; 00162 00163 } 00164 00166 int getdim(int i) {return dim;} 00168 00174 void dumpraw(string file, int i=0, int j=1); 00175 00180 void dumpsm(string file, int i=0, int j=1); 00181 00186 void dumpmat(vector< vector<double> >&mat, 00187 vector<double>& x, vector<double>& y, 00188 int i=0, int j=1); 00189 00190 00191 // AUTO GENERATED BY ../persistence/autopersist.py 00192 private: 00193 friend class boost::serialization::access; 00194 template<class Archive> 00195 void serialize(Archive & ar, const unsigned int version) { 00196 this->pre_serialize(ar, version); 00197 try { 00198 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(BinnedDistribution); 00199 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00200 } 00201 try { 00202 ar & BOOST_SERIALIZATION_NVP(dim); 00203 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00204 } 00205 try { 00206 ar & BOOST_SERIALIZATION_NVP(nbins); 00207 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00208 } 00209 try { 00210 ar & BOOST_SERIALIZATION_NVP(bins); 00211 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00212 } 00213 try { 00214 ar & BOOST_SERIALIZATION_NVP(low); 00215 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00216 } 00217 try { 00218 ar & BOOST_SERIALIZATION_NVP(high); 00219 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00220 } 00221 try { 00222 ar & BOOST_SERIALIZATION_NVP(width); 00223 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00224 } 00225 try { 00226 ar & BOOST_SERIALIZATION_NVP(centers); 00227 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00228 } 00229 try { 00230 ar & BOOST_SERIALIZATION_NVP(irank); 00231 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00232 } 00233 try { 00234 ar & BOOST_SERIALIZATION_NVP(imarg); 00235 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00236 } 00237 try { 00238 ar & BOOST_SERIALIZATION_NVP(vol); 00239 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00240 } 00241 try { 00242 ar & BOOST_SERIALIZATION_NVP(mass); 00243 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00244 } 00245 try { 00246 ar & BOOST_SERIALIZATION_NVP(mean); 00247 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00248 } 00249 try { 00250 ar & BOOST_SERIALIZATION_NVP(square); 00251 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00252 } 00253 try { 00254 ar & BOOST_SERIALIZATION_NVP(stdev); 00255 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00256 } 00257 this->post_serialize(ar, version); 00258 } 00259 00260 }; 00261 00262 } // namespace BIE 00263 BIE_CLASS_TYPE_INFO(BIE::HistogramND) 00264 BIE_CLASS_EXPORT_KEY(BIE::HistogramND) 00265 #endif Send suggestions, questions, and feedback to WEINBERG at ASTRO dot UMASS dot EDU. Documentation generated at Fri Mar 26 00:35:10 2010 by
|