16#ifndef __OMNETPP_CHISTOGRAMSTRATEGY_H
17#define __OMNETPP_CHISTOGRAMSTRATEGY_H
19#include <omnetpp/chistogram.h>
29class SIM_API cIHistogramStrategy :
public cObject
31 friend class cHistogram;
36 cHistogram *hist =
nullptr;
41 cIHistogramStrategy() {}
42 cIHistogramStrategy(
const cIHistogramStrategy& other) {}
43 cIHistogramStrategy& operator=(
const cIHistogramStrategy& other) {hist=
nullptr;
return *
this;}
105class SIM_API cFixedRangeHistogramStrategy :
public cIHistogramStrategy
111 Mode mode = cHistogram::MODE_REALS;
114 void copy(
const cFixedRangeHistogramStrategy& other);
119 cFixedRangeHistogramStrategy() {}
120 cFixedRangeHistogramStrategy(
double lo,
double hi,
int numBins, Mode mode=cHistogram::MODE_REALS) :
121 lo(lo), hi(hi), numBins(numBins), mode(mode) {}
122 cFixedRangeHistogramStrategy(
const cFixedRangeHistogramStrategy& other): cIHistogramStrategy(other) {copy(other);}
123 cFixedRangeHistogramStrategy& operator=(
const cFixedRangeHistogramStrategy& other);
124 virtual cFixedRangeHistogramStrategy *
dup()
const override {
return new cFixedRangeHistogramStrategy(*
this);}
129 void setRange(
double lo,
double hi) {this->lo = lo; this->hi = hi;}
130 double getUpperLimit()
const {
return hi;}
131 void setUpperLimit(
double hi) {this->hi = hi;}
132 double getLowerLimit()
const {
return lo;}
133 void setLowerLimit(
double lo) {this->lo = lo;}
134 Mode getMode()
const {
return mode;}
135 void setMode(Mode mode) {this->mode = mode;}
136 double getBinSize()
const {
return numBins;}
137 void setBinSize(
double binSize) {this->numBins = binSize;}
157class SIM_API cPrecollectionBasedHistogramStrategy :
public cIHistogramStrategy
160 bool inPrecollection =
true;
161 size_t numToPrecollect = 1000;
162 size_t numToCollate = 10;
163 double lastRange = NAN;
164 int rangeUnchangedCounter = 0;
165 int rangeUnchangedThreshold = 50;
166 double finiteMinValue = NAN, finiteMaxValue = NAN;
167 std::vector<double> values;
168 std::vector<double> weights;
171 virtual void moveValuesIntoHistogram();
172 virtual bool precollect(
double value,
double weight=1.0);
173 virtual void createBins() = 0;
176 void copy(
const cPrecollectionBasedHistogramStrategy& other);
181 cPrecollectionBasedHistogramStrategy() {}
182 cPrecollectionBasedHistogramStrategy(
const cPrecollectionBasedHistogramStrategy& other): cIHistogramStrategy(other) {copy(other);}
183 cPrecollectionBasedHistogramStrategy& operator=(
const cPrecollectionBasedHistogramStrategy& other);
188 int getNumToPrecollect()
const {
return numToPrecollect;}
189 void setNumToPrecollect(
int numToPrecollect) {this->numToPrecollect = numToPrecollect;}
190 int getNumToCollate()
const {
return numToCollate;}
191 void setNumToCollate(
int numToCollate) {this->numToCollate = numToCollate;}
192 int getRangeUnchangedThreshold()
const {
return rangeUnchangedThreshold;}
193 void setRangeUnchangedThreshold(
int threshold) {this->rangeUnchangedThreshold = threshold;}
222class SIM_API cDefaultHistogramStrategy :
public cPrecollectionBasedHistogramStrategy
225 static const int DEFAULT_NUM_BINS = 60;
226 double rangeExtensionFactor = 1.5;
227 double binSize = NAN;
228 int numBinsHint = -1;
229 int targetNumBins = DEFAULT_NUM_BINS;
230 Mode mode = cHistogram::MODE_AUTO;
231 bool autoExtend =
true;
232 bool binMerging =
true;
233 int maxNumBins = 1000;
236 virtual void createBins()
override;
237 virtual void extendBinsTo(
double value);
238 virtual void reduceNumBinsTo(
int numBins);
239 virtual void mergeAllBinsIntoOne(
double newApproxBinSize);
242 void copy(
const cDefaultHistogramStrategy& other);
247 explicit cDefaultHistogramStrategy(
int numBinsHint=-1, Mode mode=cHistogram::MODE_AUTO) : numBinsHint(numBinsHint), mode(mode) {}
248 cDefaultHistogramStrategy(
const cDefaultHistogramStrategy& other): cPrecollectionBasedHistogramStrategy(other) {copy(other);}
249 cDefaultHistogramStrategy& operator=(
const cDefaultHistogramStrategy& other);
250 virtual cDefaultHistogramStrategy *
dup()
const override {
return new cDefaultHistogramStrategy(*
this);}
255 int getNumBinsHint()
const {
return numBinsHint;}
256 void setNumBinsHint(
int numBins) {this->numBinsHint = numBins;}
304class SIM_API cAutoRangeHistogramStrategy :
public cPrecollectionBasedHistogramStrategy
307 static const int DEFAULT_NUM_BINS = 60;
310 double rangeExtensionFactor = 1.5;
311 int numBinsHint = -1;
312 int targetNumBins = DEFAULT_NUM_BINS;
313 double requestedBinSize = NAN;
314 double binSize = NAN;
315 Mode mode = cHistogram::MODE_AUTO;
316 bool binSizeRounding =
true;
317 bool autoExtend =
true;
318 bool binMerging =
true;
319 int maxNumBins = 1000;
322 virtual void createBins()
override;
323 virtual void extendBinsTo(
double value);
324 virtual void reduceNumBinsTo(
int numBins);
325 virtual void mergeAllBinsIntoOne(
double newApproxBinSize);
328 void copy(
const cAutoRangeHistogramStrategy& other);
333 explicit cAutoRangeHistogramStrategy(Mode mode=cHistogram::MODE_AUTO) : mode(mode) {}
334 explicit cAutoRangeHistogramStrategy(
int numBins, Mode mode=cHistogram::MODE_AUTO) : numBinsHint(numBins), mode(mode) {}
335 cAutoRangeHistogramStrategy(
const cAutoRangeHistogramStrategy& other): cPrecollectionBasedHistogramStrategy(other) {copy(other);}
336 cAutoRangeHistogramStrategy& operator=(
const cAutoRangeHistogramStrategy& other);
337 virtual cAutoRangeHistogramStrategy *
dup()
const override {
return new cAutoRangeHistogramStrategy(*
this);}
342 void setRangeHint(
double lo,
double hi) {this->lo = lo; this->hi = hi;}
343 double getUpperLimitHint()
const {
return hi;}
344 void setUpperLimitHint(
double hi) {this->hi = hi;}
345 double getLowerLimitHint()
const {
return lo;}
346 void setLowerLimitHint(
double lo) {this->lo = lo;}
347 double getRangeExtensionFactor()
const {
return rangeExtensionFactor;}
348 void setRangeExtensionFactor(
double rangeExtensionFactor) {this->rangeExtensionFactor = rangeExtensionFactor;}
349 Mode getMode()
const {
return mode;}
350 void setMode(Mode mode) {this->mode = mode;}
351 double getBinSizeHint()
const {
return requestedBinSize;}
352 void setBinSizeHint(
double binSize) {this->requestedBinSize = binSize;}
353 bool getBinSizeRounding()
const {
return binSizeRounding;}
354 void setBinSizeRounding(
bool binSizeRounding) {this->binSizeRounding = binSizeRounding;}
355 int getNumBinsHint()
const {
return numBinsHint;}
356 void setNumBinsHint(
int numBins) {this->numBinsHint = numBins;}
357 void setAutoExtend(
bool enable) {this->autoExtend = enable;}
358 bool getAutoExtend()
const {
return autoExtend;}
359 void setBinMerging(
bool enable) {this->binMerging = enable;}
360 bool getBinMerging()
const {
return binMerging;}
361 int getMaxNumBins()
const {
return maxNumBins;}
362 void setMaxNumBins(
int numBins) {this->maxNumBins = numBins;}
virtual void collectWeighted(double value, double weight) override
virtual void collect(double value) override
virtual cAutoRangeHistogramStrategy * dup() const override
Definition chistogramstrategy.h:337
virtual void clear() override
void setRangeHint(double lo, double hi)
Use NAN to leave either value unspecified.
Definition chistogramstrategy.h:342
virtual void collectWeighted(double value, double weight) override
virtual void collect(double value) override
virtual void clear() override
Definition chistogramstrategy.h:263
virtual cDefaultHistogramStrategy * dup() const override
Definition chistogramstrategy.h:250
virtual void collectWeighted(double value, double weight) override
virtual void collect(double value) override
virtual void clear() override
Definition chistogramstrategy.h:145
virtual cFixedRangeHistogramStrategy * dup() const override
Definition chistogramstrategy.h:124
virtual void setUpBins() override
Mode
Definition chistogram.h:96
virtual void collect(double value)=0
cHistogram * getHistogram() const
Definition chistogramstrategy.h:57
void setHistogram(cHistogram *hist)
virtual void collectWeighted(double value, double weight)=0
virtual void setUpBins()=0
cObject()
Definition cobject.h:124
virtual void clear() override
virtual void setUpBins() override