Belle II Software  release-05-01-25
QualityEstimatorVXDModule.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 *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include <tracking/modules/vxdtfQualityEstimator/QualityEstimatorVXDModule.h>
12 
13 #include <tracking/trackFindingVXD/trackQualityEstimators/QualityEstimatorTripletFit.h>
14 #include <tracking/trackFindingVXD/trackQualityEstimators/QualityEstimatorMC.h>
15 #include <tracking/trackFindingVXD/trackQualityEstimators/QualityEstimatorCircleFit.h>
16 #include <tracking/trackFindingVXD/trackQualityEstimators/QualityEstimatorRiemannHelixFit.h>
17 #include <tracking/trackFindingVXD/trackQualityEstimators/QualityEstimatorRandom.h>
18 
19 #include <framework/geometry/BFieldManager.h>
20 
21 using namespace Belle2;
22 
23 
24 REG_MODULE(QualityEstimatorVXD)
25 
27 {
28  //Set module properties
29  setDescription("The quality estimator module for SpacePointTrackCandidates.");
30  setPropertyFlags(c_ParallelProcessingCertified);
31 
32  addParam("EstimationMethod", m_EstimationMethod,
33  "Identifier which estimation method to use. Valid identifiers are: [mcInfo, circleFit, tripletFit, helixFit, random]",
34  std::string("tripletFit"));
35 
36  addParam("SpacePointTrackCandsStoreArrayName", m_SpacePointTrackCandsStoreArrayName,
37  "Name of StoreArray containing the SpacePointTrackCandidates to be estimated.", std::string(""));
38 
39  addParam("MCRecoTracksStoreArrayName", m_MCRecoTracksStoreArrayName,
40  "Only required for MCInfo method. Name of StoreArray containing MCRecoTracks.", std::string("MCRecoTracks"));
41 
42  addParam("MCStrictQualityEstimator", m_MCStrictQualityEstimator,
43  "Only required for MCInfo method. If false combining several MCTracks is allowed.", bool(true));
44 }
45 
47 {
49 
50  // create pointer to chosen estimator
51  if (m_EstimationMethod == "mcInfo") {
52  m_estimator = std::make_unique<QualityEstimatorMC>(m_MCRecoTracksStoreArrayName, m_MCStrictQualityEstimator);
53  } else if (m_EstimationMethod == "tripletFit") {
54  m_estimator = std::make_unique<QualityEstimatorTripletFit>();
55  } else if (m_EstimationMethod == "circleFit") {
56  m_estimator = std::make_unique<QualityEstimatorCircleFit>();
57  } else if (m_EstimationMethod == "helixFit") {
58  m_estimator = std::make_unique<QualityEstimatorRiemannHelixFit>();
59  } else if (m_EstimationMethod == "random") {
60  m_estimator = std::make_unique<QualityEstimatorRandom>();
61  }
62  B2ASSERT("QualityEstimator could not be initialized with method: " << m_EstimationMethod, m_estimator);
63 }
64 
66 {
67  // BField is required by all QualityEstimators
68  double bFieldZ = BFieldManager::getField(0, 0, 0).Z() / Unit::T;
69  m_estimator->setMagneticFieldStrength(bFieldZ);
70 
71  if (m_EstimationMethod == "mcInfo") {
72  StoreArray<RecoTrack> mcRecoTracks;
73  mcRecoTracks.isRequired(m_MCRecoTracksStoreArrayName);
74  std::string svdClustersName = ""; std::string pxdClustersName = "";
75 
76  if (mcRecoTracks.getEntries() > 0) {
77  svdClustersName = mcRecoTracks[0]->getStoreArrayNameOfSVDHits();
78  pxdClustersName = mcRecoTracks[0]->getStoreArrayNameOfPXDHits();
79  } else {
80  B2WARNING("No Entries in mcRecoTracksStoreArray: using empty cluster name for svd and pxd");
81  }
82 
83  QualityEstimatorMC* MCestimator = static_cast<QualityEstimatorMC*>(m_estimator.get());
84  MCestimator->setClustersNames(svdClustersName, pxdClustersName);
85  }
86 }
87 
89 {
90  // assign a QI computed using the selected QualityEstimator for each given SpacePointTrackCand
92 
93  double qi = m_estimator->estimateQuality(aTC.getSortedHits());
94 
95  aTC.setQualityIndicator(qi);
96  }
97 }
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::QualityEstimatorMC
Class implementing the algorithm used for the MC based quality estimation.
Definition: QualityEstimatorMC.h:32
Belle2::QualityEstimatorVXDModule::m_EstimationMethod
std::string m_EstimationMethod
Identifier which estimation method to use.
Definition: QualityEstimatorVXDModule.h:70
Belle2::QualityEstimatorVXDModule::beginRun
void beginRun() override
Called when entering a new run.
Definition: QualityEstimatorVXDModule.cc:65
Belle2::Module
Base class for Modules.
Definition: Module.h:74
Belle2::QualityEstimatorVXDModule::m_SpacePointTrackCandsStoreArrayName
std::string m_SpacePointTrackCandsStoreArrayName
sets the name of the expected StoreArray containing SpacePointTrackCands
Definition: QualityEstimatorVXDModule.h:73
Belle2::Unit::T
static const double T
[tesla]
Definition: Unit.h:130
Belle2::QualityEstimatorVXDModule::m_MCRecoTracksStoreArrayName
std::string m_MCRecoTracksStoreArrayName
sets the name of the expected StoreArray containing MCRecoTracks.
Definition: QualityEstimatorVXDModule.h:76
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::QualityEstimatorVXDModule::m_estimator
std::unique_ptr< QualityEstimatorBase > m_estimator
pointer to the selected QualityEstimator
Definition: QualityEstimatorVXDModule.h:86
Belle2::QualityEstimatorVXDModule::m_spacePointTrackCands
StoreArray< SpacePointTrackCand > m_spacePointTrackCands
the storeArray for SpacePointTrackCands as member, is faster than recreating link for each event
Definition: QualityEstimatorVXDModule.h:83
Belle2::QualityEstimatorVXDModule::initialize
void initialize() override
Initializes the Module.
Definition: QualityEstimatorVXDModule.cc:46
Belle2::QualityEstimatorVXDModule::event
void event() override
Applies the selected quality estimation method for a given set of TCs.
Definition: QualityEstimatorVXDModule.cc:88
Belle2::QualityEstimatorMC::setClustersNames
void setClustersNames(const std::string &svdClustersName, const std::string &pxdClustersName)
Setter for StoreArray names of SVD and PXD clusters.
Definition: QualityEstimatorMC.h:66
Belle2::StoreArray
Accessor to arrays stored in the data store.
Definition: ECLMatchingPerformanceExpertModule.h:33
Belle2::QualityEstimatorVXDModule::m_MCStrictQualityEstimator
bool m_MCStrictQualityEstimator
Only required for MCInfo method.
Definition: QualityEstimatorVXDModule.h:78
Belle2::QualityEstimatorVXDModule
Quality estimation module for SpacePointTrackCandidates.
Definition: QualityEstimatorVXDModule.h:43
Belle2::StoreArray::getEntries
int getEntries() const
Get the number of objects in the array.
Definition: StoreArray.h:226
Belle2::SpacePointTrackCand
Storage for (VXD) SpacePoint-based track candidates.
Definition: SpacePointTrackCand.h:51