Belle II Software development
StereoHitTrackQuadTreeMatcher< AQuadTree > Class Template Referenceabstract

A matcher algorithm for using a stereo quad tree for matching rl tagged wire hits to tracks. More...

#include <StereoHitTrackQuadTreeMatcher.h>

Inheritance diagram for StereoHitTrackQuadTreeMatcher< AQuadTree >:
MatcherInterface< CDCTrack, CDCRLWireHit > Findlet< AIOTypes > CompositeProcessingSignalListener ProcessingSignalListener

Public Types

using WeightedRelationItem
 Shortcut class name for a weighted relation between a collector item and a collection item.
 
using IOTypes
 Types that should be served to apply on invocation.
 
using IOVectors
 Vector types that should be served to apply on invocation.
 

Public Member Functions

void exposeParameters (ModuleParamList *moduleParamList, const std::string &prefix) override
 Expose the parameters to the module.
 
void initialize () override
 Initialize the filter and the quad tree.
 
void terminate () override
 Terminate the filter and the quad tree.
 
void apply (std::vector< CDCTrack > &collectorItems, const std::vector< CDCRLWireHit > &collectionItems, std::vector< WeightedRelationItem > &weightedRelations) override
 Main function: create weighted relations between collectors and collection items using the implemented functionality overridden in a derived class.
 
void apply (std::vector< CDCTrack > &collectorItems, const std::vector< CDCRLWireHit > &collectionItems, std::vector< WeightedRelationItem > &weightedRelations) override
 Main function: create weighted relations between collectors and collection items using the implemented functionality overridden in a derived class.
 
virtual void apply (ToVector< AIOTypes > &... ioVectors)=0
 Main function executing the algorithm.
 
virtual void apply (ToVector< AIOTypes > &... ioVectors)=0
 Main function executing the algorithm.
 
virtual std::string getDescription ()
 Brief description of the purpose of the concrete findlet.
 
void beginRun () override
 Receive and dispatch signal for the beginning of a new run.
 
void beginEvent () override
 Receive and dispatch signal for the start of a new event.
 
void endRun () override
 Receive and dispatch signal for the end of the run.
 

Protected Types

using ToVector
 Short hand for ToRangeImpl.
 

Protected Member Functions

virtual void match (CDCTrack &collectorItem, const std::vector< CDCRLWireHit > &collectionItems, std::vector< WeightedRelationItem > &relationsForCollector)
 Override this function to implement your own matching algorithm between one collector and many collection items.
 
virtual Weight match (CDCTrack &collectorItem, const CDCRLWireHit &collectionItem)
 Override this function to implement your own matching algorithm between one collector and one collection items.
 
void addProcessingSignalListener (ProcessingSignalListener *psl)
 Register a processing signal listener to be notified.
 
int getNProcessingSignalListener ()
 Get the number of currently registered listeners.
 

Private Types

using Super = MatcherInterface<CDCTrack, CDCRLWireHit>
 The parent class.
 

Private Member Functions

void match (CDCTrack &track, const std::vector< CDCRLWireHit > &rlWireHits, std::vector< Super::WeightedRelationItem > &relationsForCollector) override
 Create a QuadTree and fill with each unused stereo hit (to be exact: twice for each stereo hit - right and left).
 
void writeDebugInformation ()
 Use the writeDebugInformation function of the quad tree to write the tree into a root file with a ascending number.
 

Private Attributes

double m_param_checkForInWireBoundsFactor = 1.0
 Parameters Set to false to skip the in-wire-bound check (good for second stage).
 
unsigned int m_param_quadTreeLevel = 7
 Maximum level of the quad tree search.
 
unsigned int m_param_minimumNumberOfHits = 5
 Minimal number of hits a quad tree node must have to be called a found bin.
 
bool m_param_checkForB2BTracks = true
 Set to false to skip the B2B check (good for curlers).
 
bool m_param_writeDebugInformation = false
 Set to true to output debug information.
 
unsigned int m_numberOfPassedDebugCalls = 0
 Store the number of passed calls to the debug function.
 
AQuadTree m_quadTreeInstance
 Quad tree instance.
 
