CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Histogram.h
Go to the documentation of this file.
1 #ifndef CondFormats_PhysicsToolsObjects_Histogram_h
2 #define CondFormats_PhysicsToolsObjects_Histogram_h
3 
4 #include <vector>
5 #include <cmath>
6 
7 namespace PhysicsTools {
8 namespace Calibration {
9 
10 template<typename Axis_t>
11 struct Range {
12  inline Range() {}
13 
14  template<typename OAxis_t>
15  inline Range(const Range<OAxis_t> &orig) :
16  min(orig.min), max(orig.max) {}
17 
18  inline Range(Axis_t min, Axis_t max) : min(min), max(max) {}
19 
20  ~Range() {}
21 
22  inline Axis_t width() const { return max - min; }
23 
24  Axis_t min, max;
25 };
26 
27 template<typename Value_t, typename Axis_t = Value_t>
28 class Histogram {
29  public:
31 
32  Histogram();
33 
34  Histogram(const Histogram &orig);
35 
36  template<typename OValue_t, typename OAxis_t>
38 
39  Histogram(const std::vector<Axis_t> &binULimits);
40 
41  template<typename OAxis_t>
42  Histogram(const std::vector<OAxis_t> &binULimits);
43 
44  template<typename OAxis_t>
45  Histogram(unsigned int nBins,
47 
48  Histogram(unsigned int nBins, Axis_t min, Axis_t max);
49 
50  ~Histogram();
51 
52  Histogram &operator = (const Histogram &orig);
53 
54  template<typename OValue_t, typename OAxis_t>
56 
57  void reset();
58 
59  const std::vector<Axis_t> upperLimits() const { return binULimits; }
60 
61  Value_t binContent(int bin) const { return binValues[bin]; }
62  Value_t value(Axis_t x) const { return binContent(findBin(x)); }
63  Value_t normalizedValue(Axis_t x) const
64  { return binContent(findBin(x)) / normalization(); }
65 
66  Value_t binError(int bin) const { return std::sqrt(binContent(bin)); }
67  Value_t error(Axis_t x) const { return binError(findBin(x)); }
68  Value_t normalizedError(Axis_t x) const
69  { return std::sqrt(binContent(findBin(x))) / normalization(); }
70 
71  void setBinContent(int bin, Value_t value);
72  void fill(Axis_t x, Value_t weight = 1.0);
73 
74  bool empty() const { return binValues.empty(); }
75  bool hasEquidistantBins() const { return binULimits.empty(); }
76  int numberOfBins() const { return binValues.size() - 2; }
77 
78  inline const std::vector<Value_t> &values() const
79  { return binValues; }
80 
81  void setValues(const std::vector<Value_t> &values);
82 
83  template<typename OValue_t>
84  void setValues(const std::vector<OValue_t> &values);
85 
86  inline Range range() const { return limits; }
87  Range binRange(int bin) const;
88 
89  int findBin(Axis_t x) const;
90  Value_t normalization() const;
91 
92  Value_t integral(Axis_t hBound, Axis_t lBound = 0.0, int mode = 1) const;
93  Value_t normalizedIntegral(Axis_t hBound, Axis_t lBound = 0.0, int mode = 1) const
94  { return integral(hBound, lBound, mode) / normalization(); }
95 
96  protected:
97  std::vector<Axis_t> binULimits;
98  std::vector<Value_t> binValues;
100 
101  // transient cache variables
102  mutable Value_t total;
103  mutable bool totalValid;
104 };
105 
108 
109 } // namespace Calibration
110 } // namespace PhysicsTools
111 
112 #include "CondFormats/PhysicsToolsObjects/interface/Histogram.icc"
113 
114 #endif // CondFormats_PhysicsToolsObjects_Histogram_h
Histogram< float > HistogramF
Definition: Histogram.h:106
Value_t normalizedIntegral(Axis_t hBound, Axis_t lBound=0.0, int mode=1) const
Definition: Histogram.h:93
PhysicsTools::Calibration::Range< Axis_t > Range
Definition: Histogram.h:30
void setBinContent(int bin, Value_t value)
#define min(a, b)
Definition: mlp_lapack.h:161
Value_t binContent(int bin) const
Definition: Histogram.h:61
Value_t binError(int bin) const
Definition: Histogram.h:66
Range(Axis_t min, Axis_t max)
Definition: Histogram.h:18
void fill(Axis_t x, Value_t weight=1.0)
const T & max(const T &a, const T &b)
T sqrt(T t)
Definition: SSEVec.h:46
Value_t normalizedValue(Axis_t x) const
Definition: Histogram.h:63
const std::vector< Axis_t > upperLimits() const
Definition: Histogram.h:59
Histogram< double > HistogramD
Definition: Histogram.h:107
const std::vector< Value_t > & values() const
Definition: Histogram.h:78
Value_t error(Axis_t x) const
Definition: Histogram.h:67
Range(const Range< OAxis_t > &orig)
Definition: Histogram.h:15
Histogram & operator=(const Histogram &orig)
std::vector< Axis_t > binULimits
Definition: Histogram.h:97
void setValues(const std::vector< Value_t > &values)
std::vector< Value_t > binValues
Definition: Histogram.h:98
x
Definition: VDTMath.h:216
Value_t value(Axis_t x) const
Definition: Histogram.h:62
Value_t normalizedError(Axis_t x) const
Definition: Histogram.h:68
Value_t integral(Axis_t hBound, Axis_t lBound=0.0, int mode=1) const