Belle II Software development
CDCMCTrackStore Class Reference

Class to organize and present the monte carlo hit information. More...

#include <CDCMCTrackStore.h>

Public Types

using CDCHitVector = std::vector<const CDCHit*>
 Type for an ordered sequence of pointers to the CDCHit.
 

Public Member Functions

 CDCMCTrackStore ()=default
 Default constructor - for cppcheck.
 
 CDCMCTrackStore (CDCMCTrackStore &)=delete
 Singleton: Delete copy constructor and assignment operator.
 
CDCMCTrackStoreoperator= (const CDCMCTrackStore &)=delete
 Operator =.
 
void clear ()
 Clear all Monte Carlo hits.
 
void fill (const CDCMCMap *ptrMCMap, const CDCSimHitLookUp *ptrSimHitLookUp)
 Fill the store with the tracks from Monte Carlo information.
 
const std::map< ITrackType, Belle2::TrackFindingCDC::CDCMCTrackStore::CDCHitVector > & getMCTracksByMCParticleIdx () const
 Getter for the stored Monte Carlo tracks ordered by their Monte Carlo Id.
 
const std::map< ITrackType, std::vector< Belle2::TrackFindingCDC::CDCMCTrackStore::CDCHitVector > > & getMCSegmentsByMCParticleIdx () const
 Getter for the stored Monte Carlo segments ordered by their Monte Carlo Id.
 
TrackingUtilities::Index getInTrackId (const CDCHit *ptrHit) const
 Getter for the index of the hit within its track.
 
TrackingUtilities::Index getInTrackSegmentId (const CDCHit *ptrHit) const
 Getter for the index of the segment of the hit within its track.
 
TrackingUtilities::Index getNPassedSuperLayers (const CDCHit *ptrHit) const
 Getter for the number of super layers traversed until this hit.
 
TrackingUtilities::Index getNLoops (const CDCHit *ptrHit) const
 Getter for the number of traversed loops until this hit.
 

Static Public Member Functions

static const CDCMCTrackStoregetInstance ()
 Getter for the singletone instance.
 

Private Member Functions

void fillMCTracks ()
 Construct the tracks by grouping the hits by the mc particle id and sorted them for the FlightTime of the related CDCSimHits.
 
void fillMCSegments ()
 Construct the segments by dividing the mc tracks in to disconnected parts and sorted them for the FlightTime of the related CDCSimHits.
 
void arrangeMCTrack (CDCHitVector &mcTrack) const
 Sorts the given track for the FlightTime of the associated CDCSimHits.
 
void fillInTrackId ()
 Fill the look up table for the in track index of each hit.
 
void fillInTrackSegmentId ()
 Fill the look up table for the in track segment index of each hit.
 
void fillNLoopsAndNPassedSuperLayers ()
 Fill the look up table of the number of traversed super layers until each hit.
 
bool changedSuperLayer (const CDCHitVector &mcSegment, const CDCHitVector &nextMCSegment) const
 Helper function to decide whether the number of passed superlayers changed from one segment to the next.
 

Private Attributes

const CDCMCMapm_ptrMCMap
 Reference to the MC map of the current event.
 
const CDCSimHitLookUpm_ptrSimHitLookUp
 Reference to the CDCSimHit look up for additional information about related primary sim hits.
 
std::map< ITrackType, CDCHitVectorm_mcTracksByMCParticleIdx
 The memory for the tracks made of CDCHits sorted for the time of flight and associated to the Monte Carlo particle id.
 
std::map< ITrackType, std::vector< CDCHitVector > > m_mcSegmentsByMCParticleIdx
 The memory for the segments made of CDCHits sorted for the time of flight and associated to the Monte Carlo particle id.
 
std::map< const CDCHit *, int > m_inTrackIds
 Look up table for index of the hit within its track.
 
std::map< const CDCHit *, int > m_inTrackSegmentIds
 Look up table for index of the segment of the hits within their respective tracks.
 
std::map< const CDCHit *, int > m_nPassedSuperLayers
 Look up table for the number of super layers the particle traversed before making the individual hit.
 
std::map< const CDCHit *, int > m_nLoops
 Look up table for the number of loops the particle traversed before making the individual hit.
 

Detailed Description

Class to organize and present the monte carlo hit information.

