Belle II Software  release-05-01-25
ChooseableFilter.icc.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2015 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Oliver Frost *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 #pragma once
11 
12 #include <tracking/trackFindingCDC/filters/base/ChooseableFilter.dcl.h>
13 
14 #include <tracking/trackFindingCDC/filters/base/FilterFactory.icc.h>
15 
16 #include <framework/core/ModuleParamList.templateDetails.h>
17 
18 #include <tracking/trackFindingCDC/utilities/StringManipulation.h>
19 
20 #include <memory>
21 #include <string>
22 
23 namespace Belle2 {
28  namespace TrackFindingCDC {
29 
30  template <class AFilter>
31  Chooseable<AFilter>::Chooseable(std::unique_ptr<FilterFactory<AFilter>> filterFactory)
32  : m_param_filterName(filterFactory ? filterFactory->getDefaultFilterName() : "")
33  , m_param_filterParameters()
34  , m_filterFactory(std::move(filterFactory))
35  {
36  B2ASSERT("Constructing a chooseable filter with no factory", m_filterFactory);
37  }
38 
39  template <class AFilter>
40  Chooseable<AFilter>::Chooseable(std::unique_ptr<FilterFactory<AFilter>> filterFactory,
41  const std::string& filterName)
42  : m_param_filterName(filterName)
43  , m_param_filterParameters()
44  , m_filterFactory(std::move(filterFactory))
45  {
46  B2ASSERT("Constructing a chooseable filter with no factory", m_filterFactory);
47  }
48 
49  template <class AFilter>
50  void Chooseable<AFilter>::exposeParameters(ModuleParamList* moduleParamList, const std::string& prefix)
51  {
52  Super::exposeParameters(moduleParamList, prefix);
53  if (m_param_filterName == "") {
55  moduleParamList->addParameter(prefixed(prefix, "filter"),
56  m_param_filterName,
57  m_filterFactory->createFiltersNameDescription());
58  } else {
60  moduleParamList->addParameter(prefixed(prefix, "filter"),
61  m_param_filterName,
62  m_filterFactory->createFiltersNameDescription(),
63  m_param_filterName);
64  }
65 
66  m_param_filterParameters.addParameter(moduleParamList,
67  prefixed(prefix, "filterParameters"),
68  m_filterFactory->createFiltersParametersDescription());
69  }
70 
71  template <class AFilter>
72  void Chooseable<AFilter>::initialize()
73  {
74  m_filter = m_filterFactory->create(m_param_filterName);
75  if (not m_filter) {
76  B2ERROR("Could not create filter with name " << m_param_filterName);
77  return;
78  }
79 
81  ModuleParamList filterModuleParamList;
82  const std::string prefix = "";
83  m_filter->exposeParameters(&filterModuleParamList, prefix);
84  m_param_filterParameters.assignTo(&filterModuleParamList);
85  this->addProcessingSignalListener(m_filter.get());
86  Super::initialize();
87  }
88 
89  template <class AFilter>
90  bool Chooseable<AFilter>::needsTruthInformation()
91  {
92  return m_filter->needsTruthInformation();
93  }
94 
95  template <class AFilter>
96  Weight Chooseable<AFilter>::operator()(const Object& object)
97  {
98  return (*m_filter)(object);
99  }
100 
101  template <class AFilter>
102  Weight Chooseable<AFilter>::operator()(const Object& object) const
103  {
104  return (*m_filter)(object);
105  }
106 
107  template <class AFilterFactory>
109  : Super(std::make_unique<AFilterFactory>())
110  {
111  }
112 
113  template <class AFilterFactory>
114  ChooseableFilter<AFilterFactory>::ChooseableFilter(const std::string& filterName)
115  : Super(std::make_unique<AFilterFactory>(), filterName)
116  {
117  }
118  }
120 }
Belle2::TrackFindingCDC::FilterFactory
Factory that can create apropriate filter instances from a name.
Definition: FilterFactory.dcl.h:35
Belle2::TrackFindingCDC::ChooseableFilter
Convenvience wrapper to setup a Chooseable filter from a specific factory object.
Definition: ChooseableFilter.dcl.h:107
Belle2::TrackFindingCDC::Chooseable::Chooseable
Chooseable(std::unique_ptr< FilterFactory< AFilter >> filterFactory)
Setup the chooseable filter with available choices from the factory.
Definition: ChooseableFilter.icc.h:39
Belle2::ModuleParamList::addParameter
void addParameter(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module list.
Definition: ModuleParamList.templateDetails.h:38
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TrackFindingCDC::Chooseable
Filter can delegate to a filter chosen and set up at run time by parameters.
Definition: ChooseableFilter.dcl.h:39
Belle2::ModuleParamList
The Module parameter list class.
Definition: ModuleParamList.h:46