Rivet  3.1.5
AnalysisBuilder.hh
1 // -*- C++ -*-
2 #ifndef RIVET_AnalysisBuilder_HH
3 #define RIVET_AnalysisBuilder_HH
4 
5 #include "Rivet/Config/RivetCommon.hh"
6 #include "Rivet/AnalysisLoader.hh"
7 #include "Rivet/Tools/Logging.hh"
8 
9 namespace Rivet {
10 
11 
12  // Forward declaration
13  class Analysis;
14 
15 
17 
19  class AnalysisBuilderBase {
20  public:
21 
23  AnalysisBuilderBase() = default;
24 
26  AnalysisBuilderBase(const string& alias)
27  : _alias(alias) { }
28 
30  virtual ~AnalysisBuilderBase() = default;
31 
33  virtual unique_ptr<Analysis> mkAnalysis() const = 0;
34 
37  string name() const {
38  auto a = mkAnalysis();
39  return a->name();
40  }
41 
45  const string& alias() const {
46  return _alias;
47  }
48 
49  protected:
50 
52  void _register() {
53  AnalysisLoader::_registerBuilder(this);
54  }
55 
56  private:
57 
59  string _alias;
60 
61  };
62 
63 
65  template <typename T>
66  class AnalysisBuilder : public AnalysisBuilderBase {
67  public:
68 
69  AnalysisBuilder() {
70  _register();
71  }
72 
73  AnalysisBuilder(const string& alias)
74  : AnalysisBuilderBase(alias)
75  {
76  _register();
77  }
78 
79  unique_ptr<Analysis> mkAnalysis() const {
80  return unique_ptr<T>(new T);
81  }
82 
83  };
84 
86 
87 }
88 
89 #endif
Definition: MC_Cent_pPb.hh:10