Definition at line 28 of file CDCMCTrackStore.h.

Member Typedef Documentation

◆ CDCHitVector

using CDCHitVector = std::vector<const CDCHit*>

Type for an ordered sequence of pointers to the CDCHit.

Definition at line 32 of file CDCMCTrackStore.h.

Member Function Documentation

◆ arrangeMCTrack()

void arrangeMCTrack ( CDCHitVector & mcTrack) const
private

Sorts the given track for the FlightTime of the associated CDCSimHits.

Sort with NaN as high.

Definition at line 238 of file CDCMCTrackStore.cc.

239{
240 if (not m_ptrMCMap) {
241 B2WARNING("CDCMCMap not set. Cannot sort track");
242 return;
243 }
244
245 const CDCSimHitLookUp& simHitLookUp = *m_ptrSimHitLookUp;
246
247 std::stable_sort(mcTrack.begin(), mcTrack.end(),
248 [&simHitLookUp](const CDCHit * ptrHit, const CDCHit * ptrOtherHit) -> bool {
249
250 const CDCSimHit* ptrSimHit = simHitLookUp.getClosestPrimarySimHit(ptrHit);
251 const CDCSimHit* ptrOtherSimHit = simHitLookUp.getClosestPrimarySimHit(ptrOtherHit);
252
253 if (not ptrSimHit)
254 {
255 B2FATAL("No CDCSimHit for CDCHit");
256 }
257
258 if (not ptrOtherSimHit)
259 {
260 B2FATAL("No CDCSimHit for CDCHit");
261 }
262
263 double secondaryFlightTime = ptrSimHit->getFlightTime();
264 double otherSecondaryFlightTime = ptrOtherSimHit->getFlightTime();
265
267 return (secondaryFlightTime < std::fmin(INFINITY, otherSecondaryFlightTime));
268 });
269
270}
const CDCSimHitLookUp * m_ptrSimHitLookUp
Reference to the CDCSimHit look up for additional information about related primary sim hits.
const CDCMCMap * m_ptrMCMap
Reference to the MC map of the current event.

◆ changedSuperLayer()

bool changedSuperLayer ( const CDCHitVector & mcSegment,
const CDCHitVector & nextMCSegment ) const
private

Helper function to decide whether the number of passed superlayers changed from one segment to the next.

The number of passed superlayers is easily detectable in a switch of the superlayer number form one segment to the next. An exception to this rule happens were particles are curling back exiting the super layer 0 and reentering the CDC super layer 0. There is no change of super layer number in this case since consecutive segments (only looking at the CDC) have the super layer number 0. Since this case would screw the evaluation of segment pair or triple selection we have to treat it separately.

Definition at line 344 of file CDCMCTrackStore.cc.

345{
346 const CDCSimHitLookUp& simHitLookUp = *m_ptrSimHitLookUp;
347 const CDCHit* ptrHit = mcSegment.front();
348 const CDCHit* ptrNextHit = nextMCSegment.front();
349
350 assert(ptrHit);
351 assert(ptrNextHit);
352
353 const CDCHit& hit = *ptrHit;
354 const CDCHit& nextHit = *ptrNextHit;
355
356 if (hit.getISuperLayer() != nextHit.getISuperLayer()) {
357 return true;
358 } else if (hit.getISuperLayer() == 0) {
359 const CDCSimHit* ptrSimHit = simHitLookUp.getClosestPrimarySimHit(ptrHit);
360 const CDCSimHit* ptrNextSimHit = simHitLookUp.getClosestPrimarySimHit(ptrNextHit);
361
362 Vector3D pos(ptrSimHit->getPosTrack());
363 Vector3D mom(ptrSimHit->getMomentum());
364 Vector3D nextMom(ptrNextSimHit->getMomentum());
365 Vector3D nextPos(ptrNextSimHit->getPosTrack());
366
367 if (pos.dotXY(nextPos) < 0) return true;
368 if ((nextPos - pos).dotXY(nextMom) < 0) return true;
369 if ((nextPos - pos).dotXY(mom) < 0) return true;
370
371 // TODO introduce a smarter check here
372 return false;
373 } else {
374 return false;
375 }
376}
unsigned short getISuperLayer() const
Getter for iSuperLayer.
Definition CDCHit.h:184
B2Vector3D getPosTrack() const
The method to get position on the track.
Definition CDCSimHit.h:216
B2Vector3D getMomentum() const
The method to get momentum.
Definition CDCSimHit.h:192
TrackingUtilities::MayBePtr< const CDCSimHit > getClosestPrimarySimHit(const CDCSimHit *ptrSimHit) const
Helper function to find the closest primary hit for the given CDCSimHit from the same MCParticle - nu...
HepGeom::Vector3D< double > Vector3D
3D Vector
Definition Cell.h:34

