ATLAS Offline Software
FPGATrackSimClusteringTool.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef FPGATrackSimCLUSTERINGTOOL_H
6 #define FPGATrackSimCLUSTERINGTOOL_H
7 
8 /*
9  * httClustering
10  * ---------------
11  *
12  * Routines to perform clustering in the pixels, based on FPGATrackSim
13  *
14  */
15 
21 #include <vector>
22 #include <memory>
23 
25  void attachTruth(std::vector<FPGATrackSimHit> &);
26  bool updatePixelCluster(FPGATrackSimCluster &currentCluster, FPGATrackSimHit &incomingHit, bool newCluster, bool digitalClustering);
27  bool updateStripCluster(FPGATrackSimCluster &currentCluster, FPGATrackSimHit &incomingHit, bool newCluster, bool digitalClustering);
28  bool updateClusterContents(FPGATrackSimCluster &currentCluster, int &clusterRow, int &clusterRowWidth, int &clusterCol, int &clusterColWidth, FPGATrackSimHit &incomingHit, bool digitalClustering);
29  bool sortITkInputEta(const std::unique_ptr<FPGATrackSimHit>& hitA, const std::unique_ptr<FPGATrackSimHit>& hitB);
30  bool sortITkInputPhi(const std::unique_ptr<FPGATrackSimHit>& hitA, const std::unique_ptr<FPGATrackSimHit>& HitB);
31 }
32 
33 class FPGATrackSimClusteringTool : public extends <AthAlgTool,FPGATrackSimClusteringToolI> {
34 public:
35 
36  FPGATrackSimClusteringTool(const std::string&, const std::string&, const IInterface*);
37 
38  virtual ~FPGATrackSimClusteringTool() = default;
39  virtual StatusCode initialize() override;
40 
41  virtual StatusCode DoClustering(FPGATrackSimLogicalEventInputHeader &, std::vector<FPGATrackSimCluster> &) const override;
42 
43  private:
44 
45  Gaudi::Property<bool> m_digitalClustering {this, "DigitalClustering", true, "flag to enable digital clustering instead of ToT weighted position calculation" };
46  Gaudi::Property<bool> m_reduceCoordPrecision {this, "ReduceCoordPrecision", false, "flag to enable reducing the precision of global coordinates" };
47  Gaudi::Property<float> m_coordRPrecision {this, "CoordRPrecision", 1./64., "fixed point precision of r coordinate" };
48  Gaudi::Property<float> m_coordPhiPrecision {this, "CoordPhiPrecision", 1./8192., "fixed point precision of phi coordinate" };
49  Gaudi::Property<float> m_coordZPrecision {this, "CoordZPrecision", 1./32., "fixed point precision of z coordinate" };
50  Gaudi::Property<int> m_LorentzAngleShift { this, "LorentzAngleShift", -1, "flag for Lorentz angle shift. -1 means off, 0 means full corrections from first version, 1 means smaller LUT, 2 means very small LUT" };
51 
52  ToolHandle<FPGATrackSim::LorentzAngleTool> m_lorentzAngleTool {this, "LorentzAngleTool", "", "FPGATrackSim tool to retrieve Lorentz angle"};
53 
54  using HitPtrCollection = std::vector<std::unique_ptr<FPGATrackSimHit>>;
55  using HitPtrContainer = std::vector<HitPtrCollection>;
56 
57  //FPGATrackSim pixel clustering using the FPGATrackSim objects
58  void SortedClustering(HitPtrContainer&& sorted_hits, std::vector<FPGATrackSimCluster> &) const;
59  void Clustering(HitPtrCollection&&, std::vector<FPGATrackSimCluster> &) const;
60 
61  // Other helper functions
64  void splitAndSortHits(HitPtrCollection&& hits, HitPtrContainer& hitsPerModule, int& eta_phi) const;
65  void splitAndSortHits(HitPtrCollection&& hits, HitPtrContainer& hitsPerModule) const;
66  void splitHitsToModules(HitPtrCollection&& hits, HitPtrContainer& hitsPerModule) const;
67  void normaliseClusters(std::vector<FPGATrackSimCluster> &clusters) const;
68  void sortHitsOnModules(HitPtrContainer& hitsPerModule, int& eta_phi) const;
69  void sortHitsOnModules(HitPtrContainer& hitsPerModule) const;
70  bool etaOrPhi(const FPGATrackSimHit& hit) const;
71  bool sortIBLInput(const std::unique_ptr<FPGATrackSimHit>& i, const std::unique_ptr<FPGATrackSimHit>& j) const;
72  bool sortPixelInput(const std::unique_ptr<FPGATrackSimHit>& i, const std::unique_ptr<FPGATrackSimHit>& j) const;
73  void SetMinMaxIndicies(FPGATrackSimCluster &cluster) const;
74 
75 };
76 
77 #endif // FPGATrackSimCLUSTERINGTOOL_H
FPGATrackSimClusteringTool::SetMinMaxIndicies
void SetMinMaxIndicies(FPGATrackSimCluster &cluster) const
Definition: FPGATrackSimClusteringTool.cxx:99
FPGATrackSimCLUSTERING::updateStripCluster
bool updateStripCluster(FPGATrackSimCluster &currentCluster, FPGATrackSimHit &incomingHit, bool newCluster, bool digitalClustering)
Definition: FPGATrackSimClusteringTool.cxx:550
FPGATrackSimClusteringTool::Clustering
void Clustering(HitPtrCollection &&, std::vector< FPGATrackSimCluster > &) const
Definition: FPGATrackSimClusteringTool.cxx:132
FPGATrackSimLogicalEventInputHeader
Definition: FPGATrackSimLogicalEventInputHeader.h:21
TRTCalib_Extractor.hits
hits
Definition: TRTCalib_Extractor.py:35
FPGATrackSimClusteringTool::m_lorentzAngleTool
ToolHandle< FPGATrackSim::LorentzAngleTool > m_lorentzAngleTool
Definition: FPGATrackSimClusteringTool.h:52
FPGATrackSimCLUSTERING::attachTruth
void attachTruth(std::vector< FPGATrackSimHit > &)
Definition: FPGATrackSimClusteringTool.cxx:449
FPGATrackSimCluster
Definition: FPGATrackSimCluster.h:24
FPGATrackSimCLUSTERING::updatePixelCluster
bool updatePixelCluster(FPGATrackSimCluster &currentCluster, FPGATrackSimHit &incomingHit, bool newCluster, bool digitalClustering)
Definition: FPGATrackSimClusteringTool.cxx:468
FPGATrackSimClusteringTool::sortHitsOnModules
void sortHitsOnModules(HitPtrContainer &hitsPerModule, int &eta_phi) const
Definition: FPGATrackSimClusteringTool.cxx:315
FPGATrackSimClusteringTool::HitPtrCollection
std::vector< std::unique_ptr< FPGATrackSimHit > > HitPtrCollection
Definition: FPGATrackSimClusteringTool.h:54
FPGATrackSimCLUSTERING::updateClusterContents
bool updateClusterContents(FPGATrackSimCluster &currentCluster, int &clusterRow, int &clusterRowWidth, int &clusterCol, int &clusterColWidth, FPGATrackSimHit &incomingHit, bool digitalClustering)
Definition: FPGATrackSimClusteringTool.cxx:600
FPGATrackSimClusteringTool::m_coordPhiPrecision
Gaudi::Property< float > m_coordPhiPrecision
Definition: FPGATrackSimClusteringTool.h:48
FPGATrackSimClusteringTool::sortIBLInput
bool sortIBLInput(const std::unique_ptr< FPGATrackSimHit > &i, const std::unique_ptr< FPGATrackSimHit > &j) const
FPGATrackSimCLUSTERING::sortITkInputPhi
bool sortITkInputPhi(const std::unique_ptr< FPGATrackSimHit > &hitA, const std::unique_ptr< FPGATrackSimHit > &HitB)
Definition: FPGATrackSimClusteringTool.cxx:714
FPGATrackSimClusteringTool::splitAndSortHits
void splitAndSortHits(HitPtrCollection &&hits, HitPtrContainer &hitsPerModule, int &eta_phi) const
Definition: FPGATrackSimClusteringTool.cxx:280
FPGATrackSimHit
Definition: FPGATrackSimHit.h:41
FPGATrackSimClusteringTool::etaOrPhi
bool etaOrPhi(const FPGATrackSimHit &hit) const
Definition: FPGATrackSimClusteringTool.cxx:385
FPGATrackSimClusteringTool::initialize
virtual StatusCode initialize() override
Definition: FPGATrackSimClusteringTool.cxx:25
FPGATrackSimClusteringTool::HitPtrContainer
std::vector< HitPtrCollection > HitPtrContainer
Definition: FPGATrackSimClusteringTool.h:55
lumiFormat.i
int i
Definition: lumiFormat.py:85
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
AthAlgTool.h
FPGATrackSimClusteringTool::normaliseClusters
void normaliseClusters(std::vector< FPGATrackSimCluster > &clusters) const
Definition: FPGATrackSimClusteringTool.cxx:362
FPGATrackSimClusteringTool::m_coordZPrecision
Gaudi::Property< float > m_coordZPrecision
Definition: FPGATrackSimClusteringTool.h:49
FPGATrackSimClusteringTool::FPGATrackSimClusteringTool
FPGATrackSimClusteringTool(const std::string &, const std::string &, const IInterface *)
Definition: FPGATrackSimClusteringTool.cxx:20
FPGATrackSimCLUSTERING::sortITkInputEta
bool sortITkInputEta(const std::unique_ptr< FPGATrackSimHit > &hitA, const std::unique_ptr< FPGATrackSimHit > &hitB)
Definition: FPGATrackSimClusteringTool.cxx:705
FPGATrackSimClusteringTool::SortedClustering
void SortedClustering(HitPtrContainer &&sorted_hits, std::vector< FPGATrackSimCluster > &) const
Definition: FPGATrackSimClusteringTool.cxx:118
FPGATrackSimHit.h
: FPGATrackSim-specific class to represent an hit in the detector.
FPGATrackSimClusteringTool::m_reduceCoordPrecision
Gaudi::Property< bool > m_reduceCoordPrecision
Definition: FPGATrackSimClusteringTool.h:46
FPGATrackSimLorentzAngleTool.h
FPGATrackSimClusteringTool::~FPGATrackSimClusteringTool
virtual ~FPGATrackSimClusteringTool()=default
FPGATrackSimClusteringTool::sortPixelInput
bool sortPixelInput(const std::unique_ptr< FPGATrackSimHit > &i, const std::unique_ptr< FPGATrackSimHit > &j) const
FPGATrackSimClusteringTool::m_digitalClustering
Gaudi::Property< bool > m_digitalClustering
Definition: FPGATrackSimClusteringTool.h:45
RunTileMonitoring.clusters
clusters
Definition: RunTileMonitoring.py:133
FPGATrackSimCLUSTERING
Definition: FPGATrackSimClusteringTool.h:24
FPGATrackSimClusteringTool::DoClustering
virtual StatusCode DoClustering(FPGATrackSimLogicalEventInputHeader &, std::vector< FPGATrackSimCluster > &) const override
Definition: FPGATrackSimClusteringTool.cxx:31
FPGATrackSimClusteringTool::splitHitsToModules
void splitHitsToModules(HitPtrCollection &&hits, HitPtrContainer &hitsPerModule) const
Definition: FPGATrackSimClusteringTool.cxx:293
FPGATrackSimClusteringTool::reduceGlobalCoordPrecision
void reduceGlobalCoordPrecision(FPGATrackSimCluster &cluster) const
Definition: FPGATrackSimClusteringTool.cxx:722
FPGATrackSimClusteringToolI.h
Declares an abstract class that implements an interface for pixel clustering. This class is implement...
FPGATrackSimClusteringTool
Definition: FPGATrackSimClusteringTool.h:33
FPGATrackSimCluster.h
FPGATrackSimClusteringTool::m_LorentzAngleShift
Gaudi::Property< int > m_LorentzAngleShift
Definition: FPGATrackSimClusteringTool.h:50
FPGATrackSimClusteringTool::m_coordRPrecision
Gaudi::Property< float > m_coordRPrecision
Definition: FPGATrackSimClusteringTool.h:47