Belle II Software  release-05-01-25
VXDQETrainingDataCollectorModule.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/VXDQETrainingDataCollectorModule.h>
12 #include <tracking/trackFindingVXD/trackQualityEstimators/QualityEstimatorTripletFit.h>
13 #include <tracking/trackFindingVXD/trackQualityEstimators/QualityEstimatorRiemannHelixFit.h>
14 #include <tracking/trackFindingVXD/trackQualityEstimators/QualityEstimatorMC.h>
15 #include <tracking/trackFindingVXD/trackQualityEstimators/QualityEstimatorCircleFit.h>
16 #include <framework/geometry/BFieldManager.h>
17 
18 using namespace Belle2;
19 
20 
21 REG_MODULE(VXDQETrainingDataCollector)
22 
24 {
25  //Set module properties
26  setDescription("Module to collect training data for the VXDQualityEstimatorMVA and store it in a root file.");
27  setPropertyFlags(c_ParallelProcessingCertified | c_TerminateInAllProcesses);
28 
29  addParam("EstimationMethod",
30  m_EstimationMethod,
31  "Identifier which estimation method to use. Valid identifiers are: [circleFit, "
32  "tripletFit, helixFit]",
33  m_EstimationMethod);
34 
35  addParam("MCInfo",
36  m_MCInfo,
37  "If true, MC information is used. Thus, to run over data, this needs to be set to false.",
38  m_MCInfo);
39 
40  addParam("SpacePointTrackCandsStoreArrayName",
41  m_SpacePointTrackCandsStoreArrayName,
42  "Name of StoreArray containing the SpacePointTrackCandidates to be estimated.",
43  m_SpacePointTrackCandsStoreArrayName);
44 
45  addParam("MCRecoTracksStoreArrayName",
46  m_MCRecoTracksStoreArrayName,
47  "Name of StoreArray containing MCRecoTracks. Only required for MCInfo method",
48  m_MCRecoTracksStoreArrayName);
49 
50  addParam("MCStrictQualityEstimator",
51  m_MCStrictQualityEstimator,
52  "Only required for MCInfo method. If false combining several MCTracks is allowed.",
53  m_MCStrictQualityEstimator);
54 
55  addParam("mva_target",
56  m_mva_target,
57  "Whether to write out MVA target which requires complete agreement between SVD CLusters "
58  "of pattern "
59  "recognition track and MC track to yield 1, else 0, and thus provides maximal hit "
60  "purity and hit efficiency.",
61  m_mva_target);
62 
63  addParam("TrainingDataOutputName",
64  m_TrainingDataOutputName,
65  "Name of the output rootfile.",
66  m_TrainingDataOutputName);
67 
68  addParam("ClusterInformation",
69  m_ClusterInformation,
70  "How to compile information from clusters ['Average']",
71  m_ClusterInformation);
72 
73  addParam("UseTimingInfo",
74  m_UseTimingInfo,
75  "Whether to collect timing information",
76  m_UseTimingInfo);
77 }
78 
80 {
82 
83  m_qeResultsExtractor = std::make_unique<QEResultsExtractor>(m_EstimationMethod, m_variableSet);
84 
85  m_variableSet.emplace_back("NSpacePoints", &m_nSpacePoints);
86 
87  m_variableSet.emplace_back("truth", &m_truth);
88 
89  if (m_ClusterInformation == "Average") {
90  m_clusterInfoExtractor = std::make_unique<ClusterInfoExtractor>(m_variableSet, m_UseTimingInfo);
91  }
92 
93  m_recorder = std::make_unique<SimpleVariableRecorder>(m_variableSet, m_TrainingDataOutputName, "tree");
94 
95  // create pointer to chosen estimator
96  if (m_EstimationMethod == "tripletFit") {
97  m_estimator = std::make_unique<QualityEstimatorTripletFit>();
98  } else if (m_EstimationMethod == "circleFit") {
99  m_estimator = std::make_unique<QualityEstimatorCircleFit>();
100  } else if (m_EstimationMethod == "helixFit") {
101  m_estimator = std::make_unique<QualityEstimatorRiemannHelixFit>();
102  }
103  B2ASSERT("Not all QualityEstimators could be initialized!", m_estimator);
104 
105  if (m_MCInfo) {
106  m_estimatorMC = std::make_unique<QualityEstimatorMC>(m_MCRecoTracksStoreArrayName, m_MCStrictQualityEstimator, m_mva_target);
107  B2ASSERT("QualityEstimatorMC could be initialized!", m_estimatorMC);
108  }
109 }
110 
112 {
113  // BField is required by all QualityEstimators
114  const double bFieldZ = BFieldManager::getField(0, 0, 0).Z() / Unit::T;
115  m_estimator->setMagneticFieldStrength(bFieldZ);
116  if (m_MCInfo) {
117  m_estimatorMC->setMagneticFieldStrength(bFieldZ);
118  }
119 }
120 
122 {
124 
125  if (not aTC.hasRefereeStatus(SpacePointTrackCand::c_isActive)) {
126  continue;
127  }
128 
129  std::vector<SpacePoint const*> const sortedHits = aTC.getSortedHits();
130  if (m_ClusterInformation == "Average") {
131  m_clusterInfoExtractor->extractVariables(sortedHits);
132  }
133  m_nSpacePoints = sortedHits.size();
134  if (m_MCInfo) {
135  const double mc_quality = m_estimatorMC->estimateQuality(sortedHits);
136  m_truth = float(mc_quality > 0);
137  }
138  m_qeResultsExtractor->extractVariables(m_estimator->estimateQualityAndProperties(sortedHits));
139 
140  m_recorder->record();
141  }
142 }
143 
145 {
146  m_recorder->write();
147  m_recorder.reset();
148 }
Belle2::VXDQETrainingDataCollectorModule::m_qeResultsExtractor
std::unique_ptr< QEResultsExtractor > m_qeResultsExtractor
pointer to object that extracts the results from the estimation mehtod (including QI,...
Definition: VXDQETrainingDataCollectorModule.h:111
Belle2::VXDQETrainingDataCollectorModule
VXD Quality Estimator Data Collector Module to collect data for a MVA training using VXDQE_teacher....
Definition: VXDQETrainingDataCollectorModule.h:43
Belle2::VXDQETrainingDataCollectorModule::terminate
void terminate() override
write out data from m_recorder
Definition: VXDQETrainingDataCollectorModule.cc:144
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::VXDQETrainingDataCollectorModule::m_UseTimingInfo
bool m_UseTimingInfo
whether to collect timing information
Definition: VXDQETrainingDataCollectorModule.h:96
Belle2::VXDQETrainingDataCollectorModule::beginRun
void beginRun() override
sets magnetic field strength
Definition: VXDQETrainingDataCollectorModule.cc:111
Belle2::VXDQETrainingDataCollectorModule::m_clusterInfoExtractor
std::unique_ptr< ClusterInfoExtractor > m_clusterInfoExtractor
pointer to object that extracts info from the clusters of a SPTC
Definition: VXDQETrainingDataCollectorModule.h:114
Belle2::SpacePointTrackCand::c_isActive
@ c_isActive
bit 11: SPTC is active (i.e.
Definition: SpacePointTrackCand.h:94
Belle2::VXDQETrainingDataCollectorModule::m_ClusterInformation
std::string m_ClusterInformation
how to compile information from clusters ['Average']
Definition: VXDQETrainingDataCollectorModule.h:93
Belle2::VXDQETrainingDataCollectorModule::m_EstimationMethod
std::string m_EstimationMethod
Identifier which estimation method to use.
Definition: VXDQETrainingDataCollectorModule.h:71
Belle2::Module
Base class for Modules.
Definition: Module.h:74
Belle2::Unit::T
static const double T
[tesla]
Definition: Unit.h:130
Belle2::VXDQETrainingDataCollectorModule::m_estimator
std::unique_ptr< QualityEstimatorBase > m_estimator
pointer to the selected QualityEstimator
Definition: VXDQETrainingDataCollectorModule.h:104
Belle2::VXDQETrainingDataCollectorModule::m_recorder
std::unique_ptr< SimpleVariableRecorder > m_recorder
pointer to the object that writes out the collected data into a root file
Definition: VXDQETrainingDataCollectorModule.h:117
Belle2::VXDQETrainingDataCollectorModule::m_spacePointTrackCands
StoreArray< SpacePointTrackCand > m_spacePointTrackCands
the storeArray for SpacePointTrackCands as member, is faster than recreating link for each event
Definition: VXDQETrainingDataCollectorModule.h:101
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::VXDQETrainingDataCollectorModule::m_SpacePointTrackCandsStoreArrayName
std::string m_SpacePointTrackCandsStoreArrayName
sets the name of the expected StoreArray containing SpacePointTrackCands
Definition: VXDQETrainingDataCollectorModule.h:77
Belle2::VXDQETrainingDataCollectorModule::m_mva_target
bool m_mva_target
Bool to indicate if mva target requiring complete agreement in SVD Clusters between MC and PR track t...
Definition: VXDQETrainingDataCollectorModule.h:87
Belle2::VXDQETrainingDataCollectorModule::event
void event() override
applies the selected quality estimation method for a given set of TCs
Definition: VXDQETrainingDataCollectorModule.cc:121
Belle2::VXDQETrainingDataCollectorModule::m_variableSet
std::vector< Named< float * > > m_variableSet
set of named variables to be collected
Definition: VXDQETrainingDataCollectorModule.h:120
Belle2::VXDQETrainingDataCollectorModule::m_estimatorMC
std::unique_ptr< QualityEstimatorBase > m_estimatorMC
QualityEstimatorMC as target for training.
Definition: VXDQETrainingDataCollectorModule.h:107
Belle2::VXDQETrainingDataCollectorModule::initialize
void initialize() override
Initializes the Module.
Definition: VXDQETrainingDataCollectorModule.cc:79
Belle2::VXDQETrainingDataCollectorModule::m_truth
float m_truth
truth information collected with m_estimatorMC type is float to be consistend with m_variableSet (and...
Definition: VXDQETrainingDataCollectorModule.h:128
Belle2::VXDQETrainingDataCollectorModule::m_TrainingDataOutputName
std::string m_TrainingDataOutputName
name of the output rootfile
Definition: VXDQETrainingDataCollectorModule.h:90
Belle2::VXDQETrainingDataCollectorModule::m_MCStrictQualityEstimator
bool m_MCStrictQualityEstimator
Required for MCInfo method, activates its strict version.
Definition: VXDQETrainingDataCollectorModule.h:83
Belle2::VXDQETrainingDataCollectorModule::m_MCInfo
bool m_MCInfo
whether to collect MC truth information
Definition: VXDQETrainingDataCollectorModule.h:74
Belle2::VXDQETrainingDataCollectorModule::m_nSpacePoints
float m_nSpacePoints
number of SpacePoints in SPTC as additional info to be collected, type is float to be consistend with...
Definition: VXDQETrainingDataCollectorModule.h:124
Belle2::SpacePointTrackCand
Storage for (VXD) SpacePoint-based track candidates.
Definition: SpacePointTrackCand.h:51
Belle2::VXDQETrainingDataCollectorModule::m_MCRecoTracksStoreArrayName
std::string m_MCRecoTracksStoreArrayName
sets the name of the expected StoreArray containing MCRecoTracks.
Definition: VXDQETrainingDataCollectorModule.h:80