00001
00002 #ifndef ANAPHE_AIDAHISTOGRAM3D
00003 #define ANAPHE_AIDAHISTOGRAM3D 1
00004
00005 #include "AIDA_BaseHistogram.h"
00006 #include "AIDA_Dev/IDevHistogram3D.h"
00007 #include <vector>
00008
00009 namespace Anaphe {
00010 namespace AIDA_Histogram_native {
00011 class GravityBin3D;
00012
00023 class AIDA_Histogram3D : public AIDA_BaseHistogram,
00024 virtual public AIDA::Dev::IDevHistogram3D
00025 {
00026
00027 public:
00029 AIDA_Histogram3D( const std::string& title,
00030 int numberOfBinsX,
00031 double lowEdgeX,
00032 double highEdgeX,
00033 int numberOfBinsY,
00034 double lowEdgeY,
00035 double highEdgeY,
00036 int numberOfBinsZ,
00037 double lowEdgeZ,
00038 double highEdgeZ );
00040 AIDA_Histogram3D( const std::string& title,
00041 const std::vector< double >& edgesX,
00042 const std::vector< double >& edgesY,
00043 const std::vector< double >& edgesZ );
00045 AIDA_Histogram3D( const AIDA_Histogram3D& h );
00047 AIDA_Histogram3D( const AIDA::IHistogram3D& h );
00049 ~AIDA_Histogram3D();
00054 protected:
00055 void updateAnnotation() const;
00056 public:
00057 bool reset();
00058 int entries() const;
00059
00061 int allEntries() const;
00062 int extraEntries() const;
00063 double equivalentBinEntries() const;
00064 double sumBinHeights() const;
00065 double sumAllBinHeights() const;
00066 double sumExtraBinHeights() const;
00067 double minBinHeight() const;
00068 double maxBinHeight() const;
00069 bool scale( double scaleFactor );
00070
00072 bool fill( double x, double y, double z, double weight = 1. );
00073 double binMeanX( int indexX, int indexY, int indexZ ) const;
00074 double binMeanY( int indexX, int indexY, int indexZ ) const;
00075 double binMeanZ( int indexX, int indexY, int indexZ ) const;
00076 int binEntries( int indexX, int indexY, int indexZ ) const;
00077 int binEntriesX( int indexX ) const;
00078 int binEntriesY( int indexY ) const;
00079 int binEntriesZ( int indexZ ) const;
00080 double binHeight( int indexX, int indexY, int indexZ ) const;
00081 double binHeightX( int indexX ) const;
00082 double binHeightY( int indexY ) const;
00083 double binHeightZ( int indexZ ) const;
00084 double binError( int indexX, int indexY, int indexZ ) const;
00085 double meanX() const;
00086 double meanY() const;
00087 double meanZ() const;
00088 double rmsX() const;
00089 double rmsY() const;
00090 double rmsZ() const;
00091 const AIDA::IAxis& xAxis() const;
00092 const AIDA::IAxis& yAxis() const;
00093 const AIDA::IAxis& zAxis() const;
00094 int coordToIndexX( double coordX ) const;
00095 int coordToIndexY( double coordY ) const;
00096 int coordToIndexZ( double coordZ ) const;
00097 bool add( const AIDA::IHistogram3D & h );
00098
00100 bool setBinContents( int binIndexX,
00101 int binIndexY,
00102 int binIndexZ,
00103 int entries,
00104 double height,
00105 double error,
00106 double centreX,
00107 double centreY,
00108 double centreZ );
00109 bool setRms( double rmsX, double rmsY, double rmsZ );
00110
00111 private:
00113 bool calculateStatistics() const;
00114 bool increment( const AIDA_Histogram3D& h );
00115
00116 private:
00117 AIDA::IAxis* m_axisX;
00118 AIDA::IAxis* m_axisY;
00119 AIDA::IAxis* m_axisZ;
00120 std::vector< std::vector< std::vector< GravityBin3D* > > > m_bins;
00121 mutable bool m_validStatistics;
00122
00123
00124 mutable double m_meanX;
00125 mutable double m_rmsX;
00126 mutable double m_meanY;
00127 mutable double m_rmsY;
00128 mutable double m_meanZ;
00129 mutable double m_rmsZ;
00130 mutable int m_entries;
00131 mutable int m_extraEntries;
00132 mutable double m_ebe;
00133 mutable double m_sumBinHeights;
00134 mutable double m_sumExtraBinHeights;
00135 mutable double m_minHeight;
00136 mutable double m_maxHeight;
00137 double m_sumWeightTimesSquaredX;
00138 double m_sumWeightTimesSquaredY;
00139 double m_sumWeightTimesSquaredZ;
00140
00142 AIDA_Histogram3D& operator=( const AIDA_Histogram3D& );
00143 };
00144
00145 }
00146 }
00147
00148 #endif