ATLAS Offline Software
FPGATrackSimEtaPatternFilterTool.h
Go to the documentation of this file.
1 // Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 
3 #ifndef FPGATRACKSIMETAPATTERNFILTERTOOL_H
4 #define FPGATRACKSIMETAPATTERNFILTERTOOL_H
5 
18 #include "AthenaBaseComps/AthAlgTool.h" //inheritance
20 #include "FPGATrackSimObjects/FPGATrackSimTypes.h" //SiliconTech, DetectorZone
21 #include "GaudiKernel/ServiceHandle.h" //member
22 #include "FPGATrackSimObjects/FPGATrackSimRoad.h" //template param for vector member
23 
24 #include "FPGATrackSimBanks/IFPGATrackSimBankSvc.h" //ServiceHandle template param
25 #include "FPGATrackSimMaps/IFPGATrackSimMappingSvc.h" //ServiceHandle template param
26 
27 
28 
29 #include <string>
30 #include <vector>
31 #include <map>
32 
33 class FPGATrackSimHit;
34 
35 class FPGATrackSimEtaPatternFilterTool : public extends<AthAlgTool, IFPGATrackSimRoadFilterTool>
36 {
37  public:
38 
40  // AthAlgTool
41 
42  FPGATrackSimEtaPatternFilterTool(const std::string&, const std::string&, const IInterface*);
43 
44  virtual StatusCode initialize() override;
45  virtual StatusCode finalize() override;
46 
48  // FPGATrackSimRoadFilterToolI
49 
50  virtual StatusCode filterRoads(const std::vector<FPGATrackSimRoad*> & prefilter_roads, std::vector<FPGATrackSimRoad*> & postfilter_roads) override;
51 
52  private:
53 
55  // Handles
56  ServiceHandle<IFPGATrackSimMappingSvc> m_FPGATrackSimMapping {this, "FPGATrackSimMappingSvc", "FPGATrackSimMappingSvc"};
57  ServiceHandle<IFPGATrackSimBankSvc> m_FPGATrackSimBankSvc {this, "FPGATrackSimBankSvc", "FPGATrackSimBankSvc"};
58 
60  // Properties
61 
62  Gaudi::Property <std::string> m_pattern_file_path{this, "EtaPatterns", "", "path to pattern file"};
63  Gaudi::Property <unsigned> m_threshold {this, "threshold", 0, "Minimum number of hit layers to fire a road"};
64  Gaudi::Property <bool> m_isSecondStage {this, "isSecondStage", false, "Whether or not his this a second stage HT"};
65  Gaudi::Property <bool> m_doEtaPatternConsts {this, "doEtaPatternConsts", false, "Use eta pattern IDs as part of sector definition"};
66  Gaudi::Property <bool> m_dynamicThreshold { this, "dynamicThreshold", false, "Stop lowering the threshold once matches have been found"};
67 
69  // Utility Structs
70 
71  struct ModuleId
72  {
75  int etaModule = 0;
76  };
77  friend bool operator <(const ModuleId& lhs, const ModuleId& rhs);
78  typedef std::vector<ModuleId> EtaPattern; // list of module ids in each layer
79 
80 
81  // For a specific moduleId, stores pointers to the bitmasks of each pattern
82  // that contains this module, set during initialize().
83  // This class is also reused every input road, storing the hits in the module.
84 
86  {
87  std::vector<layer_bitmask_t*> m_pattern_bitmasks; // these point to the values in m_pattermap, created in initialize()
88  std::vector<const FPGATrackSimHit*> m_hits; // reset every input road
89 
90  void reset() { m_hits.clear(); }
92  void addHit(const FPGATrackSimHit* hit)
93  {
94  if (hit->getHitType() != HitType::wildcard) {
95  m_hits.push_back(hit);
97  (*counter) |= (1 << hit->getLayer());
98  }
99  }
100  const std::vector<const FPGATrackSimHit*> & getHits() const { return m_hits; }
101  };
102 
103 
105  // Event Storage
106  std::vector<FPGATrackSimRoad> m_postfilter_roads;
107 
109  // Convenience
110 
111  unsigned m_nLayers{}; // alias to m_FPGATrackSimMapping->PlaneMap1stStage()->getNLogiLayers();
112 
113  // The below maps are created in initialize, with fixed keys. But the counters (values)
114  // are reset every input road.
115  std::map<EtaPattern, layer_bitmask_t> m_patternmap;
116  // keys initialized from file
117  // for each input road, the bitmask is reset
118  std::vector<std::map<ModuleId, ModulesToPattern>> m_moduleHits;
119  // inverses the above map, mapping (layer, moduleId) to patterns
120  // note this stores pointers to m_patternmap, and will modify it
121  // also stores a list of hits for each input road
122 
124  // Metadata and Monitoring
125 
127  // Helpers
128  void readPatterns(std::string const & filepath);
129  void buildMap();
130  void resetCounters();
132  void addRedundantPatterns(std::set<EtaPattern> & usedPatterns, EtaPattern const & currPatt, unsigned nExtra);
133  FPGATrackSimRoad buildRoad(std::pair<EtaPattern, layer_bitmask_t> const & patt, FPGATrackSimRoad* origr, int etaPatternID) const;
134  std::string to_string(const EtaPattern & patt) const;
135  std::string to_string(const FPGATrackSimRoad & road) const;
136  std::string to_string(const std::vector<unsigned> &v) const;
137 };
138 
139 
140 #endif // FPGATRACKSIMETAPATTERNFILTERTOOL_H
FPGATrackSimEtaPatternFilterTool::ModuleId
Definition: FPGATrackSimEtaPatternFilterTool.h:72
beamspotman.r
def r
Definition: beamspotman.py:676
FPGATrackSimEtaPatternFilterTool::ModulesToPattern::m_hits
std::vector< const FPGATrackSimHit * > m_hits
Definition: FPGATrackSimEtaPatternFilterTool.h:88
FPGATrackSimEtaPatternFilterTool::addRedundantPatterns
void addRedundantPatterns(std::set< EtaPattern > &usedPatterns, EtaPattern const &currPatt, unsigned nExtra)
Definition: FPGATrackSimEtaPatternFilterTool.cxx:235
FPGATrackSimEtaPatternFilterTool::ModulesToPattern::reset
void reset()
Definition: FPGATrackSimEtaPatternFilterTool.h:90
IFPGATrackSimMappingSvc.h
FPGATrackSimEtaPatternFilterTool::ModuleId::siTech
SiliconTech siTech
Definition: FPGATrackSimEtaPatternFilterTool.h:73
FPGATrackSimEtaPatternFilterTool::m_doEtaPatternConsts
Gaudi::Property< bool > m_doEtaPatternConsts
Definition: FPGATrackSimEtaPatternFilterTool.h:65
FPGATrackSimHit::getLayer
unsigned getLayer() const
Definition: FPGATrackSimHit.cxx:75
FPGATrackSimEtaPatternFilterTool::m_isSecondStage
Gaudi::Property< bool > m_isSecondStage
Definition: FPGATrackSimEtaPatternFilterTool.h:64
FPGATrackSimEtaPatternFilterTool::ModuleId::etaModule
int etaModule
Definition: FPGATrackSimEtaPatternFilterTool.h:75
FPGATrackSimEtaPatternFilterTool::ModulesToPattern
Definition: FPGATrackSimEtaPatternFilterTool.h:86
FPGATrackSimEtaPatternFilterTool::m_dynamicThreshold
Gaudi::Property< bool > m_dynamicThreshold
Definition: FPGATrackSimEtaPatternFilterTool.h:66
FPGATrackSimEtaPatternFilterTool::m_FPGATrackSimBankSvc
ServiceHandle< IFPGATrackSimBankSvc > m_FPGATrackSimBankSvc
Definition: FPGATrackSimEtaPatternFilterTool.h:57
FPGATrackSimEtaPatternFilterTool::to_string
std::string to_string(const EtaPattern &patt) const
Definition: FPGATrackSimEtaPatternFilterTool.cxx:322
FPGATrackSimHit
Definition: FPGATrackSimHit.h:38
FPGATrackSimEtaPatternFilterTool::m_postfilter_roads
std::vector< FPGATrackSimRoad > m_postfilter_roads
Definition: FPGATrackSimEtaPatternFilterTool.h:106
FPGATrackSimEtaPatternFilterTool::operator<
friend bool operator<(const ModuleId &lhs, const ModuleId &rhs)
Definition: FPGATrackSimEtaPatternFilterTool.cxx:26
HitType::wildcard
@ wildcard
FPGATrackSimEtaPatternFilterTool::resetCounters
void resetCounters()
Definition: FPGATrackSimEtaPatternFilterTool.cxx:203
FPGATrackSimEtaPatternFilterTool::m_FPGATrackSimMapping
ServiceHandle< IFPGATrackSimMappingSvc > m_FPGATrackSimMapping
Definition: FPGATrackSimEtaPatternFilterTool.h:56
FPGATrackSimEtaPatternFilterTool::buildMap
void buildMap()
Definition: FPGATrackSimEtaPatternFilterTool.cxx:112
SiliconTech
SiliconTech
Definition: FPGATrackSimTypes.h:25
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
FPGATrackSimEtaPatternFilterTool::ModulesToPattern::m_pattern_bitmasks
std::vector< layer_bitmask_t * > m_pattern_bitmasks
Definition: FPGATrackSimEtaPatternFilterTool.h:87
AthAlgTool.h
FPGATrackSimEtaPatternFilterTool::m_moduleHits
std::vector< std::map< ModuleId, ModulesToPattern > > m_moduleHits
Definition: FPGATrackSimEtaPatternFilterTool.h:118
FPGATrackSimEtaPatternFilterTool::addHitsToMap
void addHitsToMap(FPGATrackSimRoad *r)
Definition: FPGATrackSimEtaPatternFilterTool.cxx:213
FPGATrackSimEtaPatternFilterTool::m_threshold
Gaudi::Property< unsigned > m_threshold
Definition: FPGATrackSimEtaPatternFilterTool.h:63
FPGATrackSimEtaPatternFilterTool::initialize
virtual StatusCode initialize() override
Definition: FPGATrackSimEtaPatternFilterTool.cxx:44
FPGATrackSimEtaPatternFilterTool
Definition: FPGATrackSimEtaPatternFilterTool.h:36
IFPGATrackSimRoadFilterTool.h
Interface declaration for road filter tools.
FPGATrackSimEtaPatternFilterTool::m_nLayers
unsigned m_nLayers
Definition: FPGATrackSimEtaPatternFilterTool.h:111
FPGATrackSimEtaPatternFilterTool::filterRoads
virtual StatusCode filterRoads(const std::vector< FPGATrackSimRoad * > &prefilter_roads, std::vector< FPGATrackSimRoad * > &postfilter_roads) override
Definition: FPGATrackSimEtaPatternFilterTool.cxx:138
FPGATrackSimEtaPatternFilterTool::EtaPattern
std::vector< ModuleId > EtaPattern
Definition: FPGATrackSimEtaPatternFilterTool.h:78
FPGATrackSimEtaPatternFilterTool::ModuleId::zone
DetectorZone zone
Definition: FPGATrackSimEtaPatternFilterTool.h:74
FPGATrackSimEtaPatternFilterTool::buildRoad
FPGATrackSimRoad buildRoad(std::pair< EtaPattern, layer_bitmask_t > const &patt, FPGATrackSimRoad *origr, int etaPatternID) const
Definition: FPGATrackSimEtaPatternFilterTool.cxx:266
python.PyAthena.v
v
Definition: PyAthena.py:157
DetectorZone
DetectorZone
Definition: FPGATrackSimTypes.h:28
FPGATrackSimEtaPatternFilterTool::FPGATrackSimEtaPatternFilterTool
FPGATrackSimEtaPatternFilterTool(const std::string &, const std::string &, const IInterface *)
Definition: FPGATrackSimEtaPatternFilterTool.cxx:37
FPGATrackSimEtaPatternFilterTool::ModulesToPattern::getHits
const std::vector< const FPGATrackSimHit * > & getHits() const
Definition: FPGATrackSimEtaPatternFilterTool.h:100
layer_bitmask_t
uint32_t layer_bitmask_t
Definition: FPGATrackSimTypes.h:22
FPGATrackSimEtaPatternFilterTool::finalize
virtual StatusCode finalize() override
Definition: FPGATrackSimEtaPatternFilterTool.cxx:129
IFPGATrackSimBankSvc.h
FPGATrackSimEtaPatternFilterTool::ModulesToPattern::addPattern
void addPattern(layer_bitmask_t *counter)
Definition: FPGATrackSimEtaPatternFilterTool.h:91
FPGATrackSimRoad.h
Defines a class for roads.
FPGATrackSimEtaPatternFilterTool::ModulesToPattern::addHit
void addHit(const FPGATrackSimHit *hit)
Definition: FPGATrackSimEtaPatternFilterTool.h:92
FPGATrackSimEtaPatternFilterTool::readPatterns
void readPatterns(std::string const &filepath)
Definition: FPGATrackSimEtaPatternFilterTool.cxx:68
test_pyathena.counter
counter
Definition: test_pyathena.py:15
FPGATrackSimTypes.h
SiliconTech::undefined
@ undefined
FPGATrackSimRoad
Definition: FPGATrackSimRoad.h:29
FPGATrackSimHit::getHitType
HitType getHitType() const
Definition: FPGATrackSimHit.h:54
FPGATrackSimEtaPatternFilterTool::m_patternmap
std::map< EtaPattern, layer_bitmask_t > m_patternmap
Definition: FPGATrackSimEtaPatternFilterTool.h:115
DetectorZone::undefined
@ undefined
ServiceHandle< IFPGATrackSimMappingSvc >
FPGATrackSimEtaPatternFilterTool::m_pattern_file_path
Gaudi::Property< std::string > m_pattern_file_path
Definition: FPGATrackSimEtaPatternFilterTool.h:62