Anonymous avatar Anonymous committed b9e70bc

Tags for Gaudi v22r0

Comments (0)

Files changed (29)

GaudiUtils/Aida2ROOT.h

+// $Id: Aida2ROOT.h,v 1.3 2007/08/06 14:49:36 hmd Exp $
+// ============================================================================
+#ifndef GAUDIALG_AIDA2ROOT_H
+#define GAUDIALG_AIDA2ROOT_H 1
+// ============================================================================
+// Include files
+// ============================================================================
+#include "GaudiKernel/Kernel.h"
+// ============================================================================
+// Forward declarations
+// ============================================================================
+namespace AIDA
+{
+  class IBaseHistogram ;
+  class IHistogram     ;
+  class IHistogram1D   ;
+  class IHistogram2D   ;
+  class IHistogram3D   ;
+  class IProfile1D     ;
+  class IProfile2D     ;
+}
+// ============================================================================
+// ROOT
+// ============================================================================
+class TH1D       ;
+class TH2D       ;
+class TH3D       ;
+class TProfile   ;
+class TProfile2D ;
+class TObject    ;
+// ============================================================================
+namespace Gaudi
+{
+  namespace Utils
+  {
+    // ========================================================================
+    /** @class Aida2ROOT Aida2ROOT.h GaudiKernel/Aida2ROOT.h
+     *
+     *  Accessor to underlying ROOT-representation of
+     *  transient histograms
+     *  The actual code is imported from Bender project.
+     *
+     *  It relies on PI implementation of AIDA interface,
+     *  modified by Markus FRANK.
+     *
+     *  @see Gaudi::H1D
+     *  @see Gaudi::H2D
+     *  @see Gaudi::H3D
+     *  @see Gaudi::Profile1D
+     *  @see Gaudi::Profile2D
+     *
+     *  @see AIDA::IHistogram1D
+     *  @see AIDA::IHistogram2D
+     *  @see AIDA::IHistogram3D
+     *  @see AIDA::IProfile1D
+     *  @see AIDA::IProfile2D
+     *
+     *  @author Vanya BELYAEV ibelyaev@physics.syr.edu
+     *  @date   2007-01-23
+     */
+    class GAUDI_API Aida2ROOT
+    {
+    public:
+      /// get the underlying pointer for 1D-histogram
+      static TH1D*       aida2root ( AIDA::IHistogram1D* aida ) ;
+      /// get the underlying pointer for 2D-histogram
+      static TH2D*       aida2root ( AIDA::IHistogram2D* aida ) ;
+      /// get the underlying pointer for 3D-histogram
+      static TH3D*       aida2root ( AIDA::IHistogram3D* aida ) ;
+      /// get the underlying pointer for 1D-profile
+      static TProfile*   aida2root ( AIDA::IProfile1D*   aida ) ;
+      /// get the underlying pointer for 2D-profile
+      static TProfile2D* aida2root ( AIDA::IProfile2D*   aida ) ;
+      /// get root representation for other cases
+      static TObject*    aida2root ( AIDA::IHistogram*   aida ) ;
+    } ;
+    // ========================================================================
+  } // end of namespace Gaudi::Utils
+  // ==========================================================================
+} // end of namespace Gaudi
+// ============================================================================
+// The END
+// ============================================================================
+#endif // GAUDIALG_AIDA2ROOT_H
+// ============================================================================

GaudiUtils/HistoDump.h

+// $Id: $
+// ============================================================================
+#ifndef GAUDIUTILS_HISTODUMP_H 
+#define GAUDIUTILS_HISTODUMP_H 1
+// ============================================================================
+// Include files
+// ============================================================================
+// STD & STL 
+// ============================================================================
+#include <string>
+// ============================================================================
+// GaudiKernel
+// ============================================================================
+#include "GaudiKernel/Kernel.h"
+// ============================================================================
+/// forward declarations:
+// ============================================================================
+namespace AIDA 
+{ 
+  class  IHistogram1D ;                                                 // AIDA 
+  class  IProfile1D   ;                                                 // AIDA 
+}       
+// ============================================================================
+class TH1      ;                                                        // ROOT 
+class TProfile ;                                                        // ROOT 
+// ============================================================================
+namespace Gaudi 
+{
+  // ==========================================================================
+  namespace Utils 
+  {
+    // ========================================================================
+    namespace Histos 
+    {
+      // ======================================================================
+      /** dump the text representation of the histogram 
+       *  @param histo  (INPUT) the histogram 
+       *  @param stream (OUTUT) the stream  
+       *  @param width  (INPUT) the maximal  column width 
+       *  @param height (INPUT) the proposed column height 
+       *  @param errors (INPUT) print/plot errors
+       *  @return the stream 
+       *  @author Vanya BELYAEV  Ivan.BElyaev@nikhef.nl
+       *  @date 2009-09-19
+       */ 
+      GAUDI_API 
+      std::ostream& histoDump_ 
+      ( const AIDA::IHistogram1D* histo          , 
+        std::ostream&             stream         , 
+        const std::size_t         width  = 80    ,  
+        const std::size_t         height = 50    ,  
+        const bool                errors = false ) ;
+     // ======================================================================
+      /** dump the text representation of the histogram 
+       *  @param histo  (INPUT) the histogram 
+       *  @param width  (INPUT) the maximal  column width 
+       *  @param height (INPUT) the proposed column height 
+       *  @param erorrs (INPUT) print/plot errors
+       *  @return string representation of the histogram       
+       *  @author Vanya BELYAEV  Ivan.BElyaev@nikhef.nl
+       *  @date 2009-09-19
+       */ 
+      GAUDI_API
+      std::string   histoDump 
+      ( const AIDA::IHistogram1D* histo          , 
+        const std::size_t         width  = 80    , 
+        const std::size_t         height = 50    ,  
+        const bool                errors = false ) ;
+      // ======================================================================
+      /** dump the text representation of 1D-profile 
+       *  @param histo  (INPUT) the 1D-profile  
+       *  @param stream (OUTUT) the stream  
+       *  @param width  (INPUT) the maximal  column width 
+       *  @param height (INPUT) the proposed column height 
+       *  @param spread (INPUT) print/plot spread/rms ?
+       *  @return the stream 
+       *  @author Vanya BELYAEV  Ivan.BElyaev@nikhef.nl
+       *  @date 2009-09-19
+       */ 
+      GAUDI_API 
+      std::ostream& histoDump_ 
+      ( const AIDA::IProfile1D*   histo          , 
+        std::ostream&             stream         , 
+        const std::size_t         width  = 80    ,  
+        const std::size_t         height = 50    ,
+        const bool                spread = true  ) ;
+      // ====================================================================
+      /** dump the text representation of the 1D-profile 
+       *  @param histo  (INPUT) the histogram 
+       *  @param width  (INPUT) the maximal  column width 
+       *  @param height (INPUT) the proposed column height 
+       *  @param spread (INPUT) print/plto spread vs rms 
+       *  @return string representation of the histogram       
+       *  @author Vanya BELYAEV  Ivan.BElyaev@nikhef.nl
+       *  @date 2009-09-19
+       */ 
+      GAUDI_API
+      std::string   histoDump 
+      ( const AIDA::IProfile1D*   histo          , 
+        const std::size_t         width  = 80    , 
+        const std::size_t         height = 50    ,  
+        const bool                spread = true  ) ;
+      // ======================================================================
+      /** dump the text representation of the Profile 
+       *  @param histo  (INPUT) the histogram 
+       *  @param stream (OUTUT) the stream  
+       *  @param width  (INPUT) the maximal column width 
+       *  @param height (INPUT) the proposed coulmn height 
+       *  @param spread (INPUT) print/plot rms versus erorr 
+       *  @return the stream 
+       *  @author Vanya BELYAEV  Ivan.BElyaev@nikhef.nl
+       *  @date 2009-09-19
+       */ 
+      GAUDI_API 
+      std::ostream& histoDump_
+      ( const TProfile*           histo           , 
+        std::ostream&             stream          ,
+        const std::size_t         width   = 80    , 
+        const std::size_t         height  = 50    ) ;
+      // ====================================================================
+      /** dump the text representation of the histogram 
+       *  @param histo  (INPUT) the histogram 
+       *  @param width  (INPUT) the maximal column width 
+       *  @param height (INPUT) the propsoed coulmn height 
+       *  @param erorrs (INPUT) print/plot errors
+       *  @return string representation of the histogram       
+       *  @author Vanya BELYAEV  Ivan.Belyaev@nikhef.nl
+       *  @date 2009-09-19
+       */ 
+      GAUDI_API 
+      std::string   histoDump 
+      ( const TProfile*           histo          , 
+        const std::size_t         width  = 80    , 
+        const std::size_t         height = 50    ) ;
+      // ====================================================================
+      /** dump the text representation of the histogram 
+       *  @param histo  (INPUT) the histogram 
+       *  @param stream (OUTUT) the stream  
+       *  @param width  (INPUT) the maximal column width 
+       *  @param height (INPUT) the proposed coulmn height 
+       *  @param errors (INPUT) print/plot errors
+       *  @return the stream 
+       *  @author Vanya BELYAEV  Ivan.BElyaev@nikhef.nl
+       *  @date 2009-09-19
+       */ 
+      GAUDI_API 
+      std::ostream& histoDump_ 
+      ( const TH1*                histo           , 
+        std::ostream&             stream          ,
+        const std::size_t         width   = 80    , 
+        const std::size_t         height  = 50    ,  
+        const bool                errors  = false ) ;
+      // ====================================================================
+      /** dump the text representation of the histogram 
+       *  @param histo  (INPUT) the histogram 
+       *  @param width  (INPUT) the maximal column width 
+       *  @param height (INPUT) the propsoed coulmn height 
+       *  @param erorrs (INPUT) print/plot errors
+       *  @return string representation of the histogram       
+       *  @author Vanya BELYAEV  Ivan.Belyaev@nikhef.nl
+       *  @date 2009-09-19
+       */ 
+      GAUDI_API 
+      std::string   histoDump 
+      ( const TH1*                histo          , 
+        const std::size_t         width  = 80    , 
+        const std::size_t         height = 50    ,  
+        const bool                errors = false ) ;
+      // ======================================================================
+    } //                                  end of namespace Gaudi::Utils::Histos 
+    // ========================================================================
+  } //                                            end of namespace Gaudi::Utils 
+  // ==========================================================================
+} //                                                     end of namespace Gaudi 
+// ============================================================================
+// The END 
+// ============================================================================
+#endif // GAUDIUTILS_HISTODUMP_H
+// ============================================================================

GaudiUtils/HistoLabels.h

