RDFAnalysis  0.1.1
Physics analysis with ROOT::RDataFrame
SysVar.h
Go to the documentation of this file.
1 #ifndef RDFAnalysis_SysVar_H
2 #define RDFAnalysis_SysVar_H
3 
4 #include <string>
5 #include <type_traits>
7 
38 namespace RDFAnalysis {
39 
46  template <typename T, typename=void>
47  struct sysvar_traits {
49  static constexpr bool is_sysvar = false;
51  using value_type = T;
52  };
53 
60  template <typename T>
61  struct sysvar_traits<T, std::enable_if_t<std::decay_t<T>::is_rdf_sysvar, void>>
62  {
64  static constexpr bool is_sysvar = true;
66  using value_type = typename std::decay_t<T>::value_type;
67  };
68 
76  template <typename T>
77  std::enable_if_t<sysvar_traits<T>::is_sysvar, typename sysvar_traits<T>::value_type> sysVarTranslate(
78  T&& t, IBranchNamer& namer, const std::string& syst) {
79  return std::forward<typename sysvar_traits<T>::value_type>(t.translate(namer, syst) );
80  }
81 
88  template <typename T>
89  std::enable_if_t<!sysvar_traits<T>::is_sysvar, T> sysVarTranslate(
90  T&& t, IBranchNamer&, const std::string&) {
91  return std::forward<T>(t);
92  }
93 
97  class SysVarBranch {
98  public:
100  static constexpr bool is_rdf_sysvar = true;
102  using value_type = std::string;
103 
108  SysVarBranch(const std::string& branchName) :
109  m_branch(branchName) {}
110 
112  std::string translate(IBranchNamer& namer, const std::string& syst) {
113  return namer.nameBranch(m_branch, syst);
114  }
115 
116  private:
118  std::string m_branch;
119  };
120 
125  public:
127  static constexpr bool is_rdf_sysvar = true;
129  using value_type = std::vector<std::string>;
130 
135  SysVarBranchVector(const std::vector<std::string>& branchNames) :
136  m_branchNames(branchNames) {}
137 
139  std::vector<std::string> translate(IBranchNamer& namer, const std::string& syst) {
140  return namer.nameBranches(m_branchNames, syst);
141  }
142 
143  private:
145  std::vector<std::string> m_branchNames;
146  };
147 
152  public:
154  static constexpr bool is_rdf_sysvar = true;
156  using value_type = std::string;
157 
162  SysVarNewBranch(const std::string& branchName) :
163  m_branch(branchName) {}
164 
166  std::string translate(IBranchNamer& namer, const std::string& syst) {
167  return namer.createBranch(m_branch, syst);
168  }
169 
170  private:
172  std::string m_branch;
173  };
174 
179  public:
181  static constexpr bool is_rdf_sysvar = true;
183  using value_type = std::string;
184 
194  const std::string& expressionTemplate,
195  const std::vector<std::string>& columnNames) :
196  m_template(expressionTemplate),
197  m_columns(columnNames) {}
198 
200  std::string translate(IBranchNamer& namer, const std::string& syst) {
201  return namer.interpretExpression(m_template, m_columns, syst);
202  }
203 
204  private:
206  std::string m_template;
208  std::vector<std::string> m_columns;
209  };
210 } //> end namespace RDFAnalysis
211 
212 #endif //> !RDFAnalysis_SysVar_H
std::string value_type
The translated value type.
Definition: SysVar.h:156
std::vector< std::string > translate(IBranchNamer &namer, const std::string &syst)
Return the translated branch names.
Definition: SysVar.h:139
Class to trigger translation of a string expression.
Definition: SysVar.h:178
Abstract base class that describes how a Node should name its branches internally.
Definition: IBranchNamer.h:33
SysVarNewBranch(const std::string &branchName)
Create the branch.
Definition: SysVar.h:162
std::string value_type
The translated value type.
Definition: SysVar.h:102
SysVarBranch(const std::string &branchName)
Construct the branch.
Definition: SysVar.h:108
Class to trigger translation of a vector of branches.
Definition: SysVar.h:124
Provide contextual information about a class.
Definition: SysVar.h:47
T value_type
The translated value type.
Definition: SysVar.h:51
Class to trigger translation of a new branch name.
Definition: SysVar.h:151
SysVarStringExpression(const std::string &expressionTemplate, const std::vector< std::string > &columnNames)
Construct the expression.
Definition: SysVar.h:193
Definition: CutflowDetail.h:11
std::vector< std::string > value_type
The translated value type.
Definition: SysVar.h:129
typename std::decay_t< T >::value_type value_type
The translated value type.
Definition: SysVar.h:66
SysVarBranchVector(const std::vector< std::string > &branchNames)
Construct the vector.
Definition: SysVar.h:135
The branch naming interface.
std::string translate(IBranchNamer &namer, const std::string &syst)
Return the translated expression.
Definition: SysVar.h:200
std::string translate(IBranchNamer &namer, const std::string &syst)
Return the translated branch name.
Definition: SysVar.h:166
std::string value_type
The translated value type.
Definition: SysVar.h:183
std::string translate(IBranchNamer &namer, const std::string &syst)
Return the translated branch name.
Definition: SysVar.h:112
virtual std::string nameBranch(const std::string &branch, const std::string &systName="") const =0
Get the full name of a branch.
virtual std::string interpretExpression(const std::string &expression, const std::vector< std::string > &branches, const std::string &systematic)
Interpret an expression for a given systematic variation.
Definition: IBranchNamer.cxx:58
static constexpr bool is_sysvar
If this is a translatable quantity.
Definition: SysVar.h:49
virtual std::vector< std::string > nameBranches(const std::vector< std::string > &branches, const std::string &systName="") const
Get the full names of a list of branches.
Definition: IBranchNamer.cxx:8
Class to trigger translation of a single branch name.
Definition: SysVar.h:97
std::enable_if_t< sysvar_traits< T >::is_sysvar, typename sysvar_traits< T >::value_type > sysVarTranslate(T &&t, IBranchNamer &namer, const std::string &syst)
Translate a variable.
Definition: SysVar.h:77
virtual std::string createBranch(const std::string &branch, const std::string &systName="")=0
Create a new branch.