00001 #pragma once
00002
00003 #if _MSC_VER > 1000
00004 #pragma once
00005 #endif // _MSC_VER > 1000
00006 #include <iostream>
00007 #include <fstream>
00008 #include <string>
00009 #include <vector>
00010 #include <map>
00011 #include "typedefs.h"
00012 #include "RangStatistik.h"
00013 #include <assert.h>
00014 namespace nCenterFocus
00015 {
00016
00017
00027 class BaseQuadricsStatistic
00028 {
00029
00030 public:
00031
00032
00036 BaseQuadricsStatistic( std::string name,
00037 int _permittedMinSuccessiveVanishedFocalValuesNum,
00038 int _maxPermittedVanishedFocalValuesNum,
00039 int _maxPermittedJacobianRank
00040 );
00041
00042 BaseQuadricsStatistic(const BaseQuadricsStatistic& ref);
00043
00044 virtual ~BaseQuadricsStatistic();
00047 void clear();
00048
00051 inline void addQuadricsStatistic( int successiveVanishedFocalValues,
00052 int jacobianRank,
00053 int quadricsRank);
00059
00060 inline int getPermittedMinSuccessiveVanishedFocalValues() const ;
00061 inline int getPermittedMaxVanishedFocalValuesNum() const ;
00062 inline int getPermittedMaxJacobianRank() const ;
00068 void print(std::ostream &f) const;
00069 void printValue(std::ostream &os ) const;
00073 private:
00074
00075 BaseQuadricsStatistic & operator=(const BaseQuadricsStatistic& ref)
00076 { assert(false); return *this; }
00077
00078
00081 int getHighestLoggedQuadricsRank( ) const;
00087
00088 std::vector<BaseRankStatistic*> rankStatistics_m;
00089
00090 std::vector<long64> expSum_m;
00091
00092 std::string name_m;
00093
00094 int maxQuadricRank_m;
00095 int maxJacobianRank_m;
00096
00097 int maxFocalValuesToCompute_m;
00098 int minSuccessiveVanishedFocalValues_m;
00099
00100 };
00101
00102 inline int BaseQuadricsStatistic::getPermittedMinSuccessiveVanishedFocalValues() const
00103 {
00104 return minSuccessiveVanishedFocalValues_m;
00105 }
00106
00107
00108 inline int BaseQuadricsStatistic::getPermittedMaxVanishedFocalValuesNum() const
00109 {
00110 return maxFocalValuesToCompute_m;
00111 }
00112
00113
00114 inline int BaseQuadricsStatistic::getPermittedMaxJacobianRank() const
00115 {
00116 return maxJacobianRank_m ;
00117 }
00118
00119
00125 class QuadricsStatistic
00126 {
00127
00128 public:
00131 QuadricsStatistic( std::string name,
00132 int _permittedMinSuccessiveVanishedFocalValuesNum,
00133 int _maxPermittedVanishedFocalValuesNum,
00134 int _maxPermittedJacobianRank
00135 );
00136
00137 virtual ~QuadricsStatistic();
00138
00142 void clear();
00143
00146 inline void addQuadricsStatistic( int successiveVanishedFocalValues,
00147 int jacobianRank,
00148 int quadricsRank,
00149 bool liftTestPassed = true);
00154 void print(std::ostream &f) const;
00157 private:
00158 std::string name_m;
00159
00161 std::pair< BaseQuadricsStatistic, BaseQuadricsStatistic > quadricStatisticPair_m;
00162
00163
00164 };
00165
00166
00167 inline void BaseQuadricsStatistic::addQuadricsStatistic(int successiveVanishedFocalValues, int jacobianRank, int quadricsRank)
00168 {
00169 assert(quadricsRank>=0 && quadricsRank<=maxQuadricRank_m);
00170
00171 expSum_m[quadricsRank]++;
00172 rankStatistics_m[quadricsRank]->addRankStatistic( successiveVanishedFocalValues, jacobianRank );
00173 }
00174
00175
00177
00180 inline void QuadricsStatistic::addQuadricsStatistic(int successiveVanishedFocalValues,int jacobianRank, int quadricsRank, bool liftTestPassed )
00181 {
00182 if (liftTestPassed)
00183 {
00184 quadricStatisticPair_m.first.addQuadricsStatistic(successiveVanishedFocalValues, jacobianRank, quadricsRank);
00185 }
00186 else
00187 {
00188 quadricStatisticPair_m.second.addQuadricsStatistic(successiveVanishedFocalValues, jacobianRank, quadricsRank);
00189 }
00190 }
00191
00192
00198 class LiftAndQuadricsStatistic
00199 {
00200
00201 public:
00202 typedef std::map<int, BaseQuadricsStatistic*> BaseQuadricsStatisticMapType;
00203
00204 LiftAndQuadricsStatistic( std::string name,
00205 int _minPermittedVanishedFocalValuesNum,
00206 int _maxPermittedFocalValuesNum,
00207 int _maxPermittedJacobianRank,
00208 int exhaustiveMaxLift,
00209 int exhaustiveLiftTrials
00210 );
00211
00212 virtual ~LiftAndQuadricsStatistic();
00213
00214
00215 void clear();
00216
00219 inline void addLiftAndQuadricsStatistic(int successiveVanishedFocalValues,
00220 int jacobianRank,
00221 int quadricsRank,
00222 bool liftTestPassed = true,
00223 int mitFailedLiftNr=-1);
00227
00230 void printValue(std::ostream &f) const;
00231
00232 void print(std::ostream &f) const;
00235 private:
00236 std::string name_m;
00237
00238
00239 int exhaustiveMaxLift_m;
00240 int exhaustiveLiftTrials_m;
00241
00243 std::pair< BaseQuadricsStatistic, BaseQuadricsStatistic > quadricStatisticPair_m;
00244
00245
00246 BaseQuadricsStatisticMapType failedQuadricStatistic_m;
00247 };
00248
00249
00251
00254 inline void LiftAndQuadricsStatistic::addLiftAndQuadricsStatistic( int successiveVanishedFocalValues,
00255 int jacobianRank,
00256 int quadricsRank,
00257 bool liftTestPassed ,
00258 int minFailedLiftNr)
00259 {
00260
00261 if (liftTestPassed)
00262 {
00263 quadricStatisticPair_m.first.addQuadricsStatistic(successiveVanishedFocalValues, jacobianRank, quadricsRank);
00264 }
00265 else
00266 {
00267
00268 quadricStatisticPair_m.second.addQuadricsStatistic(successiveVanishedFocalValues, jacobianRank, quadricsRank);
00269
00270 BaseQuadricsStatisticMapType::const_iterator it=failedQuadricStatistic_m.find(minFailedLiftNr);
00271 if (it == failedQuadricStatistic_m.end() )
00272 {
00273 failedQuadricStatistic_m[minFailedLiftNr] = new BaseQuadricsStatistic( name_m+"_failedLiftTest",
00274 quadricStatisticPair_m.first.getPermittedMinSuccessiveVanishedFocalValues(),
00275 quadricStatisticPair_m.first.getPermittedMaxVanishedFocalValuesNum(),
00276 quadricStatisticPair_m.first.getPermittedMaxJacobianRank()
00277 )
00278 ;
00279
00280
00281 }
00282 failedQuadricStatistic_m[minFailedLiftNr]->addQuadricsStatistic(successiveVanishedFocalValues, jacobianRank, quadricsRank);
00283 }
00284 }
00285
00286
00287
00288 };