The Gaudi Framework  v30r3 (a5ef0a68)
GaudiHistos.h
Go to the documentation of this file.
1 #ifndef GAUDIALG_GAUDIHISTOS_H
2 #define GAUDIALG_GAUDIHISTOS_H 1
3 // ============================================================================
4 /* @file GaudiHistos.h
5  *
6  * Header file for class : GaudiHistos
7  *
8  * @author Chris Jones Christopher.Rob.Jones@cern.ch
9  * @author Vanya BELYAEV Ivan.Belyaev@itep.ru
10  * @date 2005-08-08
11  */
12 // ============================================================================
13 // Include files#
14 // ============================================================================
15 // STD& STL
16 // ============================================================================
17 #include <boost/algorithm/string/replace.hpp>
18 #include <limits>
19 #include <type_traits>
20 #include <vector>
21 // ============================================================================
22 // GaudiUtils
23 // ============================================================================
25 // ============================================================================
26 // GaudiAlg
27 // ============================================================================
29 #include "GaudiAlg/GaudiTool.h"
30 #include "GaudiAlg/Maps.h"
31 // ============================================================================
32 // GaudiKernel
33 // ============================================================================
35 // ============================================================================
36 // Forward declarations
37 namespace AIDA
38 {
39  class IHistogram1D;
40  class IHistogram2D;
41  class IHistogram3D;
42  class IProfile1D;
43  class IProfile2D;
44 }
45 // ============================================================================
55 template <class PBASE>
56 class GAUDI_API GaudiHistos : public PBASE
57 {
58 public:
59  // ==========================================================================
62  // ==========================================================================
67  // ==========================================================================
72  // ==========================================================================
77  // ==========================================================================
82  // ==========================================================================
87  // ==========================================================================
90  // ==========================================================================
91 public:
92  // ==========================================================================
93  // ================================= 1D Histograms ==========================
94  // ================================= Fixed Binning ==========================
95  // ==========================================================================
138  AIDA::IHistogram1D* plot1D( const double value, const std::string& title, const double low, const double high,
139  const unsigned long bins = 100, const double weight = 1.0 ) const;
140  // ==========================================================================
154  inline AIDA::IHistogram1D* plot( const double value, const std::string& title, const double low, const double high,
155  const unsigned long bins = 100, const double weight = 1.0 ) const
156  {
157  return plot1D( value, title, low, high, bins, weight );
158  }
159  // ==========================================================================
184  AIDA::IHistogram1D* plot1D( const double value, const Gaudi::Histo1DDef& hdef, const double weight = 1.0 ) const;
185  // ==========================================================================
196  inline AIDA::IHistogram1D* plot( const double value, const Gaudi::Histo1DDef& hdef, const double weight = 1.0 ) const
197  {
198  return plot1D( value, hdef, weight );
199  }
200  // ==========================================================================
265  // ==========================================================================
266  AIDA::IHistogram1D* plot1D( const double value, const HistoID& ID, const std::string& title, const double low,
267  const double high, const unsigned long bins = 100, const double weight = 1.0 ) const;
268  // ==========================================================================
283  inline AIDA::IHistogram1D* plot( const double value, const HistoID& ID, const std::string& title, const double low,
284  const double high, const unsigned long bins = 100, const double weight = 1.0 ) const
285  {
286  return plot1D( value, ID, title, low, high, bins, weight );
287  }
288  // ==========================================================================
314  AIDA::IHistogram1D* plot1D( const double value, const HistoID& ID, const Gaudi::Histo1DDef& hdef,
315  const double weight = 1.0 ) const;
316  // ==========================================================================
328  inline AIDA::IHistogram1D* plot( const double value, const HistoID& ID, const Gaudi::Histo1DDef& hdef,
329  const double weight = 1.0 ) const
330  {
331  return plot1D( value, ID, hdef, weight );
332  }
396  template <class FUNCTION, class OBJECT>
397  inline AIDA::IHistogram1D* plot( const FUNCTION& func, OBJECT first, OBJECT last, const std::string& title,
398  const double low, const double high, const unsigned long bins = 100 ) const
399  {
400  AIDA::IHistogram1D* h = nullptr;
401  if ( produceHistos() ) {
402  // retrieve or book the histogram
403  h = histo1D( title );
404  if ( !h ) {
405  h = book1D( title, low, high, bins );
406  }
407  // fill histogram
408  while ( first != last && h ) {
409  h = fill( h, func( *first ), 1.0, title );
410  ++first;
411  }
412  }
413  return h;
414  }
415  // ==========================================================================
471  template <class FUNCTION, class OBJECT>
472  inline AIDA::IHistogram1D* plot( const FUNCTION& func, OBJECT first, OBJECT last, const HistoID& ID,
473  const std::string& title, const double low, const double high,
474  const unsigned long bins = 100 ) const
475  {
476  AIDA::IHistogram1D* h( 0 );
477  if ( produceHistos() ) {
478  // retrieve or book the histogram
479  h = histo1D( ID );
480  if ( !h ) {
481  h = book1D( ID, title, low, high, bins );
482  }
483  // fill histogram
484  while ( first != last && h ) {
485  h = fill( h, func( *first ), 1.0, title );
486  ++first;
487  }
488  }
489  return h;
490  }
491  // ==========================================================================
560  template <class FUNCTION, class OBJECT, class WEIGHT>
561  inline AIDA::IHistogram1D* plot( const FUNCTION& func, OBJECT first, OBJECT last, const std::string& title,
562  const double low, const double high, const unsigned long bins,
563  const WEIGHT& weight ) const
564  {
565  AIDA::IHistogram1D* h = nullptr;
566  if ( produceHistos() ) {
567  // retrieve or book the histogram
568  h = histo1D( title );
569  if ( !h ) {
570  h = book1D( title, low, high, bins );
571  }
572  // fill histogram
573  while ( first != last && h ) {
574  h = fill( h, func( *first ), weight( *first ), title );
575  ++first;
576  }
577  }
578  return h;
579  }
580  // ==========================================================================
647  template <class FUNCTION, class OBJECT, class WEIGHT>
648  inline AIDA::IHistogram1D* plot( const FUNCTION& func, OBJECT first, OBJECT last, const HistoID& ID,
649  const std::string& title, const double low, const double high,
650  const unsigned long bins, const WEIGHT& weight ) const
651  {
652  AIDA::IHistogram1D* h = nullptr;
653  if ( produceHistos() ) {
654  // retrieve or book the histogram
655  h = histo1D( ID );
656  if ( !h ) {
657  h = book1D( ID, title, low, high, bins );
658  }
659  // fill histogram
660  while ( first != last && h ) {
661  h = fill( h, func( *first ), weight( *first ), title );
662  ++first;
663  }
664  }
665  return h;
666  }
667  // ==========================================================================
668  // ================================= 1D Histograms ==========================
669  // =============================== Variable Binning =========================
670  // ==========================================================================
710  AIDA::IHistogram1D* plot1D( const double value, const std::string& title, const HistoBinEdges& edges,
711  const double weight = 1.0 ) const;
712  // ==========================================================================
776  // ==========================================================================
777  AIDA::IHistogram1D* plot1D( const double value, const HistoID& ID, const std::string& title,
778  const HistoBinEdges& edges, const double weight = 1.0 ) const;
779  // ==========================================================================
780  // ================================= 2D Histograms ==========================
781  // ==========================================================================
832  AIDA::IHistogram2D* plot2D( const double valueX, const double valueY, const std::string& title, const double lowX,
833  const double highX, const double lowY, const double highY, const unsigned long binsX = 50,
834  const unsigned long binsY = 50, const double weight = 1.0 ) const;
835  // ==========================================================================
912  AIDA::IHistogram2D* plot2D( const double valueX, const double valueY, const HistoID& ID, const std::string& title,
913  const double lowX, const double highX, const double lowY, const double highY,
914  const unsigned long binsX = 50, const unsigned long binsY = 50,
915  const double weight = 1.0 ) const;
916  // ==========================================================================
917  // ================================= 2D Histograms ==========================
918  // =============================== Variable Binning =========================
919  // ==========================================================================
965  AIDA::IHistogram2D* plot2D( const double valueX, const double valueY, const std::string& title,
966  const HistoBinEdges& edgesX, const HistoBinEdges& edgesY,
967  const double weight = 1.0 ) const;
968  // ==========================================================================
1044  AIDA::IHistogram2D* plot2D( const double valueX, const double valueY, const HistoID& ID, const std::string& title,
1045  const HistoBinEdges& edgesX, const HistoBinEdges& edgesY,
1046  const double weight = 1.0 ) const;
1047  // ==========================================================================
1048  // ================================= 3D Histograms ==========================
1049  // ==========================================================================
1108  AIDA::IHistogram3D* plot3D( const double valueX, const double valueY, const double valueZ, const std::string& title,
1109  const double lowX, const double highX, const double lowY, const double highY,
1110  const double lowZ, const double highZ, const unsigned long binsX = 10,
1111  const unsigned long binsY = 10, const unsigned long binsZ = 10,
1112  const double weight = 1.0 ) const;
1113  // ==========================================================================
1200  AIDA::IHistogram3D* plot3D( const double valueX, const double valueY, const double valueZ, const HistoID& ID,
1201  const std::string& title, const double lowX, const double highX, const double lowY,
1202  const double highY, const double lowZ, const double highZ, const unsigned long binsX = 10,
1203  const unsigned long binsY = 10, const unsigned long binsZ = 10,
1204  const double weight = 1.0 ) const;
1205  // ==========================================================================
1206  // ================================= 3D Histograms ==========================
1207  // =============================== Variable Binning =========================
1208  // ==========================================================================
1256  AIDA::IHistogram3D* plot3D( const double valueX, const double valueY, const double valueZ, const std::string& title,
1257  const HistoBinEdges& edgesX, const HistoBinEdges& edgesY, const HistoBinEdges& edgesZ,
1258  const double weight = 1.0 ) const;
1259  // ==========================================================================
1260  // ==========================================================================
1345  AIDA::IHistogram3D* plot3D( const double valueX, const double valueY, const double valueZ, const HistoID& ID,
1346  const std::string& title, const HistoBinEdges& edgesX, const HistoBinEdges& edgesY,
1347  const HistoBinEdges& edgesZ, const double weight = 1.0 ) const;
1348  // ==========================================================================
1349  // ================================= 1D Profile =============================
1350  // ================================= Fixed binning ==========================
1351  // ==========================================================================
1400  AIDA::IProfile1D* profile1D( const double valueX, const double valueY, const std::string& title, const double lowX,
1401  const double highX, const unsigned long binsX = 100, const std::string& opt = "",
1402  const double lowY = -std::numeric_limits<double>::max(),
1403  const double highY = std::numeric_limits<double>::max(),
1404  const double weight = 1.0 ) const;
1405  // ==========================================================================
1471  AIDA::IProfile1D* profile1D( const double valueX, const double valueY, const HistoID& ID, const std::string& title,
1472  const double lowX, const double highX, const unsigned long binsX = 100,
1473  const std::string& opt = "", const double lowY = -std::numeric_limits<double>::max(),
1474  const double highY = std::numeric_limits<double>::max(),
1475  const double weight = 1.0 ) const;
1476  // ==========================================================================
1477  // ================================= 1D Profile =============================
1478  // ============================== Variable binning ==========================
1479  // ==========================================================================
1522  AIDA::IProfile1D* profile1D( const double valueX, const double valueY, const std::string& title,
1523  const HistoBinEdges& edges, const double weight = 1.0 ) const;
1524  // ==========================================================================
1586  AIDA::IProfile1D* profile1D( const double valueX, const double valueY, const HistoID& ID, const std::string& title,
1587  const HistoBinEdges& edges, const double weight = 1.0 ) const;
1588  // ==========================================================================
1589  // ================================= 2D Profile =============================
1590  // ==========================================================================
1641  AIDA::IProfile2D* profile2D( const double valueX, const double valueY, const double valueZ, const std::string& title,
1642  const double lowX, const double highX, const double lowY, const double highY,
1643  const unsigned long binsX = 50, const unsigned long binsY = 50,
1644  const double weight = 1.0 ) const;
1645  // ==========================================================================
1713  AIDA::IProfile2D* profile2D( const double valueX, const double valueY, const double valueZ, const HistoID& ID,
1714  const std::string& title, const double lowX, const double highX, const double lowY,
1715  const double highY, const unsigned long binsX = 50, const unsigned long binsY = 50,
1716  const double weight = 1.0 ) const;
1717  // ==========================================================================
1718  // ================================= 2D Profile =============================
1719  // ============================== Variable binning ==========================
1720  // ==========================================================================
1766  AIDA::IProfile2D* profile2D( const double valueX, const double valueY, const double valueZ, const std::string& title,
1767  const HistoBinEdges& edgesX, const HistoBinEdges& edgesY,
1768  const double weight = 1.0 ) const;
1769  // ==========================================================================
1832  AIDA::IProfile2D* profile2D( const double valueX, const double valueY, const double valueZ, const HistoID& ID,
1833  const std::string& title, const HistoBinEdges& edgesX, const HistoBinEdges& edgesY,
1834  const double weight = 1.0 ) const;
1835  // ==========================================================================
1836 
1837 public: // 1D Fixed
1838  // ==========================================================================
1850  AIDA::IHistogram1D* book1D( const std::string& title, const double low = 0, const double high = 100,
1851  const unsigned long bins = 100 ) const;
1852  // ==========================================================================
1865  inline AIDA::IHistogram1D* book( const std::string& title, const double low = 0, const double high = 100,
1866  const unsigned long bins = 100 ) const
1867  {
1868  return book1D( title, low, high, bins );
1869  }
1870  // ==========================================================================
1879  AIDA::IHistogram1D* book( const Gaudi::Histo1DDef& hdef ) const;
1880  // ==========================================================================
1891  AIDA::IHistogram1D* book1D( const HistoID& ID, const std::string& title, const double low = 0,
1892  const double high = 100, const unsigned long bins = 100 ) const;
1893  // ==========================================================================
1907  inline AIDA::IHistogram1D* book( const HistoID& ID, const std::string& title, const double low = 0,
1908  const double high = 100, const unsigned long bins = 100 ) const
1909  {
1910  return book1D( ID, title, low, high, bins );
1911  }
1912  // ==========================================================================
1920  inline AIDA::IHistogram1D* book( const HistoID& ID, const Gaudi::Histo1DDef& hdef ) const;
1921  // ==========================================================================
1922 
1923 public: // 1D Variable
1924  // ==========================================================================
1935  AIDA::IHistogram1D* book1D( const std::string& title, const HistoBinEdges& edges ) const;
1936  // ==========================================================================
1946  AIDA::IHistogram1D* book1D( const HistoID& ID, const std::string& title, const HistoBinEdges& edges ) const;
1947  // ==========================================================================
1948 
1949 public: // 2D Fixed
1950  // ==========================================================================
1965  AIDA::IHistogram2D* book2D( const std::string& title, const double lowX = 0, const double highX = 100,
1966  const unsigned long binsX = 50, const double lowY = 0, const double highY = 100,
1967  const unsigned long binsY = 50 ) const;
1968  // ==========================================================================
1979  AIDA::IHistogram2D* book2D( const HistoID& ID, const std::string& title, const double lowX = 0,
1980  const double highX = 100, const unsigned long binsX = 50, const double lowY = 0,
1981  const double highY = 100, const unsigned long binsY = 50 ) const;
1982  // ==========================================================================
1983 
1984 public: // 2D Variable
1985  // ==========================================================================
1997  AIDA::IHistogram2D* book2D( const std::string& title, const HistoBinEdges& edgesX,
1998  const HistoBinEdges& edgesY ) const;
1999  // ==========================================================================
2010  AIDA::IHistogram2D* book2D( const HistoID& ID, const std::string& title, const HistoBinEdges& edgesX,
2011  const HistoBinEdges& edgesY ) const;
2012  // ==========================================================================
2013 
2014 public: // 3D Fixed
2015  // ==========================================================================
2033  AIDA::IHistogram3D* book3D( const std::string& title, const double lowX = 0, const double highX = 100,
2034  const unsigned long binsX = 10, const double lowY = 0, const double highY = 100,
2035  const unsigned long binsY = 10, const double lowZ = 0, const double highZ = 100,
2036  const unsigned long binsZ = 10 ) const;
2037  // ==========================================================================
2054  AIDA::IHistogram3D* book3D( const HistoID& ID, const std::string& title, const double lowX = 0,
2055  const double highX = 100, const unsigned long binsX = 10, const double lowY = 0,
2056  const double highY = 100, const unsigned long binsY = 10, const double lowZ = 0,
2057  const double highZ = 100, const unsigned long binsZ = 10 ) const;
2058  // ==========================================================================
2059 
2060 public: // 3D Variable
2061  // ==========================================================================
2074  AIDA::IHistogram3D* book3D( const std::string& title, const HistoBinEdges& edgesX, const HistoBinEdges& edgesY,
2075  const HistoBinEdges& edgesZ ) const;
2076  // ==========================================================================
2088  AIDA::IHistogram3D* book3D( const HistoID& ID, const std::string& title, const HistoBinEdges& edgesX,
2089  const HistoBinEdges& edgesY, const HistoBinEdges& edgesZ ) const;
2090  // ==========================================================================
2091 
2092 public: // 1D Fixed Profiles
2093  // ==========================================================================
2108  AIDA::IProfile1D* bookProfile1D( const std::string& title, const double low = 0, const double high = 100,
2109  const unsigned long bins = 100, const std::string& opt = "",
2110  const double lowY = -std::numeric_limits<double>::max(),
2111  const double highY = std::numeric_limits<double>::max() ) const;
2112  // ==========================================================================
2128  AIDA::IProfile1D* bookProfile1D( const HistoID& ID, const std::string& title, const double low = 0,
2129  const double high = 100, const unsigned long bins = 100, const std::string& opt = "",
2130  const double lowY = -std::numeric_limits<double>::max(),
2131  const double highY = std::numeric_limits<double>::max() ) const;
2132  // ==========================================================================
2133 
2134 public: // 1D Variable Profiles
2135  // ==========================================================================
2145  AIDA::IProfile1D* bookProfile1D( const std::string& title, const HistoBinEdges& edges ) const;
2146  // ==========================================================================
2156  AIDA::IProfile1D* bookProfile1D( const HistoID& ID, const std::string& title, const HistoBinEdges& edges ) const;
2157  // ==========================================================================
2158 
2159 public: // 2D Profiles
2160  // ==========================================================================
2175  AIDA::IProfile2D* bookProfile2D( const std::string& title, const double lowX = 0, const double highX = 100,
2176  const unsigned long binsX = 50, const double lowY = 0, const double highY = 100,
2177  const unsigned long binsY = 50 ) const;
2178  // ==========================================================================
2192  AIDA::IProfile2D* bookProfile2D( const HistoID& ID, const std::string& title, const double lowX = 0,
2193  const double highX = 100, const unsigned long binsX = 50, const double lowY = 0,
2194  const double highY = 100, const unsigned long binsY = 50 ) const;
2195  // ==========================================================================
2196 
2197 public: // 2D Profiles
2198  // ==========================================================================
2209  AIDA::IProfile2D* bookProfile2D( const std::string& title, const HistoBinEdges& edgesX,
2210  const HistoBinEdges& edgesY ) const;
2211  // ==========================================================================
2221  AIDA::IProfile2D* bookProfile2D( const HistoID& ID, const std::string& title, const HistoBinEdges& edgesX,
2222  const HistoBinEdges& edgesY ) const;
2223  // ==========================================================================
2224 
2225 public:
2226  // ==========================================================================
2234  AIDA::IHistogram1D* fill( AIDA::IHistogram1D* histo, const double value, const double weight,
2235  const std::string& title = "" ) const;
2236  // ==========================================================================
2245  AIDA::IHistogram2D* fill( AIDA::IHistogram2D* histo, const double valueX, const double valueY, const double weight,
2246  const std::string& title = "" ) const;
2247  // ==========================================================================
2257  AIDA::IHistogram3D* fill( AIDA::IHistogram3D* histo, const double valueX, const double valueY, const double valueZ,
2258  const double weight, const std::string& title = "" ) const;
2259  // ==========================================================================
2268  AIDA::IProfile1D* fill( AIDA::IProfile1D* histo, const double valueX, const double valueY, const double weight,
2269  const std::string& title = "" ) const;
2270  // ==========================================================================
2280  AIDA::IProfile2D* fill( AIDA::IProfile2D* histo, const double valueX, const double valueY, const double valueZ,
2281  const double weight, const std::string& title = "" ) const;
2282  // ==========================================================================
2283 public:
2284  // ==========================================================================
2288  inline AIDA::IHistogram1D* histo1D( const std::string& title ) const
2289  {
2290  auto found = histo1DMapTitle().find( title );
2291  return found != histo1DMapTitle().end() ? found->second : nullptr;
2292  }
2293  // ==========================================================================
2301  inline AIDA::IHistogram1D* histo( const std::string& title ) const { return histo1D( title ); }
2302  // ==========================================================================
2306  inline AIDA::IHistogram2D* histo2D( const std::string& title ) const
2307  {
2308  auto found = histo2DMapTitle().find( title );
2309  return histo2DMapTitle().end() != found ? found->second : nullptr;
2310  }
2311  // ==========================================================================
2315  inline AIDA::IHistogram3D* histo3D( const std::string& title ) const
2316  {
2317  auto found = histo3DMapTitle().find( title );
2318  return histo3DMapTitle().end() != found ? found->second : nullptr;
2319  }
2320  // ==========================================================================
2324  inline AIDA::IProfile1D* profile1D( const std::string& title ) const
2325  {
2326  auto found = profile1DMapTitle().find( title );
2327  return profile1DMapTitle().end() != found ? found->second : nullptr;
2328  }
2329  // ==========================================================================
2333  inline AIDA::IProfile2D* profile2D( const std::string& title ) const
2334  {
2335  auto found = profile2DMapTitle().find( title );
2336  return profile2DMapTitle().end() != found ? found->second : nullptr;
2337  }
2338  // ==========================================================================
2339 public:
2340  // ==========================================================================
2344  AIDA::IHistogram1D* histo1D( const HistoID& ID ) const;
2345  // ==========================================================================
2353  inline AIDA::IHistogram1D* histo( const HistoID& ID ) const { return histo1D( ID ); }
2354  // ==========================================================================
2358  AIDA::IHistogram2D* histo2D( const HistoID& ID ) const;
2359  // ==========================================================================
2363  AIDA::IHistogram3D* histo3D( const HistoID& ID ) const;
2364  // ==========================================================================
2368  AIDA::IProfile1D* profile1D( const HistoID& ID ) const;
2369  // ==========================================================================
2373  AIDA::IProfile2D* profile2D( const HistoID& ID ) const;
2374  // ==========================================================================
2375 public:
2376  // ==========================================================================
2378  inline bool histoExists( const std::string& title ) const
2379  {
2380  return ( 0 != histo( title ) || 0 != histo2D( title ) || 0 != histo3D( title ) || 0 != profile1D( title ) ||
2381  0 != profile2D( title ) );
2382  }
2383  // ==========================================================================
2385  inline bool histoExists( const HistoID& ID ) const
2386  {
2387  return ( 0 != histo( ID ) || 0 != histo2D( ID ) || 0 != histo3D( ID ) || 0 != profile1D( ID ) ||
2388  0 != profile2D( ID ) );
2389  }
2391  unsigned int totalNumberOfHistos() const;
2392  // ==========================================================================
2393 public: // trivial & non-trivial accessors
2394  // ==========================================================================
2396  inline bool produceHistos() const { return m_produceHistos; }
2398  inline bool fullDetail() const { return m_fullDetail; }
2400  inline bool checkForNaN() const { return m_checkForNaN; }
2402  inline bool splitHistoDir() const { return m_splitHistoDir; }
2404  inline HistoID::NumericID histoOffSet() const { return m_histoOffSet; }
2406  inline const std::string& histoTopDir() const { return m_histoTopDir; }
2408  inline const std::string& histoDir() const { return m_histoDir; }
2410  std::string histoPath() const;
2412  inline bool histosPrint() const { return m_histosPrint; }
2414  inline bool histoCountersPrint() const { return m_histoCountersPrint; }
2416  inline bool useNumericAutoIDs() const { return m_useNumericAutoIDs; }
2417  // ==========================================================================
2422  int printHistos( const MSG::Level level = MSG::ALWAYS ) const;
2423  // ==========================================================================
2449  const Histo1DMapTitle& histo1DMapTitle() const { return m_histo1DMapTitle; }
2450  // ==========================================================================
2473  const Histo1DMapID& histo1DMapID() const { return m_histo1DMapID; }
2474  // ==========================================================================
2500  const Histo2DMapTitle& histo2DMapTitle() const { return m_histo2DMapTitle; }
2501  // ==========================================================================
2523  const Histo2DMapID& histo2DMapID() const { return m_histo2DMapID; }
2524  // ==========================================================================
2550  const Histo3DMapTitle& histo3DMapTitle() const { return m_histo3DMapTitle; }
2551  // ==========================================================================
2573  const Histo3DMapID& histo3DMapID() const { return m_histo3DMapID; }
2574  // ==========================================================================
2602  const Profile1DMapTitle& profile1DMapTitle() const { return m_profile1DMapTitle; }
2603  // ==========================================================================
2625  const Profile1DMapID& profile1DMapID() const { return m_profile1DMapID; }
2626  // ==========================================================================
2652  const Profile2DMapTitle& profile2DMapTitle() const { return m_profile2DMapTitle; }
2653  // ==========================================================================
2675  const Profile2DMapID& profile2DMapID() const { return m_profile2DMapID; }
2676  // ==========================================================================
2677 public: // trivial setters
2678  // ==========================================================================
2680  inline void setProduceHistos( const bool val ) { m_produceHistos = val; }
2682  inline void setFullDetail( const bool val ) { m_fullDetail = val; }
2684  inline void setCheckForNaN( const bool val ) { m_checkForNaN = val; }
2686  inline void setSplitHistoDir( const bool val ) { m_splitHistoDir = val; }
2688  inline void setHistoOffSet( const HistoID::NumericID val ) { m_histoOffSet = val; }
2689  // ==========================================================================
2691  inline void setHistoTopDir( const std::string& val ) { m_histoTopDir = val; }
2692  // ==========================================================================
2694  inline void setHistoDir( const std::string& val ) { m_histoDir = val; }
2695  // ==========================================================================
2696 public:
2697  // ==========================================================================
2700  template <typename U = PBASE, typename = std::enable_if_t<std::is_base_of<GaudiAlgorithm, PBASE>::value, U>>
2701  GaudiHistos( const std::string& name, ISvcLocator* pSvcLocator ) : PBASE( name, pSvcLocator )
2702  {
2703  initGaudiHistosConstructor();
2704  }
2705  // ==========================================================================
2708  template <typename U = PBASE, typename = std::enable_if_t<std::is_base_of<GaudiTool, PBASE>::value, U>>
2709  GaudiHistos( const std::string& type, const std::string& name, const IInterface* parent )
2710  : PBASE( type, name, parent )
2711  {
2712  initGaudiHistosConstructor();
2713  }
2714  // ==========================================================================
2715 protected:
2716  // ==========================================================================
2720  StatusCode initialize() override
2721 #ifdef __ICC
2722  {
2723  return i_ghInitialize();
2724  }
2725  StatusCode i_ghInitialize()
2726 #endif
2727  ;
2728  // ==========================================================================
2732  StatusCode finalize() override
2733 #ifdef __ICC
2734  {
2735  return i_ghFinalize();
2736  }
2737  StatusCode i_ghFinalize()
2738 #endif
2739  ;
2740  // ==========================================================================
2741 private:
2742  // ==========================================================================
2744  bool noHistos() const;
2745  // ===========================================unsigned===============================
2747  void initGaudiHistosConstructor();
2748  // ==========================================================================
2754  void monitorHisto( const AIDA::IBaseHistogram* hist, const HistoID& ID ) const;
2755  // ==========================================================================
2760  void newHistoID( const std::string& title, HistoID& ID ) const;
2761  // ==========================================================================
2762 protected:
2763  // ==========================================================================
2765  std::string convertTitleToID( std::string title ) const;
2766  // ==========================================================================
2767 private:
2768  // ==========================================================================
2770  void printHistoHandler( Gaudi::Details::PropertyBase& /* theProp */ ); // "HistoPrint"
2771  // ==========================================================================
2772 private:
2773  Gaudi::Property<bool> m_produceHistos{this, "HistoProduce", true, "Switch on/off the production of histograms"};
2774  Gaudi::Property<bool> m_histosPrint{this, "HistoPrint", false,
2775  "Switch on/off the printout of histograms at finalization"};
2776  Gaudi::Property<bool> m_histoCountersPrint{this, "HistoCountersPrint", true,
2777  "Switch on/off the printout of histogram counters at finalization"};
2778  Gaudi::Property<bool> m_checkForNaN{this, "HistoCheckForNaN", true,
2779  "Switch on/off the checks for NaN and Infinity for histogram fill"};
2780  Gaudi::Property<bool> m_splitHistoDir{this, "HistoSplitDir", false,
2781  "Split long directory names into short pieces (suitable for HBOOK)"};
2783  this, "HistoOffSet", 0, "OffSet for automatically assigned histogram numerical identifiers "};
2784  Gaudi::Property<std::string> m_histoTopDir{this, "HistoTopDir", "",
2785  "Top level histogram directory (take care that it ends with '/')"};
2787  this, "HistoDir", boost::algorithm::replace_all_copy( this->name(), ":", "_" ), "Histogram Directory"};
2788  Gaudi::Property<bool> m_fullDetail{this, "FullDetail", false};
2789  Gaudi::Property<bool> m_declareMoniHists{this, "MonitorHistograms", true};
2790  Gaudi::Property<std::string> m_histo1DTableFormat{this, "FormatFor1DHistoTable",
2792  "Format string for printout of 1D histograms"};
2793  Gaudi::Property<std::string> m_histo1DTableFormatShort{this, "ShortFormatFor1DHistoTable", " | %1$-25.25s %2%",
2794  "Format string for printout of 1D histograms"};
2795  Gaudi::Property<std::string> m_histo1DTableHeader{this, "HeaderFor1DHistoTable",
2797  "The table header for printout of 1D histograms "};
2798  Gaudi::Property<bool> m_useNumericAutoIDs{
2799  this, "UseSequencialNumericAutoIDs", false,
2800  "Flag to allow users to switch back to the old style of creating numerical automatic IDs"};
2802  this,
2803  "AutoStringIDPurgeMap",
2804  {{"/", "=SLASH="}},
2805  "Map of strings to search and replace when using the title "
2806  "as the basis of automatically generated literal IDs"};
2807  // ==========================================================================
2809  mutable Histo1DMapTitle m_histo1DMapTitle;
2811  mutable Histo1DMapID m_histo1DMapID;
2812  // ==========================================================================
2814  mutable Histo2DMapTitle m_histo2DMapTitle;
2816  mutable Histo2DMapID m_histo2DMapID;
2817  // ==========================================================================
2819  mutable Histo3DMapTitle m_histo3DMapTitle;
2821  mutable Histo3DMapID m_histo3DMapID;
2822  // ==========================================================================
2824  mutable Profile1DMapTitle m_profile1DMapTitle;
2826  mutable Profile1DMapID m_profile1DMapID;
2827  // ==========================================================================
2829  mutable Profile2DMapTitle m_profile2DMapTitle;
2831  mutable Profile2DMapID m_profile2DMapID;
2832  // ==========================================================================
2833 };
2834 // ============================================================================
2835 // The END
2836 // ============================================================================
2837 #endif // GAUDIALG_GAUDIHISTOS_H
2838 // ============================================================================
void setFullDetail(const bool val)
set flag to control output level of histograms
Definition: GaudiHistos.h:2682
HistoID::NumericID histoOffSet() const
get the value for histogram offset (property "HistoOffSet")
Definition: GaudiHistos.h:2404
bool fullDetail() const
get flag to control output level of histograms
Definition: GaudiHistos.h:2398
AIDA::IHistogram1D * book(const HistoID &ID, const std::string &title, const double low=0, const double high=100, const unsigned long bins=100) const
book the 1D histogram with forced ID
Definition: GaudiHistos.h:1907
GaudiAlg::Histo3DMapID Histo3DMapID
the actual type for (ID)->(3D histogram) mapping
Definition: GaudiHistos.h:74
Header file for class GaudiAlgorithm.
GaudiAlg::Histo1DMapTitle Histo1DMapTitle
the actual type for title->(1D histogram) mapping
Definition: GaudiHistos.h:66
AIDA::IHistogram2D * histo2D(const std::string &title) const
access the EXISTING 2D histogram by title return the pointer to existing 2D histogram or NULL ...
Definition: GaudiHistos.h:2306
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Definition: ISvcLocator.h:25
AIDA::IProfile2D * profile2D(const std::string &title) const
access the EXISTING 2D profile histogram by title return the pointer to existing 2D profile histogram...
Definition: GaudiHistos.h:2333
GAUDI_API AIDA::IHistogram1D * book(IHistogramSvc *svc, const std::string &path, const Gaudi::Histo1DDef &hist)
helper function to book 1D-histogram
Definition: HistoDef.cpp:95
Profile1DMapID m_profile1DMapID
the actual storage/access of 1D profile histograms by unique ID
Definition: GaudiHistos.h:2826
GaudiAlg::Profile1DMapTitle Profile1DMapTitle
the actual type for title->(1D profile histogram) mapping
Definition: GaudiHistos.h:81
Implementation of property with value of concrete type.
Definition: Property.h:381
AIDA::IHistogram1D * plot(const double value, const HistoID &ID, const Gaudi::Histo1DDef &hdef, const double weight=1.0) const
fill the 1D histogram (book on demand)
Definition: GaudiHistos.h:328
AIDA::IHistogram1D * plot(const double value, const std::string &title, const double low, const double high, const unsigned long bins=100, const double weight=1.0) const
fill the 1D histogram (book on demand)
Definition: GaudiHistos.h:154
GaudiAlg::HistoID HistoID
the actual type for histogram identifier
Definition: GaudiHistos.h:61
AIDA::IHistogram1D * histo(const HistoID &ID) const
access the EXISTING 1D histogram by ID
Definition: GaudiHistos.h:2353
const Profile2DMapID & profile2DMapID() const
get access to the map of 2D profile histograms index via a ID
Definition: GaudiHistos.h:2675
Header file for class GaudiAlgorithm.
Histo1DMapID m_histo1DMapID
the actual storage/access of 1D histograms by unique ID
Definition: GaudiHistos.h:2811
int NumericID
type for internal numeric ID
Definition: GaudiHistoID.h:49
AIDA::IHistogram1D * plot(const FUNCTION &func, OBJECT first, OBJECT last, const std::string &title, const double low, const double high, const unsigned long bins, const WEIGHT &weight) const
book and fill the 1D histogram with information from [first,last) sequence with given weight ...
Definition: GaudiHistos.h:561
Histo3DMapTitle m_histo3DMapTitle
the actual storage/access of 3D histograms by unique title
Definition: GaudiHistos.h:2819
GAUDI_API void fill(AIDA::IHistogram1D *histo, const double value, const double weight=1.0)
simple function to fill AIDA::IHistogram1D objects
Definition: Fill.cpp:35
void setHistoOffSet(const HistoID::NumericID val)
set a value for histogram offset (property "HistoOffSet"
Definition: GaudiHistos.h:2688
const Histo3DMapTitle & histo3DMapTitle() const
get access to the map of all 3D histograms indexed via their title
Definition: GaudiHistos.h:2550
GaudiAlg::Histo3DMapTitle Histo3DMapTitle
the actual type for title->(3D histogram) mapping
Definition: GaudiHistos.h:76
bool histoExists(const HistoID &ID) const
check the existence AND validity of the histogram with given title
Definition: GaudiHistos.h:2385
GaudiAlg::Profile2DMapID Profile2DMapID
the actual type for (ID)->(2D profile histogram) mapping
Definition: GaudiHistos.h:84
GaudiAlg::Profile1DMapID Profile1DMapID
the actual type for (ID)->(1D profile histogram) mapping
Definition: GaudiHistos.h:79
bool splitHistoDir() const
get the flag for histogram path split (property "HistoSplitDir")
Definition: GaudiHistos.h:2402
const Profile2DMapTitle & profile2DMapTitle() const
get access to the map of all 2D profile histograms indexed via their title
Definition: GaudiHistos.h:2652
GaudiAlg::HistoBinEdges HistoBinEdges
Edges for variable binning.
Definition: GaudiHistos.h:89
Histo2DMapTitle m_histo2DMapTitle
the actual storage/access of 2D histograms by unique title
Definition: GaudiHistos.h:2814
GAUDI_API std::string header(const int ID=Default)
get the recommended header by enum
GaudiKernel.
Definition: Fill.h:10
void setProduceHistos(const bool val)
set the flag for histogram production (property "HistoProduce")
Definition: GaudiHistos.h:2680
AIDA::IProfile1D * profile1D(const std::string &title) const
access the EXISTING 1D profile histogram by title return the pointer to existing 1D profile histogram...
Definition: GaudiHistos.h:2324
AIDA::IHistogram1D * plot(const FUNCTION &func, OBJECT first, OBJECT last, const HistoID &ID, const std::string &title, const double low, const double high, const unsigned long bins, const WEIGHT &weight) const
book and fill the 1D histogram with forced ID and information from [first,last) sequence with given w...
Definition: GaudiHistos.h:648
const Histo1DMapTitle & histo1DMapTitle() const
get access to the map of all 1D histograms indexed via their title
Definition: GaudiHistos.h:2449
GaudiAlg::Profile2DMapTitle Profile2DMapTitle
the actual type for title->(2D profile histogram) mapping
Definition: GaudiHistos.h:86
STL class.
void setCheckForNaN(const bool val)
set the flag for NaN checks (property "HistoCheckForNan")
Definition: GaudiHistos.h:2684
AIDA::IHistogram1D * histo1D(const std::string &title) const
access the EXISTING 1D histogram by title return the pointer to existing 1D histogram or NULL ...
Definition: GaudiHistos.h:2288
Profile1DMapTitle m_profile1DMapTitle
the actual storage/access of 1D profile histograms by unique title
Definition: GaudiHistos.h:2824
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:51
Definition of the basic interface.
Definition: IInterface.h:277
GAUDI_API std::string format(const int ID=Default)
get the format by enum
Simple helper class for description of 1D-histogram The class is targeted to act as the primary "hist...
Definition: HistoDef.h:33
AIDA::IHistogram1D * plot(const double value, const Gaudi::Histo1DDef &hdef, const double weight=1.0) const
fill the 1D histogram (book on demand)
Definition: GaudiHistos.h:196
GaudiHistos(const std::string &type, const std::string &name, const IInterface *parent)
Tool constructor - SFINAE-ed to insure this constructor is only defined if PBASE derives from GaudiTo...
Definition: GaudiHistos.h:2709
AIDA::IHistogram1D * plot(const FUNCTION &func, OBJECT first, OBJECT last, const HistoID &ID, const std::string &title, const double low, const double high, const unsigned long bins=100) const
fill the 1D histogram with forced ID and information from [first,last) sequence
Definition: GaudiHistos.h:472
const Histo1DMapID & histo1DMapID() const
get access to the map of all 1D histograms index via ID
Definition: GaudiHistos.h:2473
AIDA::IHistogram1D * histo(const std::string &title) const
access the EXISTING 1D histogram by title
Definition: GaudiHistos.h:2301
bool useNumericAutoIDs() const
Use old style sequencial numerical automatically assigned IDs ?
Definition: GaudiHistos.h:2416
GaudiAlg::Histo1DMapID Histo1DMapID
the actual type for (ID)->(1D histogram) mapping
Definition: GaudiHistos.h:64
const Profile1DMapTitle & profile1DMapTitle() const
get access to the map of all 1D profile histograms indexed via their title
Definition: GaudiHistos.h:2602
PropertyBase base class allowing PropertyBase* collections to be "homogeneous".
Definition: Property.h:32
AIDA::IHistogram1D * book(const std::string &title, const double low=0, const double high=100, const unsigned long bins=100) const
book the 1D histogram
Definition: GaudiHistos.h:1865
Profile2DMapID m_profile2DMapID
the actual storage/access of 2D profile histograms by unique ID
Definition: GaudiHistos.h:2831
GaudiAlg::Histo2DMapTitle Histo2DMapTitle
the actual type for title->(2D histogram) mapping
Definition: GaudiHistos.h:71
void setSplitHistoDir(const bool val)
set the flag for histogram path split (property "HistoSplitDir")
Definition: GaudiHistos.h:2686
AIDA::IHistogram1D * plot(const double value, const HistoID &ID, const std::string &title, const double low, const double high, const unsigned long bins=100, const double weight=1.0) const
fill the 1D histogram with forced ID assignment (book on demand)
Definition: GaudiHistos.h:283
GaudiHistos(const std::string &name, ISvcLocator *pSvcLocator)
Algorithm constructor - the SFINAE constraint below ensures that this is constructor is only defined ...
Definition: GaudiHistos.h:2701
Histo1DMapTitle m_histo1DMapTitle
the actual storage/access of 1D histograms by unique title
Definition: GaudiHistos.h:2809
Profile2DMapTitle m_profile2DMapTitle
the actual storage/access of 2D profile histograms by unique title
Definition: GaudiHistos.h:2829
const Profile1DMapID & profile1DMapID() const
get access to the map of 1D profile histograms index via a ID
Definition: GaudiHistos.h:2625
bool histoCountersPrint() const
print histogram counters at finalization ?
Definition: GaudiHistos.h:2414
void setHistoTopDir(const std::string &val)
set top-level histogram directory (property "HistoTopDir")
Definition: GaudiHistos.h:2691
bool produceHistos() const
get the flag for histogram production (property "HistoProduce")
Definition: GaudiHistos.h:2396
GaudiAlg::Histo2DMapID Histo2DMapID
the actual type for (ID)->(2D histogram) mapping
Definition: GaudiHistos.h:69
Histo3DMapID m_histo3DMapID
the actual storage/access of 3D histograms by unique ID
Definition: GaudiHistos.h:2821
const std::string & histoDir() const
get histogram directory (property "HistoDir")
Definition: GaudiHistos.h:2408
Common class providing an architecture-independent hash map.
Definition: HashMap.h:74
const std::string & histoTopDir() const
get top-level histogram directory (property "HistoTopDir")
Definition: GaudiHistos.h:2406
AIDA::IHistogram1D * plot(const FUNCTION &func, OBJECT first, OBJECT last, const std::string &title, const double low, const double high, const unsigned long bins=100) const
fill the 1D histogram with information from [first,last) sequence
Definition: GaudiHistos.h:397
const Histo2DMapID & histo2DMapID() const
get access to the map of 2D histograms index via ID
Definition: GaudiHistos.h:2523
Histo2DMapID m_histo2DMapID
the actual storage/access of 2D histograms by unique ID
Definition: GaudiHistos.h:2816
void setHistoDir(const std::string &val)
set histogram directory (property "HistoDir")
Definition: GaudiHistos.h:2694
Templated base class providing common histogramming methods for GaudiAlgorithm and GaudiTool like cla...
Definition: GaudiHistos.h:56
bool histoExists(const std::string &title) const
check the existence AND validity of the histogram with given title
Definition: GaudiHistos.h:2378
const Histo2DMapTitle & histo2DMapTitle() const
get access to the map of all 2D histograms indexed via their title
Definition: GaudiHistos.h:2500
#define GAUDI_API
Definition: Kernel.h:104
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
ID class for Histogram and Ntuples.
Definition: GaudiHistoID.h:44
AIDA::IHistogram3D * histo3D(const std::string &title) const
access the EXISTING 3D histogram by title return the pointer to existing 3D histogram or NULL ...
Definition: GaudiHistos.h:2315
bool histosPrint() const
print histograms at finalization ?
Definition: GaudiHistos.h:2412
const Histo3DMapID & histo3DMapID() const
get access to the map of all 3D histograms index via a ID
Definition: GaudiHistos.h:2573
bool checkForNaN() const
get the flag for NaN checks (property "HistoCheckForNan")
Definition: GaudiHistos.h:2400