BIE |
/home/weinberg/src/BIE/include/Histogram1D.h00001 // This is really -*- C++ -*- 00002 00003 00004 #ifndef Histogram1D_h 00005 #define Histogram1D_h 00006 00007 #include "SmplHist.h" 00008 #include "Distribution.h" 00009 00010 #include "Serializable.h" 00011 00012 00013 namespace BIE { 00014 00016 class Bin: public Serializable { 00017 00018 public: 00020 Bin() {}; 00021 00023 00024 00025 double bot; 00027 double center; 00029 double top; 00031 double val; 00033 00037 bool operator<(const double& x) const { 00038 return(x<top && x>bot); 00039 } 00040 00041 // AUTO GENERATED BY ../persistence/autopersist.py 00042 private: 00043 friend class boost::serialization::access; 00044 template<class Archive> 00045 void serialize(Archive & ar, const unsigned int version) { 00046 this->pre_serialize(ar, version); 00047 try { 00048 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Serializable); 00049 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00050 } 00051 try { 00052 ar & BOOST_SERIALIZATION_NVP(bot); 00053 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00054 } 00055 try { 00056 ar & BOOST_SERIALIZATION_NVP(center); 00057 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00058 } 00059 try { 00060 ar & BOOST_SERIALIZATION_NVP(top); 00061 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00062 } 00063 try { 00064 ar & BOOST_SERIALIZATION_NVP(val); 00065 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00066 } 00067 this->post_serialize(ar, version); 00068 } 00069 00070 }; 00071 00077 class CumSampleHistogram : public SampleHistogram 00078 { 00079 00080 private: 00081 bool accum; 00082 00083 void compute_accum(void); 00084 00085 int n; 00086 vector<Bin> cum; 00087 vector<double> bin; 00088 00089 public: 00091 CumSampleHistogram(double low, double hi, double bucketWidth = -1.0) : 00092 SampleHistogram(low, hi, bucketWidth) { accum = false; } 00093 00095 double quartile(double s); 00096 00098 double fraction(double s); 00099 00100 // AUTO GENERATED BY ../persistence/autopersist.py 00101 protected: 00102 CumSampleHistogram() {} 00103 private: 00104 friend class boost::serialization::access; 00105 template<class Archive> 00106 void serialize(Archive & ar, const unsigned int version) { 00107 this->pre_serialize(ar, version); 00108 try { 00109 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(SampleHistogram); 00110 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00111 } 00112 try { 00113 ar & BOOST_SERIALIZATION_NVP(accum); 00114 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00115 } 00116 try { 00117 ar & BOOST_SERIALIZATION_NVP(n); 00118 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00119 } 00120 try { 00121 ar & BOOST_SERIALIZATION_NVP(cum); 00122 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00123 } 00124 try { 00125 ar & BOOST_SERIALIZATION_NVP(bin); 00126 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00127 } 00128 this->post_serialize(ar, version); 00129 } 00130 00131 }; 00132 00133 //+ CLICLASS Histogram1D SUPER BinnedDistribution 00135 class Histogram1D : public BinnedDistribution 00136 { 00137 00138 private: 00139 00140 CumSampleHistogram * ch; 00141 double low, high, width, toplimit; 00142 double val; 00143 00144 bool AccumulateData(double v, vector<double> & x); 00145 bool AccumulateData(double v, RecordBuffer * datapoint); 00146 00148 void initialize(double low, double high, double width); 00149 00150 public: 00151 //+ CLICONSTR double double double RecordType* 00156 Histogram1D(double low, double hi, double w, RecordType * type); 00157 00158 //+ CLICONSTR double double double string 00163 Histogram1D(double low, double hi, double w, string dataname); 00164 00166 ~Histogram1D(); 00167 00169 Histogram1D* New(); 00170 00172 double PDF(vector<double>& x) 00173 {return ch->similarSamples(x[0])/width;} 00174 00176 double logPDF(vector<double>& x) 00177 {return log(ch->similarSamples(x[0])/width);} 00178 00180 double CDF(vector<double>& x) {return ch->fraction(x[0]);} 00181 00183 vector<double> lower(void) {return vector<double>(1, ch->min());} 00184 00186 vector<double> upper(void) {return vector<double>(1, ch->max());} 00187 00189 vector<double> Mean(void) {return vector<double>(1, ch->mean());} 00190 00192 vector<double> StdDev(void) {return vector<double>(1, ch->stdDev());} 00193 00195 vector<double> Moments(int i) { 00196 if (i==0) return vector<double>(1, 1.0); 00197 if (i==2) return vector<double>(1, ch->stdDev()*ch->stdDev() + ch->mean()*ch->mean()); 00198 return vector<double>(1, ch->mean()); 00199 } 00200 00202 vector<double> Sample(void) { 00203 cerr << "Histogram1D::Sample: Not implemented\n"; 00204 return vector<double>(1, 0.0); 00205 } 00206 00208 void ComputeDistribution(); 00209 00211 int numberData() { 00212 return ch->buckets()-2; 00213 } 00214 00216 double getValue(int i) { 00217 if (i<0) i=0; 00218 if (i>=ch->buckets()-2) i=ch->buckets()-3; 00219 return (double)ch->inBucket(i+1); 00220 } 00221 00223 vector<double> getLow(int i) { 00224 if (i<0) i=0; 00225 if (i>=ch->buckets()-2) i=ch->buckets()-3; 00226 return vector<double>(1, ch->bucketThreshold(i)); 00227 } 00228 00230 vector<double> getHigh(int i) { 00231 if (i<0) i=0; 00232 if (i>=ch->buckets()-2) i=ch->buckets()-3; 00233 return vector<double>(1, ch->bucketThreshold(i+1)); 00234 } 00235 00237 int getdim(int i) {return 1;} 00238 00239 // AUTO GENERATED BY ../persistence/autopersist.py 00240 protected: 00241 Histogram1D() {} 00242 private: 00243 friend class boost::serialization::access; 00244 template<class Archive> 00245 void serialize(Archive & ar, const unsigned int version) { 00246 this->pre_serialize(ar, version); 00247 try { 00248 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(BinnedDistribution); 00249 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00250 } 00251 try { 00252 ar & BOOST_SERIALIZATION_NVP(ch); 00253 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00254 } 00255 try { 00256 ar & BOOST_SERIALIZATION_NVP(low); 00257 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00258 } 00259 try { 00260 ar & BOOST_SERIALIZATION_NVP(high); 00261 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00262 } 00263 try { 00264 ar & BOOST_SERIALIZATION_NVP(width); 00265 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00266 } 00267 try { 00268 ar & BOOST_SERIALIZATION_NVP(toplimit); 00269 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00270 } 00271 try { 00272 ar & BOOST_SERIALIZATION_NVP(val); 00273 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00274 } 00275 this->post_serialize(ar, version); 00276 } 00277 00278 }; 00279 00280 } // namespace BIE 00281 BIE_CLASS_TYPE_INFO(BIE::Bin) 00282 BIE_CLASS_TYPE_INFO(BIE::CumSampleHistogram) 00283 BIE_CLASS_TYPE_INFO(BIE::Histogram1D) 00284 BIE_CLASS_EXPORT_KEY(BIE::Bin) 00285 BIE_CLASS_EXPORT_KEY(BIE::CumSampleHistogram) 00286 BIE_CLASS_EXPORT_KEY(BIE::Histogram1D) 00287 #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
|