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