+// $Id: $
+#ifndef GAUDIUTILS_HISTOLABELS_H
+#define GAUDIUTILS_HISTOLABELS_H 1
+
+#include <vector>
+#include <string>
+#include <utility>
+
+namespace AIDA
+{
+  class IHistogram1D;
+  class IHistogram2D;
+  class IProfile1D;
+  class IProfile2D;
+}
+
+namespace Gaudi
+{
+  namespace Utils
+  {
+    namespace Histos
+    {
+      // --------------------------------------------------------------------------
+
+      /// Typedef for a list of labels
+      typedef std::vector<std::string>        Labels;
+      /// Typedef for a bin number and its associated label
+      typedef std::pair<unsigned,std::string> BinLabel;
+      /// Typedef for a list of bin numbers and their associated label
+      typedef std::vector<BinLabel>           BinLabels;
+
+      // --------------------------------------------------------------------------
+
+      /** @brief Set the Bin labels for a given 1D histogram
+       *
+       *  The labels will be applied in the order they appear in the list,
+       *  starting at the first bin. If the list of labels is too short, the
+       *  later bins will be missing a label. If the list is too long, only
+       *  the first N will be used, where N is the number of bins in the histogram
+       *
+       *  @param hist   Pointer to the histogram
+       *  @param labels The list of labels
+       *
+       *  @return Boolean indicating if the labels were successfully applied or not
+       *  @retval TRUE  Labels were applied OK
+       *  @retval FALSE Labels were NOT applied
+       */
+      bool setBinLabels( AIDA::IHistogram1D* hist,
+                         const Labels& labels ) ;
+
+      /** @brief Set the Bin labels for a given 1D histogram
+       *
+       *  Each entry in 'labels' gives the bin number and its associated label
+       *
+       *  @param hist   Pointer to the histogram
+       *  @param labels The list of labels
+       *
+       *  @return Boolean indicating if the labels were successfully applied or not
+       *  @retval TRUE  Labels were applied OK
+       *  @retval FALSE Labels were NOT applied
+       */
+      bool setBinLabels( AIDA::IHistogram1D* hist,
+                         const BinLabels& labels ) ;
+
+      // --------------------------------------------------------------------------
+
+      /** @brief Set the Bin labels for a given 1D profile histogram
+       *
+       *  The labels will be applied in the order they appear in the list,
+       *  starting at the first bin. If the list of labels is too short, the
+       *  later bins will be missing a label. If the list is too long, only
+       *  the first N will be used, where N is the number of bins in the histogram
+       *
+       *  @param hist   Pointer to the histogram
+       *  @param labels The list of labels
+       *
+       *  @return Boolean indicating if the labels were successfully applied or not
+       *  @retval TRUE  Labels were applied OK
+       *  @retval FALSE Labels were NOT applied
+       */
+      bool setBinLabels( AIDA::IProfile1D* hist,
+                         const Labels& labels ) ;
+
+      /** @brief Set the Bin labels for a given 1D profile histogram
+       *
+       *  Each entry in 'labels' gives the bin number and its associated label
+       *
+       *  @param hist   Pointer to the histogram
+       *  @param labels The list of bin numbers and the associated label
+       *
+       *  @return Boolean indicating if the labels were successfully applied or not
+       *  @retval TRUE  Labels were applied OK
+       *  @retval FALSE Labels were NOT applied
+       */
+      bool setBinLabels( AIDA::IProfile1D* hist,
+                         const BinLabels & labels ) ;
+
+      // --------------------------------------------------------------------------
+
+      /** @brief Set the Bin labels for a given 2D histogram
+       *
+       *  The labels will be applied in the order they appear in the lists,
+       *  starting at the first bin. If the list of labels is too short, the
+       *  later bins will be missing a label. If the list is too long, only
+       *  the first N will be used, where N is the number of bins in the histogram
+       *
+       *  @param hist   Pointer to the histogram
+       *  @param xlabels The list of x labels
+       *  @param ylabels The list of y labels
+       *
+       *  @return Boolean indicating if the labels were successfully applied or not
+       *  @retval TRUE  Labels were applied OK
+       *  @retval FALSE Labels were NOT applied
+       */
+      bool setBinLabels( AIDA::IHistogram2D* hist,
+                         const Labels& xlabels,
+                         const Labels& ylabels ) ;
+
+      /** @brief Set the Bin labels for a given 2D histogram
+       *
+       *  Each entry in 'labels' lists gives the bin number and its associated label
+       *
+       *  @param hist   Pointer to the histogram
+       *  @param xlabels The list of x bin numbers and the associated label
+       *  @param ylabels The list of y bin numbers and the associated label
+       *
+       *  @return Boolean indicating if the labels were successfully applied or not
+       *  @retval TRUE  Labels were applied OK
+       *  @retval FALSE Labels were NOT applied
+       */
+      bool setBinLabels( AIDA::IHistogram2D* hist,
+                         const BinLabels& xlabels,
+                         const BinLabels& ylabels ) ;
+
+      // --------------------------------------------------------------------------
+
+      /** @brief Set the Bin labels for a given 2D profile histogram
+       *
+       *  The labels will be applied in the order they appear in the lists,
+       *  starting at the first bin. If the list of labels is too short, the
+       *  later bins will be missing a label. If the list is too long, only
+       *  the first N will be used, where N is the number of bins in the histogram
+       *
+       *  @param hist   Pointer to the histogram
+       *  @param xlabels The list of x labels
+       *  @param ylabels The list of y labels
+       *
+       *  @return Boolean indicating if the labels were successfully applied or not
+       *  @retval TRUE  Labels were applied OK
+       *  @retval FALSE Labels were NOT applied
+       */
+      bool setBinLabels( AIDA::IProfile2D* hist,
+                         const Labels& xlabels,
+                         const Labels& ylabels ) ;
+
+      /** @brief Set the Bin labels for a given 2D profile histogram
+       *
+       *  Each entry in 'labels' lists gives the bin number and its associated label
+       *
+       *  @param hist   Pointer to the histogram
+       *  @param xlabels The list of x bin numbers and the associated label
+       *  @param ylabels The list of y bin numbers and the associated label
+       *
+       *  @return Boolean indicating if the labels were successfully applied or not
+       *  @retval TRUE  Labels were applied OK
+       *  @retval FALSE Labels were NOT applied
+       */
+      bool setBinLabels( AIDA::IProfile2D* hist,
+                         const BinLabels& xlabels,
+                         const BinLabels& ylabels ) ;
+
+      // --------------------------------------------------------------------------
+
+      /** @brief Set the axis labels for the given 1D histogram
+       *
+       *  @param hist  Pointer to the histogram
+       *  @param xAxis Label for the x axis
+       *  @param yAxis Label for the y axis
+       *
+       *  @return Boolean indicating if the labels were successfully applied or not
+       *  @retval TRUE  Labels were applied OK
+       *  @retval FALSE Labels were NOT applied
+       */
+      bool setAxisLabels( AIDA::IHistogram1D* hist,
+                          const std::string & xAxis,
+                          const std::string & yAxis ) ;
+
+      /** @brief Set the axis labels for the given 1D profile histogram
+       *
+       *  @param hist  Pointer to the histogram
+       *  @param xAxis Label for the x axis
+       *  @param yAxis Label for the y axis
+       *
+       *  @return Boolean indicating if the labels were successfully applied or not
+       *  @retval TRUE  Labels were applied OK
+       *  @retval FALSE Labels were NOT applied
+       */
+      bool setAxisLabels( AIDA::IProfile1D* hist,
+                          const std::string & xAxis,
+                          const std::string & yAxis ) ;
+
+      // --------------------------------------------------------------------------
+
+      /** @brief Set the axis labels for the given 2D histogram
+       *
+       *  @param hist  Pointer to the histogram
+       *  @param xAxis Label for the x axis
+       *  @param yAxis Label for the y axis
+       *
+       *  @return Boolean indicating if the labels were successfully applied or not
+       *  @retval TRUE  Labels were applied OK
+       *  @retval FALSE Labels were NOT applied
+       */
+      bool setAxisLabels( AIDA::IHistogram2D* hist,
+                          const std::string & xAxis,
+                          const std::string & yAxis ) ;
+
+      /** @brief Set the axis labels for the given 2D profile histogram
+       *
+       *  @param hist  Pointer to the histogram
+       *  @param xAxis Label for the x axis
+       *  @param yAxis Label for the y axis
+       *
+       *  @return Boolean indicating if the labels were successfully applied or not
+       *  @retval TRUE  Labels were applied OK
+       *  @retval FALSE Labels were NOT applied
+       */
+      bool setAxisLabels( AIDA::IProfile2D* hist,
+                          const std::string & xAxis,
+                          const std::string & yAxis ) ;
+
+      // --------------------------------------------------------------------------
+
+    }
+  }
+}
+
+#endif // GAUDIUTILS_HISTOLABELS_H

GaudiUtils/HistoStats.h