std::vector< ProcessingSignalListener * > m_subordinaryProcessingSignalListeners
 References to subordinary signal processing listener contained in this findlet.
 
bool m_initialized
 Flag to keep track whether initialization happened before.
 
bool m_terminated
 Flag to keep track whether termination happened before.
 
std::string m_initializedAs
 Name of the type during initialisation.
 

Detailed Description

template<class AQuadTree>
class Belle2::TrackFindingCDC::StereoHitTrackQuadTreeMatcher< AQuadTree >

A matcher algorithm for using a stereo quad tree for matching rl tagged wire hits to tracks.

Definition at line 25 of file StereoHitTrackQuadTreeMatcher.h.

Member Typedef Documentation

◆ IOTypes

using IOTypes
inherited

Types that should be served to apply on invocation.

Definition at line 30 of file Findlet.h.

◆ IOVectors

using IOVectors
inherited

Vector types that should be served to apply on invocation.

Definition at line 53 of file Findlet.h.

◆ Super

template<class AQuadTree>
using Super = MatcherInterface<CDCTrack, CDCRLWireHit>
private

The parent class.

Definition at line 28 of file StereoHitTrackQuadTreeMatcher.h.

◆ ToVector

using ToVector
protectedinherited

Short hand for ToRangeImpl.

Definition at line 49 of file Findlet.h.

◆ WeightedRelationItem

using WeightedRelationItem
inherited

Shortcut class name for a weighted relation between a collector item and a collection item.

Definition at line 46 of file MatcherInterface.h.

Member Function Documentation

◆ addProcessingSignalListener()

void addProcessingSignalListener ( ProcessingSignalListener * psl)
protectedinherited

Register a processing signal listener to be notified.

Definition at line 53 of file CompositeProcessingSignalListener.cc.

56{
58}
Base class for a findlet, which outputs a list of weighted relations between elements in a list of Co...

◆ apply() [1/2]

void apply ( std::vector< CDCTrack > & collectorItems,
const std::vector< CDCRLWireHit > & collectionItems,
std::vector< WeightedRelationItem > & weightedRelations )
inlineoverrideinherited

Main function: create weighted relations between collectors and collection items using the implemented functionality overridden in a derived class.

Definition at line 52 of file MatcherInterface.h.

54 {
55 for (ACollectorItem& collectorItem : collectorItems) {
56 match(collectorItem, collectionItems, weightedRelations);
57 }
58
59 std::sort(weightedRelations.begin(), weightedRelations.end());
60 }

◆ apply() [2/2]

void apply ( std::vector< CDCTrack > & collectorItems,
const std::vector< CDCRLWireHit > & collectionItems,
std::vector< WeightedRelationItem > & weightedRelations )
inlineoverrideinherited

Main function: create weighted relations between collectors and collection items using the implemented functionality overridden in a derived class.

Definition at line 52 of file MatcherInterface.h.

54 {
55 for (ACollectorItem& collectorItem : collectorItems) {
56 match(collectorItem, collectionItems, weightedRelations);
57 }
58
59 std::sort(weightedRelations.begin(), weightedRelations.end());
60 }

◆ beginEvent()

void beginEvent ( )
overrideinherited

Receive and dispatch signal for the start of a new event.

Definition at line 36 of file CompositeProcessingSignalListener.cc.

32{
35 psl->beginEvent();
36 }
37}
void beginEvent() override
Receive and dispatch signal for the start of a new event.
virtual void beginEvent()
Receive signal for the start of a new event.

◆ beginRun()

void beginRun ( )
overrideinherited

Receive and dispatch signal for the beginning of a new run.

Definition at line 33 of file CompositeProcessingSignalListener.cc.

24{
27 psl->beginRun();
28 }
29}
void beginRun() override
Receive and dispatch signal for the beginning of a new run.
virtual void beginRun()
Receive signal for the beginning of a new run.

◆ endRun()

void endRun ( )
overrideinherited

Receive and dispatch signal for the end of the run.

Definition at line 39 of file CompositeProcessingSignalListener.cc.

