chistogram.h Source File

API: chistogram.h Source File
API
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#include "statsum_t.h"
22
23namespace omnetpp {
24
27
89class SIM_API cHistogram : public cAbstractHistogram
90{
91 public:
96 enum Mode {MODE_AUTO, MODE_INTEGERS, MODE_REALS, MODE_DOUBLES /*deprecated*/ = MODE_REALS};
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 statsum_t finiteUnderflowSumWeights = 0, finiteOverflowSumWeights = 0;
104 statsum_t 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
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
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 virtual std::vector<double> getBinEdges() const override {return binEdges;}
303
308 virtual std::vector<double> getBinValues() const override {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
377
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);
431};
432
433} // namespace omnetpp
434
435#endif
cAbstractHistogram(const cAbstractHistogram &other)=default
A generic, very configurable histogram strategy that is meant to provide a good quality histogram for...
Definition chistogramstrategy.h:305
Buffer for the communications layer of parallel simulation.
Definition ccommbuffer.h:42
Generic histogram class, capable of representing both unweighted and weighted distributions....
Definition chistogram.h:90
virtual void setRange(double lower, double upper)
virtual double getUnderflowSumWeights() const override
Definition chistogram.h:329
virtual bool binsAlreadySetUp() const override
virtual double getNegInfSumWeights() const override
Definition chistogram.h:367
virtual void mergeBins(int groupSize)
virtual int64_t getNumOverflows() const override
virtual double getBinValue(int k) const override
Definition chistogram.h:324
virtual void setMode(Mode mode)
virtual void collectWeighted(double value, double weight) override
virtual double getOverflowSumWeights() const override
Definition chistogram.h:334
virtual void setNumPrecollectedValues(int numPrecollect)
virtual void prependBins(const std::vector< double > &edges)
virtual void collect(double value) override
Mode
Definition chistogram.h:96
virtual void loadFromFile(FILE *f) override
virtual void parsimPack(cCommBuffer *buffer) const override
virtual std::vector< double > getBinValues() const override
Definition chistogram.h:308
cIHistogramStrategy * getStrategy() const
Definition chistogram.h:233
virtual void extendBinsTo(double value, double step, int maxNumBins=INT_MAX)
virtual int64_t getNumNegInfs() const override
cHistogram & operator=(const cHistogram &other)
cHistogram(const char *name, int numBinsHint, bool weighted=false)
virtual int getNumBins() const override
Definition chistogram.h:313
virtual cHistogram * dup() const override
Definition chistogram.h:164
virtual void parsimUnpack(cCommBuffer *buffer) override
virtual void clear() override
virtual void appendBins(const std::vector< double > &edges)
virtual int64_t getNumPosInfs() const override
virtual void saveToFile(FILE *f) const override
virtual double getBinEdge(int k) const override
Definition chistogram.h:318
void setStrategy(cIHistogramStrategy *strategy)
cHistogram(const cHistogram &other)
Definition chistogram.h:143
virtual void setRangeExtensionFactor(double rangeExtensionFactor)
virtual void setNumBinsHint(int numCells)
cHistogram(const char *name, cIHistogramStrategy *strategy, bool weighted=false)
virtual void merge(const cStatistic *other) override
virtual void createUniformBins(double lo, double hi, double step)
virtual std::vector< double > getBinEdges() const override
Definition chistogram.h:302
virtual void setBinSizeHint(double d)
virtual int64_t getNumUnderflows() const override
virtual void setAutoExtend(bool autoExtend)
virtual void setUpBins() override
virtual void setBinEdges(const std::vector< double > &edges)
virtual double getPosInfSumWeights() const override
Definition chistogram.h:372
cHistogram(const char *name=nullptr, bool weighted=false)
Interface for histogram strategy classes. Histogram strategies encapsulate the task of setting up and...
Definition chistogramstrategy.h:30
cStatistic is an abstract class for computing statistical properties of a random variable.
Definition cstatistic.h:35
virtual void collectWeighted(double value, double weight)
virtual void collect(double value)=0