◆ clear()

void clear ( )

Clear all Monte Carlo hits.

Definition at line 36 of file CDCMCTrackStore.cc.

37{
38
39 B2DEBUG(29, "In CDCMCTrackStore::clear()");
40
41 m_ptrMCMap = nullptr;
42
45
46 m_inTrackIds.clear();
47 m_inTrackSegmentIds.clear();
49 m_nLoops.clear();
50
51}
std::map< const CDCHit *, int > m_inTrackIds
Look up table for index of the hit within its track.
std::map< ITrackType, std::vector< CDCHitVector > > m_mcSegmentsByMCParticleIdx
The memory for the segments made of CDCHits sorted for the time of flight and associated to the Monte...
std::map< const CDCHit *, int > m_nPassedSuperLayers
Look up table for the number of super layers the particle traversed before making the individual hit.
std::map< const CDCHit *, int > m_nLoops
Look up table for the number of loops the particle traversed before making the individual hit.
std::map< const CDCHit *, int > m_inTrackSegmentIds
Look up table for index of the segment of the hits within their respective tracks.
std::map< ITrackType, CDCHitVector > m_mcTracksByMCParticleIdx
The memory for the tracks made of CDCHits sorted for the time of flight and associated to the Monte C...

◆ fill()

void fill ( const CDCMCMap * ptrMCMap,
const CDCSimHitLookUp * ptrSimHitLookUp )

Fill the store with the tracks from Monte Carlo information.

It uses the CDCMCMap to construct the Monte Carlo tracks.

Definition at line 55 of file CDCMCTrackStore.cc.

56{
57
58 B2DEBUG(29, "In CDCMCTrackStore::fill()");
59 clear();
60
61 m_ptrMCMap = ptrMCMap;
62 m_ptrSimHitLookUp = ptrSimHitLookUp;
63
64 // Put the right hits into the right track
66
67 // Split the tracks into segments
69
70 // Assign the reverse mapping from CDCHits to position in track
72
73 // Assigns the reverse mapping from CDCHits to segment ids
75
76 // Assigns the reverse mapping from CDCHits to the number of already traversed superlayers
78
79 B2DEBUG(28, "m_mcTracksByMCParticleIdx.size(): " << m_mcTracksByMCParticleIdx.size());
80 B2DEBUG(28, "m_mcSegmentsByMCParticleIdx.size(): " << m_mcSegmentsByMCParticleIdx.size());
81
82 B2DEBUG(28, "m_inTrackIds.size(): " << m_inTrackIds.size());
83 B2DEBUG(28, "m_inTrackSegmentIds.size() " << m_inTrackSegmentIds.size());
84 B2DEBUG(28, "m_nPassedSuperLayers.size(): " << m_nPassedSuperLayers.size());
85 B2DEBUG(28, "m_nLoops.size(): " << m_nLoops.size());
86
87}
void fillMCTracks()
Construct the tracks by grouping the hits by the mc particle id and sorted them for the FlightTime of...
void fillNLoopsAndNPassedSuperLayers()
Fill the look up table of the number of traversed super layers until each hit.
void clear()
Clear all Monte Carlo hits.
void fillInTrackId()
Fill the look up table for the in track index of each hit.
void fillMCSegments()
Construct the segments by dividing the mc tracks in to disconnected parts and sorted them for the Fli...
void fillInTrackSegmentId()
Fill the look up table for the in track segment index of each hit.

◆ fillInTrackId()

void fillInTrackId ( )
private

Fill the look up table for the in track index of each hit.

Definition at line 277 of file CDCMCTrackStore.cc.

