OMNeT++ Simulation Library  5.6.1
chistogram.h
1 //==========================================================================
2 // CHISTOGRAM.H - part of
3 // OMNeT++/OMNEST
4 // Discrete System Simulation in C++
5 //
6 //==========================================================================
7 
8 /*--------------------------------------------------------------*
9  Copyright (C) 1992-2017 Andras Varga
10  Copyright (C) 2006-2017 OpenSim Ltd.
11 
12  This file is distributed WITHOUT ANY WARRANTY. See the file
13  `license' for details on this and other legal matters.
14 *--------------------------------------------------------------*/
15 
16 #ifndef __OMNETPP_CHISTOGRAM_H
17 #define __OMNETPP_CHISTOGRAM_H
18 
19 #include <climits>
20 #include "cabstracthistogram.h"
21 
22 namespace omnetpp {
23 
24 class cIHistogramStrategy;
25 class cAutoRangeHistogramStrategy;
26 
88 class SIM_API cHistogram : public cAbstractHistogram
89 {
90  public:
95  enum Mode {MODE_AUTO, MODE_INTEGERS, MODE_REALS, MODE_DOUBLES /*deprecated*/ = MODE_REALS};
96  _OPPDEPRECATED typedef Mode HistogramMode;
97 
98  protected:
99  cIHistogramStrategy *strategy = nullptr; // owned
100 
101  std::vector<double> binEdges;
102  std::vector<double> binValues; // one less than bin edges
103  double finiteUnderflowSumWeights = 0, finiteOverflowSumWeights = 0;
104  double posInfSumWeights = 0, negInfSumWeights = 0;
105 
106  public:
107  // INTERNAL, only for cIHistogramSetupStrategy implementations.
108  // Directly collects the value into the existing bins, without delegating to the strategy object
109  virtual void collectIntoHistogram(double value, double weight=1);
110  void dump() const; // for debugging
111  void assertSanity();
112 
113  private:
114  void copy(const cHistogram& other);
115  cAutoRangeHistogramStrategy *getOrCreateAutoRangeStrategy() const;
116 
117  public:
120 
126  explicit cHistogram(const char *name=nullptr, bool weighted=false);
127 
132  explicit cHistogram(const char *name, int numBinsHint, bool weighted=false);
133 
138  explicit cHistogram(const char *name, cIHistogramStrategy *strategy, bool weighted=false);
139 
143  cHistogram(const cHistogram& other): cAbstractHistogram(other) {copy(other);}
144 
149  cHistogram& operator=(const cHistogram& other);
150 
154  virtual ~cHistogram();
156 
159 
164  virtual cHistogram *dup() const override {return new cHistogram(*this);}
165 
171  virtual void parsimPack(cCommBuffer *buffer) const override;
172 
178  virtual void parsimUnpack(cCommBuffer *buffer) override;
180 
183 
188  virtual void collect(double value) override;
190 
197  virtual void collectWeighted(double value, double weight) override;
199 
203  virtual void clear() override;
204 
208  virtual void saveToFile(FILE *f) const override;
209 
213  virtual void loadFromFile(FILE *f) override;
214 
218  virtual void merge(const cStatistic *other) override;
220 
223 
228  void setStrategy(cIHistogramStrategy *strategy);
229 
233  cIHistogramStrategy *getStrategy() const {return strategy;}
234 
239  virtual bool binsAlreadySetUp() const override;
240 
246  virtual void setUpBins() override;
247 
253  virtual void setBinEdges(const std::vector<double>& edges);
254 
261  virtual void createUniformBins(double lo, double hi, double step);
262 
269  virtual void prependBins(const std::vector<double>& edges);
270 
277  virtual void appendBins(const std::vector<double>& edges);
278 
288  virtual void extendBinsTo(double value, double step, int maxNumBins=INT_MAX); // TODO: remove default value for maxNumBins
289 
296  virtual void mergeBins(int groupSize);
297 
302  const std::vector<double>& getBinEdges() const {return binEdges;} // one more than values
303 
308  const std::vector<double>& getBinValues() const {return binValues;}
309 
313  virtual int getNumBins() const override {return binValues.size();}
314 
318  virtual double getBinEdge(int k) const override {return binEdges.at(k);}
319 
324  virtual double getBinValue(int k) const override {return binValues.at(k);}
325 
329  virtual double getUnderflowSumWeights() const override {return finiteUnderflowSumWeights + negInfSumWeights;}
330 
334  virtual double getOverflowSumWeights() const override {return finiteOverflowSumWeights + posInfSumWeights;}
335 
341  virtual int64_t getNumUnderflows() const override;
342 
348  virtual int64_t getNumOverflows() const override;
349 
355  virtual int64_t getNumNegInfs() const override;
356 
362  virtual int64_t getNumPosInfs() const override;
363 
367  virtual double getNegInfSumWeights() const override {return negInfSumWeights;}
368 
372  virtual double getPosInfSumWeights() const override {return posInfSumWeights;}
374 
383  virtual void setMode(Mode mode);
384 
391  virtual void setRange(double lower, double upper);
392 
398  virtual void setNumPrecollectedValues(int numPrecollect);
399 
406  virtual void setRangeExtensionFactor(double rangeExtensionFactor);
407 
415  virtual void setAutoExtend(bool autoExtend);
416 
422  virtual void setNumBinsHint(int numCells);
423 
429  virtual void setBinSizeHint(double d);
430 
435  _OPPDEPRECATED virtual void setRangeAuto(int numPrecollect=100, double rangeExtensionFactor=2.0);
436 
441  _OPPDEPRECATED virtual void setRangeAutoLower(double upper, int numPrecollect=100, double rangeExtensionFactor=2.0);
442 
447  _OPPDEPRECATED virtual void setRangeAutoUpper(double lower, int numPrecollect=100, double rangeExtensionFactor=2.0);
448 
452  _OPPDEPRECATED virtual void setNumCells(int numCells) final {setNumBinsHint(numCells);}
453 
457  _OPPDEPRECATED virtual void setCellSize(double d) final {setBinSizeHint(d);}
459 };
460 
461 } // namespace omnetpp
462 
463 #endif
Interface and base class for histogram-like density estimation classes.
Definition: cabstracthistogram.h:26
virtual double getOverflowSumWeights() const override
Definition: chistogram.h:334
virtual void collect(double value) override
virtual double getBinValue(int k) const override
Definition: chistogram.h:324
cHistogram(const cHistogram &other)
Definition: chistogram.h:143
virtual cHistogram * dup() const override
Definition: chistogram.h:164
virtual double getPosInfSumWeights() const override
Definition: chistogram.h:372
virtual double getNegInfSumWeights() const override
Definition: chistogram.h:367
virtual int getNumBins() const override
Definition: chistogram.h:313
Buffer for the communications layer of parallel simulation.
Definition: ccommbuffer.h:41
cIHistogramStrategy * getStrategy() const
Definition: chistogram.h:233
Generic histogram class, capable of representing both unweighted and weighted distributions. Histogram data are stored as n+1 bin edges and n bin values, both being double-precision floating point values. Upper and lower outliers (as well as positive and negative infinities) are kept as counts (for unweighted statistics) or as sum of weights (for weighted statistics).
Definition: chistogram.h:88
Interface for histogram strategy classes. Histogram strategies encapsulate the task of setting up and...
Definition: chistogramstrategy.h:29
virtual void collectWeighted(double value, double weight) override
virtual _OPPDEPRECATED void setCellSize(double d) final
Definition: chistogram.h:457
Definition: cabstracthistogram.h:21
virtual double getUnderflowSumWeights() const override
Definition: chistogram.h:329
virtual _OPPDEPRECATED void setNumCells(int numCells) final
Definition: chistogram.h:452
Mode
Definition: chistogram.h:95
A generic, very configurable histogram strategy that is meant to provide a good quality histogram for...
Definition: chistogramstrategy.h:304
virtual double getBinEdge(int k) const override
Definition: chistogram.h:318
const std::vector< double > & getBinEdges() const
Definition: chistogram.h:302
const std::vector< double > & getBinValues() const
Definition: chistogram.h:308
cStatistic is an abstract class for computing statistical properties of a random variable.
Definition: cstatistic.h:34