+// $Id: HistoStats.h,v 1.3 2007/09/19 08:16:59 marcocle Exp $
+// ============================================================================
+#ifndef GAUDIUTILS_HISTOSTATS_H
+#define GAUDIUTILS_HISTOSTATS_H 1
+// ============================================================================
+// Include files
+// ============================================================================
+// STD & STL
+// ============================================================================
+#include <utility>
+// ============================================================================
+// Gaudi
+// ============================================================================
+#include "GaudiKernel/Kernel.h"
+// ============================================================================
+// forward declarations
+// ============================================================================
+namespace AIDA { class IHistogram1D ; }
+// ============================================================================
+namespace Gaudi
+{
+  namespace Utils
+  {
+    // ========================================================================
+    /** @class HistoStats HistoStats.h GaudiUtils/HistoStats.h
+     *  The collection of trivial functions to access  the
+     *  statistical information for the histograms
+     *  @author Vanya BELYAEV ibelyaev@physics.syr.edu
+     *  @date 2007-08-06
+     */
+    class GAUDI_API HistoStats
+    {
+    public :
+      // ======================================================================
+      /** get the "bin-by-bin"-moment around the specified  "value"
+       *  @param histo histogram
+       *  @param order the moment parameter
+       *  @param value central value
+       *  @return the evaluated moment
+       */
+      static double moment
+      ( const AIDA::IHistogram1D* histo     ,
+        const unsigned int        order     ,
+        const double              value = 0 ) ;
+      // ======================================================================
+      /** evaluate the uncertanty for 'bin-by-bin'-moment
+       *  @param histo histogram
+       *  @param order the moment parameter
+       *  @param value central value
+       *  @return the evaluated uncertanty in the moment
+       */
+      static double momentErr
+      ( const AIDA::IHistogram1D* histo ,
+        const unsigned int        order ) ;
+      // ======================================================================
+      /** evaluate the 'bin-by-bin'-central moment (around the mean value)
+       *  @param histo histogram
+       *  @param order the moment parameter
+       *  @param value central value
+       *  @return the evaluated central moment
+       */
+      static double centralMoment
+      ( const AIDA::IHistogram1D* histo ,
+        const unsigned int        order ) ;
+      // ======================================================================
+      /** evaluate the uncertanty for 'bin-by-bin'-central moment
+       *  (around the mean value)
+       *  ( the uncertanty is calculated with O(1/n2) precision)
+       *  @param histo histogram
+       *  @param order the moment parameter
+       *  @param value central value
+       *  @return the evaluated uncertanty in the central moment
+       */
+      static double centralMomentErr
+      ( const AIDA::IHistogram1D* histo ,
+        const unsigned int        order ) ;
+      // ======================================================================
+      /// get the skewness for the histogram
+      static double skewness
+      ( const AIDA::IHistogram1D* histo ) ;
+      // ======================================================================
+      /// get the error in skewness for the histogram
+      static double skewnessErr
+      ( const AIDA::IHistogram1D* histo ) ;
+      // ======================================================================
+      /// get the kurtosis for the histogram
+      static double kurtosis
+      ( const AIDA::IHistogram1D* histo ) ;
+      // ======================================================================
+      /// get the error in kurtosis for the histogram
+      static double kurtosisErr
+      ( const AIDA::IHistogram1D* histo ) ;
+      // ======================================================================
+      /// get the mean value for the histogram  (just for completeness)
+      static double mean
+      ( const AIDA::IHistogram1D* histo ) ;
+      // ======================================================================
+      /// get an error in the mean value
+      static double meanErr
+      ( const AIDA::IHistogram1D* histo ) ;
+      // ======================================================================
+      /// get the rms value for the histogram  (just for completeness)
+      static double rms
+      ( const AIDA::IHistogram1D* histo ) ;
+      // ======================================================================
+      /// get an error in the rms value
+      static double rmsErr
+      ( const AIDA::IHistogram1D* histo ) ;
+      // ======================================================================
+      /// get the effective entries   (just for completeness)
+      static double nEff
+      ( const AIDA::IHistogram1D* histo     ) ;
+      // ======================================================================
+      /// get an error in the sum bin height ("in-range integral")
+      static double sumBinHeightErr
+      ( const AIDA::IHistogram1D* histo ) ;
+      // ======================================================================
+      /// get an error in the sum of all bin height ("integral")
+      static double sumAllBinHeightErr
+      ( const AIDA::IHistogram1D* histo ) ;
+      // ======================================================================
+      /// the fraction of overflow entries  (useful for shape comparison)
+      static double overflowEntriesFrac 
+      ( const AIDA::IHistogram1D* histo     ) ;
+      /// the fraction of underflow entries (useful for shape comparison)
+      static double underflowEntriesFrac
+      ( const AIDA::IHistogram1D* histo     ) ;
+      /// error on fraction of overflow entries  (useful for shape comparison)
+      static double overflowEntriesFracErr 
+      ( const AIDA::IHistogram1D* histo     ) ;
+      /// the error on fraction of underflow entries (useful for shape comparison)
+      static double underflowEntriesFracErr  
+      ( const AIDA::IHistogram1D* histo     ) ;
+      // ======================================================================
+      /// the fraction of overflow intergal  (useful for shape comparison)
+      static double overflowIntegralFrac
+      ( const AIDA::IHistogram1D* histo     ) ;
+      /// the fraction of underflow integral (useful for shape comparison)
+      static double underflowIntegralFrac
+      ( const AIDA::IHistogram1D* histo     ) ;
+      /// the error on fraction of overflow intergal 
+      static double overflowIntegralFracErr 
+      ( const AIDA::IHistogram1D* histo     ) ;
+      /// the error on fraction of underflow integral
+      static double underflowIntegralFracErr 
+      ( const AIDA::IHistogram1D* histo     ) ;
+      // ======================================================================
+      /** get number of entries in histogram up to 
+       *  the certain bin (not-included)
+       *  @attention underflow bin is included! 
+       *  @param histo the pointer to the histogram 
+       *  @param imax  the bin number (not included) 
+       *  @param number of entries 
+       */
+      static long   nEntries 
+      ( const AIDA::IHistogram1D* histo , 
+        const int                 imax  ) ;
+      /** get number of entries in histogram form the certain 
+       *  minimal bin up to the certain maximal bin (not-included)
+       *  @param histo the pointer to the histogram 
+       *  @param imin  the minimal bin number (included) 
+       *  @param imax  the maximal bin number (not included) 
+       *  @param number of entries 
+       */
+      static long   nEntries 
+      ( const AIDA::IHistogram1D* histo , 
+        const int                 imin  ,  //     minimal bin number (included) 
+        const int                 imax  ) ;// maximal bin number (not included) 
+      // ======================================================================
+      /** get the fraction of entries in histogram up to 
+       *  the certain bin (not-included)
+       *  @attention underflow bin is included! 
+       *  @param histo the pointer to the histogram 
+       *  @param imax  the bin number (not included) 
+       *  @param fraction of entries 
+       */
+      static double nEntriesFrac 
+      ( const AIDA::IHistogram1D* histo , 
+        const int                 imax  ) ;
+      /** get fraction of entries in histogram form the certain 
+       *  minimal bin up to the certain maximal bin (not-included)
+       *  @param histo the pointer to the histogram 
+       *  @param imin  the minimal bin number (included) 
+       *  @param imax  the maximal bin number (not included) 
+       *  @param fraction of entries 
+       */
+      static double nEntriesFrac 
+      ( const AIDA::IHistogram1D* histo , 
+        const int                 imin  ,  //     minimal bin number (included) 
+        const int                 imax  ) ;// maximal bin number (not included) 
+      // ======================================================================
+      /** get the (binominal) error for the fraction of entries 
+       *  in histogram up to the certain bin (not-included)
+       *  @attention underflow bin is included! 
+       *  @param histo the pointer to the histogram 
+       *  @param imax  the bin number (not included) 
+       *  @param error for the fraction of entries 
+       */
+      static double nEntriesFracErr
+      ( const AIDA::IHistogram1D* histo , 
+        const int                 imax  ) ;
+      /** get the (binomial) error for the fraction of entries in histogram 
+       *  from the certain minimal bin up to the certain maximal bin (not-included)
+       *  @param histo the pointer to the histogram 
+       *  @param imin  the minimal bin number (included) 
+       *  @param imax  the maximal bin number (not included) 
+       *  @param error for the fraction of entries 
+       */
+      static double nEntriesFracErr
+      ( const AIDA::IHistogram1D* histo , 
+        const int                 imin  ,  //     minimal bin number (included) 
+        const int                 imax  ) ;// maximal bin number (not included) 
+      // ======================================================================
+    } ;
+    // ========================================================================
+  } // end of namespace Gaudi::Utils
+  // ==========================================================================
+} // end of namespace Gaudi
+// ============================================================================
+// The END
+// ============================================================================
+#endif // GAUDIUTILS_HISTOSTATS_H
+// ============================================================================

GaudiUtils/HistoTableFormat.h