278{
279
280 for (const std::pair<ITrackType, CDCHitVector> mcTrackAndMCParticleIdx : getMCTracksByMCParticleIdx()) {
281
282 const CDCHitVector& mcTrack = mcTrackAndMCParticleIdx.second;
283
284 //Fill the in track ids
285 int iHit = -1;
286 for (const CDCHit* ptrHit : mcTrack) {
287 ++iHit;
288 m_inTrackIds[ptrHit] = iHit;
289 }
290 }
291
292}
std::vector< const CDCHit * > CDCHitVector
Type for an ordered sequence of pointers to the CDCHit.
const std::map< ITrackType, Belle2::TrackFindingCDC::CDCMCTrackStore::CDCHitVector > & getMCTracksByMCParticleIdx() const
Getter for the stored Monte Carlo tracks ordered by their Monte Carlo Id.

◆ fillInTrackSegmentId()

void fillInTrackSegmentId ( )
private

Fill the look up table for the in track segment index of each hit.

Definition at line 294 of file CDCMCTrackStore.cc.

295{
296 for (const std::pair<ITrackType, std::vector<CDCHitVector> > mcSegmentsAndMCParticleIdx : getMCSegmentsByMCParticleIdx()) {
297 const std::vector<CDCHitVector>& mcSegments = mcSegmentsAndMCParticleIdx.second;
298
299 int iSegment = -1;
300 for (const CDCHitVector& mcSegment : mcSegments) {
301 ++iSegment;
302 for (const CDCHit* ptrHit : mcSegment) {
303
304 m_inTrackSegmentIds[ptrHit] = iSegment;
305 }
306 }
307 }
308
309}
const std::map< ITrackType, std::vector< Belle2::TrackFindingCDC::CDCMCTrackStore::CDCHitVector > > & getMCSegmentsByMCParticleIdx() const
Getter for the stored Monte Carlo segments ordered by their Monte Carlo Id.

◆ fillMCSegments()

void fillMCSegments ( )
private

Construct the segments by dividing the mc tracks in to disconnected parts and sorted them for the FlightTime of the related CDCSimHits.

Definition at line 124 of file CDCMCTrackStore.cc.

