QuadricsStatistic.h

Go to the documentation of this file.
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                 // get permitted
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         //void printLiftAndQuadricsStatistic(std::ostream &f) const;
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                 //assert(minFailedLiftNr>0);
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 };
Generated on Tue Nov 23 13:10:52 2010 for centerfocus by  doxygen 1.6.3