Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:57:39

0001 /***********************************************************************************\
0002 * (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations *
0003 *                                                                                   *
0004 * This software is distributed under the terms of the Apache version 2 licence,     *
0005 * copied verbatim in the file "LICENSE".                                            *
0006 *                                                                                   *
0007 * In applying this licence, CERN does not waive the privileges and immunities       *
0008 * granted to it by virtue of its status as an Intergovernmental Organization        *
0009 * or submit itself to any jurisdiction.                                             *
0010 \***********************************************************************************/
0011 #ifndef GAUDIKERNEL_IHISTOGRAMSVC_H
0012 #define GAUDIKERNEL_IHISTOGRAMSVC_H
0013 
0014 // Include files
0015 #include "GaudiKernel/IDataProviderSvc.h"
0016 #include "GaudiKernel/IService.h"
0017 #include <iostream>
0018 #include <string>
0019 #include <vector>
0020 
0021 // Forward declarations
0022 class DataObject;
0023 
0024 // added to allow use of AIDA in applications
0025 // without prefix AIDA:: (as before)
0026 namespace AIDA {
0027   class IBaseHistogram;
0028   class IHistogram;
0029   class IHistogram1D;
0030   class IProfile1D;
0031   class IHistogram2D;
0032   class IProfile2D;
0033   class IHistogram3D;
0034   class IHistogramFactory;
0035   class IAnnotation;
0036   class IAxis;
0037 } // namespace AIDA
0038 
0039 using AIDA::IAnnotation;
0040 using AIDA::IAxis;
0041 using AIDA::IBaseHistogram;
0042 using AIDA::IHistogram;
0043 using AIDA::IHistogram1D;
0044 using AIDA::IHistogram2D;
0045 using AIDA::IHistogram3D;
0046 using AIDA::IHistogramFactory;
0047 using AIDA::IProfile1D;
0048 using AIDA::IProfile2D;
0049 
0050 /** @class IHistogramSvc IHistogramSvc.h GaudiKernel/IHistogramSvc.h
0051 
0052     Definition of the IHistogramSvc interface class
0053 
0054     @author Pavel Binko and Anatael Cabrera
0055 */
0056 class GAUDI_API IHistogramSvc : virtual public IDataProviderSvc {
0057 public:
0058   /// InterfaceID
0059   DeclareInterfaceID( IHistogramSvc, 5, 0 );
0060 
0061   /// Retrieve the AIDA HistogramFactory interface
0062   virtual AIDA::IHistogramFactory* histogramFactory() = 0;
0063 
0064   /** Book histogram and register it with the histogram data store
0065       @param fullPath    Full path to the node of the object.
0066                          The basename (last part of the fullPath)
0067                          has to be an integer number
0068                         (otherwise conversion to HBOOK is not possible)
0069       @param dirPath     Path to parent node of the object,
0070                          the directory the histogram will be stored in.
0071       @param pParent     Pointer to parent node
0072       @param relPath     Histogram identifier (std::string), the relative path
0073                          to the object with respect to the parent node
0074       @param hID         Histogram identifier (int) of the histogram
0075       @param title       Title property of the histogram
0076       @param binsX/Y     Number of bins on the axis X/Y
0077       @param lowX/Y      Lower histogram edge on the axis X/Y
0078       @param highX/Y     Upper histogram edge on the axis X/Y
0079   */
0080   // ==========================================================================
0081   // Book 1D histogram with fixed binning
0082   // ==========================================================================
0083 
0084   virtual AIDA::IHistogram1D* book( const std::string& fullPath, const std::string& title, int binsX, double lowX,
0085                                     double highX )                         = 0;
0086   virtual AIDA::IHistogram1D* book( const std::string& dirPath, const std::string& relPath, const std::string& title,
0087                                     int binsX, double lowX, double highX ) = 0;
0088   virtual AIDA::IHistogram1D* book( const std::string& dirPath, int hID, const std::string& title, int binsX,
0089                                     double lowX, double highX )            = 0;
0090   virtual AIDA::IHistogram1D* book( DataObject* pParent, const std::string& relPath, const std::string& title,
0091                                     int binsX, double lowX, double highX ) = 0;
0092   virtual AIDA::IHistogram1D* book( DataObject* pParent, int hID, const std::string& title, int binsX, double lowX,
0093                                     double highX )                         = 0;
0094 
0095   // ==========================================================================
0096   // Book 1D profile histogram with fixed binning
0097   // ==========================================================================
0098 
0099   virtual AIDA::IProfile1D* bookProf( const std::string& fullPath, const std::string& title, int binsX, double lowX,
0100                                       double highX, const std::string& opt = "" )                         = 0;
0101   virtual AIDA::IProfile1D* bookProf( const std::string& dirPath, const std::string& relPath, const std::string& title,
0102                                       int binsX, double lowX, double highX, const std::string& opt = "" ) = 0;
0103   virtual AIDA::IProfile1D* bookProf( const std::string& dirPath, int hID, const std::string& title, int binsX,
0104                                       double lowX, double highX, const std::string& opt = "" )            = 0;
0105   virtual AIDA::IProfile1D* bookProf( DataObject* pParent, const std::string& relPath, const std::string& title,
0106                                       int binsX, double lowX, double highX, const std::string& opt = "" ) = 0;
0107   virtual AIDA::IProfile1D* bookProf( DataObject* pParent, int hID, const std::string& title, int binsX, double lowX,
0108                                       double highX, const std::string& opt = "" )                         = 0;
0109 
0110   // ==========================================================================
0111   // Book 1D profile histogram with fixed binning & Y-limits
0112   // ==========================================================================
0113 
0114   virtual AIDA::IProfile1D* bookProf( const std::string& fullPath, const std::string& title, int binsX, double lowX,
0115                                       double highX, double lowY, double highY, const std::string& opt = "s" ) = 0;
0116   virtual AIDA::IProfile1D* bookProf( const std::string& dirPath, const std::string& relPath, const std::string& title,
0117                                       int binsX, double lowX, double highX, double lowY, double highY,
0118                                       const std::string& opt = "s" )                                          = 0;
0119   virtual AIDA::IProfile1D* bookProf( const std::string& dirPath, int hID, const std::string& title, int binsX,
0120                                       double lowX, double highX, double lowY, double highY,
0121                                       const std::string& opt = "s" )                                          = 0;
0122   virtual AIDA::IProfile1D* bookProf( DataObject* pParent, const std::string& relPath, const std::string& title,
0123                                       int binsX, double lowX, double highX, double lowY, double highY,
0124                                       const std::string& opt = "s" )                                          = 0;
0125   virtual AIDA::IProfile1D* bookProf( DataObject* pParent, int hID, const std::string& title, int binsX, double lowX,
0126                                       double highX, double lowY, double highY, const std::string& opt = "s" ) = 0;
0127 
0128   // ==========================================================================
0129   // Book 1D histogram with variable binning
0130   // ==========================================================================
0131 
0132   virtual AIDA::IHistogram1D* book( const std::string& fullPath, const std::string& title,
0133                                     std::vector<double> edges ) = 0;
0134   virtual AIDA::IHistogram1D* book( const std::string& dirPath, const std::string& relPath, const std::string& title,
0135                                     std::vector<double> edges ) = 0;
0136   virtual AIDA::IHistogram1D* book( const std::string& dirPath, int hID, const std::string& title,
0137                                     std::vector<double> edges ) = 0;
0138   virtual AIDA::IHistogram1D* book( DataObject* pParent, const std::string& relPath, const std::string& title,
0139                                     std::vector<double> edges ) = 0;
0140   virtual AIDA::IHistogram1D* book( DataObject* pParent, int hID, const std::string& title,
0141                                     std::vector<double> edges ) = 0;
0142 
0143   // ==========================================================================
0144   // Book 1D profile histogram with variable binning
0145   // ==========================================================================
0146 
0147   virtual AIDA::IProfile1D* bookProf( const std::string& fullPath, const std::string& title,
0148                                       std::vector<double> edges ) = 0;
0149   virtual AIDA::IProfile1D* bookProf( const std::string& dirPath, const std::string& relPath, const std::string& title,
0150                                       std::vector<double> edges ) = 0;
0151   virtual AIDA::IProfile1D* bookProf( const std::string& dirPath, int hID, const std::string& title,
0152                                       std::vector<double> edges ) = 0;
0153   virtual AIDA::IProfile1D* bookProf( DataObject* pParent, const std::string& relPath, const std::string& title,
0154                                       std::vector<double> edges ) = 0;
0155   virtual AIDA::IProfile1D* bookProf( DataObject* pParent, int hID, const std::string& title,
0156                                       std::vector<double> edges ) = 0;
0157 
0158   // ==========================================================================
0159   // Book 2D histogram with fixed binning
0160   // ==========================================================================
0161 
0162   virtual AIDA::IHistogram2D* book( const std::string& fullPath, const std::string& title, int binsX, double lowX,
0163                                     double highX, int binsY, double lowY, double highY )                         = 0;
0164   virtual AIDA::IHistogram2D* book( const std::string& dirPath, const std::string& relPath, const std::string& title,
0165                                     int binsX, double lowX, double highX, int binsY, double lowY, double highY ) = 0;
0166   virtual AIDA::IHistogram2D* book( const std::string& dirPath, int hID, const std::string& title, int binsX,
0167                                     double lowX, double highX, int binsY, double lowY, double highY )            = 0;
0168   virtual AIDA::IHistogram2D* book( DataObject* pParent, const std::string& relPath, const std::string& title,
0169                                     int binsX, double lowX, double highX, int binsY, double lowY, double highY ) = 0;
0170   virtual AIDA::IHistogram2D* book( DataObject* pParent, int hID, const std::string& title, int binsX, double lowX,
0171                                     double highX, int binsY, double lowY, double highY )                         = 0;
0172 
0173   // ==========================================================================
0174   // Book 2D profile histogram with fixed binning
0175   // ==========================================================================
0176 
0177   virtual AIDA::IProfile2D* bookProf( const std::string& fullPath, const std::string& title, int binsX, double lowX,
0178                                       double highX, int binsY, double lowY, double highY )                         = 0;
0179   virtual AIDA::IProfile2D* bookProf( const std::string& dirPath, const std::string& relPath, const std::string& title,
0180                                       int binsX, double lowX, double highX, int binsY, double lowY, double highY ) = 0;
0181   virtual AIDA::IProfile2D* bookProf( const std::string& dirPath, int hID, const std::string& title, int binsX,
0182                                       double lowX, double highX, int binsY, double lowY, double highY )            = 0;
0183   virtual AIDA::IProfile2D* bookProf( DataObject* pParent, const std::string& relPath, const std::string& title,
0184                                       int binsX, double lowX, double highX, int binsY, double lowY, double highY ) = 0;
0185   virtual AIDA::IProfile2D* bookProf( DataObject* pParent, int hID, const std::string& title, int binsX, double lowX,
0186                                       double highX, int binsY, double lowY, double highY )                         = 0;
0187 
0188   // ==========================================================================
0189   // Book 2D histogram with variable binning
0190   // ==========================================================================
0191 
0192   virtual AIDA::IHistogram2D* book( const std::string& fullPath, const std::string& title, std::vector<double> edgesX,
0193                                     std::vector<double> edgesY )                             = 0;
0194   virtual AIDA::IHistogram2D* book( const std::string& dirPath, const std::string& relPath, const std::string& title,
0195                                     std::vector<double> edgesX, std::vector<double> edgesY ) = 0;
0196   virtual AIDA::IHistogram2D* book( const std::string& dirPath, int hID, const std::string& title,
0197                                     std::vector<double> edgesX, std::vector<double> edgesY ) = 0;
0198   virtual AIDA::IHistogram2D* book( DataObject* pParent, const std::string& relPath, const std::string& title,
0199                                     std::vector<double> edgesX, std::vector<double> edgesY ) = 0;
0200   virtual AIDA::IHistogram2D* book( DataObject* pParent, int hID, const std::string& title, std::vector<double> edgesX,
0201                                     std::vector<double> edgesY )                             = 0;
0202 
0203   // ==========================================================================
0204   // Book 2D profile histogram with variable binning
0205   // ==========================================================================
0206 
0207   virtual AIDA::IProfile2D* bookProf( const std::string& fullPath, const std::string& title, std::vector<double> edgesX,
0208                                       std::vector<double> edgesY )                             = 0;
0209   virtual AIDA::IProfile2D* bookProf( const std::string& dirPath, const std::string& relPath, const std::string& title,
0210                                       std::vector<double> edgesX, std::vector<double> edgesY ) = 0;
0211   virtual AIDA::IProfile2D* bookProf( const std::string& dirPath, int hID, const std::string& title,
0212                                       std::vector<double> edgesX, std::vector<double> edgesY ) = 0;
0213   virtual AIDA::IProfile2D* bookProf( DataObject* pParent, const std::string& relPath, const std::string& title,
0214                                       std::vector<double> edgesX, std::vector<double> edgesY ) = 0;
0215   virtual AIDA::IProfile2D* bookProf( DataObject* pParent, int hID, const std::string& title,
0216                                       std::vector<double> edgesX, std::vector<double> edgesY ) = 0;
0217 
0218   // ==========================================================================
0219   // Book 3D histogram with fixed binning
0220   // ==========================================================================
0221 
0222   virtual AIDA::IHistogram3D* book( const std::string& fullPath, const std::string& title, int binsX, double lowX,
0223                                     double highX, int binsY, double lowY, double highY, int binsZ, double lowZ,
0224                                     double highZ )                         = 0;
0225   virtual AIDA::IHistogram3D* book( const std::string& dirPath, const std::string& relPath, const std::string& title,
0226                                     int binsX, double lowX, double highX, int binsY, double lowY, double highY,
0227                                     int binsZ, double lowZ, double highZ ) = 0;
0228   virtual AIDA::IHistogram3D* book( const std::string& dirPath, int hID, const std::string& title, int binsX,
0229                                     double lowX, double highX, int binsY, double lowY, double highY, int binsZ,
0230                                     double lowZ, double highZ )            = 0;
0231   virtual AIDA::IHistogram3D* book( DataObject* pParent, const std::string& relPath, const std::string& title,
0232                                     int binsX, double lowX, double highX, int binsY, double lowY, double highY,
0233                                     int binsZ, double lowZ, double highZ ) = 0;
0234   virtual AIDA::IHistogram3D* book( DataObject* pParent, int hID, const std::string& title, int binsX, double lowX,
0235                                     double highX, int binsY, double lowY, double highY, int binsZ, double lowZ,
0236                                     double highZ )                         = 0;
0237 
0238   // ==========================================================================
0239   // Book 3D histogram with variable binning
0240   // ==========================================================================
0241 
0242   virtual AIDA::IHistogram3D* book( const std::string& fullPath, const std::string& title, std::vector<double> edgesX,
0243                                     std::vector<double> edgesY, std::vector<double> edgesZ ) = 0;
0244   virtual AIDA::IHistogram3D* book( const std::string& dirPath, const std::string& relPath, const std::string& title,
0245                                     std::vector<double> edgesX, std::vector<double> edgesY,
0246                                     std::vector<double> edgesZ )                             = 0;
0247   virtual AIDA::IHistogram3D* book( const std::string& dirPath, int hID, const std::string& title,
0248                                     std::vector<double> edgesX, std::vector<double> edgesY,
0249                                     std::vector<double> edgesZ )                             = 0;
0250   virtual AIDA::IHistogram3D* book( DataObject* pParent, const std::string& relPath, const std::string& title,
0251                                     std::vector<double> edgesX, std::vector<double> edgesY,
0252                                     std::vector<double> edgesZ )                             = 0;
0253   virtual AIDA::IHistogram3D* book( DataObject* pParent, int hID, const std::string& title, std::vector<double> edgesX,
0254                                     std::vector<double> edgesY, std::vector<double> edgesZ ) = 0;
0255 
0256   // ==========================================================================
0257   // Register histogram with the data store
0258   // ==========================================================================
0259 
0260   using IDataProviderSvc::registerObject;
0261   virtual StatusCode registerObject( const std::string& fullPath, AIDA::IBaseHistogram* hObj ) = 0;
0262   // ---------------------------
0263   virtual StatusCode registerObject( const std::string& parentPath, const std::string& objPath,
0264                                      AIDA::IBaseHistogram* hObj ) = 0;
0265   // ---------------------------
0266   StatusCode registerObject( const std::string& parentPath, int item, AIDA::IBaseHistogram* hObj ) {
0267     return registerObject( parentPath, std::to_string( item ), hObj );
0268   }
0269   // ---------------------------
0270   virtual StatusCode registerObject( DataObject* parentObj, const std::string& objPath,
0271                                      AIDA::IBaseHistogram* hObj ) = 0;
0272   virtual StatusCode registerObject( AIDA::IBaseHistogram* parentObj, const std::string& objPath,
0273                                      AIDA::IBaseHistogram* hObj ) = 0;
0274   // ---------------------------
0275   StatusCode registerObject( DataObject* parentObj, int item, AIDA::IBaseHistogram* hObj ) {
0276     return registerObject( parentObj, std::to_string( item ), hObj );
0277   }
0278 
0279   StatusCode registerObject( AIDA::IBaseHistogram* parentObj, int item, AIDA::IBaseHistogram* hObj ) {
0280     return registerObject( parentObj, std::to_string( item ), hObj );
0281   }
0282 
0283   // ==========================================================================
0284   // Unregister histogram from the data store
0285   // ==========================================================================
0286 
0287   using IDataProviderSvc::unregisterObject;
0288   virtual StatusCode unregisterObject( AIDA::IBaseHistogram* hObj ) = 0;
0289   // ---------------------------
0290   virtual StatusCode unregisterObject( AIDA::IBaseHistogram* hObj, const std::string& objectPath ) = 0;
0291   // ---------------------------
0292   virtual StatusCode unregisterObject( AIDA::IBaseHistogram* hObj, int item ) = 0;
0293 
0294   // ==========================================================================
0295   // Retrieve histogram from data store
0296   // ==========================================================================
0297 
0298   using IDataProviderSvc::retrieveObject;
0299   virtual StatusCode retrieveObject( IRegistry* pDirectory, const std::string& path, AIDA::IHistogram1D*& h1dObj ) = 0;
0300   virtual StatusCode retrieveObject( IRegistry* pDirectory, const std::string& path, AIDA::IProfile1D*& h1dObj )   = 0;
0301   virtual StatusCode retrieveObject( IRegistry* pDirectory, const std::string& path, AIDA::IHistogram2D*& h2dObj ) = 0;
0302   virtual StatusCode retrieveObject( IRegistry* pDirectory, const std::string& path, AIDA::IProfile2D*& h2dObj )   = 0;
0303   virtual StatusCode retrieveObject( IRegistry* pDirectory, const std::string& path, AIDA::IHistogram3D*& h3dObj ) = 0;
0304   // ---------------------------
0305   virtual StatusCode retrieveObject( const std::string& fullPath, AIDA::IHistogram1D*& h1dObj ) = 0;
0306   virtual StatusCode retrieveObject( const std::string& fullPath, AIDA::IProfile1D*& h1dObj )   = 0;
0307   virtual StatusCode retrieveObject( const std::string& fullPath, AIDA::IHistogram2D*& h2dObj ) = 0;
0308   virtual StatusCode retrieveObject( const std::string& fullPath, AIDA::IProfile2D*& h2dObj )   = 0;
0309   virtual StatusCode retrieveObject( const std::string& fullPath, AIDA::IHistogram3D*& h3dObj ) = 0;
0310   // ---------------------------
0311   virtual StatusCode retrieveObject( const std::string& parentPath, const std::string& objPath,
0312                                      AIDA::IHistogram1D*& h1dObj ) = 0;
0313   virtual StatusCode retrieveObject( const std::string& parentPath, const std::string& objPath,
0314                                      AIDA::IProfile1D*& h1dObj )   = 0;
0315   virtual StatusCode retrieveObject( const std::string& parentPath, const std::string& objPath,
0316                                      AIDA::IHistogram2D*& h2dObj ) = 0;
0317   virtual StatusCode retrieveObject( const std::string& parentPath, const std::string& objPath,
0318                                      AIDA::IProfile2D*& h2dObj )   = 0;
0319   virtual StatusCode retrieveObject( const std::string& parentPath, const std::string& objPath,
0320                                      AIDA::IHistogram3D*& h3dObj ) = 0;
0321   // ---------------------------
0322   virtual StatusCode retrieveObject( const std::string& parentPath, int item, AIDA::IHistogram1D*& h1dObj ) = 0;
0323   virtual StatusCode retrieveObject( const std::string& parentPath, int item, AIDA::IProfile1D*& h1dObj )   = 0;
0324   virtual StatusCode retrieveObject( const std::string& parentPath, int item, AIDA::IHistogram2D*& h2dObj ) = 0;
0325   virtual StatusCode retrieveObject( const std::string& parentPath, int item, AIDA::IProfile2D*& h2dObj )   = 0;
0326   virtual StatusCode retrieveObject( const std::string& parentPath, int item, AIDA::IHistogram3D*& h3dObj ) = 0;
0327   // ---------------------------
0328   virtual StatusCode retrieveObject( DataObject* parentObj, const std::string& objPath,
0329                                      AIDA::IHistogram1D*& h1dObj )                                                  = 0;
0330   virtual StatusCode retrieveObject( DataObject* parentObj, const std::string& objPath, AIDA::IProfile1D*& h1dObj ) = 0;
0331   virtual StatusCode retrieveObject( DataObject* parentObj, const std::string& objPath,
0332                                      AIDA::IHistogram2D*& h2dObj )                                                  = 0;
0333   virtual StatusCode retrieveObject( DataObject* parentObj, const std::string& objPath, AIDA::IProfile2D*& h2dObj ) = 0;
0334   virtual StatusCode retrieveObject( DataObject* parentObj, const std::string& objPath,
0335                                      AIDA::IHistogram3D*& h3dObj )                                                  = 0;
0336   virtual StatusCode retrieveObject( AIDA::IBaseHistogram* parentObj, const std::string& objPath,
0337                                      AIDA::IHistogram1D*& h1dObj )                                                  = 0;
0338   virtual StatusCode retrieveObject( AIDA::IBaseHistogram* parentObj, const std::string& objPath,
0339                                      AIDA::IProfile1D*& h1dObj )                                                    = 0;
0340   virtual StatusCode retrieveObject( AIDA::IBaseHistogram* parentObj, const std::string& objPath,
0341                                      AIDA::IHistogram2D*& h2dObj )                                                  = 0;
0342   virtual StatusCode retrieveObject( AIDA::IBaseHistogram* parentObj, const std::string& objPath,
0343                                      AIDA::IProfile2D*& h2dObj )                                                    = 0;
0344   virtual StatusCode retrieveObject( AIDA::IBaseHistogram* parentObj, const std::string& objPath,
0345                                      AIDA::IHistogram3D*& h3dObj )                                                  = 0;
0346   // ---------------------------
0347   virtual StatusCode retrieveObject( DataObject* parentObj, int item, AIDA::IHistogram1D*& h1dObj )           = 0;
0348   virtual StatusCode retrieveObject( DataObject* parentObj, int item, AIDA::IProfile1D*& h1dObj )             = 0;
0349   virtual StatusCode retrieveObject( DataObject* parentObj, int item, AIDA::IHistogram2D*& h2dObj )           = 0;
0350   virtual StatusCode retrieveObject( DataObject* parentObj, int item, AIDA::IProfile2D*& h2dObj )             = 0;
0351   virtual StatusCode retrieveObject( DataObject* parentObj, int item, AIDA::IHistogram3D*& h3dObj )           = 0;
0352   virtual StatusCode retrieveObject( AIDA::IBaseHistogram* parentObj, int item, AIDA::IHistogram1D*& h1dObj ) = 0;
0353   virtual StatusCode retrieveObject( AIDA::IBaseHistogram* parentObj, int item, AIDA::IProfile1D*& h1dObj )   = 0;
0354   virtual StatusCode retrieveObject( AIDA::IBaseHistogram* parentObj, int item, AIDA::IHistogram2D*& h2dObj ) = 0;
0355   virtual StatusCode retrieveObject( AIDA::IBaseHistogram* parentObj, int item, AIDA::IProfile2D*& h2dObj )   = 0;
0356   virtual StatusCode retrieveObject( AIDA::IBaseHistogram* parentObj, int item, AIDA::IHistogram3D*& h3dObj ) = 0;
0357 
0358   // ==========================================================================
0359   // Find histogram identified by its full path in the data store
0360   // ==========================================================================
0361 
0362   using IDataProviderSvc::findObject;
0363   virtual StatusCode findObject( const std::string& fullPath, AIDA::IHistogram1D*& h1dObj ) = 0;
0364   virtual StatusCode findObject( const std::string& fullPath, AIDA::IProfile1D*& h1dObj )   = 0;
0365   virtual StatusCode findObject( const std::string& fullPath, AIDA::IHistogram2D*& h2dObj ) = 0;
0366   virtual StatusCode findObject( const std::string& fullPath, AIDA::IProfile2D*& h2dObj )   = 0;
0367   virtual StatusCode findObject( const std::string& fullPath, AIDA::IHistogram3D*& h3dObj ) = 0;
0368   // ---------------------------
0369   virtual StatusCode findObject( IRegistry* pDirectory, const std::string& path, AIDA::IHistogram1D*& h1dObj ) = 0;
0370   virtual StatusCode findObject( IRegistry* pDirectory, const std::string& path, AIDA::IProfile1D*& h1dObj )   = 0;
0371   virtual StatusCode findObject( IRegistry* pDirectory, const std::string& path, AIDA::IHistogram2D*& h2dObj ) = 0;
0372   virtual StatusCode findObject( IRegistry* pDirectory, const std::string& path, AIDA::IProfile2D*& h2dObj )   = 0;
0373   virtual StatusCode findObject( IRegistry* pDirectory, const std::string& path, AIDA::IHistogram3D*& h2dObj ) = 0;
0374   // ---------------------------
0375   virtual StatusCode findObject( const std::string& parentPath, const std::string& objPath,
0376                                  AIDA::IHistogram1D*& h1dObj ) = 0;
0377   virtual StatusCode findObject( const std::string& parentPath, const std::string& objPath,
0378                                  AIDA::IProfile1D*& h1dObj )   = 0;
0379   virtual StatusCode findObject( const std::string& parentPath, const std::string& objPath,
0380                                  AIDA::IHistogram2D*& h2dObj ) = 0;
0381   virtual StatusCode findObject( const std::string& parentPath, const std::string& objPath,
0382                                  AIDA::IProfile2D*& h2dObj )   = 0;
0383   virtual StatusCode findObject( const std::string& parentPath, const std::string& objPath,
0384                                  AIDA::IHistogram3D*& h3dObj ) = 0;
0385   // ---------------------------
0386   virtual StatusCode findObject( const std::string& parentPath, int item, AIDA::IHistogram1D*& h1dObj ) = 0;
0387   virtual StatusCode findObject( const std::string& parentPath, int item, AIDA::IProfile1D*& h1dObj )   = 0;
0388   virtual StatusCode findObject( const std::string& parentPath, int item, AIDA::IHistogram2D*& h2dObj ) = 0;
0389   virtual StatusCode findObject( const std::string& parentPath, int item, AIDA::IProfile2D*& h2dObj )   = 0;
0390   virtual StatusCode findObject( const std::string& parentPath, int item, AIDA::IHistogram3D*& h3dObj ) = 0;
0391   // ---------------------------
0392   virtual StatusCode findObject( DataObject* parentObj, const std::string& objPath, AIDA::IHistogram1D*& h1dObj ) = 0;
0393   virtual StatusCode findObject( DataObject* parentObj, const std::string& objPath, AIDA::IProfile1D*& h1dObj )   = 0;
0394   virtual StatusCode findObject( DataObject* parentObj, const std::string& objPath, AIDA::IHistogram2D*& h2dObj ) = 0;
0395   virtual StatusCode findObject( DataObject* parentObj, const std::string& objPath, AIDA::IProfile2D*& h2dObj )   = 0;
0396   virtual StatusCode findObject( DataObject* parentObj, const std::string& objPath, AIDA::IHistogram3D*& h3dObj ) = 0;
0397   virtual StatusCode findObject( AIDA::IBaseHistogram* parentObj, const std::string& objPath,
0398                                  AIDA::IHistogram1D*& h1dObj )                                                    = 0;
0399   virtual StatusCode findObject( AIDA::IBaseHistogram* parentObj, const std::string& objPath,
0400                                  AIDA::IProfile1D*& h1dObj )                                                      = 0;
0401   virtual StatusCode findObject( AIDA::IBaseHistogram* parentObj, const std::string& objPath,
0402                                  AIDA::IHistogram2D*& h2dObj )                                                    = 0;
0403   virtual StatusCode findObject( AIDA::IBaseHistogram* parentObj, const std::string& objPath,
0404                                  AIDA::IProfile2D*& h2dObj )                                                      = 0;
0405   virtual StatusCode findObject( AIDA::IBaseHistogram* parentObj, const std::string& objPath,
0406                                  AIDA::IHistogram3D*& h3dObj )                                                    = 0;
0407   // ---------------------------
0408   virtual StatusCode findObject( DataObject* parentObj, int item, AIDA::IHistogram1D*& h1dObj )           = 0;
0409   virtual StatusCode findObject( DataObject* parentObj, int item, AIDA::IProfile1D*& h1dObj )             = 0;
0410   virtual StatusCode findObject( DataObject* parentObj, int item, AIDA::IHistogram2D*& h2dObj )           = 0;
0411   virtual StatusCode findObject( DataObject* parentObj, int item, AIDA::IProfile2D*& h2dObj )             = 0;
0412   virtual StatusCode findObject( DataObject* parentObj, int item, AIDA::IHistogram3D*& h3dObj )           = 0;
0413   virtual StatusCode findObject( AIDA::IBaseHistogram* parentObj, int item, AIDA::IHistogram1D*& h1dObj ) = 0;
0414   virtual StatusCode findObject( AIDA::IBaseHistogram* parentObj, int item, AIDA::IProfile1D*& h1dObj )   = 0;
0415   virtual StatusCode findObject( AIDA::IBaseHistogram* parentObj, int item, AIDA::IHistogram2D*& h2dObj ) = 0;
0416   virtual StatusCode findObject( AIDA::IBaseHistogram* parentObj, int item, AIDA::IProfile2D*& h2dObj )   = 0;
0417   virtual StatusCode findObject( AIDA::IBaseHistogram* parentObj, int item, AIDA::IHistogram3D*& h3dObj ) = 0;
0418 
0419   // ==========================================================================
0420   // ASCII output
0421   // ==========================================================================
0422   // --------------------------------------------------------------------------
0423   // Print functions (ASCII graphical representation)
0424 
0425   // Print (ASCII) the histogram into the output stream
0426   virtual std::ostream& print( AIDA::IBaseHistogram* h, std::ostream& s = std::cout ) const = 0;
0427 
0428   // --------------------------------------------------------------------------
0429   // Write functions (ASCII table containing numbers e.g. bin height)
0430 
0431   /// Write (ASCII) the histogram table into the output stream
0432   virtual std::ostream& write( AIDA::IBaseHistogram* h, std::ostream& s = std::cout ) const = 0;
0433 
0434   /// Write (ASCII) the histogram table into a file
0435   virtual int write( AIDA::IBaseHistogram* h, const char* file_name ) const = 0;
0436 
0437   // ==========================================================================
0438   // Create all directories in a given full path
0439   // ==========================================================================
0440 
0441   virtual DataObject* createPath( const std::string& newPath ) = 0;
0442 
0443   /** Create a sub-directory in a directory.
0444       @param parentDir name of the parent directory
0445       @param subDir to identify the histogram object in the store
0446                     returns pointer to DataObject (NULL on failure)
0447   */
0448   virtual DataObject* createDirectory( const std::string& parentDir, const std::string& subDir ) = 0;
0449 };
0450 
0451 #endif // INTERFACES_IHISTOGRAMSVC_H