rivet is hosted by Hepforge, IPPP Durham
Rivet 3.1.6
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
9namespace 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