125{
126 for (std::pair<const ITrackType, CDCHitVector>& mcTrackAndMCParticleIdx : m_mcTracksByMCParticleIdx) {
127
128 ITrackType mcParticleIdx = mcTrackAndMCParticleIdx.first;
129 CDCHitVector& mcTrack = mcTrackAndMCParticleIdx.second;
130
131 if (mcTrack.empty()) continue;
132 std::vector<CDCHitVector>& mcSegments = m_mcSegmentsByMCParticleIdx[mcParticleIdx];
133 mcSegments.clear();
134
135 // Split track into runs in the same superlayer
136 auto superLayerRanges = adjacent_groupby(mcTrack.begin(), mcTrack.end(), [](const CDCHit * hit) {
137 return hit->getISuperLayer();
138 });
139
140 std::vector<CDCHitVector> superLayerRuns;
141 for (const auto& superLayerRange : superLayerRanges) {
142 superLayerRuns.push_back({superLayerRange.begin(), superLayerRange.end()});
143 }
144
145 std::vector<std::vector<CDCHitVector>::iterator> smallSuperLayerRuns;
146 for (auto itSuperLayerRun = superLayerRuns.begin();
147 itSuperLayerRun != superLayerRuns.end();
148 ++itSuperLayerRun) {
149 if (itSuperLayerRun->size() < 3) smallSuperLayerRuns.push_back(itSuperLayerRun);
150 }
151
152 // Merge small run to an adjacent run
153 for (auto itSuperLayerRun : smallSuperLayerRuns) {
154 ISuperLayer iSL = itSuperLayerRun->front()->getISuperLayer();
155
156 // Look in both directions to adopt the hits in this small runs
157 auto itSuperLayerRunBefore = superLayerRuns.end();
158 int hitDistanceBefore = INT_MAX;
159 if (std::distance(superLayerRuns.begin(), itSuperLayerRun) >= 2) {
160 itSuperLayerRunBefore = itSuperLayerRun - 2;
161 if (itSuperLayerRunBefore->front()->getISuperLayer() == iSL) {
162 hitDistanceBefore = (itSuperLayerRunBefore - 1)->size();
163 } else {
164 itSuperLayerRunBefore = superLayerRuns.end();
165 }
166 }
167
168 auto itSuperLayerRunAfter = superLayerRuns.end();
169 int hitDistanceAfter = INT_MAX;
170 if (std::distance(itSuperLayerRun, superLayerRuns.end()) > 2) {
171 itSuperLayerRunAfter = itSuperLayerRun + 2;
172 if (itSuperLayerRunAfter->front()->getISuperLayer() == iSL) {
173 hitDistanceAfter = (itSuperLayerRunAfter + 1)->size();
174 } else {
175 itSuperLayerRunAfter = superLayerRuns.end();
176 }
177 }
178
179 auto itMergeSuperLayerRun = superLayerRuns.end();
180 bool mergeBefore = false;
181 if (hitDistanceBefore < hitDistanceAfter) {
182 itMergeSuperLayerRun = itSuperLayerRunBefore;
183 mergeBefore = true;
184 } else {
185 itMergeSuperLayerRun = itSuperLayerRunAfter;
186 mergeBefore = false;
187 }
188
189 if (itMergeSuperLayerRun == superLayerRuns.end()) continue;
190 else if (mergeBefore) {
191 itMergeSuperLayerRun->insert(itMergeSuperLayerRun->end(), itSuperLayerRun->begin(), itSuperLayerRun->end());
192 itSuperLayerRun->clear();
193 } else {
194 itMergeSuperLayerRun->insert(itMergeSuperLayerRun->begin(), itSuperLayerRun->begin(), itSuperLayerRun->end());
195 itSuperLayerRun->clear();
196 }
197 }
198
199 // Remove empty small runs
200 erase_remove_if(superLayerRuns, Size() == 0u);
201
202 // Concat the runs that are now in the same superlayer
203 auto mergeSameSuperLayer = [](CDCHitVector & lhs, CDCHitVector & rhs) {
204 if (lhs.empty() or rhs.empty()) return true;
205 if (lhs.front()->getISuperLayer() != rhs.front()->getISuperLayer()) return false;
206 lhs.insert(lhs.end(), rhs.begin(), rhs.end());
207 rhs.clear();
208 return true;
209 };
210 erase_unique(superLayerRuns, mergeSameSuperLayer);
211
212 // Now analyse the runs in turn and break them in the connected segments
213 for (const CDCHitVector& superLayerRun : superLayerRuns) {
214 const CDCWireTopology& wireTopology = CDCWireTopology::getInstance();
215 auto areNeighbors = [&wireTopology](const CDCHit * lhs, const CDCHit * rhs) {
216 WireID lhsWireID(lhs->getISuperLayer(), lhs->getILayer(), lhs->getIWire());
217 WireID rhsWireID(rhs->getISuperLayer(), rhs->getILayer(), rhs->getIWire());
218
219 return (wireTopology.arePrimaryNeighbors(lhsWireID, rhsWireID) or
220 wireTopology.areSeconaryNeighbors(lhsWireID, rhsWireID) or
221 lhsWireID == rhsWireID);
222 };
223
224 auto segmentRanges = unique_ranges(superLayerRun.begin(), superLayerRun.end(), areNeighbors);
225
226 for (const ConstVectorRange<const CDCHit*>& segmentRange : segmentRanges) {
227 mcSegments.emplace_back(segmentRange.begin(), segmentRange.end());
228 }
229 } // end for superLayerRuns
230
231 // Lets sort them along for the time of flight.
232 for (CDCHitVector& mcSegment : mcSegments) {
233 arrangeMCTrack(mcSegment);
234 }
235 } // End for mc track
236}
unsigned short getIWire() const
Getter for iWire.
Definition CDCHit.h:166
unsigned short getILayer() const
Getter for iLayer.
Definition CDCHit.h:172
bool arePrimaryNeighbors(const WireID &wireID, const WireID &otherWireID) const
Checks if two wires are primary neighbors.
bool areSeconaryNeighbors(const WireID &wireID, const WireID &otherWireID) const
Checks if two wires are secondary neighbors.
static CDCWireTopology & getInstance()
Getter for the singleton instance of the wire topology.
void arrangeMCTrack(CDCHitVector &mcTrack) const
Sorts the given track for the FlightTime of the associated CDCSimHits.
signed short ISuperLayer
The type of the layer and superlayer ids.
Definition ISuperLayer.h:24