+// $Id: HistoTableFormat.h,v 1.3 2007/11/16 15:29:02 hmd Exp $
+// ============================================================================
+#ifndef GAUDIUTILS_HISTOTABLEFORMAT_H
+#define GAUDIUTILS_HISTOTABLEFORMAT_H 1
+// ============================================================================
+// Include files
+// ============================================================================
+#include "GaudiKernel/Kernel.h"
+// ============================================================================
+// forward declarations
+// ============================================================================
+namespace AIDA
+{
+  class IHistogram1D   ;
+  class IBaseHistogram ;
+}
+// ============================================================================
+namespace Gaudi
+{
+  namespace Utils
+  {
+    // ========================================================================
+    /** @namespace Gaudi::Utils::Histos
+     *  Collection of useful utilities for manipulations with
+     *  AIDA hisgograms
+     *  @author Vanya BELYAEV ibelyaev@physics.syr.edu
+     *  @date   2007-08-08
+     */
+    namespace Histos
+    {
+      // ======================================================================
+      /** @namespace Gaudi::Utils::Histos::Formats
+       *
+       *  The 15 format fields are predefined now:
+       *
+       *   -  1 : the histogram path in transient store  (without '/stat/')
+       *   -  2 : the histogram title
+       *   -  3 : number of ALL entries
+       *   -  4 : number of UNDERFLOW entries
+       *   -  5 : number of OVERFLOW  entries
+       *   -  6 : the statistics of equivalent entries
+       *   -  7 : the full integral in range
+       *   -  8 : mean value
+       *   -  9 : the estimated uncertainty in the mean value
+       *   - 10 : rms value
+       *   - 11 : the estimated uncertainty in the rms value
+       *   - 12 : skewness value
+       *   - 13 : the estimated uncertainty in the skewness value
+       *   - 14 : kurtosis value
+       *   - 15 : the estimated uncertainty in the kurtosis value
+       *   - 16 : full intergal (in and out-range) 
+       *   - 17 : error on the full intergal (16) 
+       *   - 18 : error on the full intergal in range (7) 
+       *   - 19 : fraction of overflow entries       [%]
+       *   - 20 : (binomial) error on fraction of overflow entries [%]
+       *   - 21 : fraction of underflow entries      [%] 
+       *   - 22 : (binomial) error on fraction of underflow entries [%]
+       *   - 23 : fraction of overflow integral    
+       *   - 24 : error on fraction of overflow integral 
+       *   - 25 : fraction of underflow  integral 
+       *   - 26 : error on fraction of underflow integral 
+       *
+       *  @see Gauid::Utils::HistoStats
+       *
+       *  Unlike parameters 3-7 & 16-19, the parameters 
+       *  8-15 and 19-26 are sensitive only to 
+       *  the shape of the distribution.
+       *
+       *  Simple collection of predefiend formats for the histogram
+       *  @author Vanya BELYAEV ibelyaev@physics.syed.edu
+       *  @date 2007-08-07
+       */
+      namespace Formats
+      {
+        // ====================================================================
+        /** the ID for predefined formats
+         *  - Default   : the default format 
+         *  - Old       : the old-style format (title,integra,entries,mean,rms)
+         *  - Full      : FULL information (all 15 predefiend values) 
+         *  - FullStat  : FULL statistical information (all 13 statistical values) 
+         *  - Stat      : title, #entries,mean, rms, skewness&kurtosis 
+         *  - StatOnly  : #entries,mean, rms, skewness&kurtosis 
+         *  - Stat1     : #entries,mean+-, rms+-, skewness+-&kurtosis+- 
+         *  - ShapeOnly : mean,rms,skewness,kurtosis,underflow&overflow fractions
+         *  - Shape     : as ShapeOnly but with errors 
+         *  - LineTitle : line-format title, mean,rms,skewness&kurtosis 
+         *  - LineOnly  : line-format mean,rms,skewness&kurtosis 
+         *  - PathTitle : path & title 
+         */
+        enum Format
+          {
+            Default = 0 , // default format
+            Old         , // "OLD"-line format: title,integral,#ent,mean,rms
+            Full        , // FULL format: the first 15 positions
+            FullStat    , // Full statistical info (3-15)
+            Stat        , // title,#ent,mean,rms,skewness&kurtosis
+            StatOnly    , // #entries,mean,rms,skewness&kurtosis
+            Stat1       , // #entries,mean+-,rms+-,skewness+-&kurtosis+-
+            ShapeOnly   , // mean,rms,skewness,kurtosis,underflow&overflow fractions
+            Shape       , // as ShapeOnly but with errors 
+            LineTitle   , // line-format : title,mean,rms,skewness&kurtosis
+            LineOnly    , // line-format : mean,rms,skewness&kurtosis
+            PathTitle     // "PathTitle" : path & title
+          } ;
+        // ====================================================================
+        /** get the format by enum
+         *  @see Gaudi::Utils::Histos::Formats::Format
+         *  @param ID the format idenfifier
+         *  @return format associated with ID
+         *  @author Vanya BELYAEV ibelyaev@physics.syr.edu
+         *  @date   2007-08-08
+         */
+        GAUDI_API std::string format ( const int ID = Default ) ;
+        // ====================================================================
+        /** get the recommended header by enum
+         *  @see Gaudi::Utils::Histos::Formats::Format
+         *  @param ID the format idenfifier
+         *  @return header associated with ID
+         *  @author Vanya BELYAEV ibelyaev@physics.syr.edu
+         *  @date   2007-08-08
+         */
+        GAUDI_API std::string header ( const int ID = Default ) ;
+        // ====================================================================
+      } // end of namespace Gaudi::Utils::Histos::Formats
+      // ======================================================================
+      /** get the path in THS for AIDA histogram
+       *  @author Vanya BELYAEV ibelyaev@physics.syr.edu
+       *  @date   2007-08-08
+       */
+      GAUDI_API std::string path ( const AIDA::IBaseHistogram* aida ) ;
+      // ======================================================================
+      /** Make the string representation of the historgam
+       *  according to the specified format.
+       *  The method could be used to access/print various quantities
+       *
+       *  @code
+       *
+       *  using namespace Gaudi::Utils::Histos ;
+       *
+       *  const AIDA::IHistogram1D* histo = ... ;
+       *
+       *  // print title in a free format:
+       *  std::cout << format   ( histo , "%2%" ) << std::endl ;
+       *
+       *  // print the path in HTS in a free format:
+       *  std::cout << format   ( histo , " path in HTS: %1% " ) << std::endl ;
+       *
+       *  // print the formatted nEntries/Overflow/Underflow:
+       *  std::cout <<
+       *     format   ( histo , " #nEntries/Overflow/Underflow=%3%/%4%/%5%" )
+       *            << std::endl ;
+       *
+       *  // print the formatted Mean+-ErrorMean:
+       *  std::cout <<
+       *     format   ( histo , " Mean+-Error=(%8%+-%9%)" )
+       *            << std::endl ;
+       *
+       *  // print the skewness and kurtosis:
+       *  std::cout <<
+       *     format   ( histo , " Skewness/Kurtosis=%12%/%14% " )
+       *            << std::endl ;
+       *
+       *  @endcode
+       *
+       *  @param histo reference to the histogram
+       *  @param fmt   the printout format
+       *  @author Vanya BELYAEV ibelyaev@physics.syr.edu
+       *  @date   2007-08-08
+       */
+      GAUDI_API std::string format
+      ( const AIDA::IHistogram1D* histo  ,
+        const std::string&        fmt    ) ;
+      // ======================================================================
+      /** format a full row in table, including ID, label, path or any other
+       *  "extra" identifier in string form
+       *
+       *  @code
+       *
+       *  using namespace Gaudi::Utils::Histos
+       *  const AIDA::IHistogram1D* histo = ... ;
+       *
+       *  // define short format
+       *  const std::string fmt1 = " |%1$-30.30s %|33t| %2" ;
+       *
+       *  // define format for the histogram
+       *  const std::string fmt2 = ... ;
+       *
+       *  info () <<
+       *        format   ( "My Histo" , histo , fmt1 , fmt2 )
+       *          << endmsg ;
+       *
+       *  @endcode
+       *
+       *  @param histo pointer to the histogram
+       *  @param ID historgam ID, title, label  or other extra information
+       *  @param fmt1 "short" format used for the table
+       *  @param fmt2 format used for the histogram printout
+       *  @return formatted row
+       *  @author Vanya BELYAEV ibelyaev@physics.syr.edu
+       *  @date   2007-08-08
+       */
+      GAUDI_API std::string format
+      ( const AIDA::IHistogram1D* histo  ,
+        const std::string&        ID     ,
+        const std::string&        fmt1   ,
+        const std::string&        fmt2   ) ;
+      // ========================================================================
+      /** print the simple sequence (list-like) of histograms as table
+       *
+       *  @code
+       *
+       *  SEQUENCE histos = ... ;
+       *
+       *  // print a table with three colums  path, title and #entries
+       *
+       *  Gaudi::Utils::Histos::printList
+       *    ( histos.begin () ,
+       *      histos.end   () ,
+       *      " | %1$|-40.40s | %2$-30.30s | %3$=7d | " ,
+       *      std::cout       ,
+       *      '\n'            ) ;
+       *
+       *  @endcode
+       *
+       *  @param first begin-iterator for the sequence
+       *  @param last  end-iterator for the sequence
+       *  @param stream the stream to be used for printout
+       *  @param term   the terminmator for the stream
+       *  @param fmt    the format to be used
+       */
+      template <class HISTO, class STREAM, class TERMINATOR>
+      inline STREAM& printList
+      ( HISTO              first  ,
+        HISTO              last   ,
+        const std::string& fmt    ,
+        STREAM&            stream ,
+        TERMINATOR         term   )
+      {
+        for ( ; first != last ; ++first )
+        { stream << format   ( *first , fmt ) << term ; }  // print table rows
+        return stream ;                                    // RETURN
+      }
+      // ======================================================================
+      /** print the simple container of histograms as table
+       *
+       *  @code
+       *
+       *  using namespace Gaudi::Utils::Histos ;
+       *
+       *  SEQUENCE histos = ... ;
+       *
+       *  // print a table with three columns:  path, title and #entries
+       *
+       *  printList
+       *    ( histos          ,
+       *      " | %1$|-40.40s | %2$-30.30s | %3$=7d | " ,
+       *      std::cout       ,
+       *      '\n'            ) ;
+       *
+       *  @endcode
+       *
+       *  @param histos the sequence of histograms
+       *  @param stream the stream to be used for printout
+       *  @param term   the terminmator for the stream
+       *  @param fmt    the format to be used
+       */
+      template <class LIST, class STREAM, class TERMINATOR>
+      inline STREAM& printList
+      ( const LIST&        histos ,
+        const std::string& fmt    ,
+        STREAM&            stream ,
+        TERMINATOR         term   )
+      {
+        return printList
+          ( histos.begin () , histos.end  () , fmt , stream , term ) ;
+      }
+      // ======================================================================
+      /** Print the "associative sequence"  (e.g. part of std:map) of
+       *  histograms as table:
+       *
+       *  @code
+       *
+       *  using namespace Gaudi::Utils::Histos ;
+       *
+       *  const std::map<std::string,AIDA::IHistogram1D*>& m = ... ;
+       *
+       *  printMap
+       *   ( m.begin () ,
+       *     m.end   () ,
+       *     "| %1$-10.10s | %2% " , // short format
+       *     Gaudi::Utils::Histos::Formats::histoFormatOnly ,
+       *     always()   ,
+       *     endmsg     ) ;
+       *
+       *  @endcode
+       *
+       *  Print only mean and rms:
+       *
+       *  @code
+       *
+       *  using namespace Gaudi::Utils::Histos ;
+       *
+       *  const std::map<GaudiAlg::ID,AIDA::IHistogram1D*>& m = ... ;
+       *
+       *  printMap
+       *    ( m.begin () ,
+       *      m.end   () ,
+       *      "| %1$-10.10s | %2% "    , // short format
+       *      " %8$10.5g+-%10$-10.5g|", // mean+-rms
+       *      always()   ,
+       *      endmsg     ) ;
+       *
+       *  @endcode
+       *
+       *  @param begin 'begin'-iterator for the mapping sequence
+       *  @param end   'end'-iterator for the mapping sequence
+       *  @param fmt1  'short' format for the table printout
+       *  @param fmt3   format for the printout of the histogram
+       *  @param stream the stream for printout
+       *  @param term   stream terminator
+       */
+      template <class HISTO, class STREAM, class TERMINATOR>
+      inline STREAM& printMap
+      ( HISTO              begin  ,
+        HISTO              end    ,
+        const std::string& fmt1   ,
+        const std::string& fmt2   ,
+        STREAM&            stream ,
+        TERMINATOR         term   )
+      {
+        for ( ; begin != end ; ++begin )
+        {
+          stream << format
+            ( begin -> second , // the histogram
+              begin -> first  , // the key
+              fmt1  ,  fmt2   ) << term ;
+        }
+        return stream ;
+      }
+      // ======================================================================
+      /** Print the "associative sequence"  (e.g. part of std:map) of
+       *  histograms as table:
+       *
+       *  @code
+       *
+       *  using namespace Gaudi::Utils::Histos ;
+       *
+       *  const std::map<std::string,AIDA::IHistogram1D*>& m = ... ;
+       *
+       *  printMap
+       *   ( m          ,
+       *     "| %1$-10.10s | %2% " , // short format
+       *     Gaudi::Utils::Histos::Formats::histoFormatOnly ,
+       *     always()   ,
+       *     endmsg     ) ;
+       *
+       *  @endcode
+       *
+       *  Print only mean and rms:
+       *
+       *  @code
+       *
+       *  using namespace Gaudi::Utils::Histos ;
+       *
+       *  const std::map<GaudiAlg::ID,AIDA::IHistogram1D*>& m = ... ;
+       *
+       *  printMap
+       *    ( m          ,
+       *      "| %1$-10.10s | %2% "    , // short format
+       *      " %8$10.5g+-%10$-10.5g|", // mean+-rms
+       *      always()   ,
+       *      endmsg     ) ;
+       *
+       *  @endcode
+       *
+       *  @param begin 'begin'-iterator for the mapping sequence
+       *  @param end   'end'-iterator for the mapping sequence
+       *  @param fmt1  'short' format for the table printout
+       *  @param fmt3   format for the printout of the histogram
+       *  @param stream the stream for printout
+       *  @param term   stream terminator
+       */
+      template <class MAP, class STREAM, class TERMINATOR>
+      inline STREAM& printMap
+      ( const MAP&         histos ,
+        const std::string& fmt1   ,
+        const std::string& fmt2   ,
+        STREAM&            stream ,
+        TERMINATOR         term   )
+      {
+        return printMap
+          ( histos.begin () , histos.end() , fmt1 , fmt2 , stream , term ) ;
+      }
+      // ======================================================================
+      /** helper method to merge the headers for short format table
+       *  @author Vanya BELYAEV ibelyaev@physics.syr.edu
+       *  @date   2007-08-07
+       */
+      GAUDI_API std::string format
+      ( const std::string& val1 ,
+        const std::string& val2 ,
+        const std::string& fmt  ) ;
+      // ======================================================================
+      /** @class Table HistoTableFormat.h GaudiUtils/HistoTableFormat.h
+       *  Simple class for the customizeble printout of the histogram tables
+       *
+       *  @author Vanya BELYAEV ibelyaev@physics.syr.edu
+       *  @date   2007-08-07
+       */
+      // ========================================================================
+      class GAUDI_API Table
+      {
+      public:
+        /// constructor from enum
+        Table  ( const int ID  = 0 ) ;
+        /// Constructor from the format, header and footer
+        Table
+        ( const std::string& format      ,
+          const std::string& header = "" ,
+          const std::string& footer = "" ) ;
+      public:
+        // ======================================================================
+        /** print the simple sequence of histograms as table
+         *  @param first begin-iterator for the sequence
+         *  @param last  end-iterator for the sequence
+         *  @param stream the stream to be used for printout
+         *  @param term   the terminmator for the stream
+         */
+        template <class HISTO, class STREAM, class TERMINATOR>
+        STREAM& printList
+        ( HISTO              first  ,
+          HISTO              last   ,
+          STREAM&            stream ,
+          TERMINATOR         term   ) const
+        {
+          if ( !header().empty() ) { stream << header () << term ; }
+          Gaudi::Utils::Histos::printList ( first , last , format() , stream , term ) ;
+          if ( !footer().empty() ) { stream << footer () << term ; }
+          return stream ;
+        }
+        // ======================================================================
+      public:
+        /** print as table the content of the accociative map
+         *  (key->histogram) with the key, convertible to std::string
+         *
+         *  The default format is used for histogram prinout
+         *
+         *  @param first 'begin'-iterator for the mapping sequence
+         *  @param last  'end'-iterator for the mapping sequence
+         *  @param fmt   'short' format for the table printout
+         *  @param hval  the name of the "key"-column
+         *  @param stream the stream for printout
+         *  @param term   stream terminator
+         */
+        template <class HISTO, class STREAM, class TERMINATOR>
+        STREAM& printMap
+        ( HISTO              first  ,
+          HISTO              last   ,
+          const std::string& fmt    ,
+          const std::string& hval   ,
+          STREAM&            stream ,
+          TERMINATOR         term   ) const
+        {
+          if ( !hval.empty() || !header().empty() )
+          { stream << Gaudi::Utils::Histos::format ( hval , header() , fmt ) << term ; }
+          return Gaudi::Utils::Histos::printMap
+            ( first , last , fmt , format() , stream , term ) ;
+        }
+        // ======================================================================
+      public:
+        // ======================================================================
+        /// the table header
+        const std::string& header () const { return m_header ; }
+        // ======================================================================
+        /// the table footer
+        const std::string& footer () const { return m_footer ; }
+        // ======================================================================
+        /// the format
+        const std::string& format () const { return m_format ; }
+        // ======================================================================
+      public:
+        // ======================================================================
+        /// set new header
+        void setHeader ( const std::string& v ) { m_header = v ; }
+        // ======================================================================
+        /// set new footer
+        void setFooter ( const std::string& v ) { m_footer = v ; }
+        // ======================================================================
+        /// set new format
+        void setFormat ( const std::string& v ) { m_format = v ; }
+        // ======================================================================
+      public :
+        // ======================================================================
+        /// make the string representation according to the default format
+        std::string toString ( const AIDA::IHistogram1D* histo  ) const ;
+        // ======================================================================
+      public:
+        // ======================================================================
+        /** format a full row in table, including ID, label, path or any other
+         *  "extra" identifier
+         *
+         *  @code
+         *
+         *  using namespace Gaudi::Utils::Histos ;
+         *
+         *  const Table& table = ... ;
+         *
+         *  const AIDA::IHistogram1D* histo = ... ;
+         *
+         *  // define short format
+         *  const std::string fmt1 = " |%1$-30.30s %|33t| %2" ;
+         *
+         *  info () << table.toString ( "My Histo" , histo , fmt ) ;
+         *
+         *  @endcode
+         *
+         *  @param histo pointer to the histogram
+         *  @param ID historgam ID, title, label  or other extra infomration
+         *  @param fmt "short" format used for the table
+         *  @return formatted row
+         */
+        std::string toString
+        ( const AIDA::IHistogram1D* histo  ,
+          const std::string&        ID     ,
+          const std::string&        fmt    ) const ;
+        // ======================================================================
+      public:
+        // the table header
+        std::string m_header ; ///< the table header
+        // the table footer
+        std::string m_footer ; ///< the table footer
+        // the default format
+        std::string m_format ; ///< the defautl format
+        //
+      } ;
+    } // end of namespace Gaudi::Utils::Histos
+  } // end of namespace Gaudi::Utils
+} // end of namespace Gaudi
+// ============================================================================
+// The END
+// ============================================================================
+#endif // GAUDIUTILS_HISTOTABLEFORMAT_H
+// ============================================================================

