BIE |
/home/weinberg/src/BIE/include/MultiDistribution.h00001 // This is really -*- C++ -*- 00002 00003 00004 #ifndef MultiDistribution_h 00005 #define MultiDistribution_h 00006 00007 #include "Distribution.h" 00008 #include "cliDistribution.h" 00009 #include "clivector.h" 00010 00011 #include "Serializable.h" 00012 00013 00014 namespace BIE { 00015 00016 //+ CLICLASS MultiDistribution SUPER BinnedDistribution 00021 class MultiDistribution : public BinnedDistribution { 00022 00023 private: 00025 RecordType * uniontype; 00026 int N; 00027 int Nbins; 00028 int Ndim; 00029 vector<BinnedDistribution*> dists; 00030 vector<int> bin_counts; 00031 vector<int> bin_offsets; 00032 vector<int> dim_counts; 00033 vector<int> dim_offsets; 00034 00035 inline int ND(int i) { 00036 for (int indx=1; indx<N; indx++) 00037 if (i<bin_offsets[indx]) return indx-1; 00038 return N-1; 00039 } 00040 00041 void initialize(); 00042 00044 bool AccumulateData(double w, RecordBuffer * datapoint); 00045 00046 public: 00047 00048 //+ CLICONSTR int BinnedDistribution** 00050 MultiDistribution(int number, BinnedDistribution** list); 00051 00052 //+ CLICONSTR cliDistribution* 00054 MultiDistribution(vector<BinnedDistribution*> *list); 00055 00056 //+ CLICONSTR 00058 MultiDistribution(); 00059 00061 ~MultiDistribution(); 00062 00064 MultiDistribution* New(); 00065 00067 void ComputeDistribution(); 00068 00074 00075 double PDF(State& z); 00077 double logPDF(State& z); 00079 vector<double> lower(); 00081 vector<double> upper(); 00083 vector<double> Mean(); 00087 vector<double> StdDev(); 00089 vector<double> Moments(int i); 00091 vector<double> Sample(); 00093 00096 00097 int numberData() {return bin_offsets[N];} 00098 00100 double getValue(int i) { 00101 int j = ND(i); 00102 return dists[j]->getValue(i-bin_offsets[j]); 00103 } 00104 00106 vector<double> getLow(int i) { 00107 int j = ND(i); 00108 return dists[j]->getLow(i-bin_offsets[j]); 00109 } 00110 00112 vector<double> getHigh(int i) { 00113 int j = ND(i); 00114 return dists[j]->getHigh(i-bin_offsets[j]); 00115 } 00116 00118 int getdim(int i) { 00119 int j = ND(i); 00120 return dists[j]->getdim(i-bin_offsets[j]); 00121 } 00123 00125 int Ndist(void) {return N;} 00126 00127 // AUTO GENERATED BY ../persistence/autopersist.py 00128 private: 00129 friend class boost::serialization::access; 00130 template<class Archive> 00131 void serialize(Archive & ar, const unsigned int version) { 00132 this->pre_serialize(ar, version); 00133 try { 00134 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(BinnedDistribution); 00135 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00136 } 00137 try { 00138 ar & BOOST_SERIALIZATION_NVP(uniontype); 00139 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00140 } 00141 try { 00142 ar & BOOST_SERIALIZATION_NVP(N); 00143 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00144 } 00145 try { 00146 ar & BOOST_SERIALIZATION_NVP(Nbins); 00147 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00148 } 00149 try { 00150 ar & BOOST_SERIALIZATION_NVP(Ndim); 00151 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00152 } 00153 try { 00154 ar & BOOST_SERIALIZATION_NVP(dists); 00155 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00156 } 00157 try { 00158 ar & BOOST_SERIALIZATION_NVP(bin_counts); 00159 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00160 } 00161 try { 00162 ar & BOOST_SERIALIZATION_NVP(bin_offsets); 00163 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00164 } 00165 try { 00166 ar & BOOST_SERIALIZATION_NVP(dim_counts); 00167 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00168 } 00169 try { 00170 ar & BOOST_SERIALIZATION_NVP(dim_offsets); 00171 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00172 } 00173 this->post_serialize(ar, version); 00174 } 00175 00176 }; 00177 00178 } // namespace BIE 00179 BIE_CLASS_TYPE_INFO(BIE::MultiDistribution) 00180 BIE_CLASS_EXPORT_KEY(BIE::MultiDistribution) 00181 #endif 00182 Send suggestions, questions, and feedback to WEINBERG at ASTRO dot UMASS dot EDU. Documentation generated at Fri Mar 26 00:35:10 2010 by
|