IHistoTool.h
Go to the documentation of this file.
1 #ifndef GAUDIALG_IHISTOTOOL_H
2 #define GAUDIALG_IHISTOTOOL_H 1
3 // ============================================================================
4 // Include files
5 // ============================================================================
6 // from STL
7 // ============================================================================
8 #include <string>
9 // ============================================================================
10 // from Gaudi
11 // ============================================================================
12 #include "GaudiKernel/IAlgTool.h"
13 #include "GaudiAlg/HistoID.h"
14 // ============================================================================
15 
16 namespace AIDA
17 {
18  class IHistogram1D;
19  class IHistogram2D;
20  class IHistogram3D;
21 }
22 
31 class GAUDI_API IHistoTool: virtual public IAlgTool
32 {
33 public:
36 
39 
40 public:
41 
42  // ================================= 1D Histograms ========================================
43 
72  virtual AIDA::IHistogram1D* plot1D
73  ( const double value ,
74  const std::string& title ,
75  const double low ,
76  const double high ,
77  const unsigned long bins = 100 ,
78  const double weight = 1.0 ) const = 0 ;
79 
93  AIDA::IHistogram1D* plot
94  ( const double value ,
95  const std::string& title ,
96  const double low ,
97  const double high ,
98  const unsigned long bins = 100 ,
99  const double weight = 1.0 ) const
100  {
101  return plot1D ( value, title, low, high, bins, weight );
102  }
103 
144  virtual AIDA::IHistogram1D* plot1D
145  ( const double value ,
146  const HistoID& ID ,
147  const std::string& title ,
148  const double low ,
149  const double high ,
150  const unsigned long bins = 100 ,
151  const double weight = 1.0 ) const = 0 ;
152 
167  AIDA::IHistogram1D* plot
168  ( const double value ,
169  const HistoID& ID ,
170  const std::string& title ,
171  const double low ,
172  const double high ,
173  const unsigned long bins = 100 ,
174  const double weight = 1.0 ) const
175  {
176  return plot1D ( value, ID, title, low, high, bins, weight );
177  };
178 
179  // ================================= 2D Histograms ========================================
180 
215  virtual AIDA::IHistogram2D* plot2D
216  ( const double valueX ,
217  const double valueY ,
218  const std::string& title ,
219  const double lowX ,
220  const double highX ,
221  const double lowY ,
222  const double highY ,
223  const unsigned long binsX = 50 ,
224  const unsigned long binsY = 50 ,
225  const double weight = 1.0 ) const = 0;
226 
273  virtual AIDA::IHistogram2D* plot2D
274  ( const double valueX ,
275  const double valueY ,
276  const HistoID& ID ,
277  const std::string& title ,
278  const double lowX ,
279  const double highX ,
280  const double lowY ,
281  const double highY ,
282  const unsigned long binsX = 50 ,
283  const unsigned long binsY = 50 ,
284  const double weight = 1.0 ) const = 0;
285 
286  // ================================= 3D Histograms ========================================
287 
328  virtual AIDA::IHistogram3D* plot3D
329  ( const double valueX ,
330  const double valueY ,
331  const double valueZ ,
332  const std::string& title ,
333  const double lowX ,
334  const double highX ,
335  const double lowY ,
336  const double highY ,
337  const double lowZ ,
338  const double highZ ,
339  const unsigned long binsX = 10 ,
340  const unsigned long binsY = 10 ,
341  const unsigned long binsZ = 10 ,
342  const double weight = 1.0 ) const = 0;
343 
396  virtual AIDA::IHistogram3D* plot3D
397  ( const double valueX ,
398  const double valueY ,
399  const double valueZ ,
400  const HistoID& ID ,
401  const std::string& title ,
402  const double lowX ,
403  const double highX ,
404  const double lowY ,
405  const double highY ,
406  const double lowZ ,
407  const double highZ ,
408  const unsigned long binsX = 10 ,
409  const unsigned long binsY = 10 ,
410  const unsigned long binsZ = 10 ,
411  const double weight = 1.0 ) const = 0;
412 
413 public:
414 
426  virtual AIDA::IHistogram1D* book1D
427  ( const std::string& title ,
428  const double low = 0 ,
429  const double high = 100 ,
430  const unsigned long bins = 100 ) const = 0 ;
431 
444  AIDA::IHistogram1D* book
445  ( const std::string& title ,
446  const double low = 0 ,
447  const double high = 100 ,
448  const unsigned long bins = 100 ) const
449  {
450  return book1D( title, low, high, bins );
451  }
452 
467  virtual AIDA::IHistogram2D* book2D
468  ( const std::string& title ,
469  const double lowX = 0 ,
470  const double highX = 100 ,
471  const unsigned long binsX = 50 ,
472  const double lowY = 0 ,
473  const double highY = 100 ,
474  const unsigned long binsY = 50 ) const = 0;
475 
493  virtual AIDA::IHistogram3D* book3D
494  ( const std::string& title ,
495  const double lowX = 0 ,
496  const double highX = 100 ,
497  const unsigned long binsX = 10 ,
498  const double lowY = 0 ,
499  const double highY = 100 ,
500  const unsigned long binsY = 10 ,
501  const double lowZ = 0 ,
502  const double highZ = 100 ,
503  const unsigned long binsZ = 10 ) const = 0;
504 
515  virtual AIDA::IHistogram1D* book1D
516  ( const HistoID& ID ,
517  const std::string& title = "" ,
518  const double low = 0 ,
519  const double high = 100 ,
520  const unsigned long bins = 100 ) const = 0 ;
521 
535  AIDA::IHistogram1D* book
536  ( const HistoID& ID ,
537  const std::string& title = "" ,
538  const double low = 0 ,
539  const double high = 100 ,
540  const unsigned long bins = 100 ) const
541  {
542  return book1D( ID, title, low, high, bins );
543  }
544 
555  virtual AIDA::IHistogram2D* book2D
556  ( const HistoID& ID ,
557  const std::string& title ,
558  const double lowX = 0 ,
559  const double highX = 100 ,
560  const unsigned long binsX = 100 ,
561  const double lowY = 0 ,
562  const double highY = 100 ,
563  const unsigned long binsY = 100 ) const = 0;
564 
581  virtual AIDA::IHistogram3D* book3D
582  ( const HistoID& ID ,
583  const std::string& title ,
584  const double lowX = 0 ,
585  const double highX = 100 ,
586  const unsigned long binsX = 10 ,
587  const double lowY = 0 ,
588  const double highY = 100 ,
589  const unsigned long binsY = 10 ,
590  const double lowZ = 0 ,
591  const double highZ = 100 ,
592  const unsigned long binsZ = 10 ) const = 0;
593 
601  virtual AIDA::IHistogram1D* fill
602  ( AIDA::IHistogram1D* histo ,
603  const double value ,
604  const double weight ,
605  const std::string& title = "") const = 0 ;
606 
615  virtual AIDA::IHistogram2D* fill
616  ( AIDA::IHistogram2D* histo ,
617  const double valueX ,
618  const double valueY ,
619  const double weight ,
620  const std::string& title = "" ) const = 0 ;
621 
631  virtual AIDA::IHistogram3D* fill
632  ( AIDA::IHistogram3D* histo ,
633  const double valueX ,
634  const double valueY ,
635  const double valueZ ,
636  const double weight ,
637  const std::string& title = "" ) const = 0 ;
638 
642  virtual AIDA::IHistogram1D* histo1D ( const std::string& title ) const = 0 ;
643 
651  AIDA::IHistogram1D* histo ( const std::string& title ) const
652  {
653  return histo1D( title );
654  };
655 
659  virtual AIDA::IHistogram2D* histo2D ( const std::string& title ) const = 0;
660 
661 
665  virtual AIDA::IHistogram3D* histo3D ( const std::string& title ) const = 0;
666 
670  virtual AIDA::IHistogram1D* histo1D ( const HistoID& ID ) const = 0 ;
671 
679  AIDA::IHistogram1D* histo ( const HistoID& ID ) const
680  {
681  return histo1D( ID );
682  };
683 
687  virtual AIDA::IHistogram2D* histo2D ( const HistoID& ID ) const = 0;
688 
692  virtual AIDA::IHistogram3D* histo3D ( const HistoID& ID ) const = 0;
693 
695  virtual bool histoExists ( const std::string& title ) const = 0 ;
696 
698  virtual bool histoExists ( const HistoID& ID ) const = 0 ;
699 
700 public: // non-virtual methods
701 
751  template <class FUNCTION,class OBJECT>
752  AIDA::IHistogram1D* plot
753  ( const FUNCTION& func ,
754  OBJECT first ,
755  OBJECT last ,
756  const std::string& title ,
757  const double low ,
758  const double high ,
759  const unsigned long bins = 100 ) const
760  {
761  // retrieve or book the histogram
762  AIDA::IHistogram1D* h = histo1D ( title ) ;
763  if ( !h ) { h = book1D ( title , low , high , bins ); }
764  while ( first != last && h )
765  { h = fill ( h , func( *first ) , 1.0 , title ) ; ++first ; }
766  return h ;
767  }
768 
818  template <class FUNCTION,class OBJECT>
819  AIDA::IHistogram1D* plot
820  ( const FUNCTION& func ,
821  OBJECT first ,
822  OBJECT last ,
823  const HistoID& ID ,
824  const std::string& title ,
825  const double low ,
826  const double high ,
827  const unsigned long bins = 100 ) const
828  {
829  // retrieve or book the histogram
830  AIDA::IHistogram1D* h = histo1D ( ID ) ;
831  if ( !h ) { h = book1D ( ID , title , low , high , bins ); }
832  while ( first != last && h )
833  { h = fill( h , func( *first ) , 1.0 , title ) ; ++first ; }
834  return h ;
835  }
836 
891  template <class FUNCTION,class OBJECT,class WEIGHT>
892  AIDA::IHistogram1D* plot
893  ( const FUNCTION& func ,
894  OBJECT first ,
895  OBJECT last ,
896  const std::string& title ,
897  const double low ,
898  const double high ,
899  const unsigned long bins ,
900  const WEIGHT& weight ) const
901  {
902  // retrieve or book the histogram
903  AIDA::IHistogram1D* h = histo1D ( title ) ;
904  if ( !h ) { h = book1D ( title , low , high , bins ); }
905  while( first != last && h )
906  { h = fill ( h ,
907  func ( *first ) ,
908  weight ( *first ) , title ) ; ++first ; }
909  return h ;
910  }
911 
971  template <class FUNCTION,class OBJECT,class WEIGHT>
972  AIDA::IHistogram1D* plot
973  ( const FUNCTION& func ,
974  OBJECT first ,
975  OBJECT last ,
976  const HistoID& ID ,
977  const std::string& title ,
978  const double low ,
979  const double high ,
980  const unsigned long bins ,
981  const WEIGHT& weight ) const
982  {
983  // retrieve or book the histogram
984  AIDA::IHistogram1D* h = histo1D ( ID ) ;
985  if ( !h ) { h = book1D ( ID , title , low , high , bins ); }
986  while( first != last && h )
987  { h = fill ( h ,
988  func ( *first ) ,
989  weight ( *first ) , title ) ; ++first ; }
990  return h ;
991  }
992 
993 protected:
994 
995  ~IHistoTool() override = default;
996 
997 };
998 
999 #endif // GAUDIALG_IHISTOTOOL_H
GAUDI_API AIDA::IHistogram1D * book(IHistogramSvc *svc, const std::string &path, const Gaudi::Histo1DDef &hist)
helper function to book 1D-histogram
Definition: HistoDef.cpp:124
AIDA::IHistogram1D * histo(const HistoID &ID) const
access the EXISTING 1D histogram by ID
Definition: IHistoTool.h:679
#define DeclareInterfaceID(iface, major, minor)
Macro to declare the interface ID when using the new mechanism of extending and implementing interfac...
Definition: IInterface.h:14
AIDA::IHistogram1D * histo(const std::string &title) const
access the EXISTING 1D histogram by title
Definition: IHistoTool.h:651
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:36
GaudiKernel.
Definition: Fill.h:8
STL class.
Histos::HistoID HistoID
the actual type for histogram identifier (HBOOK style)
Definition: IHistoTool.h:38
The interface implemented by the AlgTool base class.
Definition: IAlgTool.h:23
#define GAUDI_API
Definition: Kernel.h:107
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
An abstract interface for "histogramming tool".
Definition: IHistoTool.h:31