GaudiUtils/IFileCatalog.h

+#ifndef GAUDIFILECATALOG_IFILECATALOG_H
+#define GAUDIFILECATALOG_IFILECATALOG_H
+// $ID:$
+
+#include "GaudiKernel/IInterface.h"
+#include <string>
+#include <vector>
+#include <utility>
+
+/*
+ *   Gaudi namespace declaration
+ */
+namespace Gaudi {
+
+  /** @class IFileCatalog IFileCatalog.h GaudiUtils/IFileCatalog.h
+    *
+    *  File catalog interface.
+    *  Resolve file ids, physical and logical file names.
+    *
+    *  @author  M.Frank
+    *  @version 1.0
+    *  @date    20/10/2007
+    */
+  class GAUDI_API IFileCatalog : virtual public IInterface {
+
+  public:
+    /// InterfaceID
+    DeclareInterfaceID(IFileCatalog,2,0);
+
+    /// Public type definitions
+    typedef std::pair<std::string,std::string>  NamedItem;
+    typedef std::vector<NamedItem>              Attributes;
+    typedef std::vector<NamedItem>              Files;
+    typedef std::vector<std::string>            Strings;
+
+    /** Catalog interface                                               */
+    /// Create file identifier using UUID mechanism
+    virtual std::string createFID() const = 0;
+    /// Access to connect string
+    virtual const std::string& connectInfo() const = 0;
+    /// Parse the DOM tree of the XML catalog
+    virtual void init() = 0;
+    /// Save catalog to file
+    virtual void commit() = 0;
+    /// Save catalog to file
+    virtual void rollback() = 0;
+    /// Check if the catalog is read-only
+    virtual bool readOnly()  const = 0;
+    /// Check if the catalog should be updated
+    virtual bool dirty() const = 0;
+    /// Dump all PFNames of the catalog and their attributes associate to the FileID
+    virtual void getPFN(const std::string& fid, Files& files) const = 0;
+    /// Dump all LFNames of the catalog associate to the FileID
+    virtual void getLFN(const std::string& fid, Files& files) const = 0;
+    /// Dump all file Identifiers
+    virtual void getFID(Strings& fids) const = 0;
+    /// Return the status of a PFName
+    virtual bool existsPFN(const std::string& pfn)  const = 0;
+    /// Lookup file identifier by physical file name
+    virtual std::string lookupPFN(const std::string& lfn)  const = 0;
+    /// Return the status of a LFName
+    virtual bool existsLFN(const std::string& lfn) const = 0;
+    /// Lookup file identifier by physical file name
+    virtual std::string lookupLFN(const std::string& lfn)  const = 0;
+    /// Return the status of a FileID
+    virtual bool existsFID(const std::string& fid)  const = 0;
+    /// Delete FileID Node from the catalog
+    virtual void deleteFID(const std::string& FileID) const = 0;
+    /// Create a Node for a FileID and DOM Node of the PFN with all the attributes
+    virtual void registerPFN(const std::string& fid, const std::string& pfn, const std::string& ftype) const = 0;
+    /// Create a Node for a FileID and DOM Node of the LFN with all the attributes
+    virtual void registerLFN(const std::string& fid, const std::string& lfn) const = 0;
+    /// Create a Node for a FileID and DOM Node
+    virtual void registerFID(const std::string& fid) const = 0;
+    /// Dump all MetaData of the catalog for a given file ID
+    virtual void getMetaData(const std::string& fid, Attributes& attr) const = 0;
+    /// Access metadata item
+    virtual std::string getMetaDataItem(const std::string& fid, const std::string& name) const = 0;
+    /// Insert/update metadata item
+    virtual void setMetaData(const std::string& fid, const std::string& name, const std::string& value) const = 0;
+    /// Drop all metadata of one FID
+    virtual void dropMetaData(const std::string& fid) const = 0;
+    /// Drop specified metadata item
+    virtual void dropMetaData(const std::string& fid, const std::string& attr) const = 0;
+  };
+}         /* End namespace Gaudi             */
+#endif    /* GAUDIFILECATALOG_IFILECATALOG_H */

GaudiUtils/IFileCatalogMgr.h

