00001
00002 #ifndef ANAPHE_AIDAHISTOGRAMFACTORY_H
00003 #define ANAPHE_AIDAHISTOGRAMFACTORY_H 1
00004
00005
00006 #include "AIDA/IHistogramFactory.h"
00007
00008
00009 namespace AIDA {
00010 namespace Dev {
00011 class IDevTree;
00012 class IDevHistogramFactory;
00013 }
00014 }
00015
00016
00017 namespace Anaphe {
00018 namespace AIDA_Histogram_native {
00019
00021
00022 class AIDA_HistogramFactory : virtual public AIDA::IHistogramFactory
00023 {
00024 public:
00026 AIDA_HistogramFactory( AIDA::Dev::IDevTree& tree, AIDA::Dev::IDevHistogramFactory& factory );
00028 ~AIDA_HistogramFactory() { ; }
00030 bool destroy( AIDA::IBaseHistogram* histo );
00031 AIDA::ICloud1D* createCloud1D( const std::string& name, const std::string& title, int nMax = -1, const std::string& options = "" );
00032 AIDA::ICloud1D* createCloud1D( const std::string& name );
00033 AIDA::ICloud1D* createCopy( const std::string& name, const AIDA::ICloud1D& original );
00034 AIDA::ICloud2D* createCloud2D( const std::string& name, const std::string& title, int nMax = -1, const std::string& options = "" );
00035 AIDA::ICloud2D* createCloud2D( const std::string& name );
00036 AIDA::ICloud2D* createCopy( const std::string& name, const AIDA::ICloud2D& original );
00037 AIDA::ICloud3D* createCloud3D( const std::string& name, const std::string& title, int nMax = -1, const std::string& options = "" );
00038 AIDA::ICloud3D* createCloud3D( const std::string& name );
00039 AIDA::ICloud3D* createCopy( const std::string& name, const AIDA::ICloud3D& original );
00040 AIDA::IHistogram1D* createHistogram1D( const std::string& name, const std::string& title, int nBins, double lowerEdge, double upperEdge, const std::string& options = "");
00041 AIDA::IHistogram1D* createHistogram1D( const std::string& name, const std::string& title, const std::vector< double >& binEdge, const std::string& options = "" );
00042 AIDA::IHistogram1D* createHistogram1D( const std::string& name, int nBins, double lowerEdge, double upperEdge );
00043 AIDA::IHistogram1D* createCopy( const std::string& name, const AIDA::IHistogram1D& original );
00044 AIDA::IHistogram2D* createHistogram2D( const std::string& name, const std::string& title, int nBinsX, double lowerEdgeX, double upperEdgeX, int nBinsY, double lowerEdgeY, double upperEdgeY, const std::string& options = "");
00045 AIDA::IHistogram2D* createHistogram2D( const std::string& name, const std::string& title, const std::vector< double >& binEdgeX, const std::vector< double >& binEdgeY, const std::string& options = "" );
00046 AIDA::IHistogram2D* createHistogram2D( const std::string& name, int nBinsX, double lowerEdgeX, double upperEdgeX, int nBinsY, double lowerEdgeY, double upperEdgeY );
00047 AIDA::IHistogram2D* createCopy( const std::string& name, const AIDA::IHistogram2D& original );
00048 AIDA::IHistogram3D* createHistogram3D( const std::string& name, const std::string& title, int nBinsX, double lowerEdgeX, double upperEdgeX, int nBinsY, double lowerEdgeY, double upperEdgeY, int nBinsZ, double lowerEdgeZ, double upperEdgeZ, const std::string& options = "" );
00049 AIDA::IHistogram3D* createHistogram3D( const std::string& name, const std::string& title, const std::vector< double >& binEdgeX, const std::vector< double >& binEdgeY, const std::vector< double >& binEdgeZ, const std::string& options = "" );
00050 AIDA::IHistogram3D* createHistogram3D( const std::string& name, int nBinsX, double lowerEdgeX, double upperEdgeX, int nBinsY, double lowerEdgeY, double upperEdgeY, int nBinsZ, double lowerEdgeZ, double upperEdgeZ );
00051 AIDA::IHistogram3D* createCopy( const std::string& name, const AIDA::IHistogram3D& original );
00052 AIDA::IProfile1D* createProfile1D( const std::string& name, const std::string& title, int nBins, double lowerEdge, double upperEdge, const std::string& options = "");
00053 AIDA::IProfile1D* createProfile1D( const std::string& name, const std::string& title, int nBins, double lowerEdge, double upperEdge, double lowerValue, double upperValue, const std::string& options = "");
00054 AIDA::IProfile1D* createProfile1D( const std::string& name, const std::string& title, const std::vector< double >& binEdge, const std::string& options = "" );
00055 AIDA::IProfile1D* createProfile1D( const std::string& name, const std::string& title, const std::vector< double >& binEdge, double lowerValue, double upperValue, const std::string& options = "" );
00056 AIDA::IProfile1D* createProfile1D( const std::string& name, int nBins, double lowerEdge, double upperEdge );
00057 AIDA::IProfile1D* createProfile1D( const std::string& name, int nBins, double lowerEdge, double upperEdge, double lowerValue, double upperValue );
00058 AIDA::IProfile1D* createCopy( const std::string& name, const AIDA::IProfile1D& original );
00059 AIDA::IProfile2D* createProfile2D( const std::string& name, const std::string& title, int nBinsX, double lowerEdgeX, double upperEdgeX, int nBinsY, double lowerEdgeY, double upperEdgeY, const std::string& options = "" );
00060 AIDA::IProfile2D* createProfile2D( const std::string& name, const std::string& title, int nBinsX, double lowerEdgeX, double upperEdgeX, int nBinsY, double lowerEdgeY, double upperEdgeY, double lowerValue, double upperValue, const std::string& options = "");
00061 AIDA::IProfile2D* createProfile2D( const std::string& name, const std::string& title, const std::vector< double >& binEdgeX, const std::vector< double >& binEdgeY, const std::string& options = "" );
00062 AIDA::IProfile2D* createProfile2D( const std::string& name, const std::string& title, const std::vector< double >& binEdgeX, const std::vector< double >& binEdgeY, double lowerValue, double upperValue, const std::string& options = "" );
00063 AIDA::IProfile2D* createProfile2D( const std::string& name, int nBinsX, double lowerEdgeX, double upperEdgeX, int nBinsY, double lowerEdgeY, double upperEdgeY );
00064 AIDA::IProfile2D* createProfile2D( const std::string& name, int nBinsX, double lowerEdgeX, double upperEdgeX, int nBinsY, double lowerEdgeY, double upperEdgeY, double lowerValue, double upperValue );
00065 AIDA::IProfile2D* createCopy( const std::string& name, const AIDA::IProfile2D& original );
00066 AIDA::IHistogram1D* add( const std::string& name, const AIDA::IHistogram1D& a, const AIDA::IHistogram1D& b );
00067 AIDA::IHistogram1D* subtract( const std::string& name, const AIDA::IHistogram1D& a, const AIDA::IHistogram1D& b );
00068 AIDA::IHistogram1D* multiply( const std::string& name, const AIDA::IHistogram1D& a, const AIDA::IHistogram1D& b );
00069 AIDA::IHistogram1D* divide( const std::string& name, const AIDA::IHistogram1D& a, const AIDA::IHistogram1D& b );
00070 AIDA::IHistogram2D* add( const std::string& name, const AIDA::IHistogram2D& a, const AIDA::IHistogram2D& b );
00071 AIDA::IHistogram2D* subtract( const std::string& name, const AIDA::IHistogram2D& a, const AIDA::IHistogram2D& b );
00072 AIDA::IHistogram2D* multiply( const std::string& name, const AIDA::IHistogram2D& a, const AIDA::IHistogram2D& b );
00073 AIDA::IHistogram2D* divide( const std::string& name, const AIDA::IHistogram2D& a, const AIDA::IHistogram2D& b );
00074 AIDA::IHistogram3D* add( const std::string& name, const AIDA::IHistogram3D& a, const AIDA::IHistogram3D& b );
00075 AIDA::IHistogram3D* subtract( const std::string& name, const AIDA::IHistogram3D& a, const AIDA::IHistogram3D& b );
00076 AIDA::IHistogram3D* multiply( const std::string& name, const AIDA::IHistogram3D& a, const AIDA::IHistogram3D& b );
00077 AIDA::IHistogram3D* divide( const std::string& name, const AIDA::IHistogram3D& a, const AIDA::IHistogram3D& b );
00078 AIDA::IHistogram1D* projectionX( const std::string& name, const AIDA::IHistogram2D& h );
00079 AIDA::IHistogram1D* projectionY( const std::string& name, const AIDA::IHistogram2D& h );
00080 AIDA::IHistogram1D* sliceX( const std::string& name, const AIDA::IHistogram2D& h, int indexY );
00081 AIDA::IHistogram1D* sliceY( const std::string& name, const AIDA::IHistogram2D& h, int indexX );
00082 AIDA::IHistogram1D* sliceX( const std::string& name, const AIDA::IHistogram2D& h, int indexY1, int indexY2 );
00083 AIDA::IHistogram1D* sliceY( const std::string& name, const AIDA::IHistogram2D& h, int indexX1, int indexX2 );
00084 AIDA::IHistogram2D* projectionXY( const std::string& name, const AIDA::IHistogram3D& h );
00085 AIDA::IHistogram2D* projectionXZ( const std::string& name, const AIDA::IHistogram3D& h );
00086 AIDA::IHistogram2D* projectionYZ( const std::string& name, const AIDA::IHistogram3D& h );
00087 AIDA::IHistogram2D* sliceXY( const std::string& name, const AIDA::IHistogram3D& h, int indexZ1, int indexZ2 );
00088 AIDA::IHistogram2D* sliceXZ( const std::string& name, const AIDA::IHistogram3D& h, int indexY1, int indexY2 );
00089 AIDA::IHistogram2D* sliceYZ( const std::string& name, const AIDA::IHistogram3D& h, int indexX1, int indexX2 );
00090
00091 private:
00093 AIDA::Dev::IDevTree& m_tree;
00094 AIDA::Dev::IDevHistogramFactory& m_factory;
00095
00097 template< class T >
00098 T* registerObject( T* p, const std::string& name )
00099 {
00100 if ( p ) {
00101 p->setName( name );
00102 if ( ! m_tree.add( p ) ) {
00103 m_factory.destroy( p );
00104 p = 0;
00105 }
00106 }
00107 return p;
00108 }
00109
00110
00111 };
00112
00113 }
00114 }
00115 #endif