Belle II Software development
MergerCosmicTracksModule.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8
9#include <alignment/modules/MergerCosmicTracks/MergerCosmicTracksModule.h>
10
11#include <cdc/geometry/CDCGeometryPar.h>
12#include <ecl/dataobjects/ECLConnectedRegion.h>
13#include <ecl/dataobjects/ECLShower.h>
14#include <framework/datastore/StoreArray.h>
15#include <framework/geometry/B2Vector3.h>
16#include <mdst/dataobjects/KLMCluster.h>
17#include <vxd/geometry/GeoCache.h>
18
19using namespace Belle2;
20
21REG_MODULE(MergerCosmicTracks);
22
24{
25 setDescription("Select cosmic events containing two tracks (up/down) and merge two tracks");
27
28 addParam("recoTracksStoreArrayName", m_param_recoTracksStoreArrayName,
29 "StoreArray containing the RecoTracks to read from and delete afterwards.",
31 addParam("mergedRecoTracksStoreArrayName", m_param_mergedRecoTracksStoreArrayName,
32 "StoreArray to where to copy the merged RecoTrack.",
34 addParam("usingMagneticField", m_usingMagneticField,
35 "Flag to using magnetic field during reconstruction.",
37 addParam("minimumNumHitCut", m_minimumNumHitCut, "Number of CDC hit per track required for cosmic track", m_minimumNumHitCut);
38 addParam("minimumClusterSize", m_minimumClusterSize, "Minimal cluster size for used PXD clusters for cosmic track",
40}
41
43{
44 m_Tracks.isRequired();
47 m_ECLConnectedRegions.isRequired();
48 m_KLMClusters.isRequired();
49
51
54}
55
56void MergerCosmicTracksModule::MergingTracks(RecoTrack* firstRecoTrack, RecoTrack* secondRecoTrack,
57 StoreArray<RecoTrack>& mergedRecoTracks)
58{
59
60 // y = exp((-p0+x)/p1) + p2 ; where x ~ ADCCounts/NumberOfCDCHits, y ~ momentum
61 const float fittedValuesOfFunctions[3] = {50.2380, 21.9203, 19.8463}; // {p0, p1, p2}
62
63 // Definition of upper and lower part of CosmicRecoTrack
64 RecoTrack* upperTrack;
65 RecoTrack* lowerTrack;
66
67 // The RecoTrack with smaller timeSeed is upper
68 if (firstRecoTrack->getTimeSeed() < secondRecoTrack->getTimeSeed()) {
69 upperTrack = firstRecoTrack;
70 lowerTrack = secondRecoTrack;
71 } else {
72 upperTrack = secondRecoTrack;
73 lowerTrack = firstRecoTrack;
74 }
75
76 // estimation of momentum tracks
77 int numberOfCDCHits = upperTrack->getNumberOfCDCHits() + lowerTrack->getNumberOfCDCHits();
78 float totalADCCount = 0;
79 if (upperTrack->hasCDCHits()) {
80 int CDCHits = upperTrack->getNumberOfCDCHits();
81 for (int i = 0; i < CDCHits; i++) {
82 totalADCCount = totalADCCount + upperTrack->getSortedCDCHitList()[i]->getADCCount();
83 }
84 }
85 if (lowerTrack->hasCDCHits()) {
86 int CDCHits = lowerTrack->getNumberOfCDCHits();
87 for (int i = 0; i < CDCHits; i++) {
88 totalADCCount = totalADCCount + lowerTrack->getSortedCDCHitList()[i]->getADCCount();
89 }
90 }
91 if (totalADCCount / numberOfCDCHits < 115) {
92 // y = exp((-p0+x)/p1) + p2 ; where x ~ ADCCounts/NumberOfCDCHits, y ~ momentum
93 m_magnitudeOfMomentumWithoutMagneticField = exp((-fittedValuesOfFunctions[0] + totalADCCount / numberOfCDCHits) /
94 fittedValuesOfFunctions[1]);
95 } else {
96 m_magnitudeOfMomentumWithoutMagneticField = fittedValuesOfFunctions[2];
97 }
98
99 // Creation of CosmicRecoTrack
100 RecoTrack* mergedRecoTrack;
101 if (m_usingMagneticField == true) {
102 mergedRecoTrack = mergedRecoTracks.appendNew(upperTrack->getPositionSeed(),
103 upperTrack->getMomentumSeed(),
104 upperTrack->getChargeSeed());
105 } else {
106 B2Vector3D momentum = upperTrack->getMomentumSeed();
107 float magnitudeMomentum = momentum.Mag();
108 float newMomentumX = (momentum.Px() * m_magnitudeOfMomentumWithoutMagneticField) / magnitudeMomentum;
109 float newMomentumY = (momentum.Py() * m_magnitudeOfMomentumWithoutMagneticField) / magnitudeMomentum;
110 float newMomentumZ = (momentum.Pz() * m_magnitudeOfMomentumWithoutMagneticField) / magnitudeMomentum;
111 B2Vector3D newMomentum(newMomentumX, newMomentumY, newMomentumZ);
112 // std::cout << "No Magnetic Field: " << newMomentum.Mag() << "\n";
113 mergedRecoTrack = mergedRecoTracks.appendNew(upperTrack->getPositionSeed(),
114 newMomentum,
115 upperTrack->getChargeSeed());
116 }
117 mergedRecoTrack->setTimeSeed(upperTrack->getTimeSeed());
118
119 int sortingNumber = 0;
120
121 if (upperTrack->hasPXDHits()) {
122 int PXDHits = upperTrack->getNumberOfPXDHits();
123 for (int i = 0; i < PXDHits; i++) {
124 if (upperTrack->getSortedPXDHitList()[i]->getSize() > m_minimumClusterSize) {mergedRecoTrack->addPXDHit(upperTrack->getSortedPXDHitList()[i], sortingNumber);}
125 // B2INFO("Cluster size of included PXD hit: " << upperTrack->getSortedPXDHitList()[i]->getSize());
126 sortingNumber++;
127 }
128
129 }
130
131 if (lowerTrack->hasPXDHits()) {
132 int PXDHits = lowerTrack->getNumberOfPXDHits();
133 for (int i = 0; i < PXDHits; i++) {
134 if (lowerTrack->getSortedPXDHitList()[i]->getSize() > m_minimumClusterSize) {mergedRecoTrack->addPXDHit(lowerTrack->getSortedPXDHitList()[i], sortingNumber);}
135 // B2INFO("Cluster size of included PXD hit: " << lowerTrack->getSortedPXDHitList()[i]->getSize());
136 sortingNumber++;
137 }
138 }
139
140 if (upperTrack->hasSVDHits()) {
141 int SVDHits = upperTrack->getNumberOfSVDHits();
142 for (int i = 0; i < SVDHits; i++) {
143 mergedRecoTrack->addSVDHit(upperTrack->getSortedSVDHitList()[i], sortingNumber);
144 sortingNumber++;
145 }
146 }
147
148 if (lowerTrack->hasSVDHits()) {
149 int SVDHits = lowerTrack->getNumberOfSVDHits();
150 for (int i = 0; i < SVDHits; i++) {
151 mergedRecoTrack->addSVDHit(lowerTrack->getSortedSVDHitList()[i], sortingNumber);
152 sortingNumber++;
153 }
154 }
155
156
157 if (upperTrack->hasCDCHits()) {
158 int CDCHits = upperTrack->getNumberOfCDCHits();
159 for (int i = 0; i < CDCHits; i++) {
160 mergedRecoTrack->addCDCHit(upperTrack->getSortedCDCHitList()[i], sortingNumber);
161 sortingNumber++;
162 }
163 }
164
165 if (lowerTrack->hasCDCHits()) {
166 int CDCHits = lowerTrack->getNumberOfCDCHits();
167 for (int i = CDCHits - 1; i >= 0; i--) {
168 mergedRecoTrack->addCDCHit(lowerTrack->getSortedCDCHitList()[i], sortingNumber);
169 sortingNumber++;
170 }
171 }
172
173 if (upperTrack->hasBKLMHits()) {
174 int BKLMHits = upperTrack->getNumberOfBKLMHits();
175 for (int i = 0; i < BKLMHits; i++) {
176 mergedRecoTrack->addBKLMHit(upperTrack->getSortedBKLMHitList()[i], sortingNumber);
177 sortingNumber++;
178 }
179 }
180
181 if (upperTrack->hasEKLMHits()) {
182 int EKLMHits = upperTrack->getNumberOfEKLMHits();
183 for (int i = 0; i < EKLMHits; i++) {
184 mergedRecoTrack->addEKLMHit(upperTrack->getSortedEKLMHitList()[i], sortingNumber);
185 }
186 }
187
188 if (lowerTrack->hasBKLMHits()) {
189 int BKLMHits = lowerTrack->getNumberOfBKLMHits();
190 for (int i = 0; i < BKLMHits; i++) {
191 mergedRecoTrack->addBKLMHit(lowerTrack->getSortedBKLMHitList()[i], sortingNumber);
192 sortingNumber++;
193 }
194 }
195
196 if (lowerTrack->hasEKLMHits()) {
197 int EKLMHits = lowerTrack->getNumberOfEKLMHits();
198 for (int i = 0; i < EKLMHits; i++) {
199 mergedRecoTrack->addEKLMHit(lowerTrack->getSortedEKLMHitList()[i], sortingNumber);
200 sortingNumber++;
201 }
202 }
203}
204
206{
207 // VXD::GeoCache& geoCache = VXD::GeoCache::getInstance();
208 // CDC::CDCGeometryPar& geometryPar = CDC::CDCGeometryPar::Instance();
209
210 // numberRecoTracks | numberKLMClusters | numberRecoTracksWithB(E)KLMHits => CosmicRecoTracks
211 // 1 1 1 Create
212 // 1 2 1 Create
213 // 2 1 1 Create
214 // 2 2 2 Create
215 // 2 More than 2 2 Create
216 // More than 2 2 2 Create
217
218
219 // Estimation of momentum from dE/dx, when magnetic field is off
220 // y = exp((-p0+x)/p1) + p2 ; where x ~ ADCCounts/NumberOfCDCHits, y ~ momentum
221 const float fittedValuesOfFunctions[3] = {50.2380, 21.9203, 19.8463}; // {p0, p1, p2}
222
223 // bool mergedTracks = false;
224
225 if (m_RecoTracks.getEntries() == 1) {
226 int numberKLMClusterEnoughLayers = 0;
227 for (int i = 0; i < m_KLMClusters.getEntries(); i++) {
228 if (m_KLMClusters[i]->getLayers() > 4) {
229 numberKLMClusterEnoughLayers++;
230 }
231 }
232
233 if (m_ECLConnectedRegions.getEntries() == 2 || m_ECLConnectedRegions.getEntries() == 1
234 || numberKLMClusterEnoughLayers == 2 || numberKLMClusterEnoughLayers == 1) {
235 if (m_RecoTracks[0]->getNumberOfCDCHits() > m_minimumNumHitCut) {
236 RelationVector<Track> track = m_RecoTracks[0]->getRelationsWith<Track>();
237 if (track.size() != 0) {
238 RelationVector<ECLShower> eclShower = track[0]->getRelationsTo<ECLShower>();
239 if (eclShower.size() != 0 || m_RecoTracks[0]->hasEKLMHits() || m_RecoTracks[0]->hasBKLMHits()) {
240
241 int numberOfCDCHits = m_RecoTracks[0]->getNumberOfCDCHits();
242 float totalADCCount = 0;
243 if (m_RecoTracks[0]->hasCDCHits()) {
244 int CDCHits = m_RecoTracks[0]->getNumberOfCDCHits();
245 for (int i = 0; i < CDCHits; i++) {
246 totalADCCount = totalADCCount + m_RecoTracks[0]->getSortedCDCHitList()[i]->getADCCount();
247 }
248 }
249 if (totalADCCount / numberOfCDCHits < 115) {
250 // y = exp((-p0+x)/p1) + p2 ; where x ~ ADCCounts/NumberOfCDCHits, y ~ momentum
251 m_magnitudeOfMomentumWithoutMagneticField = exp((-fittedValuesOfFunctions[0] + totalADCCount / numberOfCDCHits) /
252 fittedValuesOfFunctions[1]);
253 } else {
254 m_magnitudeOfMomentumWithoutMagneticField = fittedValuesOfFunctions[2];
255 }
256 RecoTrack* mergedRecoTrack;
257 if (m_usingMagneticField == true) {
258 mergedRecoTrack = m_MergedRecoTracks.appendNew(m_RecoTracks[0]->getPositionSeed(),
259 m_RecoTracks[0]->getMomentumSeed(), m_RecoTracks[0]->getChargeSeed());
260 } else {
261 B2Vector3D momentum = m_RecoTracks[0]->getMomentumSeed();
262 float magnitudeMomentum = momentum.Mag();
263 float newMomentumX = (momentum.Px() * m_magnitudeOfMomentumWithoutMagneticField) / magnitudeMomentum;
264 float newMomentumY = (momentum.Py() * m_magnitudeOfMomentumWithoutMagneticField) / magnitudeMomentum;
265 float newMomentumZ = (momentum.Pz() * m_magnitudeOfMomentumWithoutMagneticField) / magnitudeMomentum;
266 B2Vector3D newMomentum(newMomentumX, newMomentumY, newMomentumZ);
267 mergedRecoTrack = m_MergedRecoTracks.appendNew(m_RecoTracks[0]->getPositionSeed(),
268 newMomentum, m_RecoTracks[0]->getChargeSeed());
269 }
270 mergedRecoTrack->setTimeSeed(m_RecoTracks[0]->getTimeSeed());
271
272 int sortingNumber = 0;
273 if (m_RecoTracks[0]->hasPXDHits()) {
274 int PXDHits = m_RecoTracks[0]->getNumberOfPXDHits();
275 for (int i = 0; i < PXDHits; i++) {
276 if (m_RecoTracks[0]->getSortedPXDHitList()[i]->getSize() > 1) {mergedRecoTrack->addPXDHit(m_RecoTracks[0]->getSortedPXDHitList()[i], sortingNumber);}
277 // B2INFO("Cluster size of included PXD hit: " << m_RecoTracks[0]->getSortedPXDHitList()[i]->getSize());
278 sortingNumber++;
279 }
280 }
281 if (m_RecoTracks[0]->hasSVDHits()) {
282 int SVDHits = m_RecoTracks[0]->getNumberOfSVDHits();
283 for (int i = 0; i < SVDHits; i++) {
284 mergedRecoTrack->addSVDHit(m_RecoTracks[0]->getSortedSVDHitList()[i], sortingNumber);
285 sortingNumber++;
286 }
287 }
288 if (m_RecoTracks[0]->hasCDCHits()) {
289 int CDCHits = m_RecoTracks[0]->getNumberOfCDCHits();
290 for (int i = 0; i < CDCHits; i++) {
291 mergedRecoTrack->addCDCHit(m_RecoTracks[0]->getSortedCDCHitList()[i], sortingNumber);
292 sortingNumber++;
293 }
294 }
295 if (m_RecoTracks[0]->hasBKLMHits()) {
296 int BKLMHits = m_RecoTracks[0]->getNumberOfBKLMHits();
297 for (int i = 0; i < BKLMHits; i++) {
298 mergedRecoTrack->addBKLMHit(m_RecoTracks[0]->getSortedBKLMHitList()[i], sortingNumber);
299 sortingNumber++;
300 }
301 }
302 if (m_RecoTracks[0]->hasEKLMHits()) {
303 int EKLMHits = m_RecoTracks[0]->getNumberOfEKLMHits();
304 for (int i = 0; i < EKLMHits; i++) {
305 mergedRecoTrack->addEKLMHit(m_RecoTracks[0]->getSortedEKLMHitList()[i], sortingNumber);
306 }
307 }
308 // mergedTracks = true;
309 }
310 }
311 }
312 }
313 }
314
315 else if (m_RecoTracks.getEntries() == 2) {
316 if (m_RecoTracks[0]->getNumberOfCDCHits() + m_RecoTracks[1]->getNumberOfCDCHits() > m_minimumNumHitCut) {
317 RelationVector<Track> trackFirst = m_RecoTracks[0]->getRelationsWith<Track>();
318 RelationVector<Track> trackSecond = m_RecoTracks[1]->getRelationsWith<Track>();
319 if (trackFirst.size() != 0 && trackSecond.size() != 0) {
320 RelationVector<ECLShower> eclShowerFirst = trackFirst[0]->getRelationsTo<ECLShower>();
321 RelationVector<ECLShower> eclShowerSecond = trackSecond[0]->getRelationsTo<ECLShower>();
322 if ((eclShowerFirst.size() != 0 && eclShowerSecond.size() != 0) || ((m_RecoTracks[0]->hasEKLMHits()
323 || m_RecoTracks[0]->hasBKLMHits()) && (m_RecoTracks[1]->hasEKLMHits() || m_RecoTracks[1]->hasBKLMHits()))) {
324 if (m_ECLConnectedRegions.getEntries() >= 2 || m_KLMClusters.getEntries() >= 2) {
326 // mergedTracks = true;
327 }
328 } else if (eclShowerFirst.size() != 0 || eclShowerSecond.size() != 0 || m_RecoTracks[0]->hasEKLMHits()
329 || m_RecoTracks[0]->hasBKLMHits() || m_RecoTracks[1]->hasEKLMHits() || m_RecoTracks[1]->hasBKLMHits()) {
330 if (m_ECLConnectedRegions.getEntries() == 2 || m_ECLConnectedRegions.getEntries() == 1
331 || m_KLMClusters.getEntries() == 2 || m_KLMClusters.getEntries() == 1) {
333 // mergedTracks = true;
334 }
335 }
336 }
337 }
338 }
339
340 else {
341 for (int i = 0; i < m_RecoTracks.getEntries(); i++) {
342 RelationVector<Track> trackFirst = m_RecoTracks[i]->getRelationsWith<Track>();
343 if (trackFirst.size() != 0) {
344 for (int j = i + 1; j < m_RecoTracks.getEntries(); j++) {
345 RelationVector<Track> trackSecond = m_RecoTracks[j]->getRelationsWith<Track>();
346 if (trackSecond.size() != 0) {
347 if (m_RecoTracks[i]->getNumberOfCDCHits() + m_RecoTracks[j]->getNumberOfCDCHits() > m_minimumNumHitCut) {
348 RelationVector<ECLShower> eclShowerFirst = trackFirst[0]->getRelationsTo<ECLShower>();
349 RelationVector<ECLShower> eclShowerSecond = trackSecond[0]->getRelationsTo<ECLShower>();
350 if (eclShowerFirst.size() != 0 && eclShowerSecond.size() != 0) {
351 if (eclShowerFirst[0]->getRelationsWith<Track>().size() == 1 && eclShowerSecond[0]->getRelationsWith<Track>().size() == 1) {
353 // mergedTracks = true;
354 }
355 } else if ((m_RecoTracks[i]->hasEKLMHits() || m_RecoTracks[i]->hasBKLMHits())
356 && (m_RecoTracks[j]->hasEKLMHits() || m_RecoTracks[j]->hasBKLMHits())) {
357 if (m_RecoTracks[i]->getNumberOfBKLMHits() + m_RecoTracks[i]->getNumberOfEKLMHits() > 3
358 && m_RecoTracks[j]->getNumberOfBKLMHits() + m_RecoTracks[j]->getNumberOfEKLMHits() > 3) {
360 // mergedTracks = true;
361 }
362 }
363 }
364 }
365 }
366 }
367 }
368 }
369}
static CDCGeometryPar & Instance(const CDCGeometry *=nullptr)
Static method to get a reference to the CDCGeometryPar instance.
Class to store ECL Showers.
Definition: ECLShower.h:30
void MergingTracks(RecoTrack *, RecoTrack *, StoreArray< RecoTrack > &)
Merge cosmic tracks.
void initialize() override
Register the store arrays and store obj pointers.
unsigned int m_minimumNumHitCut
Number of CDC hit per track required for cosmic track.
void event() override
Do the selection.
StoreArray< ECLConnectedRegion > m_ECLConnectedRegions
ECL connected regions.
double m_magnitudeOfMomentumWithoutMagneticField
Magnitude of cosmic tracks if magnetic field is not used.
std::string m_param_recoTracksStoreArrayName
StoreArray name from which to read the reco tracks.
bool m_usingMagneticField
Flag to using magnetic field during reconstruction.
StoreArray< KLMCluster > m_KLMClusters
KLM clusters.
std::string m_param_mergedRecoTracksStoreArrayName
StoreArray name where the merged reco track is written.
unsigned int m_minimumClusterSize
Minimal PXD cluster size for used PXD hits in cosmic track.
StoreArray< RecoTrack > m_RecoTracks
RecoTracks.
MergerCosmicTracksModule()
Create a new instance of the module.
StoreArray< RecoTrack > m_MergedRecoTracks
Merged RecoTracks.
Base class for Modules.
Definition: Module.h:72
void setDescription(const std::string &description)
Sets the description of the module.
Definition: Module.cc:214
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
Definition: Module.cc:208
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
Definition: Module.h:80
This is the Reconstruction Event-Data Model Track.
Definition: RecoTrack.h:79
std::vector< Belle2::RecoTrack::UsedSVDHit * > getSortedSVDHitList() const
Return a sorted list of svd hits. Sorted by the sortingParameter.
Definition: RecoTrack.h:467
bool addBKLMHit(const UsedBKLMHit *bklmHit, const unsigned int sortingParameter, OriginTrackFinder foundByTrackFinder=OriginTrackFinder::c_undefinedTrackFinder)
Adds a bklm hit with the given information to the reco track.
Definition: RecoTrack.h:286
bool addCDCHit(const UsedCDCHit *cdcHit, const unsigned int sortingParameter, RightLeftInformation rightLeftInformation=RightLeftInformation::c_undefinedRightLeftInformation, OriginTrackFinder foundByTrackFinder=OriginTrackFinder::c_undefinedTrackFinder)
Adds a cdc hit with the given information to the reco track.
Definition: RecoTrack.h:243
bool hasCDCHits() const
Returns true if the track has cdc hits.
Definition: RecoTrack.h:401
unsigned int getNumberOfBKLMHits() const
Return the number of bklm hits.
Definition: RecoTrack.h:430
bool addEKLMHit(const UsedEKLMHit *eklmHit, const unsigned int sortingParameter, OriginTrackFinder foundByTrackFinder=OriginTrackFinder::c_undefinedTrackFinder)
Adds an eklm hit with the given information to the reco track.
Definition: RecoTrack.h:300
bool addPXDHit(const UsedPXDHit *pxdHit, const unsigned int sortingParameter, OriginTrackFinder foundByTrackFinder=OriginTrackFinder::c_undefinedTrackFinder)
Adds a pxd hit with the given information to the reco track.
Definition: RecoTrack.h:258
std::vector< Belle2::RecoTrack::UsedCDCHit * > getSortedCDCHitList() const
Return a sorted list of cdc hits. Sorted by the sortingParameter.
Definition: RecoTrack.h:470
ROOT::Math::XYZVector getPositionSeed() const
Return the position seed stored in the reco track. ATTENTION: This is not the fitted position.
Definition: RecoTrack.h:480
std::vector< Belle2::RecoTrack::UsedEKLMHit * > getSortedEKLMHitList() const
Return a sorted list of eklm hits. Sorted by the sortingParameter.
Definition: RecoTrack.h:476
unsigned int getNumberOfEKLMHits() const
Return the number of eklm hits.
Definition: RecoTrack.h:433
unsigned int getNumberOfSVDHits() const
Return the number of svd hits.
Definition: RecoTrack.h:424
unsigned int getNumberOfCDCHits() const
Return the number of cdc hits.
Definition: RecoTrack.h:427
bool hasPXDHits() const
Returns true if the track has pxd hits.
Definition: RecoTrack.h:395
void setTimeSeed(const double timeSeed)
Set the time seed. ATTENTION: This is not the fitted time.
Definition: RecoTrack.h:604
bool hasEKLMHits() const
Returns true if the track has eklm hits.
Definition: RecoTrack.h:407
static void registerRequiredRelations(StoreArray< RecoTrack > &recoTracks, std::string const &pxdHitsStoreArrayName="", std::string const &svdHitsStoreArrayName="", std::string const &cdcHitsStoreArrayName="", std::string const &bklmHitsStoreArrayName="", std::string const &eklmHitsStoreArrayName="", std::string const &recoHitInformationStoreArrayName="")
Convenience method which registers all relations required to fully use a RecoTrack.
Definition: RecoTrack.cc:53
std::vector< Belle2::RecoTrack::UsedBKLMHit * > getSortedBKLMHitList() const
Return a sorted list of bklm hits. Sorted by the sortingParameter.
Definition: RecoTrack.h:473
std::vector< Belle2::RecoTrack::UsedPXDHit * > getSortedPXDHitList() const
Return a sorted list of pxd hits. Sorted by the sortingParameter.
Definition: RecoTrack.h:464
bool hasBKLMHits() const
Returns true if the track has bklm hits.
Definition: RecoTrack.h:404
short int getChargeSeed() const
Return the charge seed stored in the reco track. ATTENTION: This is not the fitted charge.
Definition: RecoTrack.h:508
ROOT::Math::XYZVector getMomentumSeed() const
Return the momentum seed stored in the reco track. ATTENTION: This is not the fitted momentum.
Definition: RecoTrack.h:487
unsigned int getNumberOfPXDHits() const
Return the number of pxd hits.
Definition: RecoTrack.h:421
bool addSVDHit(const UsedSVDHit *svdHit, const unsigned int sortingParameter, OriginTrackFinder foundByTrackFinder=OriginTrackFinder::c_undefinedTrackFinder)
Adds a svd hit with the given information to the reco track.
Definition: RecoTrack.h:272
double getTimeSeed() const
Return the time seed stored in the reco track. ATTENTION: This is not the fitted time.
Definition: RecoTrack.h:511
bool hasSVDHits() const
Returns true if the track has svd hits.
Definition: RecoTrack.h:398
Class for type safe access to objects that are referred to in relations.
size_t size() const
Get number of relations.
bool isRequired(const std::string &name="")
Ensure this array/object has been registered previously.
bool registerInDataStore(DataStore::EStoreFlags storeFlags=DataStore::c_WriteOut)
Register the object/array in the DataStore.
Accessor to arrays stored in the data store.
Definition: StoreArray.h:113
T * appendNew()
Construct a new T object at the end of the array.
Definition: StoreArray.h:246
int getEntries() const
Get the number of objects in the array.
Definition: StoreArray.h:216
Class that bundles various TrackFitResults.
Definition: Track.h:25
static GeoCache & getInstance()
Return a reference to the singleton instance.
Definition: GeoCache.cc:214
void addParam(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
Definition: Module.h:560
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:650
Abstract base class for different kinds of events.