1 #include "Histogram1D.hh"
9 :
Debug(), Data_(), NumBins_(100), MinValue_(T(0)), MaxValue_(T(0)),
10 BinSize_(T(0)), AutoScale_(true)
22 { Data_.insert(Data_.end(), data.begin(), data.end()); }
27 { Data_.push_back(data); }
31 GetHistogram(std::vector<T>& bin_center, std::vector<unsigned>& hist)
34 InitInternalsFromData_();
38 ComputeBinCenters_(bin_center);
40 hist.resize(NumBins_, 0u);
44 typename std::vector<T>::const_iterator it;
45 for (it=Data_.begin(); it!=Data_.end(); it++){
46 if (*it<MinValue_ || *it>MaxValue_){
48 BIASASSERT(!AutoScale_);
51 bin = GetBinNum_(*it);
53 if(bin>=0 && bin<(
int)NumBins_){
67 vector<unsigned> histo;
68 GetHistogram(center,histo);
69 T maxValue=(T)0.0f;
unsigned maxHist=0;
70 for(
unsigned i=0;i<histo.size();i++){
71 if(histo[i] > maxHist){
83 BIASASSERT(AutoScale_);
85 BIASERR(
"cannot init, no data");
88 MinValue_ = MaxValue_ = Data_[0];
90 BIASERR(
"cannot init, not enough data");
94 typename std::vector<T>::const_iterator it;
95 for (it=Data_.begin(); it!=Data_.end(); it++){
96 if (*it < MinValue_) MinValue_ = *it;
97 if (*it > MaxValue_) MaxValue_ = *it;
107 if (MaxValue_<=MinValue_){
108 BIASERR(
"max value <= min value, histogram computation impossible");
112 BIASASSERT(NumBins_>0);
113 BinSize_ = (T)(((
double)MaxValue_ - (
double)MinValue_) / (double)NumBins_);
121 BIASASSERT(BinSize_>(T)0.);
122 center.resize(NumBins_);
123 double half_bin_size = (double)BinSize_ * 0.5;
124 for (
unsigned i=0; i<NumBins_; i++)
125 center[i] = (T)((double)i * (
double)BinSize_ + half_bin_size + (double)MinValue_);
128 #define INSTANCE_Hist1D(type)\
129 template class BIASMathAlgo_EXPORT Histogram1D<type>;
133 INSTANCE_Hist1D(
float)
134 INSTANCE_Hist1D(
double)
int GetHistogram(std::vector< T > &bin_center, std::vector< unsigned > &hist)
void AddData(const std::vector< T > &data)
T GetBinCenterWithMaxEntries()
void ComputeBinCenters_(std::vector< T > ¢er) const
void InitInternalsFromData_()