Belle II Software  release-05-01-25
SegmentRelationFilterFactory.cc
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 #include <tracking/trackFindingCDC/filters/segmentRelation/SegmentRelationFilterFactory.h>
11 
12 #include <tracking/trackFindingCDC/filters/segmentRelation/BaseSegmentRelationFilter.h>
13 #include <tracking/trackFindingCDC/filters/segmentRelation/MCSegmentRelationFilter.h>
14 #include <tracking/trackFindingCDC/filters/segmentRelation/UnionRecordingSegmentRelationFilter.h>
15 #include <tracking/trackFindingCDC/filters/segmentRelation/MVAFeasibleSegmentRelationFilter.h>
16 #include <tracking/trackFindingCDC/filters/segmentRelation/MVARealisticSegmentRelationFilter.h>
17 
18 #include <tracking/trackFindingCDC/filters/base/NoneFilter.icc.h>
19 
20 #include <tracking/trackFindingCDC/filters/base/AndFilter.icc.h>
21 #include <tracking/trackFindingCDC/filters/base/NotFilter.icc.h>
22 
23 #include <tracking/trackFindingCDC/filters/base/FilterFactory.icc.h>
24 
25 
26 using namespace Belle2;
27 using namespace TrackFindingCDC;
28 
30 
32  : Super(defaultFilterName)
33 {
34 }
35 
37 {
38  return "SegmentRelation";
39 }
40 
42 {
43  return "Segment relation filter to construct a segment network for in super cluster merging";
44 }
45 
46 std::map<std::string, std::string>
48 {
49  return {
50  {"none", "no segment relation is valid, stop at segment creation."},
51  {"truth", "segment relations from monte carlo truth"},
52  {"unionrecording", "record many multiple choosable variable set"},
53  {"feasible", "check if the segment relation is feasible"},
54  {"realistic", "check if the segment relation is a good combination"},
55  {"false_positive", "accepts the instances that are really false but are accepted by the default filter"},
56  {"false_negative", "accepts the instances that are really true but are rejected by the default filter"},
57  };
58 }
59 
60 std::unique_ptr<BaseSegmentRelationFilter >
61 SegmentRelationFilterFactory::create(const std::string& filterName) const
62 {
63  if (filterName == "none") {
64  return std::make_unique<NoneFilter<BaseSegmentRelationFilter>>();
65  } else if (filterName == "truth") {
66  return std::make_unique<MCSegmentRelationFilter>();
67  } else if (filterName == "unionrecording") {
68  return std::make_unique<UnionRecordingSegmentRelationFilter>();
69  } else if (filterName == "feasible") {
70  return std::make_unique<MVAFeasibleSegmentRelationFilter>();
71  } else if (filterName == "realistic") {
72  return std::make_unique<MVARealisticSegmentRelationFilter>();
73  } else if (filterName == "false_positive") {
74  std::string defaultFilterName = this->getDefaultFilterName();
75  auto defaultFilter = this->create(defaultFilterName);
76  std::string truthFilterName = "truth";
77  auto truthFilter = this->create(truthFilterName);
78  auto notTruthFilter = std::make_unique<NotFilter<BaseSegmentRelationFilter>>(std::move(truthFilter));
79  return std::make_unique<AndFilter<BaseSegmentRelationFilter>>(std::move(notTruthFilter),
80  std::move(defaultFilter));
81  } else if (filterName == "false_negative") {
82  std::string defaultFilterName = this->getDefaultFilterName();
83  auto defaultFilter = this->create(defaultFilterName);
84  std::string truthFilterName = "truth";
85  auto truthFilter = this->create(truthFilterName);
86  auto notDefaultFilter = std::make_unique<NotFilter<BaseSegmentRelationFilter>>(std::move(defaultFilter));
87  return std::make_unique<AndFilter<BaseSegmentRelationFilter>>(std::move(notDefaultFilter),
88  std::move(truthFilter));
89  } else {
90  return Super::create(filterName);
91  }
92 }
Belle2::TrackFindingCDC::SegmentRelationFilterFactory::SegmentRelationFilterFactory
SegmentRelationFilterFactory(const std::string &defaultFilterName="realistic")
Constructor forwarding the default filter name.
Definition: SegmentRelationFilterFactory.cc:31
Belle2::TrackFindingCDC::FilterFactory< BaseSegmentRelationFilter >
Belle2::TrackFindingCDC::SegmentRelationFilterFactory::getFilterPurpose
std::string getFilterPurpose() const override
Getter for a descriptive purpose of the constructed filters.
Definition: SegmentRelationFilterFactory.cc:41
Belle2::TrackFindingCDC::FilterFactory< BaseSegmentRelationFilter >::create
virtual std::unique_ptr< BaseSegmentRelationFilter > create(const std::string &filterName) const
Create a filter with the given name, does not set filter specific parameters.
Definition: FilterFactory.icc.h:54
Belle2::TrackFindingCDC::SegmentRelationFilterFactory::create
std::unique_ptr< BaseSegmentRelationFilter > create(const std::string &filterName) const override
Create a filter with the given name.
Definition: SegmentRelationFilterFactory.cc:61
Belle2::TrackFindingCDC::FilterFactory< BaseSegmentRelationFilter >::getDefaultFilterName
const std::string & getDefaultFilterName() const
Legacy - Return the default filter suggested by the factory.
Definition: FilterFactory.icc.h:156
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TrackFindingCDC::SegmentRelationFilterFactory::getIdentifier
std::string getIdentifier() const override
Getter for a short identifier for the factory.
Definition: SegmentRelationFilterFactory.cc:36
Belle2::TrackFindingCDC::SegmentRelationFilterFactory::getValidFilterNamesAndDescriptions
std::map< std::string, std::string > getValidFilterNamesAndDescriptions() const override
Getter for valid filter names and a description for each.
Definition: SegmentRelationFilterFactory.cc:47