Belle II Software  release-05-02-19
DATCONTrackingModule.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2013 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Michael Schnell, Christian Wessel *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #pragma once
12 
13 #include <tracking/modules/DATCON/DATCONTrackCand.h>
14 #include <tracking/modules/DATCON/DATCONHoughCand.h>
15 #include <tracking/modules/DATCON/DATCONHoughSpaceClusterCand.h>
16 #include <tracking/dataobjects/DATCONSVDSpacePoint.h>
17 #include <tracking/dataobjects/DATCONTrack.h>
18 #include <tracking/dataobjects/DATCONSVDDigit.h>
19 
20 #include <tracking/spacePointCreation/SpacePoint.h>
21 #include <tracking/dataobjects/RecoTrack.h>
22 
23 #include <framework/core/Module.h>
24 #include <framework/datastore/StoreArray.h>
25 
26 #include <mdst/dataobjects/MCParticle.h>
27 
28 #include <root/TVector2.h>
29 #include <root/TVector3.h>
30 
31 #include <svd/dataobjects/SVDCluster.h>
32 
33 #include <vxd/dataobjects/VxdID.h>
34 
35 
36 namespace Belle2 {
58  typedef std::pair<VxdID, TVector3> svdHitPair;
60  typedef std::map<int, svdHitPair> svdHitMap;
63  typedef std::pair<VxdID, TVector2> houghPair;
65  typedef std::map<int, houghPair> houghMap;
66 
71  class DATCONTrackingModule : public Module {
72  public:
75 
77  virtual ~DATCONTrackingModule() = default;
78 
80  virtual void initialize() override;
82  virtual void event() override;
84  virtual void terminate() override;
85 
87  void addParameter();
88 
91 
93  void prepareSVDSpacePoints();
94 
96  void houghTrafo2d(svdHitMap& mapClusters, bool u_side);
97 
104  int fastInterceptFinder2d(houghMap& hits, bool u_side, TVector2 v1_s,
105  TVector2 v2_s, TVector2 v4_s,
106  unsigned int iterations, unsigned int maxIterations);
111  int slowInterceptFinder2d(houghMap& hits, bool u_side);
112 
114  void FindHoughSpaceCluster(bool u_side);
115 
120  void DepthFirstSearch(bool u_side, int** ArrayOfActiveHoughSpaceSectors, int angleSectors, int vertSectors,
121  int actualPositionX, int actualPositionY,
122  std::vector<unsigned int>& mergedList);
123 
125  bool layerFilter(bool* layer);
126 
127  /* Functions to purify track candidates */
131  void purifyTrackCandsList();
132 
134  bool compareList(std::vector<unsigned int>& aList, std::vector<unsigned int>& bList);
135 
140  void mergeIdList(std::vector<unsigned int>& mergedList, std::vector<unsigned int>& mergeme);
141 
145  void trackCandMerger();
146 
150  void trackMerger();
151 
156  void findandcombine3d();
157 
159  void saveHitsToRecoTrack(std::vector<unsigned int>& idList, TVector3 momentum);
160 
161 
162  protected:
163 
168  std::string m_storeMCParticlesName;
170  std::string m_storeSVDSpacePointsName;
172  std::string m_storeDATCONSVDDigitsName;
174  std::string m_storeDATCONSVDClusterName;
183 
188 
195 
202 
203  // 2. Use DATCONSpacePoints or SVDSpacePoints?
208 
209  // 3. Hough Trafo Parameter
217  unsigned short m_minimumLines;
219  int m_maxIterationsU;
222 
232  int m_nAngleSectorsU;
234  int m_nAngleSectorsV;
236  int m_nVertSectorsU;
240  double m_rectSizeV;
242  double m_rectSizeU;
243 
244  // 3.1 What to do in Simulations for Phase 2:
247 
248  // 4. Extracting Information from the Hough Space
249  // 4.1 Use Purifier
251  bool m_usePurifier;
252 
253  // 4.2 Use Hough Space Clustering
282 
283  // 5. Merge TrackCandidates or Tracks?
291  double m_mergeThreshold;
302 
308 
314 
317  std::vector<DATCONHoughCand> uHoughCand;
319  std::vector<DATCONHoughCand> vHoughCand;
320 
322  std::vector<DATCONHoughSpaceClusterCand> uHoughSpaceClusterCand;
324  std::vector<DATCONHoughSpaceClusterCand> vHoughSpaceClusterCand;
325 
328  std::vector<DATCONTrackCand> uTrackCand;
330  std::vector<DATCONTrackCand> vTrackCand;
331 
333  std::vector<DATCONTrack> DATCONTracks;
334 
338  std::vector<bool> activeSectorVectorPhi;
340  std::vector<bool> activeSectorVectorTheta;
341 
350 
351  };//end class declaration
353 } // end namespace Belle2
Belle2::DATCONTrackingModule::prepareDATCONSVDSpacePoints
void prepareDATCONSVDSpacePoints()
Prepare the DATCONSVDSpacePoints for the Hough Trafo.
Definition: DATCONTrackingConversionFunctions.cc:16
Belle2::DATCONTrackingModule::slowInterceptFinder2d
int slowInterceptFinder2d(houghMap &hits, bool u_side)
FPGA-like intercept finder with all the sectors defined a priori, so no subdivision of sectors is nee...
Definition: DATCONTrackingInterceptFinder.cc:219
Belle2::DATCONTrackingModule::m_storeMCParticlesName
std::string m_storeMCParticlesName
Members holding module parameters:
Definition: DATCONTrackingModule.h:176
Belle2::DATCONTrackingModule::terminate
virtual void terminate() override
Terminate the module.
Definition: DATCONTrackingModule.cc:226
Belle2::DATCONTrackingModule::m_useTrackCandMergerU
bool m_useTrackCandMergerU
Use TrackMerger for u-side tracks (candidates)
Definition: DATCONTrackingModule.h:295
Belle2::houghMap
std::map< int, houghPair > houghMap
Map containing integer ID and corresponding houghPair for the HS TODO make this description better.
Definition: DATCONTrackingModule.h:73
Belle2::DATCONTrackingModule::storeDATCONSVDCluster
StoreArray< SVDCluster > storeDATCONSVDCluster
DATCONSVDCluster StoreArray.
Definition: DATCONTrackingModule.h:200
Belle2::DATCONTrackingModule::m_MaximumThetaHSClusterSizeX
int m_MaximumThetaHSClusterSizeX
Maximum cluster size in horizontal direction in the Theta HS.
Definition: DATCONTrackingModule.h:279
Belle2::DATCONTrackingModule::m_storeDATCONTracksName
std::string m_storeDATCONTracksName
Name of the collection for the SVD Hough tracks.
Definition: DATCONTrackingModule.h:186
Belle2::DATCONTrackingModule::m_MaximumPhiHSClusterSize
int m_MaximumPhiHSClusterSize
Maximum cluster size in the Phi HS.
Definition: DATCONTrackingModule.h:269
Belle2::DATCONTrackingModule::m_MaximumThetaHSClusterSize
int m_MaximumThetaHSClusterSize
Maximum cluster size in the Theta HS.
Definition: DATCONTrackingModule.h:277
Belle2::DATCONTrackingModule
DATCONTrackingModule class.
Definition: DATCONTrackingModule.h:79
Belle2::DATCONTrackingModule::m_nVertSectorsU
int m_nVertSectorsU
Using independent sectors: Number of vertical sectors for u-side (default: 256)
Definition: DATCONTrackingModule.h:244
Belle2::DATCONTrackingModule::m_minimumLines
unsigned short m_minimumLines
Minimum number of lines required for an active sector (default: 3)
Definition: DATCONTrackingModule.h:225
Belle2::DATCONTrackingModule::m_storeRecoHitInformationName
std::string m_storeRecoHitInformationName
Name of the RecoHit StoreArray required for RecoTracks.
Definition: DATCONTrackingModule.h:190
Belle2::DATCONTrackingModule::storeRecoHitInformation
StoreArray< RecoHitInformation > storeRecoHitInformation
RecoHitInformation StoreArray for DATCON Reco Hits.
Definition: DATCONTrackingModule.h:205
Belle2::DATCONTrackingModule::vClusters
svdHitMap vClusters
SVD v-side clusters.
Definition: DATCONTrackingModule.h:315
Belle2::DATCONTrackingModule::findandcombine3d
void findandcombine3d()
Find and Combine track candidates Combine found values of phi and r from u-side HS with found values ...
Definition: DATCONTrackingFunctions.cc:22
Belle2::DATCONTrackingModule::m_useTrackCandMergerV
bool m_useTrackCandMergerV
Use TrackMerger for v-side tracks (candidates)
Definition: DATCONTrackingModule.h:297
Belle2::DATCONTrackingModule::m_MinimumPhiHSClusterSize
int m_MinimumPhiHSClusterSize
Minimum cluster size in the Phi HS.
Definition: DATCONTrackingModule.h:267
Belle2::DATCONTrackingModule::storeDATCONSVDDigits
StoreArray< DATCONSVDDigit > storeDATCONSVDDigits
DATCONSVDDigit StoreArray.
Definition: DATCONTrackingModule.h:198
Belle2::DATCONTrackingModule::layerFilter
bool layerFilter(bool *layer)
Layer filter, checking for hits from different SVD layers.
Definition: DATCONTrackingInterceptFinder.cc:20
Belle2::DATCONTrackingModule::prepareSVDSpacePoints
void prepareSVDSpacePoints()
Prepare the DATCONSVDSpacePoints for the Hough Trafo.
Definition: DATCONTrackingConversionFunctions.cc:42
Belle2::DATCONTrackingModule::m_mergeThresholdTheta
double m_mergeThresholdTheta
Merging threshold for theta trackMerger.
Definition: DATCONTrackingModule.h:309
Belle2::DATCONTrackingModule::houghTrafo2d
void houghTrafo2d(svdHitMap &mapClusters, bool u_side)
Hough transformation function.
Definition: DATCONTrackingHoughtrafo.cc:20
Belle2::DATCONTrackingModule::m_independentSectors
bool m_independentSectors
Use tracking with independent sectors in HS like it is possible to do on FPGA (with slowInterceptFind...
Definition: DATCONTrackingModule.h:238
Belle2::DATCONTrackingModule::m_mergeThreshold
double m_mergeThreshold
Global track merger merging threshold.
Definition: DATCONTrackingModule.h:299
Belle2::DATCONTrackingModule::m_trackCenterX
double m_trackCenterX
Center of the tracks (our Hough Trafo requires (0, 0, 0).
Definition: DATCONTrackingModule.h:221
Belle2::DATCONTrackingModule::~DATCONTrackingModule
virtual ~DATCONTrackingModule()=default
Standard Deconstructor.
Belle2::DATCONTrackingModule::storeDATCONTracks
StoreArray< DATCONTrack > storeDATCONTracks
DATCONTracks StoreArray.
Definition: DATCONTrackingModule.h:209
Belle2::DATCONTrackingModule::m_maxIterationsU
int m_maxIterationsU
Maximum number of iterations allowed for u-side (obsolete?) (default: 12)
Definition: DATCONTrackingModule.h:227
Belle2::DATCONTrackingModule::DepthFirstSearch
void DepthFirstSearch(bool u_side, int **ArrayOfActiveHoughSpaceSectors, int angleSectors, int vertSectors, int actualPositionX, int actualPositionY, std::vector< unsigned int > &mergedList)
Depth First Search algorithm, compare with https://en.wikipedia.org/wiki/Depth-first_search (06.
Definition: DATCONTrackingHoughSpaceClusterFinder.cc:102
Belle2::DATCONTrackingModule::m_clusterSize
int m_clusterSize
Size of the current cluster.
Definition: DATCONTrackingModule.h:283
Belle2::DATCONTrackingModule::DATCONTrackingModule
DATCONTrackingModule()
Constructor.
Definition: DATCONTrackingModule.cc:25
Belle2::DATCONTrackingModule::activeSectorVectorTheta
std::vector< bool > activeSectorVectorTheta
Analogue vector for the Theta Hough Space.
Definition: DATCONTrackingModule.h:348
Belle2::DATCONTrackingModule::uHoughCand
std::vector< DATCONHoughCand > uHoughCand
Hough Candidates.
Definition: DATCONTrackingModule.h:325
Belle2::DATCONTrackingModule::storeDATCONRecoTracks
StoreArray< RecoTrack > storeDATCONRecoTracks
DATCONRecoTracks StoreArray.
Definition: DATCONTrackingModule.h:207
Belle2::DATCONTrackingModule::m_useTrackCandMerger
bool m_useTrackCandMerger
Use TrackMerger to merge found tracks (candidates) to avoid / reduce fakes.
Definition: DATCONTrackingModule.h:293
Belle2::DATCONTrackingModule::m_mergeThresholdV
double m_mergeThresholdV
Merging threshold for v-side trackCandMerger.
Definition: DATCONTrackingModule.h:303
Belle2::DATCONTrackingModule::uTrackCand
std::vector< DATCONTrackCand > uTrackCand
Purified Hough Candidates.
Definition: DATCONTrackingModule.h:336
Belle2::DATCONTrackingModule::m_mergeThresholdU
double m_mergeThresholdU
Merging threshold for u-side trackCandMerger.
Definition: DATCONTrackingModule.h:301
Belle2::Module
Base class for Modules.
Definition: Module.h:74
Belle2::DATCONTrackingModule::uClusters
svdHitMap uClusters
Clusters.
Definition: DATCONTrackingModule.h:313
Belle2::DATCONTrackingModule::m_clusterCount
int m_clusterCount
Number of clusters in current event.
Definition: DATCONTrackingModule.h:285
Belle2::DATCONTrackingModule::vHough
houghMap vHough
v-side HoughMap
Definition: DATCONTrackingModule.h:321
Belle2::DATCONTrackingModule::initialize
virtual void initialize() override
Initialize the module and check module parameters.
Definition: DATCONTrackingModule.cc:45
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::DATCONTrackingModule::saveHitsToRecoTrack
void saveHitsToRecoTrack(std::vector< unsigned int > &idList, TVector3 momentum)
Save Hits to RecoTrack.
Definition: DATCONTrackingFunctions.cc:114
Belle2::DATCONTrackingModule::m_nAngleSectorsV
int m_nAngleSectorsV
Using independent sectors: Number of horizontal sectors for v-side (default: 256)
Definition: DATCONTrackingModule.h:242
Belle2::DATCONTrackingModule::m_useTrackMerger
bool m_useTrackMerger
Use TrackMerger to merge found tracks (candidates) to avoid / reduce fakes.
Definition: DATCONTrackingModule.h:305
Belle2::DATCONTrackingModule::m_clusterInitialPosition
TVector2 m_clusterInitialPosition
Initial position of cluster in HS sector coordinates.
Definition: DATCONTrackingModule.h:287
Belle2::DATCONTrackingModule::event
virtual void event() override
Run tracking.
Definition: DATCONTrackingModule.cc:102
Belle2::DATCONTrackingModule::trackCandMerger
void trackCandMerger()
Track merger to merge DATCONTrackCand with similar properties and to avoid / reduce number of fakes.
Definition: DATCONTrackingFunctions.cc:158
Belle2::DATCONTrackingModule::m_useHoughSpaceClustering
bool m_useHoughSpaceClustering
Use FindHoughSpaceCluster algorithm to extract track information from the Hough Spaces?
Definition: DATCONTrackingModule.h:265
Belle2::DATCONTrackingModule::DATCONTracks
std::vector< DATCONTrack > DATCONTracks
DATCON Track.
Definition: DATCONTrackingModule.h:341
Belle2::DATCONTrackingModule::m_storeDATCONSVDSpacePointsName
std::string m_storeDATCONSVDSpacePointsName
Name of the DATCONSVDSpacePoints array.
Definition: DATCONTrackingModule.h:184
Belle2::DATCONTrackingModule::m_usePhase2Simulation
bool m_usePhase2Simulation
Use the simulation for phase 2 geometry and FPGA setup?
Definition: DATCONTrackingModule.h:254
Belle2::DATCONTrackingModule::activeSectorVectorPhi
std::vector< bool > activeSectorVectorPhi
Vector of bools containing information about the active sectors of the Phi Hough Space in a 1-D repre...
Definition: DATCONTrackingModule.h:346
Belle2::DATCONTrackingModule::m_usePurifier
bool m_usePurifier
Use purifying algortihm at all.
Definition: DATCONTrackingModule.h:259
Belle2::DATCONTrackingModule::m_storeDATCONSVDClusterName
std::string m_storeDATCONSVDClusterName
Name of the DATCONSVDSpacePoints array.
Definition: DATCONTrackingModule.h:182
Belle2::svdHitPair
std::pair< VxdID, TVector3 > svdHitPair
The DATCON Tracking Module performs track finding / pattern recognition based on SVD hit information.
Definition: DATCONTrackingModule.h:66
Belle2::DATCONTrackingModule::m_rectSizeV
double m_rectSizeV
For fastInterceptFinder2d: vertical size of HS for v-side (default: 0.1)
Definition: DATCONTrackingModule.h:248
Belle2::DATCONTrackingModule::m_trackCenterY
double m_trackCenterY
Center position in Y.
Definition: DATCONTrackingModule.h:223
Belle2::DATCONTrackingModule::vTrackCand
std::vector< DATCONTrackCand > vTrackCand
v-side
Definition: DATCONTrackingModule.h:338
Belle2::DATCONTrackingModule::storeSVDSpacePoints
StoreArray< SpacePoint > storeSVDSpacePoints
SVDSpacePoints StoreArray.
Definition: DATCONTrackingModule.h:195
Belle2::DATCONTrackingModule::m_nAngleSectorsU
int m_nAngleSectorsU
Using independent sectors: Number of horizontal sectors for u-side (default: 256)
Definition: DATCONTrackingModule.h:240
Belle2::DATCONTrackingModule::m_mergeThresholdPhi
double m_mergeThresholdPhi
Merging threshold for phi trackMerger.
Definition: DATCONTrackingModule.h:307
Belle2::DATCONTrackingModule::vHoughSpaceClusterCand
std::vector< DATCONHoughSpaceClusterCand > vHoughSpaceClusterCand
v-side
Definition: DATCONTrackingModule.h:332
Belle2::DATCONTrackingModule::FindHoughSpaceCluster
void FindHoughSpaceCluster(bool u_side)
Cluster finding in the Hough Space using a "depth first search" algorithm.
Definition: DATCONTrackingHoughSpaceClusterFinder.cc:17
Belle2::DATCONTrackingModule::m_storeDATCONSVDDigitsName
std::string m_storeDATCONSVDDigitsName
Name of the DATCONSVDDigits array.
Definition: DATCONTrackingModule.h:180
Belle2::DATCONTrackingModule::m_MaximumThetaHSClusterSizeY
int m_MaximumThetaHSClusterSizeY
Maximum cluster size in vertical direction in the Theta HS.
Definition: DATCONTrackingModule.h:281
Belle2::DATCONTrackingModule::storeDATCONSVDSpacePoints
StoreArray< DATCONSVDSpacePoint > storeDATCONSVDSpacePoints
DATCONSVDSpacePoint StoreArray.
Definition: DATCONTrackingModule.h:202
Belle2::DATCONTrackingModule::addParameter
void addParameter()
Add module parameter, put in separate function to have the Constructor clean and readable.
Definition: DATCONTrackingAddParameter.cc:16
Belle2::DATCONTrackingModule::m_nVertSectorsV
int m_nVertSectorsV
Using independent sectors: Number of vertical sectors for v-side (default: 256)
Definition: DATCONTrackingModule.h:246
Belle2::DATCONTrackingModule::purifyTrackCandsList
void purifyTrackCandsList()
Purify track candidates by checking list of strip_id (specific id calculated in this module)
Definition: DATCONTrackingPurifierFunctions.cc:21
Belle2::DATCONTrackingModule::ArrayOfActiveSectorsPhiHS
int ** ArrayOfActiveSectorsPhiHS
"2D-Array" of the sectors of the Phi Hough Space containing information whether or not a sector is "a...
Definition: DATCONTrackingModule.h:355
Belle2::DATCONTrackingModule::ArrayOfActiveSectorsThetaHS
int ** ArrayOfActiveSectorsThetaHS
Analogue array for the Theta Hough Space.
Definition: DATCONTrackingModule.h:357
Belle2::DATCONTrackingModule::vHoughCand
std::vector< DATCONHoughCand > vHoughCand
v-side
Definition: DATCONTrackingModule.h:327
Belle2::DATCONTrackingModule::m_useSVDSpacePoints
bool m_useSVDSpacePoints
Use SVDSpacePoints.
Definition: DATCONTrackingModule.h:215
Belle2::svdHitMap
std::map< int, svdHitPair > svdHitMap
Map containing integer ID and svdHitPair.
Definition: DATCONTrackingModule.h:68
Belle2::StoreArray< MCParticle >
Belle2::DATCONTrackingModule::fastInterceptFinder2d
int fastInterceptFinder2d(houghMap &hits, bool u_side, TVector2 v1_s, TVector2 v2_s, TVector2 v4_s, unsigned int iterations, unsigned int maxIterations)
Intercept Finder functions.
Definition: DATCONTrackingInterceptFinder.cc:49
Belle2::DATCONTrackingModule::m_MinimumThetaHSClusterSize
int m_MinimumThetaHSClusterSize
Minimum cluster size of the Theta HS.
Definition: DATCONTrackingModule.h:275
Belle2::DATCONTrackingModule::m_clusterCenterOfGravity
TVector2 m_clusterCenterOfGravity
Center of Gravity of current cluster.
Definition: DATCONTrackingModule.h:289
Belle2::DATCONTrackingModule::m_MaximumPhiHSClusterSizeY
int m_MaximumPhiHSClusterSizeY
Maximum cluster size in vertical direction in the Phi HS.
Definition: DATCONTrackingModule.h:273
Belle2::DATCONTrackingModule::trackMerger
void trackMerger()
Track merger to merge DATCONTrackCand with similar properties and to avoid / reduce number of fakes.
Definition: DATCONTrackingFunctions.cc:266
Belle2::DATCONTrackingModule::compareList
bool compareList(std::vector< unsigned int > &aList, std::vector< unsigned int > &bList)
Compare strip_id lists / lists of counter variable.
Definition: DATCONTrackingPurifierFunctions.cc:123
Belle2::DATCONTrackingModule::m_MaximumPhiHSClusterSizeX
int m_MaximumPhiHSClusterSizeX
Maximum cluster size in horizontal direction in the Phi HS.
Definition: DATCONTrackingModule.h:271
Belle2::DATCONTrackingModule::storeMCParticles
StoreArray< MCParticle > storeMCParticles
MCParticles StoreArray.
Definition: DATCONTrackingModule.h:193
Belle2::DATCONTrackingModule::uHough
houghMap uHough
Hough Map.
Definition: DATCONTrackingModule.h:319
Belle2::DATCONTrackingModule::m_useDATCONSVDSpacePoints
bool m_useDATCONSVDSpacePoints
Use DATCONSVDSpacePoints.
Definition: DATCONTrackingModule.h:213
Belle2::DATCONTrackingModule::m_storeSVDSpacePointsName
std::string m_storeSVDSpacePointsName
Name of the SVDSpacePoints array.
Definition: DATCONTrackingModule.h:178
Belle2::DATCONTrackingModule::m_maxIterationsV
int m_maxIterationsV
Maximum number of iterations allowed for v-side (obsolete?) (default: 12)
Definition: DATCONTrackingModule.h:229
Belle2::DATCONTrackingModule::m_storeDATCONRecoTracksName
std::string m_storeDATCONRecoTracksName
Name of the RecoTrack array.
Definition: DATCONTrackingModule.h:188
Belle2::DATCONTrackingModule::uHoughSpaceClusterCand
std::vector< DATCONHoughSpaceClusterCand > uHoughSpaceClusterCand
u-side
Definition: DATCONTrackingModule.h:330
Belle2::DATCONTrackingModule::mergeIdList
void mergeIdList(std::vector< unsigned int > &mergedList, std::vector< unsigned int > &mergeme)
Merge strip_id lists / lists of counter variables to combine large lists to smaller ones and thus pur...
Definition: DATCONTrackingPurifierFunctions.cc:153
Belle2::houghPair
std::pair< VxdID, TVector2 > houghPair
Hough Tuples.
Definition: DATCONTrackingModule.h:71
Belle2::DATCONTrackingModule::m_rectSizeU
double m_rectSizeU
For fastInterceptFinder2d: vertical size of HS for u-side (default: 0.1)
Definition: DATCONTrackingModule.h:250