+#ifndef GAUDIFILECATALOG_IFILECATALOGMGR_H
+#define GAUDIFILECATALOG_IFILECATALOGMGR_H
+// $ID:$
+
+#include "GaudiKernel/IInterface.h"
+#include <string>
+#include <vector>
+
+/*
+ *   Gaudi namespace declaration
+ */
+namespace Gaudi {
+
+  // Forward declarations
+  class IFileCatalog;
+
+  /** @class IFileCatalogMgr IFileCatalogMgr.h GaudiUtils/IFileCatalogMgr.h
+    *
+    *  File catalog manager.
+    *  Interface to add/remove file catalogs from the multi catalog.
+    *
+    *  @author  M.Frank
+    *  @version 1.0
+    *  @date    20/10/2007
+    */
+  class GAUDI_API IFileCatalogMgr : virtual public IInterface {
+  public:
+    /// InterfaceID
+    DeclareInterfaceID(IFileCatalogMgr,2,0);
+
+    /// Public type definitions
+    typedef std::vector<IFileCatalog*> Catalogs;
+
+    /** Catalog management                                                    */
+    /// Find catalog by connect string
+    virtual IFileCatalog* findCatalog(const std::string& connect, bool must_be_writable) const = 0;
+    /// Add new catalog identified by name to the existing ones
+    virtual void addCatalog(const std::string& connect) = 0;
+    /// Add new catalog identified by reference to the existing ones
+    virtual void addCatalog(IFileCatalog* cat) = 0;
+    /// Remove catalog identified by name from the existing ones
+    virtual void removeCatalog(const std::string& connect) = 0;
+    /// Remove catalog identified by reference from the existing ones
+    virtual void removeCatalog(const IFileCatalog* cat) = 0;
+    /// Access catalog container
+    virtual Catalogs& catalogs() = 0;
+    /// Access catalog container (CONST)
+    virtual const Catalogs& catalogs()  const = 0;
+    /// Access to the (first) writable file catalog
+    virtual IFileCatalog* writeCatalog(const std::string& fid="") const = 0;
+    /// Define the writable catalog identified by reference
+    virtual void setWriteCatalog(IFileCatalog* cat) = 0;
+    /// Define the writable catalog identified by name
+    virtual void setWriteCatalog(const std::string& connect) = 0;
+  };
+}         /* End namespace Gaudi             */
+#endif    /* GAUDIFILECATALOG_IFILECATALOGMGR_H */

GaudiUtils/IIODataManager.h

+#ifndef GAUDIUTILS_IIODATAMANAGER_H
+#define GAUDIUTILS_IIODATAMANAGER_H
+// $Id:
+
+// Framework include files
+#include "GaudiKernel/IInterface.h"
+
+// C++ include files
+#include <string>
+#include <vector>
+
+/*
+ *  LHCb namespace declaration
+ */
+namespace Gaudi  {
+
+  /** @class IDataConnection
+    *
+    *  ABC describing basic data connection
+    *
+    *  @author  M.Frank
+    *  @version 1.0
+    *  @date    20/10/2007
+    */
+  class GAUDI_API IDataConnection  {
+  protected:
+    /// Connection name/identifier
+    std::string              m_name;
+    /// File ID of the connection
+    std::string              m_fid;
+    /// Physical file name of the connection
+    std::string              m_pfn;
+    /// Age counter
+    int                      m_age;
+    /// Owner pointer
+    const IInterface*        m_owner;
+  public:
+    /// I/O Connection types
+    enum IoType   { READ=1<<1,UPDATE=1<<2,CREATE=1<<3,RECREATE=(1<<4)+(1<<3) };
+    /// Status Code on bad file connection
+    enum IoStatus { BAD_DATA_CONNECTION=4 };
+  public:
+    /// Standard constructor
+    IDataConnection(const IInterface* own, const std::string& nam)
+    : m_name(nam), m_owner(own) {}
+    /// Standard destructor
+    virtual ~IDataConnection() {}
+    /// Connection name
+    const std::string& name() const       {     return m_name;       }
+    /// Set file ID
+    void setFID(const std::string& fid)   {     m_fid = fid;         }
+    /// Access file id
+    const std::string& fid() const        {     return m_fid;        }
+    /// Access physical file name
+    const std::string& pfn() const        {     return m_pfn;        }
+    /// Set physical file name
+    void setPFN(const std::string& fn)    {     m_pfn = fn;          }
+    /// Increase age of I/O source
+    void ageFile()                        {     ++m_age;             }
+    /// Reset age
+    void resetAge()                       {     m_age = 0;           }
+    /// Access age counter
+    int age() const                       {     return m_age;        }
+    /// Owner instance
+    const IInterface* owner() const       {     return m_owner;      }
+    /// Open data stream in read mode
+    virtual StatusCode connectRead() = 0;
+    /// Open data stream in write mode
+    virtual StatusCode connectWrite(IoType type) = 0;
+    /// Release data stream
+    virtual StatusCode disconnect() = 0;
+    /// Check if connected to data source
+    virtual bool isConnected() const = 0;
+    /// Read raw byte buffer from input stream
+    virtual StatusCode read(void* const data, size_t len) = 0;
+    /// Write raw byte buffer to output stream
+    virtual StatusCode write(const void* data, int len) = 0;
+    /// Seek on the file described by ioDesc. Arguments as in ::seek()
+    virtual long long int seek(long long int where, int origin) = 0;
+  };
+
+  /** @class IIODataManager
+    *
+    *  @author  M.Frank
+    *  @version 1.0
+    *  @date    20/10/2007
+    */
+  class GAUDI_API IIODataManager : virtual public IInterface {
+  public:
+    /// InterfaceID
+    DeclareInterfaceID(IIODataManager,2,0);
+
+    /// Connection type definition
+    typedef IDataConnection           Connection;
+    typedef std::vector<Connection*>  Connections;
+    typedef Connection::IoType        IoType;
+    enum FileType { UNKNOWN=1, PFN, LFN, FID };
+
+    /// Open data stream in read mode
+    virtual StatusCode connectRead(bool keep_open, IDataConnection* con) = 0;
+    /// Open data stream in write mode
+    virtual StatusCode connectWrite(IDataConnection* con,IoType mode=Connection::CREATE,const std::string& doctype="UNKNOWN") = 0;
+    /// Release data stream
+    virtual StatusCode disconnect(IDataConnection* con) = 0;
+    /// Retrieve known connection
+    virtual Connection* connection(const std::string& dsn) const = 0;
+    /// Get connection by owner instance (0=ALL)
+    virtual Connections connections(const IInterface* owner) const = 0;
+    /// Read raw byte buffer from input stream
+    virtual StatusCode read(IDataConnection* con, void* const data, size_t len) = 0;
+    /// Write raw byte buffer to output stream
+    virtual StatusCode write(IDataConnection* con, const void* data, int len) = 0;
+    /// Seek on the file described by ioDesc. Arguments as in ::seek()
+    virtual long long int seek(IDataConnection* con, long long int where, int origin) = 0;
+  };
+}         // End namespace Gaudi
+#endif    // GAUDIUTILS_IIODATAMANAGER_H

GaudiUtils/ISignalMonitor.h

+#ifndef GAUDIUTILS_ISIGNALMONITOR_H
+#define GAUDIUTILS_ISIGNALMONITOR_H
+
+#include "GaudiKernel/IInterface.h"
+
+namespace Gaudi {
+
+  /** Interface for the service that monitors the occurrences of system signals.
+   *
+   * The signal to be monitored have to be declared via the method monitorSignal().
+   * The method gotSignal() can used to check if a signal has been received.
+   *
+   * Note that the service is passive, in the sense that it simply keeps track of
+   * received signals without performing any action. So it is responsibility of the
+   * users to add a check if the signal has been received or not.
+   *
+   *  @author  Marco Clemencic
+   */
+  class GAUDI_API ISignalMonitor: virtual public IInterface {
+  public:
+    /// InterfaceID
+    DeclareInterfaceID(ISignalMonitor, 1, 0);
+
+    /// Add a signal (number) to the list of signals to be monitored.
+    /// It possible to choose if a previously installed signal handler should be
+    /// called or not.
+    ///
+    /// @param signum: signal number
+    /// @param propagate: if true (default) an already present signal handler is called,
+    ///  otherwise the signal is stopped in the service.
+    virtual void monitorSignal(int signum, bool propagate = true) = 0;
+
+    /// Ignore future occurrences of the given signal number.
+    ///
+    /// @param signum: signal number
+    virtual void ignoreSignal(int signum) = 0;
+
+    /// Tell if the given signal has been received or not.
+    ///
+    /// @param signum: signal number
+    virtual bool gotSignal(int signum) const = 0;
+
+    /// Set the flag for the given signal, as if the signal was received.
+    ///
+    /// @param signum: signal number
+    virtual void setSignal(int signum) = 0;
+
+    /// Clear the flag for the given signal, so that a new occurrence can be identified.
+    ///
+    /// @param signum: signal number
+    virtual void clearSignal(int signum) = 0;
+
+  };
+
+} // namespace Gaudi
+
+#endif /* GAUDIUTILS_ISIGNALMONITOR_H */

GaudiUtils/NamedRange.h

+// FIXME: remove obsolete header
+#include "GaudiKernel/NamedRange.h"
+#if WIN32
+#pragma message ( "Warning: obsolete header file, use GaudiKernel/NamedRange.h" )
+#else
+#warning obsolete header file, use GaudiKernel/NamedRange.h
+#endif

GaudiUtils/Range.h

+// FIXME: remove obsolete header
+#include "GaudiKernel/Range.h"
+#if WIN32
+#pragma message ( "Warning: obsolete header file, use GaudiKernel/Range.h" )
+#else
+#warning obsolete header file, use GaudiKernel/Range.h
+#endif

GaudiUtils/RegEx.h

