ATLAS Offline Software
FPGATrackSimOverlapRemovalTool.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
12 #ifndef FPGATrackSimOVERLAPREMOVALTOOL_H
13 #define FPGATrackSimOVERLAPREMOVALTOOL_H
14 
16 #include "GaudiKernel/ServiceHandle.h"
17 
21 
22 #include <string>
23 #include <vector>
24 #include <ostream>
25 
33 public:
34 
35  FPGATrackSimOverlapRemovalTool (const std::string&, const std::string&, const IInterface*);
37 
38  StatusCode initialize() override;
39 
40  StatusCode runOverlapRemoval(std::vector<FPGATrackSimRoad*>& roads);
41 
42  // Original Overlap Removal function
43  // Compare chi2 and common number of hits
44  StatusCode runOverlapRemoval(std::vector<FPGATrackSimTrack>& tracks);
45 
46  void setDoSecondStage(bool v) { m_do2ndStage = v; }
47  bool getDoSecondStage() const { return m_do2ndStage; }
48  ORAlgo getAlgorithm() const {return m_algo;}
49  // Find the one track from the duplicate group with the minium Chi2 and maximum # of hits
50  void findMinChi2MaxHit(const std::vector<int>& duplicates, std::vector<FPGATrackSimTrack>& tracks);
51  // Find number of common hits between two tracks
54 
56  static bool compareTrackQuality(const FPGATrackSimTrack & track1, const FPGATrackSimTrack & track2);
57 
58 private:
59 
60 
61  Gaudi::Property <bool> m_do2ndStage { this, "DoSecondStage", false, "Do second stage of not?"};
62  Gaudi::Property <int> m_NumOfHitPerGrouping { this, "NumOfHitPerGrouping", 5, "Number of hits pre grouping"};
63  Gaudi::Property <float> m_minChi2 { this, "MinChi2", 40, "Minimum chi2 requirement for tracks being considered in OR"};
64  Gaudi::Property <bool> m_roadSliceOR { this, "roadSliceOR", true, "Do slice-wise overlap removal for roads (Hough-only)"};
65  Gaudi::Property <int> m_localMaxWindowSize { this, "localMaxWindowSize", 0, "Only create roads that are a local maximum within this window size. Set this to 0 to turn off local max filtering"};
66  Gaudi::Property <unsigned> m_imageSize_x { this, "nBins_x", 0, "number of bins in, eg, phi_track"};
67  Gaudi::Property <unsigned> m_imageSize_y { this, "nBins_y", 0, "number of bins in, eg, q/pT"};
68  Gaudi::Property <std::string> m_algorithm { this, "ORAlgo", "Normal", "Overlap removal algorithm"};
69  Gaudi::Property <bool> m_doFastOR { this, "doFastOR", false, "Use fast overlap removal algorithm instead of default"};
70 
71  int m_totLayers = 0; // Total number of layers used for a track
72  ORAlgo m_algo{ORAlgo::Normal}; // Internal ORAlgo enum for faster compare
73 
74 
75  StatusCode runOverlapRemoval_fast(std::vector<FPGATrackSimTrack>& tracks);
76 
77  // ServiceHandle
78  ServiceHandle<IFPGATrackSimMappingSvc> m_FPGATrackSimMapping{this,"FPGATrackSimMappingSvc","FPGATrackSimMappingSvc"}; // Get the number of layer through map
79 
80 };
81 
82 #endif // FPGATrackSimOverlapRemovalTool_h
FPGATrackSimOverlapRemovalTool::m_NumOfHitPerGrouping
Gaudi::Property< int > m_NumOfHitPerGrouping
Definition: FPGATrackSimOverlapRemovalTool.h:62
FPGATrackSimOverlapRemovalTool::m_do2ndStage
Gaudi::Property< bool > m_do2ndStage
Definition: FPGATrackSimOverlapRemovalTool.h:61
FPGATrackSimTrack
Definition: FPGATrackSimTrack.h:16
IFPGATrackSimMappingSvc.h
FPGATrackSimOverlapRemovalTool::FPGATrackSimOverlapRemovalTool
FPGATrackSimOverlapRemovalTool()=delete
FPGATrackSimOverlapRemovalTool::getAlgorithm
ORAlgo getAlgorithm() const
Definition: FPGATrackSimOverlapRemovalTool.h:48
FPGATrackSimOverlapRemovalTool::m_doFastOR
Gaudi::Property< bool > m_doFastOR
Definition: FPGATrackSimOverlapRemovalTool.h:69
FPGATrackSimOverlapRemovalTool::setDoSecondStage
void setDoSecondStage(bool v)
Definition: FPGATrackSimOverlapRemovalTool.h:46
ORAlgo::Normal
@ Normal
FPGATrackSimOverlapRemovalTool::findNCommonHits
int findNCommonHits(const FPGATrackSimTrack &, const FPGATrackSimTrack &)
Definition: FPGATrackSimOverlapRemovalTool.cxx:234
FPGATrackSimOverlapRemovalTool::m_imageSize_x
Gaudi::Property< unsigned > m_imageSize_x
Definition: FPGATrackSimOverlapRemovalTool.h:66
FPGATrackSimOverlapRemovalTool::m_imageSize_y
Gaudi::Property< unsigned > m_imageSize_y
Definition: FPGATrackSimOverlapRemovalTool.h:67
FPGATrackSimOverlapRemovalTool::m_roadSliceOR
Gaudi::Property< bool > m_roadSliceOR
Definition: FPGATrackSimOverlapRemovalTool.h:64
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
FPGATrackSimOverlapRemovalTool::m_algorithm
Gaudi::Property< std::string > m_algorithm
Definition: FPGATrackSimOverlapRemovalTool.h:68
AthAlgTool.h
FPGATrackSimOverlapRemovalTool::m_totLayers
int m_totLayers
Definition: FPGATrackSimOverlapRemovalTool.h:71
FPGATrackSimOverlapRemovalTool::m_minChi2
Gaudi::Property< float > m_minChi2
Definition: FPGATrackSimOverlapRemovalTool.h:63
FPGATrackSimOverlapRemovalTool::m_localMaxWindowSize
Gaudi::Property< int > m_localMaxWindowSize
Definition: FPGATrackSimOverlapRemovalTool.h:65
FPGATrackSimOverlapRemovalTool::findNonOverlapHits
int findNonOverlapHits(const FPGATrackSimTrack &, const FPGATrackSimTrack &)
Definition: FPGATrackSimOverlapRemovalTool.cxx:281
FPGATrackSimOverlapRemovalTool::m_FPGATrackSimMapping
ServiceHandle< IFPGATrackSimMappingSvc > m_FPGATrackSimMapping
Definition: FPGATrackSimOverlapRemovalTool.h:78
FPGATrackSimOverlapRemovalTool::m_algo
ORAlgo m_algo
Definition: FPGATrackSimOverlapRemovalTool.h:72
FPGATrackSimOverlapRemovalTool::compareTrackQuality
static bool compareTrackQuality(const FPGATrackSimTrack &track1, const FPGATrackSimTrack &track2)
Definition: FPGATrackSimOverlapRemovalTool.cxx:401
FPGATrackSimOverlapRemovalTool::runOverlapRemoval_fast
StatusCode runOverlapRemoval_fast(std::vector< FPGATrackSimTrack > &tracks)
Definition: FPGATrackSimOverlapRemovalTool.cxx:432
FPGATrackSimOverlapRemovalTool::getDoSecondStage
bool getDoSecondStage() const
Definition: FPGATrackSimOverlapRemovalTool.h:47
python.PyAthena.v
v
Definition: PyAthena.py:157
ORAlgo
ORAlgo
Definition: FPGATrackSimOverlapRemovalTool.h:26
FPGATrackSimOverlapRemovalTool::removeOverlapping
StatusCode removeOverlapping(FPGATrackSimTrack &track1, FPGATrackSimTrack &track2)
Definition: FPGATrackSimOverlapRemovalTool.cxx:328
FPGATrackSimOverlapRemovalTool::runOverlapRemoval
StatusCode runOverlapRemoval(std::vector< FPGATrackSimRoad * > &roads)
Definition: FPGATrackSimOverlapRemovalTool.cxx:74
FPGATrackSimOverlapRemovalTool::initialize
StatusCode initialize() override
Definition: FPGATrackSimOverlapRemovalTool.cxx:19
FPGATrackSimOverlapRemovalTool::findMinChi2MaxHit
void findMinChi2MaxHit(const std::vector< int > &duplicates, std::vector< FPGATrackSimTrack > &tracks)
Definition: FPGATrackSimOverlapRemovalTool.cxx:183
FPGATrackSimRoad.h
Defines a class for roads.
AthAlgTool
Definition: AthAlgTool.h:26
ORAlgo::InvertGrouping
@ InvertGrouping
generateReferenceFile.duplicates
duplicates
Definition: generateReferenceFile.py:24
FPGATrackSimTrack.h
FPGATrackSimOverlapRemovalTool
Remove (mark) duplicate tracks This tool takes FPGATrackSimTrack as input and mark their status of pa...
Definition: FPGATrackSimOverlapRemovalTool.h:32
ServiceHandle< IFPGATrackSimMappingSvc >