00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _STATISTIC_TOOLS_H
00025 #define _STATISTIC_TOOLS_H
00026
00027
00028 class AbstractMeasure;
00029 class StatisticMeasure;
00030 class ComplexMeasure;
00031
00032
00033 #include "inspectable.h"
00034 #include "callbackable.h"
00035 #include "measuremodes.h"
00036 #include "analysationmodes.h"
00037 #include "templatevalueanalysation.h"
00038
00039 #define GET_TYPE_ANALYSATION(type) getAnalysation<type,defaultZero,defaultLower<type>,defaultHigher<type>,defaultDoubleDiv<type>,defaultDoubleMul<type>,defaultAdd<type>,defaultSub<type>,defaultMul<type>,defaultDiv<type> >
00040 #define GET_DOUBLE_ANALYSATION GET_TYPE_ANALYSATION(double)
00041
00042
00043 class StatisticTools : public Inspectable, public Callbackable {
00044
00045 public:
00046 StatisticTools(const std::string& name = "StatisticTools") : Inspectable(name), beginMeasureCounter(0) { }
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063 virtual double& addMeasure(double& observedValue, const char* measureName, MeasureMode mode, long stepSpan, double additionalParam=0);
00064
00065
00066
00067
00068
00069 virtual StatisticMeasure* getMeasure(double& observedValue,const char* measureName, MeasureMode mode, long stepSpan, double additionalParam=0);
00070
00071
00072
00073
00074
00075
00076
00077
00078 virtual double& addMeasure(AbstractMeasure* measure);
00079
00080
00081
00082
00083
00084
00085
00086
00087 virtual double& addMeasureList(std::list<AbstractMeasure*> measureList);
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097 virtual double& addMeasureList(std::list<ComplexMeasure*> measureList);
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107 virtual double& addMeasureList(std::list<StatisticMeasure*> measureList);
00108
00109
00110
00111
00112
00113
00114
00115
00116 virtual void beginMeasureAt(long step);
00117
00118
00119
00120
00121
00122 virtual bool measureStarted() { return (beginMeasureCounter==0?true:false); }
00123
00124
00125
00126
00127
00128
00129
00130
00131 virtual void doOnCallBack(BackCaller* source, BackCaller::CallbackableType type = BackCaller::DEFAULT_CALLBACKABLE_TYPE);
00132
00133
00134 protected:
00135 std::list<AbstractMeasure*> activeMeasures;
00136 long beginMeasureCounter;
00137 };
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147 template
00148 <class type,
00149 type zero(void),
00150 bool lower(const type&, const type&),
00151 bool higher(const type&, const type&),
00152 type doubleDiv(const type&, const double&),
00153 type doubleMul(const type&, const double&),
00154 type add(const type&, const type&),
00155 type sub(const type&, const type&),
00156 type mul(const type&, const type&),
00157 type div(const type&, const type&)>
00158 ANALYSATION_CONTEXT* getAnalysation(std::vector<type> values) {
00159 return new ANALYSATION_CONTEXT(values);
00160 }
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170 template
00171 <class type,
00172 type zero(void),
00173 bool lower(const type&, const type&),
00174 bool higher(const type&, const type&),
00175 type doubleDiv(const type&, const double&),
00176 type doubleMul(const type&, const double&),
00177 type add(const type&, const type&),
00178 type sub(const type&, const type&),
00179 type mul(const type&, const type&),
00180 type div(const type&, const type&)>
00181 type getAnalysation(ANALYSATION_CONTEXT* tvAnalysation, AnalysationMode mode, unsigned int feature = 0) {
00182 switch(mode){
00183 case AM_AVG:
00184 return tvAnalysation->getAvg();
00185 case AM_MIN:
00186 return tvAnalysation->getMin();
00187 case AM_MAX:
00188 return tvAnalysation->getMax();
00189 case AM_RANGE:
00190 return tvAnalysation->getRange();
00191 case AM_IQR:
00192 return tvAnalysation->getIQR();
00193 case AM_MED:
00194 return tvAnalysation->getMedian();
00195 case AM_WHISKER:
00196 return tvAnalysation->getWhisker(1.5);
00197 case AM_Q1:
00198 return tvAnalysation->getQuartil1();
00199 case AM_Q3:
00200 return tvAnalysation->getQuartil3();
00201 case AM_W1:
00202 return tvAnalysation->getWhisker1(1.5);
00203 case AM_W3:
00204 return tvAnalysation->getWhisker3(1.5);
00205 case AM_NUM_EXT:
00206 return (type)tvAnalysation->getNumExtrems(1.5);
00207 case AM_EXT:
00208 return tvAnalysation->getExtrem(1.5,feature);
00209 case AM_BEST:
00210 return tvAnalysation->getBest();
00211 default:
00212 return zero();
00213 }
00214 }
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224 template
00225 <class type,
00226 type zero(void),
00227 bool lower(const type&, const type&),
00228 bool higher(const type&, const type&),
00229 type doubleDiv(const type&, const double&),
00230 type doubleMul(const type&, const double&),
00231 type add(const type&, const type&),
00232 type sub(const type&, const type&),
00233 type mul(const type&, const type&),
00234 type div(const type&, const type&)>
00235 type getAnalysation(std::vector<type> values, AnalysationMode mode, unsigned int feature = 0) {
00236 ANALYSATION_CONTEXT* context = GET_TYPE_ANALYSATION(type)(values);
00237 type result = GET_TYPE_ANALYSATION(type)(context,mode,feature);
00238 delete context;
00239 return result;
00240 }
00241
00242 #endif