00001
00002 #ifndef ANAPHE_AIDAHISTOGRAM2D
00003 #define ANAPHE_AIDAHISTOGRAM2D 1
00004
00005 #include "AIDA_BaseHistogram.h"
00006 #include "AIDA_Dev/IDevHistogram2D.h"
00007 #include <vector>
00008
00009 namespace Anaphe {
00010 namespace AIDA_Histogram_native {
00011 class GravityBin2D;
00012
00023 class AIDA_Histogram2D : public AIDA_BaseHistogram,
00024 virtual public AIDA::Dev::IDevHistogram2D
00025 {
00026
00027 public:
00029 AIDA_Histogram2D( const std::string& title,
00030 int numberOfBinsX,
00031 double lowEdgeX,
00032 double highEdgeX,
00033 int numberOfBinsY,
00034 double lowEdgeY,
00035 double highEdgeY );
00037 AIDA_Histogram2D( const std::string& title,
00038 const std::vector< double >& edgesX,
00039 const std::vector< double >& edgesY );
00041 AIDA_Histogram2D( const AIDA_Histogram2D& h );
00043 AIDA_Histogram2D( const AIDA::IHistogram2D& h );
00045 ~AIDA_Histogram2D();
00050 protected:
00051 void updateAnnotation() const;
00052 public:
00053 bool reset();
00054 int entries() const;
00055
00057 int allEntries() const;
00058 int extraEntries() const;
00059 double equivalentBinEntries() const;
00060 double sumBinHeights() const;
00061 double sumAllBinHeights() const;
00062 double sumExtraBinHeights() const;
00063 double minBinHeight() const;
00064 double maxBinHeight() const;
00065 bool scale( double scaleFactor );
00066
00068 bool fill( double x, double y, double weight = 1. );
00069 double binMeanX( int indexX, int indexY ) const;
00070 double binMeanY( int indexX, int indexY ) const;
00071 int binEntries( int indexX, int indexY ) const;
00072 int binEntriesX( int indexX ) const;
00073 int binEntriesY( int indexY ) const;
00074 double binHeight( int indexX, int indexY ) const;
00075 double binHeightX( int indexX ) const;
00076 double binHeightY( int indexY ) const;
00077 double binError( int indexX, int indexY ) const;
00078 double meanX() const;
00079 double meanY() const;
00080 double rmsX() const;
00081 double rmsY() const;
00082 const AIDA::IAxis& xAxis() const;
00083 const AIDA::IAxis& yAxis() const;
00084 int coordToIndexX( double coordX ) const;
00085 int coordToIndexY( double coordY ) const;
00086 bool add( const AIDA::IHistogram2D & h );
00087
00089 bool setBinContents( int binIndexX,
00090 int binIndexY,
00091 int entries,
00092 double height,
00093 double error,
00094 double centreX,
00095 double centreY );
00096 bool setRms( double rmsX, double rmsY );
00097
00098 private:
00100 bool calculateStatistics() const;
00101 bool increment( const AIDA_Histogram2D& h );
00102
00103 private:
00104 AIDA::IAxis* m_axisX;
00105 AIDA::IAxis* m_axisY;
00106 std::vector< std::vector< GravityBin2D* > > m_bins;
00107 mutable bool m_validStatistics;
00108
00109
00110 mutable double m_meanX;
00111 mutable double m_rmsX;
00112 mutable double m_meanY;
00113 mutable double m_rmsY;
00114 mutable int m_entries;
00115 mutable int m_extraEntries;
00116 mutable double m_ebe;
00117 mutable double m_sumBinHeights;
00118 mutable double m_sumExtraBinHeights;
00119 mutable double m_minHeight;
00120 mutable double m_maxHeight;
00121 double m_sumWeightTimesSquaredX;
00122 double m_sumWeightTimesSquaredY;
00123
00125 AIDA_Histogram2D& operator=( const AIDA_Histogram2D& );
00126 };
00127
00128 }
00129 }
00130
00131 #endif