|
Isis 3.0 Developer's Reference (API) |
Home |
00001 #ifndef _CONTROLNETSTATISTICS_H_ 00002 #define _CONTROLNETSTATISTICS_H_ 00003 00004 #include <map> 00005 #include <iostream> 00006 #include <vector> 00007 #include "Progress.h" 00008 #include "PvlGroup.h" 00009 #include "SerialNumberList.h" 00010 #include "Statistics.h" 00011 00035 namespace Isis { 00036 class ControlNet; 00037 class ControlCubeGraphNode; 00038 class Progress; 00039 class PvlGroup; 00040 00074 class ControlNetStatistics { 00075 public: 00077 ControlNetStatistics(ControlNet *pCNet, const QString &psSerialNumFile, Progress *pProgress = 0); 00078 00080 ControlNetStatistics(ControlNet *pCNet, Progress *pProgress = 0); 00081 00083 ~ControlNetStatistics(); 00084 00086 enum ePointDetails { total, ignore, locked, fixed, constrained, freed }; 00087 static const int numPointDetails = 6; 00088 00090 enum ePointIntStats { totalPoints, validPoints, ignoredPoints, fixedPoints, constrainedPoints, freePoints, editLockedPoints, 00091 totalMeasures, validMeasures, ignoredMeasures, editLockedMeasures }; 00092 static const int numPointIntStats = 11; 00093 00095 enum ePointDoubleStats { avgResidual, minResidual, maxResidual, minLineResidual, maxLineResidual, minSampleResidual, maxSampleResidual, 00096 avgPixelShift, minPixelShift, maxPixelShift, minLineShift, maxLineShift, minSampleShift, maxSampleShift, 00097 minGFit, maxGFit, minEccentricity, maxEccentricity, minPixelZScore, maxPixelZScore}; 00098 static const int numPointDblStats = 20; 00099 00101 enum ImageStats { imgSamples, imgLines, imgTotalPoints, imgIgnoredPoints, imgFixedPoints, imgLockedPoints, imgLocked, 00102 imgConstrainedPoints, imgFreePoints, imgConvexHullArea, imgConvexHullRatio }; 00103 static const int numImageStats = 11; 00104 00106 void GenerateImageStats(); 00107 00109 void PrintImageStats(const QString &psImageFile); 00110 00112 std::vector<double> GetImageStatsBySerialNum(QString psSerialNum) const; 00113 00115 void GeneratePointStats(const QString &psPointFile); 00116 00118 void GenerateControlNetStats(PvlGroup &pStatsGrp); 00119 00121 int NumValidPoints() const { 00122 return (*mPointIntStats.find(validPoints)).second; 00123 } 00124 00126 int NumFixedPoints() const { 00127 return (*mPointIntStats.find(fixedPoints)).second; 00128 } 00129 00131 int NumConstrainedPoints() const { 00132 return (*mPointIntStats.find(constrainedPoints)).second; 00133 } 00134 00136 int NumFreePoints() const { 00137 return (*mPointIntStats.find(freePoints)).second; 00138 } 00139 00141 int NumIgnoredPoints() const { 00142 return (*mPointIntStats.find(ignoredPoints)).second; 00143 } 00144 00146 int NumEditLockedPoints() const { 00147 return (*mPointIntStats.find(editLockedPoints)).second; 00148 } 00149 00151 int NumMeasures() const { 00152 return (*mPointIntStats.find(totalMeasures)).second; 00153 } 00154 00156 int NumValidMeasures() const { 00157 return (*mPointIntStats.find(validMeasures)).second; 00158 } 00159 00161 int NumIgnoredMeasures() const { 00162 return (*mPointIntStats.find(ignoredMeasures)).second; 00163 } 00164 00166 int NumEditLockedMeasures() const { 00167 return (*mPointIntStats.find(editLockedMeasures)).second; 00168 } 00169 00171 double GetAverageResidual() const { 00172 return (*mPointDoubleStats.find(avgResidual)).second; 00173 } 00174 00176 double GetMinimumResidual() const { 00177 return (*mPointDoubleStats.find(minResidual)).second; 00178 } 00179 00181 double GetMaximumResidual() const { 00182 return (*mPointDoubleStats.find(maxResidual)).second; 00183 } 00184 00186 double GetMinLineResidual() const { 00187 return (*mPointDoubleStats.find(minLineResidual)).second; 00188 } 00189 00191 double GetMinSampleResidual() const { 00192 return (*mPointDoubleStats.find(minSampleResidual)).second; 00193 } 00194 00196 double GetMaxLineResidual() const { 00197 return (*mPointDoubleStats.find(maxLineResidual)).second; 00198 } 00199 00201 double GetMaxSampleResidual() const { 00202 return (*mPointDoubleStats.find(maxSampleResidual)).second; 00203 } 00204 00206 double GetMinLineShift() const { 00207 return (*mPointDoubleStats.find(minLineShift)).second; 00208 } 00209 00211 double GetMaxLineShift() const { 00212 return (*mPointDoubleStats.find(maxLineShift)).second; 00213 } 00214 00216 double GetMinSampleShift() const { 00217 return (*mPointDoubleStats.find(minSampleShift)).second; 00218 } 00219 00221 double GetMaxSampleShift() const { 00222 return (*mPointDoubleStats.find(maxSampleShift)).second; 00223 } 00224 00226 double GetMinPixelShift() const { 00227 return (*mPointDoubleStats.find(minPixelShift)).second; 00228 } 00229 00231 double GetMaxPixelShift() const { 00232 return (*mPointDoubleStats.find(maxPixelShift)).second; 00233 } 00234 00236 double GetAvgPixelShift() const { 00237 return (*mPointDoubleStats.find(avgPixelShift)).second; 00238 } 00239 00240 protected: 00241 SerialNumberList mSerialNumList; 00242 ControlNet *mCNet; 00243 Progress *mProgress; 00244 QList<ControlCubeGraphNode *> mCubeGraphNodes; 00245 00246 private: 00247 std::map<int, int> mPointIntStats; 00248 std::map<int, double> mPointDoubleStats; 00249 std::map<QString, std::vector<double> > mImageMap; 00250 std::map<QString, bool> mSerialNumMap; 00251 00253 void GetPointIntStats(); 00254 00256 void GetPointDoubleStats(); 00257 00258 void UpdateMinMaxStats(const Statistics & stats, 00259 ePointDoubleStats min, 00260 ePointDoubleStats max); 00261 00263 void InitPointDoubleStats(); 00264 00266 void InitSerialNumMap(); 00267 00268 int numCNetImages; 00269 00270 Statistics mConvexHullStats, mConvexHullRatioStats; 00271 }; 00272 } 00273 #endif