◆ fillMCTracks()

void fillMCTracks ( )
private

Construct the tracks by grouping the hits by the mc particle id and sorted them for the FlightTime of the related CDCSimHits.

Definition at line 90 of file CDCMCTrackStore.cc.

91{
92 if (not m_ptrMCMap) {
93 B2WARNING("CDCMCMap not set. Cannot create tracks");
94 return;
95 }
96
97 const CDCMCMap& mcMap = *m_ptrMCMap;
98
99 for (const auto& relation : mcMap.getHitsByMCParticle()) {
100
101 const MCParticle* ptrMCParticle = std::get<const MCParticle* const>(relation);
102 const CDCHit* ptrHit = std::get<const CDCHit*>(relation);
103
104 if (not mcMap.isBackground(ptrHit) and ptrMCParticle) {
105
106 ITrackType mcParticleIdx = ptrMCParticle->getArrayIndex();
107 //Append hit to its own track
108 m_mcTracksByMCParticleIdx[mcParticleIdx].push_back(ptrHit);
109 }
110 }
111
112
113 //Sort the tracks along the time of flight
114 for (std::pair<const ITrackType, CDCHitVector>& mcTrackAndMCParticleIdx : m_mcTracksByMCParticleIdx) {
115
116 //int mcParticleIdx = mcTrackAndMCParticleIdx.first;
117 CDCHitVector& mcTrack = mcTrackAndMCParticleIdx.second;
118 arrangeMCTrack(mcTrack);
119
120 }
121
122}
bool isBackground(const CDCSimHit *simHit) const
Indicates if the CDCSimHit is considered background.
Definition CDCMCMap.cc:260
const std::multimap< const MCParticle *, const CDCHit * > & getHitsByMCParticle() const
Getter for the MCParticle -> CDCHit relations.
Definition CDCMCMap.h:140

◆ fillNLoopsAndNPassedSuperLayers()

void fillNLoopsAndNPassedSuperLayers ( )
private

Fill the look up table of the number of traversed super layers until each hit.

Definition at line 311 of file CDCMCTrackStore.cc.

312{
313
314 for (const std::pair<ITrackType, std::vector<CDCHitVector> > mcSegmentsAndMCParticleIdx : getMCSegmentsByMCParticleIdx()) {
315 const std::vector<CDCHitVector>& mcSegments = mcSegmentsAndMCParticleIdx.second;
316
317 const CDCHitVector* ptrLastMCSegment = nullptr;
318 int nPassedSuperLayers = 0;
319 int nLoops = 0;
320
321 for (const CDCHitVector& mcSegment : mcSegments) {
322 if (ptrLastMCSegment and changedSuperLayer(*ptrLastMCSegment, mcSegment)) {
323 ++nPassedSuperLayers;
324
325 // Increase the superlayer number if the track leaves the CDC for the inner volume.
326 // Feel free to do something smarter here.
327 if (ptrLastMCSegment->front()->getISuperLayer() == 0 and
328 mcSegment.front()->getISuperLayer() == 0) {
329 ++nLoops;
330 }
331 }
332
333 for (const CDCHit* ptrHit : mcSegment) {
334 m_nPassedSuperLayers[ptrHit] = nPassedSuperLayers;
335 m_nLoops[ptrHit] = nLoops;
336 }
337
338 ptrLastMCSegment = &mcSegment;
339
340 }
341 }
342}
bool changedSuperLayer(const CDCHitVector &mcSegment, const CDCHitVector &nextMCSegment) const
Helper function to decide whether the number of passed superlayers changed from one segment to the ne...

◆ getInstance()

const CDCMCTrackStore & getInstance ( )
static

Getter for the singletone instance.

Definition at line 30 of file CDCMCTrackStore.cc.

31{
33}
static const CDCMCTrackStore & getMCTrackStore()
Getter for the singleton instance of the CDCMCTrackStore.

◆ getInTrackId()

Index getInTrackId ( const CDCHit * ptrHit) const

Getter for the index of the hit within its track.

Definition at line 379 of file CDCMCTrackStore.cc.

380{
381
382 auto itFoundHit = m_inTrackIds.find(ptrHit);
383 return itFoundHit == m_inTrackIds.end() ? c_InvalidIndex : itFoundHit->second;
384
385}