40{
42 psl->endRun();
43 }
45}
void endRun() override
Receive and dispatch signal for the end of the run.
virtual void endRun()
Receive signal for the end of the run.

◆ exposeParameters()

template<class AQuadTree>
void exposeParameters ( ModuleParamList * moduleParamList,
const std::string & prefix )
overridevirtual

Expose the parameters to the module.

Reimplemented from CompositeProcessingSignalListener.

Definition at line 32 of file StereoHitTrackQuadTreeMatcher.cc.

34{
36
38 "The number of levels for the quad tree search.",
40
41 moduleParamList->addParameter(prefixed(prefix, "minimumNumberOfHits"), m_param_minimumNumberOfHits,
42 "The minimum number of hits in a quad tree bin to be called as result.",
44
45 moduleParamList->addParameter(prefixed(prefix, "writeDebugInformation"), m_param_writeDebugInformation,
46 "Set to true to output debug information.",
48
49 moduleParamList->addParameter(prefixed(prefix, "checkForB2BTracks"),
51 "Set to false to skip the check for back-2-back tracks "
52 "(good for cosmics).",
54
55 moduleParamList->addParameter(prefixed(prefix, "checkForInWireBoundsFactor"),
57 "Used to scale the CDC before checking "
58 "whether hits are in the CDC z bounds.",
60}
virtual void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix)
A matcher algorithm for using a stereo quad tree for matching rl tagged wire hits to tracks.
bool m_param_checkForB2BTracks
Set to false to skip the B2B check (good for curlers).
bool m_param_writeDebugInformation
Set to true to output debug information.
unsigned int m_param_minimumNumberOfHits
Minimal number of hits a quad tree node must have to be called a found bin.
double m_param_checkForInWireBoundsFactor
Parameters Set to false to skip the in-wire-bound check (good for second stage).
unsigned int m_param_quadTreeLevel
Maximum level of the quad tree search.

◆ getDescription()

virtual std::string getDescription ( )
inlinevirtualinherited

Brief description of the purpose of the concrete findlet.

Definition at line 60 of file Findlet.h.

61 {
62 return "(no description)";
63 }

◆ getNProcessingSignalListener()

int getNProcessingSignalListener ( )
protectedinherited

Get the number of currently registered listeners.

Definition at line 56 of file CompositeProcessingSignalListener.cc.

61{
63}

◆ initialize()

template<class AQuadTree>
void initialize ( )
overridevirtual

Initialize the filter and the quad tree.

Reimplemented from CompositeProcessingSignalListener.

Definition at line 64 of file StereoHitTrackQuadTreeMatcher.cc.

◆ match() [1/3]

virtual Weight match ( CDCTrack & collectorItem,
const CDCRLWireHit & collectionItem )
inlineprotectedvirtualinherited

Override this function to implement your own matching algorithm between one collector and one collection items.

If you override this function, you just have to return a weight - the rest of the logic is handled by the MatcherInterface class.

Definition at line 82 of file MatcherInterface.h.

84 {
85 return NAN;
86 }

◆ match() [2/3]

virtual void match ( CDCTrack & collectorItem,
const std::vector< CDCRLWireHit > & collectionItems,
std::vector< WeightedRelationItem > & relationsForCollector )
inlineprotectedvirtualinherited

Override this function to implement your own matching algorithm between one collector and many collection items.

A reason to override this instead of the other match function could be, if you want to apply some sort of caching for each collector item.

Definition at line 68 of file MatcherInterface.h.

70 {
71 for (const ACollectionItem& collectionItem : collectionItems) {
72 Weight weight = match(collectorItem, collectionItem);
73 relationsForCollector.emplace_back(&collectorItem, weight, &collectionItem);
74 }
75 };

◆ match() [3/3]

template<class AQuadTree>
void match ( CDCTrack & track,
const std::vector< CDCRLWireHit > & rlWireHits,
std::vector< Super::WeightedRelationItem > & relationsForCollector )
overrideprivate

Create a QuadTree and fill with each unused stereo hit (to be exact: twice for each stereo hit - right and left).

The QuadTree has two dimensions: inverse slope in z-direction and z0. Each bin with a high number of items (= stereo hits) in it is stored. Later, the one node with the highest number of items in it is taken and each hit is assigned to the track.

Definition at line 82 of file StereoHitTrackQuadTreeMatcher.cc.

84{
85 // TODO: Extract this into smaller steps
86 // TODO: Split the filtering from the rest.
87 // This means this method would output WeightedRelations based on the quad tree decision and a second filter step
88 // can be applied on these weighted relations
89
90 // Reconstruct the hits to the track
91 const CDCTrajectory2D& trajectory2D = track.getStartTrajectory3D().getTrajectory2D();
92 const bool isCurler = trajectory2D.isCurler();
93
96 recoHits.reserve(rlWireHits.size() + track.size());
97
98 /*
99 * Use the given trajectory to reconstruct the 2d hits in the vector in z direction
100 * to match the trajectory perfectly. Then add the newly created reconstructed 3D hit to the given list.
101 */
102 for (const CDCRLWireHit& rlWireHit : rlWireHits) {
103 if (rlWireHit.getWireHit().getAutomatonCell().hasTakenFlag()) continue;
104
105 const CDCWire& wire = rlWireHit.getWire();
106 const WireLine& wireLine = wire.getWireLine();
107 double signedDriftLength = rlWireHit.getSignedRefDriftLength();
108 for (const Vector3D& recoPos3D : trajectory2D.reconstructBoth3D(wireLine, signedDriftLength)) {
109 // Skip hits out of CDC
111 continue;
112 }
113
114 // If the track is a curler, shift all perpS values to positive ones.
115 // Else do not use this hit if m_param_checkForB2BTracks is enabled.
116 double perpS = trajectory2D.calcArcLength2D(recoPos3D.xy());
117 if (perpS < 0) {
118 if (isCurler) {
119 perpS += trajectory2D.getArcLength2DPeriod();
120 } else if (m_param_checkForB2BTracks) {
121 continue;
122 }
123 }
125 }
126 }
127
128 // Also add already found stereo hits of the track
129 for (const CDCRecoHit3D& recoHit : track) {
130 if (not recoHit.isAxial()) {
131 recoHit.getWireHit().getAutomatonCell().setAssignedFlag();
132 const CDCRLWireHit& rlWireHit = recoHit.getRLWireHit();
133 recoHits.emplace_back(recoHit, &rlWireHit);
134 }
135 }
136
137 // Do the tree finding
139
142 }
143
145 m_quadTreeInstance.fell();
146
147 if (foundStereoHitsWithNode.size() != 1) {
148 return;
149 }
150
151 // There is the possibility that we have added one cdc hits twice (as left and right one). We search for those cases here:
153 const auto& node = foundStereoHitsWithNode[0].first;
154
158 // Turn vector of pairs into vector of first items
160 const CDCRecoHit3D& recoHit3D = recoHitWithRL.first;
161 allHits.push_back(recoHit3D);
162 }
164 const CDCRecoHit3D& recoHit3D = recoHitWithRL.first;
165 foundHits.push_back(recoHit3D);
166 }
167 m_quadTreeInstance.drawDebugPlot(allHits, foundHits, node);
168 }
169
170 // Remove all assigned hits, which where already found before (and do not need to be added again)
173 const auto& automatonCell = recoHit3D.getWireHit().getAutomatonCell();
174 return automatonCell.hasAssignedFlag();
175 };
176
178 foundStereoHits.end(),
180 foundStereoHits.end());
181
182 // Sort the found stereo hits by same CDCHit and smaller distance to the node
185
186
187 const CDCRecoHit3D& rhsRecoHit = rhs.first;
188 const CDCRecoHit3D& lhsRecoHit = lhs.first;
189
190 const CDCWireHit& rhsWireHit = rhsRecoHit.getWireHit();
191 const CDCWireHit& lhsWireHit = lhsRecoHit.getWireHit();
192
193 if (lhsWireHit < rhsWireHit) {
194 return true;
195 } else if (rhsWireHit < lhsWireHit) {
196 return false;
197 } else {
199 }
200 };
201
202 const auto& sameHitComparer = [](const CDCRecoHitWithRLPointer & lhs,
204 const CDCRecoHit3D& rhsRecoHit = rhs.first;
205 const CDCRecoHit3D& lhsRecoHit = lhs.first;
206
207 return lhsRecoHit.getWireHit() == rhsRecoHit.getWireHit();
208 };
209
211 foundStereoHits.end(),
213
214 // If the same hit is added as right and left hypothesis, do only use the one with the smaller distance to the node.
216 foundStereoHits.end(),
218 foundStereoHits.end());
219
220 // Add the found stereo hits to the relation vector. In the moment, all hits get the same weight (may change later).
224 }
225}
void writeDebugInformation()
Use the writeDebugInformation function of the quad tree to write the tree into a root file with a asc...

