OMNeT++ Simulation Library  5.4.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 
86 class SIM_API cHistogram : public cAbstractHistogram
87 {
88  public:
93  enum Mode {MODE_AUTO, MODE_INTEGERS, MODE_REALS, MODE_DOUBLES /*deprecated*/ = MODE_REALS};
94  _OPPDEPRECATED typedef Mode HistogramMode;
95 
96  protected:
97  cIHistogramStrategy *strategy = nullptr; // owned
98 
99  std::vector<double> binEdges;
100  std::vector<double> binValues; // one less than bin edges
101  double underflowSumWeights = 0, overflowSumWeights = 0;
102 
103  public:
104  // INTERNAL, only for cIHistogramSetupStrategy implementations.
105  // Directly collects the value into the existing bins, without delegating to the strategy object
106  virtual void collectIntoHistogram(double value, double weight=1);
107  void dump() const; // for debugging
108  void assertSanity();
109 
110  private:
111  void copy(const cHistogram& other);
112  cAutoRangeHistogramStrategy *getOrCreateAutoRangeStrategy() const;
113 
114  public:
117 
123  explicit cHistogram(const char *name=nullptr, bool weighted=false);
124 
129  explicit cHistogram(const char *name, int numBinsHint, bool weighted=false);
130 
135  explicit cHistogram(const char *name, cIHistogramStrategy *strategy, bool weighted=false);
136 
140  cHistogram(const cHistogram& other): cAbstractHistogram(other) {copy(other);}
141 
146  cHistogram& operator=(const cHistogram& other);
147 
151  virtual ~cHistogram();
153 
156 
161  virtual cHistogram *dup() const override {return new cHistogram(*this);}
162 
168  virtual void parsimPack(cCommBuffer *buffer) const override;
169 
175  virtual void parsimUnpack(cCommBuffer *buffer) override;
177 
180 
185  virtual void collect(double value) override;
187 
194  virtual void collectWeighted(double value, double weight) override;
196 
200  virtual void clear() override;
201 
205  virtual void saveToFile(FILE *f) const override;
206 
210  virtual void loadFromFile(FILE *f) override;
211 
215  virtual void merge(const cStatistic *other) override;
217 
220 
225  void setStrategy(cIHistogramStrategy *strategy);
226 
230  cIHistogramStrategy *getStrategy() const {return strategy;}
231 
236  virtual bool binsAlreadySetUp() const override;
237 
243  virtual void setUpBins() override;
244 
250  virtual void setBinEdges(const std::vector<double>& edges);
251 
258  virtual void createUniformBins(double lo, double hi, double step);
259 
266  virtual void prependBins(const std::vector<double>& edges);
267 
274  virtual void appendBins(const std::vector<double>& edges);
275 
285  virtual void extendBinsTo(double value, double step, int maxNumBins=INT_MAX); // TODO: remove default value for maxNumBins
286 
293  virtual void mergeBins(int groupSize);
294 
299  const std::vector<double>& getBinEdges() const {return binEdges;} // one more than values
300 
305  const std::vector<double>& getBinValues() const {return binValues;}
306 
310  virtual int getNumBins() const override {return binValues.size();}
311 
315  virtual double getBinEdge(int k) const override {return binEdges.at(k);}
316 
321  virtual double getBinValue(int k) const override {return binValues.at(k);}
322 
326  virtual double getUnderflowSumWeights() const override {return underflowSumWeights;}
327 
331  virtual double getOverflowSumWeights() const override {return overflowSumWeights;}
332 
338  virtual int64_t getNumUnderflows() const override;
339 
345  virtual int64_t getNumOverflows() const override;
347 
356  virtual void setMode(Mode mode);
357 
364  virtual void setRange(double lower, double upper);
365 
371  virtual void setNumPrecollectedValues(int numPrecollect);
372 
379  virtual void setRangeExtensionFactor(double rangeExtensionFactor);
380 
388  virtual void setAutoExtend(bool autoExtend);
389 
395  virtual void setNumBinsHint(int numCells);
396 
402  virtual void setBinSizeHint(double d);
403 
408  _OPPDEPRECATED virtual void setRangeAuto(int numPrecollect=100, double rangeExtensionFactor=2.0);
409 
414  _OPPDEPRECATED virtual void setRangeAutoLower(double upper, int numPrecollect=100, double rangeExtensionFactor=2.0);
415 
420  _OPPDEPRECATED virtual void setRangeAutoUpper(double lower, int numPrecollect=100, double rangeExtensionFactor=2.0);
421 
425  _OPPDEPRECATED virtual void setNumCells(int numCells) final {setNumBinsHint(numCells);}
426 
430  _OPPDEPRECATED virtual void setCellSize(double d) final {setBinSizeHint(d);}
432 };
433 
434 } // namespace omnetpp
435 
436 #endif
Interface and base class for histogram-like density estimation classes.
Definition: cabstracthistogram.h:26
virtual double getOverflowSumWeights() const override
Definition: chistogram.h:331
virtual void collect(double value) override
virtual double getBinValue(int k) const override
Definition: chistogram.h:321
cHistogram(const cHistogram &other)
Definition: chistogram.h:140
virtual cHistogram * dup() const override
Definition: chistogram.h:161
virtual int getNumBins() const override
Definition: chistogram.h:310
const std::vector< double > & getBinEdges() const
Definition: chistogram.h:299
Buffer for the communications layer of parallel simulation.
Definition: ccommbuffer.h:41
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 are kept both as counts and as sum of weights.
Definition: chistogram.h:86
Interface for histogram strategy classes. Histogram strategies encapsulate the task of setting up and...
Definition: chistogramstrategy.h:29
const std::vector< double > & getBinValues() const
Definition: chistogram.h:305
virtual void collectWeighted(double value, double weight) override
virtual _OPPDEPRECATED void setCellSize(double d) final
Definition: chistogram.h:430
Definition: cabstracthistogram.h:21
virtual double getUnderflowSumWeights() const override
Definition: chistogram.h:326
virtual _OPPDEPRECATED void setNumCells(int numCells) final
Definition: chistogram.h:425
Mode
Definition: chistogram.h:93
A generic, very configurable histogram strategy that is meant to provide a good quality histogram for...
Definition: chistogramstrategy.h:297
virtual double getBinEdge(int k) const override
Definition: chistogram.h:315
cStatistic is an abstract class for computing statistical properties of a random variable.
Definition: cstatistic.h:34
cIHistogramStrategy * getStrategy() const
Definition: chistogram.h:230