1 |
// Dear emacs, this is -*- c++ -*-
|
2 |
#ifndef BaseHists_H
|
3 |
#define BaseHists_H
|
4 |
|
5 |
// STL include(s):
|
6 |
#include <map>
|
7 |
#include <string>
|
8 |
|
9 |
// ROOT include(s):
|
10 |
#include <TObject.h>
|
11 |
#include <TString.h>
|
12 |
#include <TList.h>
|
13 |
|
14 |
// Local include(s):
|
15 |
//#include "include/ISCycleBaseHist.h"
|
16 |
#include "include/SCycleBase.h"
|
17 |
//#include "include/SCycleBaseBase.h"
|
18 |
#include "include/SError.h"
|
19 |
|
20 |
// Forward declaration(s):
|
21 |
class TDirectory;
|
22 |
class TH1;
|
23 |
class TList;
|
24 |
|
25 |
/**
|
26 |
* Base Class for the histogramming functionality
|
27 |
*
|
28 |
* Class which books and fills histograms. This class is a base
|
29 |
* class, all histogramming classes should inherit from it.
|
30 |
* The booking and naming of the histograms is taken care of
|
31 |
* through this class. Any derived class has to overwrite the
|
32 |
* Init, Fill and Finish methods.
|
33 |
* The derived objects have to be initialised in each
|
34 |
* SCycleBase::BeginInputData(...)
|
35 |
*
|
36 |
* @version $Revision: 1.1 $
|
37 |
*/
|
38 |
|
39 |
class BaseHists : public SCycleBase {
|
40 |
|
41 |
|
42 |
public:
|
43 |
/// Named constructor
|
44 |
BaseHists(const char* name);
|
45 |
|
46 |
/// Default destructor
|
47 |
~BaseHists();
|
48 |
|
49 |
virtual void Init() = 0;
|
50 |
|
51 |
virtual void Fill() = 0;
|
52 |
|
53 |
virtual void Finish() = 0;
|
54 |
|
55 |
double* MakeLogBinning(int n_bins, double xmin, double xmax);
|
56 |
|
57 |
TString GetName() {return m_name;}
|
58 |
void SetName(TString name) {m_name = name;}
|
59 |
|
60 |
// class has to inherit from SCycleBase to have access to histogram functionality in SFrame
|
61 |
// implement virtual routines but throw exception in case they are called
|
62 |
void BeginCycle()throw( SError ) { m_logger << ERROR << "This should not happen: BeginCycle called for BaseHist class" << SLogger::endmsg; } ;
|
63 |
void EndCycle()throw( SError ){ m_logger << ERROR << "This should not happen: EndCycle called for BaseHist class" << SLogger::endmsg; } ;
|
64 |
void BeginInputData(const SInputData&)throw( SError ){ m_logger << ERROR << "This should not happen: BeginInputData called for BaseHist class" << SLogger::endmsg; } ;
|
65 |
void EndInputData(const SInputData&)throw( SError ){ m_logger << ERROR << "This should not happen: EndInputData called for BaseHist class" << SLogger::endmsg; } ;
|
66 |
void BeginInputFile(const SInputData&)throw( SError ){ m_logger << ERROR << "This should not happen: BeginInputFile called for BaseHist class" << SLogger::endmsg; } ;
|
67 |
void ExecuteEvent(const SInputData&, Double_t)throw( SError ){ m_logger << ERROR << "This should not happen: ExecuteEvent called for BaseHist class" << SLogger::endmsg; } ;
|
68 |
|
69 |
|
70 |
protected:
|
71 |
/// Function placing a ROOT object in the output file
|
72 |
template< class T > T* Book( const T& histo ) throw( SError );
|
73 |
|
74 |
/// Function searching for a ROOT object in the output file
|
75 |
template< class T > T* Retrieve( const char* name ) throw( SError );
|
76 |
|
77 |
/// Function for persistifying a ROOT object to the output
|
78 |
void WriteObj( const TObject& obj ) throw( SError );
|
79 |
|
80 |
/// Function searching for 1-dimensional histograms in the output file
|
81 |
TH1* Hist( const char* name );
|
82 |
|
83 |
private:
|
84 |
// private constructor, use the named one
|
85 |
BaseHists(){}
|
86 |
|
87 |
TString m_name;
|
88 |
|
89 |
|
90 |
}; // class BaseHists
|
91 |
|
92 |
// Don't include the templated function(s) when we're generating
|
93 |
// a dictionary:
|
94 |
#ifndef __CINT__
|
95 |
#include "BaseHists.icc"
|
96 |
#endif
|
97 |
|
98 |
|
99 |
|
100 |
#endif // BaseHists_H
|