◆ terminate()

template<class AQuadTree>
void terminate ( )
overridevirtual

Terminate the filter and the quad tree.

Reimplemented from CompositeProcessingSignalListener.

Definition at line 74 of file StereoHitTrackQuadTreeMatcher.cc.

◆ writeDebugInformation()

template<class AQuadTree>
void writeDebugInformation ( )
private

Use the writeDebugInformation function of the quad tree to write the tree into a root file with a ascending number.

Definition at line 228 of file StereoHitTrackQuadTreeMatcher.cc.

229{
230 std::string outputFileName = "quadTreeContent_call_" + std::to_string(m_numberOfPassedDebugCalls) + ".root";
231 m_quadTreeInstance.writeDebugInfoToFile(outputFileName);
232
234}
unsigned int m_numberOfPassedDebugCalls
Store the number of passed calls to the debug function.

Member Data Documentation

◆ m_initialized

bool m_initialized
privateinherited

Flag to keep track whether initialization happened before.

Definition at line 52 of file ProcessingSignalListener.h.

◆ m_initializedAs

std::string m_initializedAs
privateinherited

Name of the type during initialisation.

Definition at line 58 of file ProcessingSignalListener.h.

◆ m_numberOfPassedDebugCalls

template<class AQuadTree>
unsigned int m_numberOfPassedDebugCalls = 0
private

Store the number of passed calls to the debug function.

Definition at line 66 of file StereoHitTrackQuadTreeMatcher.h.

◆ m_param_checkForB2BTracks

template<class AQuadTree>
bool m_param_checkForB2BTracks = true
private

Set to false to skip the B2B check (good for curlers).

Definition at line 61 of file StereoHitTrackQuadTreeMatcher.h.

◆ m_param_checkForInWireBoundsFactor

template<class AQuadTree>
double m_param_checkForInWireBoundsFactor = 1.0
private

Parameters Set to false to skip the in-wire-bound check (good for second stage).

Definition at line 55 of file StereoHitTrackQuadTreeMatcher.h.

◆ m_param_minimumNumberOfHits

template<class AQuadTree>
unsigned int m_param_minimumNumberOfHits = 5
private

Minimal number of hits a quad tree node must have to be called a found bin.

Definition at line 59 of file StereoHitTrackQuadTreeMatcher.h.

◆ m_param_quadTreeLevel

template<class AQuadTree>
unsigned int m_param_quadTreeLevel = 7
private

Maximum level of the quad tree search.

Definition at line 57 of file StereoHitTrackQuadTreeMatcher.h.

◆ m_param_writeDebugInformation

template<class AQuadTree>
bool m_param_writeDebugInformation = false
private

Set to true to output debug information.

Definition at line 63 of file StereoHitTrackQuadTreeMatcher.h.

◆ m_quadTreeInstance

template<class AQuadTree>
AQuadTree m_quadTreeInstance
private

Quad tree instance.

Definition at line 69 of file StereoHitTrackQuadTreeMatcher.h.

◆ m_subordinaryProcessingSignalListeners

std::vector<ProcessingSignalListener*> m_subordinaryProcessingSignalListeners
privateinherited

References to subordinary signal processing listener contained in this findlet.

Definition at line 60 of file CompositeProcessingSignalListener.h.

◆ m_terminated

bool m_terminated
privateinherited

Flag to keep track whether termination happened before.

Definition at line 55 of file ProcessingSignalListener.h.


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