Belle II Software  release-05-01-25
VXDQualityEstimatorMVAModule.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2017 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Jonas Wagner, Sebastian Racs *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include <tracking/modules/vxdtfQualityEstimator/VXDQualityEstimatorMVAModule.h>
12 #include <tracking/trackFindingVXD/trackQualityEstimators/QualityEstimatorTripletFit.h>
13 #include <tracking/trackFindingVXD/trackQualityEstimators/QualityEstimatorCircleFit.h>
14 #include <tracking/trackFindingVXD/trackQualityEstimators/QualityEstimatorRiemannHelixFit.h>
15 #include <framework/geometry/BFieldManager.h>
16 
17 using namespace Belle2;
18 
19 
20 REG_MODULE(VXDQualityEstimatorMVA)
21 
23 {
24  //Set module properties
25  setDescription("The quality estimator module for SpacePointTrackCandidates.");
26  setPropertyFlags(c_ParallelProcessingCertified);
27 
28  addParam("EstimationMethod",
29  m_EstimationMethod,
30  "Identifier which estimation method to use. Valid identifiers are: [tripletFit, circleFit, helixFit]",
31  m_EstimationMethod);
32 
33  addParam("SpacePointTrackCandsStoreArrayName",
34  m_SpacePointTrackCandsStoreArrayName,
35  "Name of StoreArray containing the SpacePointTrackCandidates to be estimated.",
36  m_SpacePointTrackCandsStoreArrayName);
37 
38 
39  addParam("WeightFileIdentifier",
40  m_weightFileIdentifier,
41  "Identifier of weightfile in Database or local root/xml file.",
42  m_weightFileIdentifier);
43 
44  addParam("UseTimingInfo",
45  m_UseTimingInfo,
46  "Whether to use timing information available in the weight file",
47  m_UseTimingInfo);
48 
49  addParam("ClusterInformation",
50  m_ClusterInformation,
51  "How to compile information from clusters ['Average']",
52  m_ClusterInformation);
53 }
54 
56 {
58 
59  m_qeResultsExtractor = std::make_unique<QEResultsExtractor>(m_EstimationMethod, m_variableSet);
60 
61  m_variableSet.emplace_back("NSpacePoints", &m_nSpacePoints);
62 
63  if (m_ClusterInformation == "Average") {
64  m_clusterInfoExtractor = std::make_unique<ClusterInfoExtractor>(m_variableSet, m_UseTimingInfo);
65  }
66 
67  m_mvaExpert = std::make_unique<MVAExpert>(m_weightFileIdentifier, m_variableSet);
68  m_mvaExpert->initialize();
69 
70  // create pointer to chosen estimator
71  if (m_EstimationMethod == "tripletFit") {
72  m_estimator = std::make_unique<QualityEstimatorTripletFit>();
73  } else if (m_EstimationMethod == "circleFit") {
74  m_estimator = std::make_unique<QualityEstimatorCircleFit>();
75  } else if (m_EstimationMethod == "helixFit") {
76  m_estimator = std::make_unique<QualityEstimatorRiemannHelixFit>();
77  }
78  B2ASSERT("QualityEstimator could not be initialized with method: " << m_EstimationMethod, m_estimator);
79 }
80 
82 {
83  m_mvaExpert->beginRun();
84  // BField is required by all QualityEstimators
85  const double bFieldZ = BFieldManager::getField(0, 0, 0).Z() / Unit::T;
86  m_estimator->setMagneticFieldStrength(bFieldZ);
87 }
88 
90 {
91  // assign a QI computed using the selected QualityEstimator for each given SpacePointTrackCand
92  for (SpacePointTrackCand& spacePointTrackCand : m_spacePointTrackCands) {
93  if (not spacePointTrackCand.hasRefereeStatus(SpacePointTrackCand::c_isActive)) {
94  continue;
95  }
96 
97  std::vector<SpacePoint const*> const sortedHits = spacePointTrackCand.getSortedHits();
98 
99  if (m_ClusterInformation == "Average") {
100  m_clusterInfoExtractor->extractVariables(sortedHits);
101  }
102 
103  m_nSpacePoints = sortedHits.size();
104 
105  m_qeResultsExtractor->extractVariables(m_estimator->estimateQualityAndProperties(sortedHits));
106 
107  const float qi = m_mvaExpert->predict();
108  spacePointTrackCand.setQualityIndicator(qi);
109  }
110 }
Belle2::BFieldManager::getField
static void getField(const double *pos, double *field)
return the magnetic field at a given position.
Definition: BFieldManager.h:110
REG_MODULE
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:652
Belle2::VXDQualityEstimatorMVAModule::m_mvaExpert
std::unique_ptr< MVAExpert > m_mvaExpert
pointer to the object to interact with the MVA package
Definition: VXDQualityEstimatorMVAModule.h:97
Belle2::SpacePointTrackCand::c_isActive
@ c_isActive
bit 11: SPTC is active (i.e.
Definition: SpacePointTrackCand.h:94
Belle2::VXDQualityEstimatorMVAModule::m_nSpacePoints
float m_nSpacePoints
number of SpacePoints in SPTC as additional info for MVA, type is float to be consistend with m_varia...
Definition: VXDQualityEstimatorMVAModule.h:111
Belle2::Module
Base class for Modules.
Definition: Module.h:74
Belle2::Unit::T
static const double T
[tesla]
Definition: Unit.h:130
Belle2::VXDQualityEstimatorMVAModule::m_estimator
std::unique_ptr< QualityEstimatorBase > m_estimator
pointer to the selected QualityEstimator
Definition: VXDQualityEstimatorMVAModule.h:94
Belle2::VXDQualityEstimatorMVAModule::m_EstimationMethod
std::string m_EstimationMethod
Identifier which estimation method to use.
Definition: VXDQualityEstimatorMVAModule.h:74
Belle2::VXDQualityEstimatorMVAModule::event
void event() override
Applies the selected quality estimation method for a given set of TCs.
Definition: VXDQualityEstimatorMVAModule.cc:89
Belle2::VXDQualityEstimatorMVAModule::m_UseTimingInfo
bool m_UseTimingInfo
whether to use timing information available in the weight file
Definition: VXDQualityEstimatorMVAModule.h:83
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::VXDQualityEstimatorMVAModule::beginRun
void beginRun() override
Launches mvaExpert and sets the magnetic field strength.
Definition: VXDQualityEstimatorMVAModule.cc:81
Belle2::VXDQualityEstimatorMVAModule::m_variableSet
std::vector< Named< float * > > m_variableSet
set of named variables to be used in MVA
Definition: VXDQualityEstimatorMVAModule.h:107
Belle2::VXDQualityEstimatorMVAModule
Quality estimation module for SpacePointTrackCandidates using multivariate analysis (MVA).
Definition: VXDQualityEstimatorMVAModule.h:48
Belle2::VXDQualityEstimatorMVAModule::m_spacePointTrackCands
StoreArray< SpacePointTrackCand > m_spacePointTrackCands
the storeArray for SpacePointTrackCands as member, is faster than recreating link for each event
Definition: VXDQualityEstimatorMVAModule.h:91
Belle2::VXDQualityEstimatorMVAModule::m_qeResultsExtractor
std::unique_ptr< QEResultsExtractor > m_qeResultsExtractor
pointer to object that extracts the results from the estimation mehtod (including QI,...
Definition: VXDQualityEstimatorMVAModule.h:101
Belle2::VXDQualityEstimatorMVAModule::m_ClusterInformation
std::string m_ClusterInformation
how to compile information from clusters ['Average']
Definition: VXDQualityEstimatorMVAModule.h:86
Belle2::VXDQualityEstimatorMVAModule::m_clusterInfoExtractor
std::unique_ptr< ClusterInfoExtractor > m_clusterInfoExtractor
pointer to object that extracts info from the clusters of a SPTC
Definition: VXDQualityEstimatorMVAModule.h:104
Belle2::VXDQualityEstimatorMVAModule::m_SpacePointTrackCandsStoreArrayName
std::string m_SpacePointTrackCandsStoreArrayName
Name of the expected StoreArray containing SpacePointTrackCands.
Definition: VXDQualityEstimatorMVAModule.h:77
Belle2::VXDQualityEstimatorMVAModule::m_weightFileIdentifier
std::string m_weightFileIdentifier
identifier of weightfile in Database or local root/xml file
Definition: VXDQualityEstimatorMVAModule.h:80
Belle2::VXDQualityEstimatorMVAModule::initialize
void initialize() override
Initializes the Module.
Definition: VXDQualityEstimatorMVAModule.cc:55
Belle2::SpacePointTrackCand
Storage for (VXD) SpacePoint-based track candidates.
Definition: SpacePointTrackCand.h:51