12 #include <tracking/trackFindingCDC/filters/base/ChooseableFilter.dcl.h>
14 #include <tracking/trackFindingCDC/filters/base/FilterFactory.icc.h>
16 #include <framework/core/ModuleParamList.templateDetails.h>
18 #include <tracking/trackFindingCDC/utilities/StringManipulation.h>
28 namespace TrackFindingCDC {
30 template <
class AFilter>
32 : m_param_filterName(filterFactory ? filterFactory->getDefaultFilterName() :
"")
33 , m_param_filterParameters()
34 , m_filterFactory(std::move(filterFactory))
36 B2ASSERT(
"Constructing a chooseable filter with no factory", m_filterFactory);
39 template <
class AFilter>
41 const std::string& filterName)
42 : m_param_filterName(filterName)
43 , m_param_filterParameters()
44 , m_filterFactory(std::move(filterFactory))
46 B2ASSERT(
"Constructing a chooseable filter with no factory", m_filterFactory);
49 template <
class AFilter>
52 Super::exposeParameters(moduleParamList, prefix);
53 if (m_param_filterName ==
"") {
55 moduleParamList->
addParameter(prefixed(prefix,
"filter"),
57 m_filterFactory->createFiltersNameDescription());
60 moduleParamList->
addParameter(prefixed(prefix,
"filter"),
62 m_filterFactory->createFiltersNameDescription(),
66 m_param_filterParameters.addParameter(moduleParamList,
67 prefixed(prefix,
"filterParameters"),
68 m_filterFactory->createFiltersParametersDescription());
71 template <
class AFilter>
72 void Chooseable<AFilter>::initialize()
74 m_filter = m_filterFactory->create(m_param_filterName);
76 B2ERROR(
"Could not create filter with name " << m_param_filterName);
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());
89 template <
class AFilter>
90 bool Chooseable<AFilter>::needsTruthInformation()
92 return m_filter->needsTruthInformation();
95 template <
class AFilter>
96 Weight Chooseable<AFilter>::operator()(
const Object&
object)
98 return (*m_filter)(object);
101 template <
class AFilter>
104 return (*m_filter)(object);
107 template <
class AFilterFactory>
109 : Super(std::make_unique<AFilterFactory>())
113 template <
class AFilterFactory>
115 : Super(std::make_unique<AFilterFactory>(), filterName)