USGS

Isis 3.0 Developer's Reference (API)

Home

Statistics.h

Go to the documentation of this file.
00001 #ifndef Statistics_h
00002 #define Statistics_h
00003 
00024 #include "SpecialPixel.h"
00025 #include "Constants.h"
00026 
00027 namespace Isis {
00078   class Statistics {
00079     public:
00080       Statistics();
00081       ~Statistics();
00082 
00083       void Reset();
00084       void AddData(const double *data, const unsigned int count);
00094       inline void AddData(const double data) {
00095         p_totalPixels++;
00096         if(Isis::IsValidPixel(data) && InRange(data)) {
00097           p_sum += data;
00098           p_sumsum += data * data;
00099           if(data < p_minimum) p_minimum = data;
00100           if(data > p_maximum) p_maximum = data;
00101           p_validPixels++;
00102         }
00103         else if(Isis::IsNullPixel(data)) {
00104           p_nullPixels++;
00105         }
00106         else if(Isis::IsHisPixel(data)) {
00107           p_hisPixels++;
00108         }
00109         else if(Isis::IsHrsPixel(data)) {
00110           p_hrsPixels++;
00111         }
00112         else if(Isis::IsLisPixel(data)) {
00113           p_lisPixels++;
00114         }
00115         else if(Isis::IsLrsPixel(data)) {
00116           p_lrsPixels++;
00117         }
00118         else if(AboveRange(data)) {
00119           p_overRangePixels++;
00120         }
00121         else {
00122           p_underRangePixels++;
00123         }
00124       }
00125 
00126       void RemoveData(const double *data, const unsigned int count);
00127       void RemoveData(const double data);
00128       void SetValidRange(const double minimum = Isis::ValidMinimum, const double maximum = Isis::ValidMaximum);
00129 
00130       double ValidMinimum() const {
00131         return p_validMinimum;
00132       }
00133       double ValidMaximum() const {
00134         return p_validMaximum;
00135       }
00136       bool InRange(const double value) {
00137         return (value >= p_validMinimum && value <= p_validMaximum);
00138       }
00139       bool AboveRange(const double value) {
00140         return (value > p_validMaximum);
00141       }
00142       bool BelowRange(const double value) {
00143         return (value < p_validMinimum);
00144       }
00145 
00146       double Average() const;
00147       double StandardDeviation() const;
00148       double Variance() const;
00149       double Rms() const;
00150 
00151       double Minimum() const;
00152       double Maximum() const;
00153       double ChebyshevMinimum(const double percent = 99.5) const;
00154       double ChebyshevMaximum(const double percent = 99.5) const;
00155       double BestMinimum(const double percent = 99.5) const;
00156       double BestMaximum(const double percent = 99.5) const;
00157       double ZScore(const double value) const;
00158 
00159       BigInt TotalPixels() const;
00160       BigInt ValidPixels() const;
00161       BigInt OverRangePixels() const;
00162       BigInt UnderRangePixels() const;
00163       BigInt NullPixels() const;
00164       BigInt LisPixels() const;
00165       BigInt LrsPixels() const;
00166       BigInt HisPixels() const;
00167       BigInt HrsPixels() const;
00168       BigInt OutOfRangePixels() const;
00169 
00170 
00176       double Sum() const {
00177         return p_sum;
00178       };
00179 
00185       double SumSquare() const {
00186         return p_sumsum;
00187       };
00188 
00189     private:
00190       double p_sum;           
00191       double p_sumsum;        
00192       double p_minimum;       
00193       double p_maximum;       
00194       double p_validMinimum;  
00195       double p_validMaximum;  
00196       BigInt p_totalPixels;   
00197       BigInt p_validPixels;   
00198       BigInt p_nullPixels;    
00199       BigInt p_lrsPixels;     
00200       BigInt p_lisPixels;     
00201       BigInt p_hrsPixels;     
00202       BigInt p_hisPixels;     
00203       BigInt p_underRangePixels; 
00204       BigInt p_overRangePixels; 
00205       bool   p_removedData;   
00207   };
00208 } // end namespace isis
00209 
00210 #endif
00211