Belle II Software  release-05-01-25
SVDStateFilterFactory.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2017 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Nils Braun *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 #include <tracking/ckf/svd/filters/states/SVDStateFilterFactory.h>
11 
12 #include <tracking/trackFindingCDC/filters/base/FilterFactory.icc.h>
13 #include <tracking/trackFindingCDC/filters/base/NoneFilter.icc.h>
14 #include <tracking/trackFindingCDC/filters/base/NegativeFilter.icc.h>
15 #include <tracking/trackFindingCDC/filters/base/ChoosableFromVarSetFilter.icc.h>
16 #include <tracking/trackFindingCDC/filters/base/AndFilter.icc.h>
17 #include <tracking/trackFindingCDC/filters/base/RecordingFilter.icc.h>
18 #include <tracking/trackFindingCDC/filters/base/MVAFilter.icc.h>
19 #include <tracking/trackFindingCDC/filters/base/SloppyFilter.icc.h>
20 #include <tracking/trackFindingCDC/filters/base/TruthVarFilter.icc.h>
21 
22 #include <tracking/trackFindingCDC/varsets/VariadicUnionVarSet.h>
23 
24 #include <tracking/ckf/general/filters/AdvanceFilter.h>
25 #include <tracking/ckf/general/filters/KalmanFilter.h>
26 #include <tracking/ckf/svd/utilities/SVDAdvancer.h>
27 #include <tracking/ckf/svd/utilities/SVDKalmanStepper.h>
28 
29 #include <tracking/ckf/svd/filters/states/SVDStateVarSet.h>
30 #include <tracking/ckf/svd/filters/states/SVDStateBasicVarSet.h>
31 #include <tracking/ckf/svd/filters/states/SVDStateTruthVarSet.h>
32 #include <tracking/ckf/svd/filters/states/SimpleSVDStateFilter.h>
33 #include <tracking/ckf/svd/filters/states/ResidualSVDStateFilter.h>
34 #include <tracking/ckf/svd/filters/states/AllSVDStateFilter.h>
35 #include <tracking/ckf/svd/filters/states/NonIPCrossingSVDStateFilter.h>
36 
37 using namespace Belle2;
38 using namespace TrackFindingCDC;
39 
40 namespace {
42  using MCSVDStateFilter = TruthVarFilter<SVDStateTruthVarSet>;
43 
45  using MCOrderingSVDStateFilter = ChoosableFromVarSetFilter<SVDStateTruthVarSet>;
46 
48  using SloppyMCSVDStateFilter = Sloppy<TruthVarFilter<SVDStateTruthVarSet>>;
49 
51  using RecordingSVDStateFilter = RecordingFilter<VariadicUnionVarSet<SVDStateTruthVarSet, SVDStateBasicVarSet, SVDStateVarSet>>;
52 
54  using MVASVDStateFilter = NegativeFilter<MVAFilter<VariadicUnionVarSet<SVDStateBasicVarSet>>>;
55 
57  using AndSVDStateFilter = AndFilter<BaseSVDStateFilter>;
58 
60  class SloppyRecordingSVDStateFilter : public RecordingSVDStateFilter {
61  public:
62  explicit SloppyRecordingSVDStateFilter(const std::string& defaultRootFileName) : RecordingSVDStateFilter(defaultRootFileName)
63  {
64  setSkimFilter(std::make_unique<SloppyMCSVDStateFilter>());
65  }
66  };
67 }
68 
69 
70 SVDStateFilterFactory::SVDStateFilterFactory(const std::string& defaultFilterName)
71  : Super(defaultFilterName)
72 {
73 }
74 
76 
78 {
79  return "SVDState";
80 }
81 
83 {
84  return "Reject svd states";
85 }
86 
87 std::map<std::string, std::string> SVDStateFilterFactory::getValidFilterNamesAndDescriptions() const
88 {
89  return {
90  {"none", "no track combination is valid"},
91  {"all", "set all track combinations as good"},
92  {"non_ip_crossing", "all combinations are fine, except for crossing IPs"},
93  {"advance", "extrapolate the states"},
94  {"fit", "update the mSoP using a Kalman Filter"},
95  {"truth", "monte carlo truth"},
96  {"ordering_truth", "monte carlo truth ordering"},
97  {"sloppy_truth", "sloppy monte carlo truth"},
98  {"simple", "simple filter to be used in svd"},
99  {"residual", "residual filter to be used in svd"},
100  {"recording", "record variables to a TTree"},
101  {"mva", "MVA filter"},
102  {"sloppy_recording", "record variables to a TTree"},
103  };
104 }
105 
106 std::unique_ptr<BaseSVDStateFilter>
107 SVDStateFilterFactory::create(const std::string& filterName) const
108 {
109  if (filterName == "none") {
110  return std::make_unique<TrackFindingCDC::NoneFilter<BaseSVDStateFilter>>();
111  } else if (filterName == "all") {
112  return std::make_unique<AllSVDStateFilter>();
113  } else if (filterName == "non_ip_crossing") {
114  return std::make_unique<NonIPCrossingSVDStateFilter>();
115  } else if (filterName == "advance") {
116  return std::make_unique<AdvanceFilter<CKFToSVDState, SVDAdvancer>>();
117  } else if (filterName == "fit") {
118  return std::make_unique<KalmanFilter<CKFToSVDState, SVDKalmanStepper>>();
119  } else if (filterName == "simple") {
120  return std::make_unique<SimpleSVDStateFilter>();
121  } else if (filterName == "residual") {
122  return std::make_unique<ResidualSVDStateFilter>();
123  } else if (filterName == "truth") {
124  return std::make_unique<MCSVDStateFilter>();
125  } else if (filterName == "ordering_truth") {
126  return std::make_unique<MCOrderingSVDStateFilter>("truth_inverted");
127  } else if (filterName == "sloppy_truth") {
128  return std::make_unique<SloppyMCSVDStateFilter>();
129  } else if (filterName == "recording") {
130  return std::make_unique<RecordingSVDStateFilter>("SVDStateFilter.root");
131  } else if (filterName == "mva") {
132  return std::make_unique<MVASVDStateFilter>("ckf_CDCSVDStateFilter_1");
133  } else if (filterName == "mva_with_direction_check") {
134  return std::make_unique<AndSVDStateFilter>(
135  std::make_unique<NonIPCrossingSVDStateFilter>(),
136  std::make_unique<MVASVDStateFilter>("ckf_CDCSVDStateFilter_1")
137  );
138  } else if (filterName == "sloppy_recording") {
139  return std::make_unique<SloppyRecordingSVDStateFilter>("SVDStateFilter.root");
140  } else {
141  return Super::create(filterName);
142  }
143 }
Belle2::TrackFindingCDC::FilterFactory< BaseSVDStateFilter >
Belle2::SVDStateFilterFactory::getFilterPurpose
std::string getFilterPurpose() const override
Getter for a descriptive purpose of the constructed filters.
Definition: SVDStateFilterFactory.cc:82
Belle2::TrackFindingCDC::FilterFactory< BaseSVDStateFilter >::create
virtual std::unique_ptr< BaseSVDStateFilter > 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::SVDStateFilterFactory::getValidFilterNamesAndDescriptions
std::map< std::string, std::string > getValidFilterNamesAndDescriptions() const override
Getter for valid filter names and a description for each.
Definition: SVDStateFilterFactory.cc:87
Belle2::SVDStateFilterFactory::getIdentifier
std::string getIdentifier() const override
Getter for a short identifier for the factory.
Definition: SVDStateFilterFactory.cc:77
Belle2::SVDStateFilterFactory::SVDStateFilterFactory
SVDStateFilterFactory(const std::string &defaultFilterName="all")
Constructor forwarding the default filter name.
Definition: SVDStateFilterFactory.cc:70
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::SVDStateFilterFactory::~SVDStateFilterFactory
~SVDStateFilterFactory()
Default destructor.
Belle2::SVDStateFilterFactory::create
std::unique_ptr< BaseSVDStateFilter > create(const std::string &filterName) const override
Create a filter with the given name.
Definition: SVDStateFilterFactory.cc:107