Rivet API documentation

Rivet 4.1.3
AnalysisBuilder.hh
1// -*- C++ -*-
2#ifndef RIVET_AnalysisBuilder_HH
3#define RIVET_AnalysisBuilder_HH
4
5#include "Rivet/AnalysisLoader.hh"
6#include "Rivet/Config/RivetCommon.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
36 string name() const {
37 auto a = mkAnalysis();
38 return a->name();
39 }
40
44 const string& alias() const {
45 return _alias;
46 }
47
48 protected:
49
51 void _register() {
52 AnalysisLoader::_registerBuilder(this);
53 }
54
55 private:
56
58 string _alias;
59 };
60
61
63 template <typename T>
64 class AnalysisBuilder : public AnalysisBuilderBase {
65 public:
66
67 AnalysisBuilder() {
68 _register();
69 }
70
71 AnalysisBuilder(const string& alias)
72 : AnalysisBuilderBase(alias) {
73 _register();
74 }
75
76 unique_ptr<Analysis> mkAnalysis() const {
77 return unique_ptr<T>(new T);
78 }
79 };
80
82
83}
84
85#endif
This is the base class of all analysis classes in Rivet.
Definition Analysis.hh:69
Definition LHCbCommon.hh:9