File indexing completed on 2026-08-06 09:24:28
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef MYSTATISTICS_Histogram_hpp_included
0009 #define MYSTATISTICS_Histogram_hpp_included
0010
0011 #include <map>
0012 #include <vector>
0013 #include <string>
0014 #include <iostream>
0015
0016 #include "EventContribution.h"
0017 #include "Bin.h"
0018
0019 namespace Statistics {
0020
0021
0022
0023
0024
0025 class Histogram {
0026
0027 public:
0028
0029
0030
0031
0032 Histogram();
0033
0034
0035
0036
0037 virtual ~Histogram();
0038
0039
0040
0041
0042
0043 Histogram(const std::string& newName,
0044 const std::vector<double>& newBoundaries,
0045 bool newNoUnderflow = false,
0046 bool newNoOverflow = false);
0047
0048
0049
0050
0051
0052 Histogram(const std::string& newName,
0053 const std::vector<double>& newBoundaries,
0054 const std::pair<double,double>& newPeriodicity);
0055
0056
0057
0058
0059 static std::vector<double> regularBinEdges(double lower, double upper, size_t nBins);
0060
0061
0062
0063
0064 static std::vector<double> logBinEdges(double lower, double upper, size_t nBins);
0065
0066 public:
0067
0068
0069
0070
0071 void initialize();
0072
0073
0074
0075
0076 void reset();
0077
0078
0079
0080
0081 void finalize();
0082
0083 public:
0084
0085
0086
0087
0088 bool count(EventContribution event, size_t id);
0089
0090 public:
0091
0092
0093
0094
0095 bool isCompatible(const Histogram& other) const;
0096
0097
0098
0099
0100 Histogram& operator+=(const Histogram& other);
0101
0102
0103
0104
0105 Histogram& operator-=(const Histogram& other);
0106
0107 public:
0108
0109
0110
0111
0112 const std::string& name() const { return theName; }
0113
0114
0115
0116
0117 const Bin& underflow() const { return theUnderflow; }
0118
0119
0120
0121
0122 const std::vector<Bin>& bins() const { return theBins; }
0123
0124
0125
0126
0127 const Bin& overflow() const { return theOverflow; }
0128
0129
0130
0131
0132 bool noUnderflow() const { return theNoUnderflow; }
0133
0134
0135
0136
0137 bool noOverflow() const { return theNoOverflow; }
0138
0139
0140
0141
0142
0143 bool isPeriodic() const { return theIsPeriodic; }
0144
0145
0146
0147
0148 const std::pair<double,double>& periodicity() const { return thePeriodicity; }
0149
0150 public:
0151
0152
0153
0154
0155 void fromXML(const XML::Element&);
0156
0157
0158
0159
0160 XML::Element toXML() const;
0161
0162 private:
0163
0164
0165
0166
0167 std::string theName;
0168
0169
0170
0171
0172 Bin theUnderflow;
0173
0174
0175
0176
0177 std::vector<Bin> theBins;
0178
0179
0180
0181
0182 Bin theOverflow;
0183
0184
0185
0186
0187 bool theNoUnderflow;
0188
0189
0190
0191
0192 bool theNoOverflow;
0193
0194
0195
0196
0197 bool theIsPeriodic;
0198
0199
0200
0201
0202 std::pair<double,double> thePeriodicity;
0203
0204
0205
0206
0207 void fillBinMap();
0208
0209
0210
0211
0212 Bin& binByIndex(int);
0213
0214
0215
0216
0217 std::map<double,int> binMap;
0218
0219 };
0220
0221 }
0222
0223 #endif