+#ifndef GAUDIUTILS_REGEX_H
+#define GAUDIUTILS_REGEX_H
+// ============================================================================
+// Include files
+// ============================================================================
+#include <string>
+#include <boost/regex.hpp>
+
+/*
+ *  Gaudi namespace declaration
+ */
+namespace Gaudi
+{
+  namespace  Utils
+  {
+    // ========================================================================
+    /** RegeEx: nemspace to hold gaudi regular expression checking
+     *
+     *  @param matchOr: return true if test is in any of the regexps
+     *  @param matchAnd: return true if test is in all of the regexps
+     *
+     *  @author Rob Lambert Rob.Lambert@cern.ch
+     *  @date   2009-07-29
+     */
+    namespace RegEx
+    {
+      /** return true if the string is in any of the regex's
+       *  @param  std::string test [IN]:  string to match
+       *  @param  container<std::string> regexps  [IN]:  container of regex strings
+       *         can be any container with a const_iterator, begin and end
+       */
+      template <typename T> bool matchOr(const std::string & test, const T & regexps)
+      {
+        //compares the string in test, to the regexps in a container
+        for (typename T::const_iterator i = regexps.begin();
+             i != regexps.end(); ++i)
+        {
+          const boost::regex pattern(*i);
+          if (boost::regex_match(test, pattern)) return true;
+        }
+        return false;
+      }
+
+      /** return true if the string is in all of the regex's
+       *  @param  std::string test [IN]:  string to match
+       *  @param  container<std::string> regexps  [IN]:  container of regex strings
+       *        can be any container with a const_iterator, begin and end
+       */
+      template <typename T> bool matchAnd(const std::string & test, const T & regexps)
+      {
+        //compares the string in test, to the regexps in a container
+        for (typename T::const_iterator i = regexps.begin();
+             i != regexps.end(); ++i)
+        {
+          const boost::regex pattern(*i);
+          if (!boost::regex_match(test, pattern)) return false;
+        }
+        return true;
+      }
+    }
+  }
+}
+#endif
+# $Id: requirements,v 1.11 2008/11/10 18:54:35 marcocle Exp $ 
+# =============================================================================
+package GaudiUtils
+version v3r11
+
+# ============== structure ====================================================	
+branches        GaudiUtils src cmt doc
+
+# ============== dependencies =================================================
+use             GaudiKernel * 
+
+use             ROOT        * LCG_Interfaces
+use             AIDA        * LCG_Interfaces -no_auto_imports
+use             Boost       * LCG_Interfaces -no_auto_imports
+use             uuid        * LCG_Interfaces -no_auto_imports
+use             Reflex      * LCG_Interfaces -no_auto_imports
+use             XercesC     * LCG_Interfaces -no_auto_imports
+
+# ============== own includes =================================================
+apply_pattern install_more_includes more="GaudiUtils"
+# ============== constituents =================================================
+library         GaudiUtilsLib Lib/*.cpp -import=AIDA -import=Boost -no_static
+apply_pattern   linker_library    library="GaudiUtilsLib"
+# ============== constituents =================================================
+library GaudiUtils component/*.cpp -import=XercesC -import=Reflex -import=uuid -import=Boost -no_static
+apply_pattern component_library library=GaudiUtils
+# ============== patterns =====================================================
+
+
+private 
+
+macro_append ROOT_linkopts " -lHist " \
+              target-winxp " libHist.lib " \
+             target-mac104 " -lHist -lMatrix "
+
+macro_append Boost_linkopts " $(Boost_linkopts_date_time) "
+

doc/release.notes

+Package: GaudiUtils
+Package manager : Marco Clemencic
+
+============================== GaudiUtils v3r11 ==============================
+! 2011-01-11 - Marco Clemencic
+ - Fixed some ICC remarks.
+
+============================== GaudiUtils v3r10 ==============================
+! 2010-09-20 - Marco Clemencic
+ - Fixed bug #70956: Add method to find the reason for termination of the
+                     event loop
+   - Use the new return code constants in case of signal
+     (Gaudi::Utils::StopSignalHandler).
+
+============================== GaudiUtils v3r9 ===============================
+! 2010-07-14 - Marco Clemencic
+ - Another small fix for Xerces-C 3.1.
+
+! 2010-05-27 - Chris Jones
+ - Patch #4045: Utilities to set histogram axis and bin labels for GaudiUtils
+
+! 2010-05-17 - Marco Clemencic
+ - Adepted to work with Xerces-C 3.1.0 (as well as 2.8.0).
+
+============================== GaudiUtils v3r8 ===============================
+! 2010-04-23 - Marco Clemencic
+ - Minor fix to compile with gcc 4.5.0
+
+! 2010-04-22 - Marco Clemencic
+ - Set the return code of the application to (128 + signal number) when a signal
+   is trapped by the StopSignalHandler.
+
+! 2010-04-21 - Marco Clemencic
+ - Changed the messages in StalledEventMonitor to report about memory usage and
+   not stop printing after 3 calls.
+
+! 2010-04-20 - Marco Clemencic
+ - Removed ICC warnings and remarks.
+
+! 2010-04-19 - Marco Clemencic
+ - Moved the EventTimeoutWatchdog thread from the EventLoopMgr to a dedicated
+   service in GaudiUtils (StalledEventMonitor).
+
+! 2010-04-16 - Marco Clemencic
+ - Modified the implementation of the fix to bug #62374 (Handling of signal
+   SIGXCPU).
+   The new implementation is based on a couple of extra services instead of
+   being integrated in EventLoopMgr (less intrusive).
+   - Gaudi::Utils::SignalMonitorSvc (implementing the interface ISignalMonitor)
+     is a service that just keep track of the occurrences of the requested
+     signals and, optionally, propagates them to the previously registered
+     handlers (if any).
+   - Gaudi::Utils::StopSignalHandler uses SignalMonitorSvc to check if any of
+     the signals in the list (property) "Signals" has been received and trigger
+     a stop of the event loop in that case (during the BeginEvent incident).
+
+============================== GaudiUtils v3r7 ===============================
+! 2010-03-16 - Vanya Belyaev
+ - Patch #3840: Fix for bug #59009
+   - HistoDump:
+     Rename the functions with return value of std::ostream&, they produce
+     messages to std::err in python.
+     Since "std::ostream&" variants are useless to python, just rename them,
+     thus avoiding the dictionaries.
+
+! 2010-01-28 - Marco Clemencic
+ - Fixed icc remark #177: X declared but never referenced
+
+============================== GaudiUtils v3r6 ===============================
+! 2009-12-15 - Marco Clemencic
+ - Fixed bug #59659: Untested StatusCodes in IODataManager.cpp
+
+================ GaudiUtils v3r5 ====================================
+! 2009-10-08 - Vanya Belyaev
+ - Patch #3311: Add ASCII dump for 1D-profile histograms
+   Extension of patch #3261 to 1D-profile histograms
+
+! 2009-10-07 - Vanya Belyaev
+ - Patch #3261: Utility for ASCII dump of 1D-histograms
+   Added the function Gaudi::Utils::Histo::histoDump.
+
+! 2009-09-08 - Rob Lambert
+ - Patch #3222: Patch to Issue incidents for Input Files
+   - Details required for the documentation of output
+     files in the Summary services
+   - Added functionality to IODataManager
+     will now fire a FailedInputFile incident when there is a problem
+
+================ GaudiUtils v3r4 ====================================
+! 2009-08-01 - Rob Lambert
+ - Patch #3174: Added GaudiUtils/RegEx.h
+   It containes templated functions to deal with Regular Expressions.
+   Uses boost/regex.hpp, and std::string.
+
+! 2009-07-21 - Hubert Degaudenzi
+ - Fixed typo in the -no_static usage.
+
+! 2009-07-20 - Marco Clemencic
+ - Added '-no_static' to the declaration of the libraries (implemented since CMT
+   v1r20p20081118).
+
+================ GaudiUtils v3r3 ====================================
+! 2009-07-08 - Marco Clemencic
+ - Removed the usage of extend_interfaces1.
+
+================ GaudiUtils v3r2 ====================================
+! 2009-06-23 - Marco Clemencic, Vanya Belyaev
+ - Patch #2980: Moved Range.h and NamedRange.h from GaudiUtils to GaudiKernel.
+
+! 2009-06-15 - Hubert Degaudenzi
+ - use the new LCG tag convention.
+
+================ GaudiUtils v3r1 ====================================
+! 2009-05-15 - Marco Clemencic
+ - Fixed bug #50389: AppMgr.algorithm/tool/algorithms does not work for
+                     GaudiPython::PyAlg<TYPE>
+   Changed the inheritance from "implements#": replaced "virtual public" with
+   "public" (more correct and does not confuse PyROOT).
+
+================ GaudiUtils v3r0 ====================================
+! 2009-04-07 - Marco Clemencic
+ - Moved back the namespace MSG to the global namespace.
+
+! 2009-04-06 - Vanya Belyaev
+ - Patch #2930: improve the manipulations with AIDA histograms
+   - GaudiUtils/HistoStats.h, src/Lib/HistoStats.cpp
+     1) fix the bug in evaluation of error in kurotsis (thanks to Dmitry Golubkov!)
+     2) fix the bug in evaluation of error in moment
+     3) add new methods for class Gaudi::Utils::HistoStats
+        sumBinHeightErr          : the error for AIDA::IHistogram1D::sumBinHeights
+        sumAllBinHeightErr       : the error for AIDA::IHistogram1D::sumAllBinHeights
+        overflowEntriesFrac      : the fraction of overflow entries
+        underflowEntriesFrac     : the fraction of underflow entries
+        overflowEntriesFracErr   : the (binomial) error on fraction of overflow entries
+        underflowEntriesFracErr  : the (binomial) error on fraction of underflow entries
+        overflowIntegralFrac     : the fraction of overflow integral
+        underflowIntegralFrac    : the fraction of underflow integral
+        overflowIntergalFracErr  : the error on fraction of overflow integral
+        underflowIntegralFracErr : the error on fraction of underflow integral
+        nEntries                 : number of entries for certain ranges
+        nEntriesFrac             : fraction entries for certain ranges
+        nEntriesFracErr          : the (binomial) error for the fraction entries for certain ranges
+   - GaudiUtils/HistoTableFormat.h, src/Lib/HistoTableFormat.cpp
+     1) Add the possibility to print new estimators from class HistoStats.
+        The overall number of the predefined fields in table printout
+        now is 26.. see GaudiUtils/HistoTableFormat.h for the list
+     2) add few new reference formats:
+          StatOnly  : #entries, mean, rms, skewness & kurtosis
+          Stat1     : similar to StatOnly but with errors
+          ShapeOnly : mean.rms, skewness,kurtosis, overflow&underflow fractions
+          Shape     : similar for ShapeOnly but with errors
+       "Shape"-format are very useful for comparison of histograms by shapes,
+       ignoring the normalization
+
+! 2009-04-06 - Marco Clemencic
+ - Renamed back the namespace Msg to MSG and moved it into the namespace Gaudi.
+
+! 2009-03-13 - Marco Clemencic
+ - Task #9061: Introduction of component managers
+   - Adapted to use the changes in the ISvcLocator, ISvcManager and IAlgManager
+     interfaces.
+
+! 2009-02-19 - Marco Clemencic
+ - Patch #2790: Rename the namespace MSG to Msg
+
+! 2009-02-06 - Marco Clemencic
+ - Moved the implementation of the methods addRef and release to the templated
+   base class implements<> (avoids duplication).
+
+! 2009-01-30 - Marco Clemencic
+ - Replaced all the occurrences of endreq with endmsg.
+
+! 2009-01-29 - Marco Clemencic
+ - Symbol visibility
+   - Decorated all the classes and functions that needs to be exported (see
+     GaudiKernel release.notes).
+   - Added a hack to force the export of the symbols of AIDA interfaces to allow
+     the dynamic_cast (see GaudiSvc release.notes).
+
+! 2009-01-22 - Marco Clemencic
+ - Adapted to the new IInterface functionalities (see GaudiKernel release.notes)
+ - Removed the IID_* constants.
+
+================ GaudiUtils v2r2 ====================================
+! 2008-11-27 - Marco Clemencic
+ - Fixed compilation problems with ROOT 5.21/06.
+
+================ GaudiUtils v2r1 ====================================
+! 2008-10-10 - Vanya Belyaev
+ - Patch #2073: SharedObjectsContainer and 'blind' access to TYPE::Container &
+                TYPE::Selection
+    * GaudiUtils/Range.h
+    * GaudiUtils/NamedRange.h
+    * src/Lib/Range.cpp
+   The light representation of containers through the par of iterators.
+   The files are copied (and renamed) from LoKi project.
+
+! 2008-10-03 - Vanya Belyaev
+ - Patch #1943. Added update handler to MultiFileCatalog.Catalogs
+
+================ GaudiUtils v2r0 ====================================
+! 2008-06-04 - Chris Jones
+ - Patch #1861. Prevent division-by-zero results in skewness and kurtosis.
+   Protection against NaN/Inf in Gaudi::Utils::HistoStats::skewness and
+   Gaudi::Utils::HistoStats::kurtosis (return 0 instead).
+
+! 2008-06-02 - Marco Clemencic
+ - Task #5809. Extension to Gaudi Application state machine.
+   - Renamed the method IFileCatalog::start to IFileCatalog::init, to avoid
+     clashes with IService::start.
+
+================ GaudiUtils v1r6 ====================================
+! 2008-04-03 - Vanya BELYAEV
+ - Patch #1749. Improve some printout of the histogram.
+   The default width of "ID" and the "title" fields are incremented to improve
+   the printout.
+   Also more coherent treatment of HistoStats is performed to minimize the
+   cross references.
+
+! 2008-04-03 - Markus Frank
+ - Bug #33372 (Patch #1746). Memory leak in XmlFileCatalog.
+   - Fix memory leak on transcoding XML strings during Xerces exception handling.
+
+================ GaudiUtils v1r5 ====================================
+! 2008-03-04 - Markus Frank
+ - Patch #1722.
+   - Fix dataset access by LFN. Was simply not working.
+
+! 2008-02-21 - Markus Frank
+ - patch #1700. Fix the filter mechanism to reduce the number of messages
+   for inaccessible objects.
+
+! 2008-02-11 - Markus Frank
+ - Fixed Bug #33372. Tiny memory leak in XmlFileCatalog.
+
+================ GaudiUtils v1r4 ====================================
+! 2008-01-30 - Markus Frank
+ - Fix bug in XMLCatalog (protect if element is not a DOMElement)
+ - Fix bug in IODataManager catalog lookup
+
+! 2008-01-19 - Markus Frank
+ - Fix bug in file aging: only age files when new read-only connections appear
+   (like in POOL)
+
+! 2008-01-19 - Markus Frank
+ - Fix printout level of messages from the IODataManager.
+
+! 2008-01-15 - Markus Frank
+ - Patch #1622. Reduce printout level on unsuccessful catalog lookup.
+                (MultiFileCatalog)
+   An unsuccessful catalog lookup is not an error, but rather a normal operation
+   if e.g. the existence of a file should be checked.
+
+! 2007-12-12 - Marco Clemencic
+ - patch #1585.
+   Fixed warnings about breaking of strict-aliasing rules (gcc 4.1 optimized).
+
+================ GaudiUtils v1r3 ====================================
+! 2007-10-21 - Markus Frank
+ - Patch #1534. Fixed compilation warning which didn't appear on
+   windows.
+
+! 2007-10-19 - Markus Frank
+ - Patch #149[234]. Add components library containing file catalog and I/O data manager.
+   Used by DAQ/MDF and GaudiPoolDb
+
+================ GaudiUtils v1r2 ======================================
+! 2007-09-19 - Vanya Belyaev
+ - Fixed bug #29969 (Error compiling GaudiUtils/HistoTableFormat with gcc4.1)
+
+! 2007-09-19 - Vanya Belyaev
+ - patch #1273.
+   - GaudiUtils/HistoStats.h
+      add new functions
+      - meanErr
+      - rmsErr
+      - kurtosisErr
+      - skewnessErr
+      - momentErr
+      - centralMomenErr
+      rmsErr is more precise that ROOT, since ROOT neglects kurtosis.
+      Please note that ROOT has a completely wrong calculations
+      of errors in skewness and kurtosis
+
+   - GaudiUtils/HistoTableFormat.h
+     new utilities for highly customizable printout of histograms
+
+! 2007-08-07 - Vanya BELYAEV
+ Patch #1266:
+ - GaudiUtils/HistoStats.h, src/Lib/HistoStats.cpp
+     new files with simple class Gaudi::Utils::HistoStats for evaluation
+     of few basic statistical quantities for AIDA::historgams:
+       - moments
+       - central moments
+       - skewness
+       - kurtosis
+    The moments (and therefore all other quantities) are calculated on
+    "bin-by-bin"-basis, since the corresponding cumulants needed
+    for "event-by-event"-calculations are not available.
+ - GaudiUtils/Aida2ROOT.h, src/Lib/Aida2ROOT.cpp
+   fix doxygen comments
+
+
+================ GaudiUtils v1r1 ======================================
+! 2007-04-27 - Hubert Degaudenzi
+ - fixed compilation problem with ROOT libHist which requires
+   libMatrix on mac osx.
+
+================ GaudiUtils v1r0 ======================================
+! 2007-02-07 - Ivan Belyaev
+ - patch #989. GaudiUtils/Aida2ROOT.h, src/Lib/Aida2ROOT.cpp, new
+   class Gaudi::Aida2ROOT for access for internal ROOT implementation
+   of transient histograms in Gaudi [Useful functions, heavily used in
+   the context of Bender/Panoramix&Online]

src/Lib/Aida2ROOT.cpp

+// $Id: Aida2ROOT.cpp,v 1.3 2007/08/06 14:49:36 hmd Exp $
+#ifdef __ICC
+// disable icc remark #2259: non-pointer conversion from "X" to "Y" may lose significant bits
+//   TODO: To be removed, since it comes from ROOT TMathBase.h
+#pragma warning(disable:2259)
+#endif
+// ============================================================================
+// Include files
+// ============================================================================
+// AIDA
+// ============================================================================
+#include "GaudiKernel/Kernel.h"
+//-- to avoid that the class macro trick affects them
+#include <string>
+#include <vector>
+/// @FIXME: AIDA interfaces visibility
+#define class class GAUDI_API
+#include "AIDA/IHistogram1D.h"
+#include "AIDA/IHistogram2D.h"
+#include "AIDA/IHistogram3D.h"
+#include "AIDA/IProfile1D.h"
+#include "AIDA/IProfile2D.h"
+#undef class
+// ============================================================================
+// ROOT
+// ============================================================================
+#include "TH1D.h"
+#include "TH2D.h"
+#include "TH3D.h"
+#include "TProfile.h"
+#include "TProfile2D.h"
+// ============================================================================
+// GaudiKernel
+// ============================================================================
+#include "GaudiKernel/HistogramBase.h"
+// ============================================================================
+// GaudiAlg
+// ============================================================================
+#include "GaudiUtils/Aida2ROOT.h"
+// ============================================================================
+/** @file
+ *  Implementation file for class Gaudi::Utils::Aida2ROOT
+ *  @author Vanya BELYAEV ibelyaev@physics.syr.edu
+ *  @date  2007-01-23
+ */
+// ============================================================================
+// get the underlying pointer for 1D-histogram
+// ============================================================================
+TH1D* Gaudi::Utils::Aida2ROOT::aida2root ( AIDA::IHistogram1D* aida )
+{
+  if ( 0 == aida ) { return 0 ; }
+  Gaudi::HistogramBase* base = dynamic_cast<Gaudi::HistogramBase*> ( aida ) ;
+  if ( 0 == base ) { return 0 ; }
+  return dynamic_cast<TH1D*>( base->representation() ) ;
+}
+// ============================================================================
+// get the underlying pointer for 2D-histogram
+// ============================================================================
+TH2D* Gaudi::Utils::Aida2ROOT::aida2root ( AIDA::IHistogram2D* aida )
+{
+  if ( 0 == aida ) { return 0 ; }
+  Gaudi::HistogramBase* base = dynamic_cast<Gaudi::HistogramBase*> ( aida ) ;
+  if ( 0 == base ) { return 0 ; }
+  return dynamic_cast<TH2D*>( base->representation() ) ;
+}
+// ============================================================================
+// get the underlying pointer for 3D-histogram
+// ============================================================================
+TH3D* Gaudi::Utils::Aida2ROOT::aida2root ( AIDA::IHistogram3D* aida )
+{
+  if ( 0 == aida ) { return 0 ; }
+  Gaudi::HistogramBase* base = dynamic_cast<Gaudi::HistogramBase*> ( aida ) ;
+  if ( 0 == base ) { return 0 ; }
+  return dynamic_cast<TH3D*>( base->representation() ) ;
+}
+// ============================================================================
+// get the underlying pointer for 1D-profile
+// ============================================================================
+TProfile* Gaudi::Utils::Aida2ROOT::aida2root ( AIDA::IProfile1D*   aida )
+{
+  if ( 0 == aida ) { return 0 ; }
+  Gaudi::HistogramBase* base = dynamic_cast<Gaudi::HistogramBase*> ( aida ) ;
+  if ( 0 == base ) { return 0 ; }
+  return dynamic_cast<TProfile*>( base->representation() ) ;
+}
+// ============================================================================
+// get the underlying pointer for 2D-profile
+// ============================================================================
+TProfile2D* Gaudi::Utils::Aida2ROOT::aida2root ( AIDA::IProfile2D*   aida )
+{
+  if ( 0 == aida ) { return 0 ; }
+  Gaudi::HistogramBase* base = dynamic_cast<Gaudi::HistogramBase*> ( aida ) ;
+  if ( 0 == base ) { return 0 ; }
+  return dynamic_cast<TProfile2D*>( base->representation() ) ;
+}
+// ============================================================================
+// get root representation for other cases
+// ============================================================================
+TObject* Gaudi::Utils::Aida2ROOT::aida2root ( AIDA::IHistogram*   aida )
+{
+  if ( 0 == aida ) { return 0 ; }
+  Gaudi::HistogramBase* base = dynamic_cast<Gaudi::HistogramBase*> ( aida ) ;
+  if ( 0 == base ) { return 0 ; }
+  return base->representation() ;
+}
+// ============================================================================
+// The END
+// ============================================================================

src/Lib/HistoDump.cpp

+// $Id: $
+#ifdef __ICC
+// disable icc remark #2259: non-pointer conversion from "X" to "Y" may lose significant bits
+//   TODO: To be removed, since it comes from ROOT TMathBase.h
+#pragma warning(disable:2259)
+// disable icc remark #1572: floating-point equality and inequality comparisons are unreliable
+//   The comparison are meant
+#pragma warning(disable:1572)
+#endif
+// ============================================================================
+// Include files 
+// ============================================================================
+// STD & STL 
+// ============================================================================
+#include <cmath>
+#include <vector>
+#include <iostream>
+#include <utility>