Belle II Software  release-06-02-00
MVAFilter.icc.h
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 #pragma once
9 
10 #include <tracking/trackFindingCDC/filters/base/MVAFilter.dcl.h>
11 
12 #include <tracking/trackFindingCDC/mva/MVAExpert.h>
13 
14 #include <tracking/trackFindingCDC/filters/base/FilterOnVarSet.icc.h>
15 
16 #include <framework/core/ModuleParamList.templateDetails.h>
17 #include <tracking/trackFindingCDC/utilities/StringManipulation.h>
18 
19 #include <tracking/trackFindingCDC/utilities/Named.h>
20 
21 #include <RtypesCore.h>
22 
23 #include <vector>
24 #include <string>
25 #include <memory>
26 #include <cmath>
27 
28 namespace Belle2 {
34  namespace TrackFindingCDC {
35 
36  template <class AFilter>
37  MVA<AFilter>::MVA(std::unique_ptr<AVarSet> varSet,
38  const std::string& identifier,
39  double defaultCut)
40  : Super(std::move(varSet))
41  , m_param_cut(defaultCut)
42  , m_param_identifier(identifier)
43  {
44  }
45 
46  template <class AFilter>
47  MVA<AFilter>::~MVA() = default;
48 
49  template <class AFilter>
50  void MVA<AFilter>::exposeParameters(ModuleParamList* moduleParamList, const std::string& prefix)
51  {
52  Super::exposeParameters(moduleParamList, prefix);
53  moduleParamList->addParameter(prefixed(prefix, "cut"),
54  m_param_cut,
55  "The cut value of the mva output below which the object is rejected",
56  m_param_cut);
57 
58  moduleParamList->addParameter(prefixed(prefix, "identifier"),
59  m_param_identifier,
60  "Database identfier of the expert of weight file name",
61  m_param_identifier);
62  }
63 
64  template <class AFilter>
66  {
67  Super::initialize();
68  std::vector<Named<Float_t*>> namedVariables = Super::getVarSet().getNamedVariables();
69  m_mvaExpert = std::make_unique<MVAExpert>(m_param_identifier, std::move(namedVariables));
70  m_mvaExpert->initialize();
71  }
72 
73  template <class AFilter>
75  {
76  Super::beginRun();
77  m_mvaExpert->beginRun();
78  }
79 
80  template <class AFilter>
81  Weight MVA<AFilter>::operator()(const Object& obj)
82  {
83  double prediction = predict(obj);
84  return prediction < m_param_cut ? NAN : prediction;
85  }
86 
87  template <class AFilter>
88  double MVA<AFilter>::predict(const Object& obj)
89  {
90  Weight extracted = Super::operator()(obj);
91  if (std::isnan(extracted)) {
92  return NAN;
93  } else {
94  return m_mvaExpert->predict();
95  }
96  }
97 
98  template <class AVarSet>
99  MVAFilter<AVarSet>::MVAFilter(const std::string& defaultTrainingName,
100  double defaultCut)
101  : Super(std::make_unique<AVarSet>(), defaultTrainingName, defaultCut)
102  {
103  }
104 
105  template <class AVarSet>
106  MVAFilter<AVarSet>::~MVAFilter() = default;
107  }
109 }
The Module parameter list class.
Generic class that generates some named float values from a given object.
Definition: BaseVarSet.h:33
MVAFilter(const std::string &defaultTrainingName="", double defaultCut=NAN)
Constructor of the filter.
Definition: MVAFilter.icc.h:99
~MVAFilter()
Default destructor.
Filter based on a mva method.
Definition: MVAFilter.dcl.h:33
virtual ~MVA()
Default destructor.
void initialize() override
Initialize the expert before event processing.
Definition: MVAFilter.icc.h:65
Weight operator()(const Object &obj) override
Function to object for its signalness.
Definition: MVAFilter.icc.h:81
void beginRun() override
Signal to load new run parameters.
Definition: MVAFilter.icc.h:74
MVA(std::unique_ptr< AVarSet > varSet, const std::string &identifier="", double defaultCut=NAN)
Constructor of the filter.
Definition: MVAFilter.icc.h:37
virtual double predict(const Object &obj)
Evaluate the mva method.
Definition: MVAFilter.icc.h:88
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix) override
Expose the set of parameters of the filter to the module parameter list.
Definition: MVAFilter.icc.h:50
AFilter Super
Type of the base class.
typename AFilter::Object Object
Type of pbject to be filtered.
void addParameter(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module list.
Abstract base class for different kinds of events.