cstddev.h

00001 //==========================================================================
00002 //  CSTDDEV.H - part of
00003 //                     OMNeT++/OMNEST
00004 //            Discrete System Simulation in C++
00005 //
00006 //
00007 //  Declaration of the following classes:
00008 //    cStdDev: basic statistics (mean, stddev, min, max, etc)
00009 //    cWeightedStdDev: weighted version
00010 //
00011 //==========================================================================
00012 
00013 /*--------------------------------------------------------------*
00014   Copyright (C) 1992-2008 Andras Varga
00015   Copyright (C) 2006-2008 OpenSim Ltd.
00016 
00017   This file is distributed WITHOUT ANY WARRANTY. See the file
00018   `license' for details on this and other legal matters.
00019 *--------------------------------------------------------------*/
00020 
00021 #ifndef __CSTDDEV_H
00022 #define __CSTDDEV_H
00023 
00024 #include <stdio.h>
00025 #include "cstatistic.h"
00026 
00027 NAMESPACE_BEGIN
00028 
00034 class SIM_API cStdDev : public cStatistic
00035 {
00036   protected:
00037     long num_vals;
00038     double min_vals, max_vals;
00039     double sum_vals, sqrsum_vals;
00040 
00041   private:
00042     void copy(const cStdDev& other);
00043 
00044   protected:
00045     void doMerge(const cStatistic *other);
00046 
00047   public:
00050 
00054     cStdDev(const cStdDev& r) : cStatistic(r) {copy(r);}
00055 
00059     explicit cStdDev(const char *name=NULL);
00060 
00064     virtual ~cStdDev() {}
00065 
00069     cStdDev& operator=(const cStdDev& res);
00071 
00074 
00079     virtual cStdDev *dup() const  {return new cStdDev(*this);}
00080 
00085     virtual std::string info() const;
00086 
00091     virtual std::string detailedInfo() const;
00092 
00098     virtual void parsimPack(cCommBuffer *buffer);
00099 
00105     virtual void parsimUnpack(cCommBuffer *buffer);
00107 
00110 
00114     virtual void collect(double value);
00115 
00119     virtual void collect(SimTime value) {collect(value.dbl());}
00120 
00127     virtual void merge(const cStatistic *other);
00128 
00132     virtual bool isWeighted() const  {return false;}
00133 
00137     virtual long getCount() const  {return num_vals;}
00138 
00142     virtual double getSum() const  {return sum_vals;}
00143 
00147     virtual double getSqrSum() const  {return sqrsum_vals;}
00148 
00152     virtual double getMin() const  {return min_vals;}
00153 
00157     virtual double getMax() const  {return max_vals;}
00158 
00163     virtual double getMean() const  {return num_vals==0 ? 0 : sum_vals/num_vals;}
00164 
00168     virtual double getStddev() const;
00169 
00173     virtual double getVariance() const;
00174 
00178     virtual double getWeights() const  {return getCount();}
00179 
00184     virtual double getWeightedSum() const  {return getSum();}
00185 
00190     virtual double getSqrSumWeights() const  {return getCount();}
00191 
00196     virtual double getWeightedSqrSum() const  {return getSqrSum();}
00197 
00202     virtual double random() const;
00203 
00207     virtual void clearResult();
00208 
00212     virtual void saveToFile(FILE *) const;
00213 
00218     virtual void loadFromFile(FILE *);
00220 };
00221 
00222 
00223 
00230 class SIM_API cWeightedStdDev : public cStdDev
00231 {
00232   protected:
00233     double sum_weights;
00234     double sum_weighted_vals;
00235     double sum_squared_weights;
00236     double sum_weights_squared_vals;
00237 
00238   private:
00239     void copy(const cWeightedStdDev& other);
00240 
00241   public:
00244 
00248     cWeightedStdDev(const cWeightedStdDev& r) : cStdDev(r) {copy(r);}
00249 
00253     explicit cWeightedStdDev(const char *name=NULL) : cStdDev(name)  {sum_weights=sum_weighted_vals=sum_squared_weights=sum_weights_squared_vals=0.0;}
00254 
00258     virtual ~cWeightedStdDev() {}
00259 
00263     cWeightedStdDev& operator=(const cWeightedStdDev& res);
00265 
00268 
00273     virtual cWeightedStdDev *dup() const  {return new cWeightedStdDev(*this);}
00274 
00279     virtual std::string info() const;
00280 
00286     virtual void parsimPack(cCommBuffer *buffer);
00287 
00293     virtual void parsimUnpack(cCommBuffer *buffer);
00295 
00298 
00302     virtual void collect(double value)  {collect2(value,1.0);}
00303 
00307     virtual void collect(SimTime value) {collect(value.dbl());}
00308 
00312     virtual bool isWeighted() const  {return true;}
00313 
00317     virtual void collect2(double value, double weight);
00318 
00322     virtual void collect2(SimTime value, double weight) {collect2(value.dbl(), weight);}
00323 
00327     virtual void collect2(double value, SimTime weight) {collect2(value, weight.dbl());}
00328 
00332     virtual void collect2(SimTime value, SimTime weight) {collect2(value.dbl(), weight.dbl());}
00333 
00339     virtual void merge(const cStatistic *other);
00340 
00344     virtual void clearResult();
00345 
00350     virtual double getMean() const  {return sum_weights==0 ? 0 : sum_weighted_vals / sum_weights;}
00351 
00355     virtual double getVariance() const;
00356 
00360     virtual double getWeights() const  {return sum_weights;}
00361 
00365     virtual double getWeightedSum() const  {return sum_weighted_vals;}
00366 
00370     virtual double getSqrSumWeights() const  {return sum_squared_weights;}
00371 
00375     virtual double getWeightedSqrSum() const  {return sum_weights_squared_vals;}
00376 
00380     virtual void saveToFile(FILE *) const;
00381 
00385     virtual void loadFromFile(FILE *);
00387 };
00388 
00389 NAMESPACE_END
00390 
00391 #endif
00392 

Generated on Wed Apr 3 14:40:27 2013 for OMNeT++ Simulation Library by  doxygen 1.5.5