◆ getInTrackSegmentId()

Index getInTrackSegmentId ( const CDCHit * ptrHit) const

Getter for the index of the segment of the hit within its track.

Definition at line 389 of file CDCMCTrackStore.cc.

390{
391
392 auto itFoundHit = m_inTrackSegmentIds.find(ptrHit);
393 return itFoundHit == m_inTrackSegmentIds.end() ? c_InvalidIndex : itFoundHit->second;
394
395}

◆ getMCSegmentsByMCParticleIdx()

const std::map< ITrackType, std::vector< Belle2::TrackFindingCDC::CDCMCTrackStore::CDCHitVector > > & getMCSegmentsByMCParticleIdx ( ) const
inline

Getter for the stored Monte Carlo segments ordered by their Monte Carlo Id.

Definition at line 64 of file CDCMCTrackStore.h.

66 { return m_mcSegmentsByMCParticleIdx;}

◆ getMCTracksByMCParticleIdx()

const std::map< ITrackType, Belle2::TrackFindingCDC::CDCMCTrackStore::CDCHitVector > & getMCTracksByMCParticleIdx ( ) const
inline

Getter for the stored Monte Carlo tracks ordered by their Monte Carlo Id.

Definition at line 60 of file CDCMCTrackStore.h.

61 { return m_mcTracksByMCParticleIdx;}

◆ getNLoops()

Index getNLoops ( const CDCHit * ptrHit) const

Getter for the number of traversed loops until this hit.

Definition at line 406 of file CDCMCTrackStore.cc.

407{
408
409 auto itFoundHit = m_nLoops.find(ptrHit);
410 return itFoundHit == m_nLoops.end() ? c_InvalidIndex : itFoundHit->second;
411
412}

◆ getNPassedSuperLayers()

Index getNPassedSuperLayers ( const CDCHit * ptrHit) const

Getter for the number of super layers traversed until this hit.

Definition at line 398 of file CDCMCTrackStore.cc.

399{
400
401 auto itFoundHit = m_nPassedSuperLayers.find(ptrHit);
402 return itFoundHit == m_nPassedSuperLayers.end() ? c_InvalidIndex : itFoundHit->second;
403
404}

Member Data Documentation

◆ m_inTrackIds

std::map<const CDCHit*, int> m_inTrackIds
private

Look up table for index of the hit within its track.

Definition at line 122 of file CDCMCTrackStore.h.

◆ m_inTrackSegmentIds

std::map<const CDCHit*, int> m_inTrackSegmentIds
private

Look up table for index of the segment of the hits within their respective tracks.

Definition at line 125 of file CDCMCTrackStore.h.

◆ m_mcSegmentsByMCParticleIdx

std::map<ITrackType, std::vector<CDCHitVector> > m_mcSegmentsByMCParticleIdx
private

The memory for the segments made of CDCHits sorted for the time of flight and associated to the Monte Carlo particle id.

Definition at line 119 of file CDCMCTrackStore.h.

◆ m_mcTracksByMCParticleIdx

std::map<ITrackType, CDCHitVector> m_mcTracksByMCParticleIdx
private

The memory for the tracks made of CDCHits sorted for the time of flight and associated to the Monte Carlo particle id.

Definition at line 116 of file CDCMCTrackStore.h.

◆ m_nLoops

std::map<const CDCHit*, int> m_nLoops
private

Look up table for the number of loops the particle traversed before making the individual hit.

Definition at line 131 of file CDCMCTrackStore.h.

◆ m_nPassedSuperLayers

std::map<const CDCHit*, int> m_nPassedSuperLayers
private

Look up table for the number of super layers the particle traversed before making the individual hit.

Definition at line 128 of file CDCMCTrackStore.h.

◆ m_ptrMCMap

const CDCMCMap* m_ptrMCMap
private

Reference to the MC map of the current event.

Definition at line 110 of file CDCMCTrackStore.h.

◆ m_ptrSimHitLookUp

const CDCSimHitLookUp* m_ptrSimHitLookUp
private

Reference to the CDCSimHit look up for additional information about related primary sim hits.

Definition at line 113 of file CDCMCTrackStore.h.


The documentation for this class was generated from the following files: