![]() |
Belle II Software
release-08-02-04
|
A QuadTreeProcessor for TrackHits. More...
#include <AxialHitQuadTreeProcessor.h>


Public Types | |
| using | Item = QuadTreeItem< const CDCWireHit > |
| The QuadTree will only see items of this type. | |
| using | QuadTree = QuadTreeNode< long, float, Item > |
| The used QuadTree. | |
| using | XSpan = typename QuadTree::XSpan |
| This pair describes the span in X for a node. | |
| using | YSpan = typename QuadTree::YSpan |
| This pair describes the span in Y for a node. | |
| using | XYSpans = std::pair< XSpan, YSpan > |
| This pair of spans describes the span of a node. | |
| using | QuadTreeChildren = typename QuadTree::Children |
| Alias for the QuadTree Children. | |
| using | CandidateReceiver = std::function< void(const std::vector< const CDCWireHit * > &, QuadTree *)> |
| This lambda function can be used for postprocessing. | |
Public Member Functions | |
| AxialHitQuadTreeProcessor (int lastLevel, int seedLevel, const XYSpans &ranges, PrecisionUtil::PrecisionFunction precisionFunction) | |
| Constructor. | |
| AxialHitQuadTreeProcessor (const Vector2D &localOrigin, const YSpan &curvSpan, const LookupTable< Vector2D > *cosSinLookupTable) | |
| Constructor for the quad tree processor used in the off-origin extension. More... | |
| void | drawHits (std::vector< const CDCWireHit * > hits, unsigned int color=46) const |
| Draw QuadTree node. | |
| void | drawNode (QuadTree *node) const |
| Draw QuadTree node. | |
| void | clear () |
| Delete all the QuadTreeItems in the tree and clear the tree. | |
| void | seed (const std::vector< const CDCWireHit * > &datas) |
| Fill in the items in the given vector. More... | |
| std::vector< const CDCWireHit * > | getAssignedItems () |
| Get items that have been assigned to the seed level The returned elements are unique even if items are assigned multiple times. | |
| void | fill (const CandidateReceiver &candidateReceiver, int nHitsThreshold) |
| Start filling the already created tree. More... | |
| void | fill (const CandidateReceiver &candidateReceiver, int nHitsThreshold, float yLimit) |
| Fill vector of QuadTree instances with hits. More... | |
| virtual void | afterFillDebugHook (QuadTreeChildren &children) |
| Override that function if you want to receive debug output whenever the children of a node are filled the first time Maybe you want to make some nice plots or statistics. | |
| const std::map< std::pair< long, float >, std::vector< Item * > > & | getDebugInformation () const |
| Return the debug information if collected. | |
Static Public Member Functions | |
| static const LookupTable< Vector2D > & | getCosSinLookupTable () |
| Get the standard lookup table containing equally spaces unit vectors (cos, sin) More... | |
| static std::vector< float > | createCurvBound (YSpan curvSpan, int lastLevel) |
| Constructs an array with the curvature bounds as generated by the default bin divisions. | |
Protected Member Functions | |
| bool | isLeaf (QuadTree *node) const final |
| lastLevel depends on curvature of the track candidate | |
| XYSpans | createChild (QuadTree *node, int i, int j) const final |
| Return the new ranges. More... | |
| bool | isInNode (QuadTree *node, const CDCWireHit *wireHit) const final |
| Check whether hit belongs to the quadtree node: More... | |
| bool | checkDerivative (QuadTree *node, const CDCWireHit *wireHit) const |
| Check derivative of the sinogram. More... | |
| bool | checkExtremum (QuadTree *node, const CDCWireHit *wireHit) const |
| Checks whether extremum point is located whithin QuadTree node's ranges. More... | |
| virtual XYSpans | createChild (QuadTree *node, int iX, int iY) const |
| Implement that function if you want to provide a new processor. More... | |
| virtual bool | isInNode (QuadTree *node, const CDCWireHit *item) const=0 |
| Implement that function if you want to provide a new processor. More... | |
| virtual bool | isLeaf (QuadTree *node) const |
| Function which checks if given node is leaf Implemented as virtual to keep possibility of changing lastLevel values depending on region is phase-space (i.e. More... | |
| int | getLastLevel () const |
| Return the parameter last level. | |
Protected Attributes | |
| std::unique_ptr< QuadTree > | m_quadTree |
| The quad tree we work with. | |
| std::deque< Item > | m_items |
| Storage space for the items that are referenced by the quad tree nodes. | |
| std::vector< QuadTree * > | m_seededTrees |
| Vector of QuadTrees QuadTree instances (which are filled in the vector) cover the whole Legendre phase-space; each instance is processes independently. | |
Private Member Functions | |
| void | fillGivenTree (QuadTree *node, const CandidateReceiver &candidateReceiver, int nItemsThreshold, float yLimit) |
| Internal function to do the real quad tree search: fill the nodes, check which of the n*m bins we need to process further and go one level deeper. | |
| void | createChildren (QuadTree *node, QuadTreeChildren &m_children) const |
| Creates the sub node of a given node. More... | |
| void | fillChildren (QuadTree *node, const std::vector< Item * > &items) |
| This function is called by fillGivenTree and fills the items into the corresponding children. More... | |
| void | callResultFunction (QuadTree *node, const CandidateReceiver &candidateReceiver) const |
| When a node is accepted as a result, we extract a vector with the items (back transformed to AData*) and pass it together with the result node to the candidate receiver function. | |
Private Attributes | |
| const LookupTable< Vector2D > * | m_cosSinLookupTable |
| Pinned lookup table for precompute cosine and sine values. | |
| Vector2D | m_localOrigin |
| Local origin on which the phase space coordinates are centered. | |
| bool | m_twoSidedPhaseSpace |
| Indicator whether the two sided phases space insertion check should be used This option should automatically split back to back tracks in the low curvature regions. | |
| const double | c_curlCurv = 0.02 |
| The curvature above which the trajectory is considered a curler. | |
| PrecisionUtil::PrecisionFunction | m_precisionFunction |
| Lambda which holds resolution function for the quadtree. | |
| int | m_lastLevel |
| The last level to be filled. | |
| int | m_seedLevel |
| The first level to be filled, effectively skip forward to this higher granularity level. | |
| bool | m_debugOutput |
| A flag to control the creation of the debug output. | |
| std::map< std::pair< long, float >, std::vector< Item * > > | m_debugOutputMap |
| The calculated debug map. | |
A QuadTreeProcessor for TrackHits.
Definition at line 26 of file AxialHitQuadTreeProcessor.h.
| AxialHitQuadTreeProcessor | ( | const Vector2D & | localOrigin, |
| const YSpan & | curvSpan, | ||
| const LookupTable< Vector2D > * | cosSinLookupTable | ||
| ) |
Constructor for the quad tree processor used in the off-origin extension.
Currently only used in zero level mode to collect hits that are in a phase space part with respect to the given point.
Definition at line 108 of file AxialHitQuadTreeProcessor.cc.
|
protected |
Check derivative of the sinogram.
| node | QuadTree node |
| wireHit | pointer to the hit to check |
Definition at line 261 of file AxialHitQuadTreeProcessor.cc.
|
protected |
Checks whether extremum point is located whithin QuadTree node's ranges.
| node | QuadTree node |
| wireHit | hit to check |
Definition at line 280 of file AxialHitQuadTreeProcessor.cc.
|
finalprotected |
Return the new ranges.
We do not use the standard ranges for the lower levels.
| node | quadtree node |
| i | theta index of the child |
| j | rho index of the child |
Definition at line 135 of file AxialHitQuadTreeProcessor.cc.
|
inlineprotectedvirtualinherited |
Implement that function if you want to provide a new processor.
It decides which node-spans the n * m children of the node should have. It is called when creating the nodes. The two indices iX and iY tell you where the new node will be created (as node.children[iX][iY]). You can check some information on the level or the x- or y-values by using the methods implemented for node.
Definition at line 311 of file QuadTreeProcessor.h.
|
inlineprivateinherited |
Creates the sub node of a given node.
This function is called by fillGivenTree. To calculate the spans of the children nodes the user-defined function createChiildWithParent is used.
Definition at line 249 of file QuadTreeProcessor.h.
|
inlineinherited |
Start filling the already created tree.
| candidateReceiver | the lambda function to call after a node was selected |
| nHitsThreshold | the threshold on the number of items |
Definition at line 168 of file QuadTreeProcessor.h.
|
inlineinherited |
Fill vector of QuadTree instances with hits.
| candidateReceiver | the lambda function to call after a node was selected |
| nHitsThreshold | the threshold on the number of items |
| yLimit | the threshold in the rho (curvature) variable |
Definition at line 179 of file QuadTreeProcessor.h.
This function is called by fillGivenTree and fills the items into the corresponding children.
For this the user-defined method isInNode is called.
Definition at line 265 of file QuadTreeProcessor.h.
|
static |
Get the standard lookup table containing equally spaces unit vectors (cos, sin)
It contains 2**16 + 1 sampling points between -pi and pi.
Definition at line 88 of file AxialHitQuadTreeProcessor.cc.
|
protectedpure virtualinherited |
Implement that function if you want to provide a new processor.
It is called when filling the quad tree after creation. For every item in a node and every child node this function gets called and should decide, if the item should go into this child node or not.
| node | child node |
| item | item to be filled into the child node or not |
|
finalprotected |
Check whether hit belongs to the quadtree node:
| node | quadtree node |
| wireHit | hit being checked |
Definition at line 193 of file AxialHitQuadTreeProcessor.cc.
|
inlineprotectedvirtualinherited |
Function which checks if given node is leaf Implemented as virtual to keep possibility of changing lastLevel values depending on region is phase-space (i.e.
setting lastLevel as a function of Y-variable)
Definition at line 334 of file QuadTreeProcessor.h.
|
inlineinherited |
Fill in the items in the given vector.
They are transformed to QuadTreeItems internally.
Definition at line 103 of file QuadTreeProcessor.h.