Belle II Software  release-05-02-19
VariablesTTree.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2013 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Eugenio Paoloni *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #pragma once
12 
13 #include <tracking/trackFindingVXD/filterMap/training/VariableTBranch.h>
14 #include <TTree.h>
15 namespace Belle2 {
22  template<typename ... filterLeaves>
23  class VariablesTTree {
25  };
26 
27 
29  template<>
30  class VariablesTTree<> {
32  TTree* m_tree;
33  public:
34 
36  VariablesTTree(TTree* tree): m_tree(tree) {};
37 
39  TTree* getTTree(void) { return m_tree; };
40 
42  template<class Filter>
43  static auto build(const Filter&, TTree* tree) ->
45  { return VariablesTTree<Filter>(tree); };
46  };
47 
48 
50  template<class Variable, class ... other>
51  class VariablesTTree<Filter<Variable, other ...> >:
52  public VariablesTTree<> {
54  VariableTBranch<Variable> m_varTBranch;
55  public:
57  explicit VariablesTTree(TTree* tree): VariablesTTree<>(tree),
58  m_varTBranch(tree) {};
59 
64  template< class ... SpacePoints >
65  void evaluateOn(const SpacePoints& ... sps)
66  {
67  m_varTBranch.evaluateOn(sps...);
68  }
69  };
70 
71 
73  template<class unaryOperator, class ... args, class ... other>
74  class VariablesTTree<Filter<unaryOperator, Filter<args ...>,
75  other ...> >:
76  public VariablesTTree<> {
78  VariablesTTree<Filter<args ...> > m_node;
79  public:
81  explicit VariablesTTree(TTree* tree): VariablesTTree<>(tree),
82  m_node(tree) {};
83 
88  template<class ... SpacePoints>
89  void evaluateOn(const SpacePoints& ... sps)
90  {
91  m_node.evaluateOn(sps...);
92  }
93  };
94 
95 
97  template<class binaryOperator, class ... argsA, class ... argsB,
98  class ... other>
99  class VariablesTTree<Filter<binaryOperator,
100  Filter<argsA ...>, Filter<argsB ... >,
101  other ...> >:
102  public VariablesTTree<> {
104  VariablesTTree<Filter<argsA ...> > m_nodeA;
106  VariablesTTree<Filter<argsB ...> > m_nodeB;
107  public:
109  explicit VariablesTTree(TTree* tree): VariablesTTree<>(tree),
110  m_nodeA(tree), m_nodeB(tree)
111  {};
112 
117  template<class ... SpacePoints>
118  void evaluateOn(const SpacePoints& ... sps)
119  {
120  m_nodeA.evaluateOn(sps...);
121  m_nodeB.evaluateOn(sps...);
122  }
123  };
125 }
Belle2::VariableTBranch
This class contains.
Definition: VariableTBranch.h:33
Belle2::VariablesTTree
Dump on a TTree the values of all the variables in a filter.
Definition: VariablesTTree.h:31
Belle2::VariablesTTree<>
Defines the interface using an empty template pack.
Definition: VariablesTTree.h:38
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::Filter
This class is used to select pairs, triplets...
Definition: Filter.h:44