ATLAS Offline Software
FPGATrackSimSpacepointRoadFilterTool.cxx
Go to the documentation of this file.
1 // Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 
16 
18 
19 #include "TH2.h"
20 
21 #include <sstream>
22 #include <fstream>
23 #include <cmath>
24 #include <algorithm>
25 #include <boost/dynamic_bitset.hpp>
26 #include <iostream>
27 
28 // TODO all this code should be rewritten once duplication is removed.
29 
31 // AthAlgTool
32 
33 FPGATrackSimSpacepointRoadFilterTool::FPGATrackSimSpacepointRoadFilterTool(const std::string& algname, const std::string &name, const IInterface *ifc) :
34  base_class(algname, name, ifc)
35 {
36  declareInterface<IFPGATrackSimRoadFilterTool>(this);
37 }
38 
39 
41 {
42  // Retrieve info
43  ATH_CHECK(m_FPGATrackSimMapping.retrieve());
44  ATH_CHECK(m_FPGATrackSimBankSvc.retrieve());
45 
46  // This should be done properly through the monitors, later.
47  m_inputRoads = new TH1I("srft_input_roads", "srft_input_roads", 1000, -0.5, 1000-0.5);
48  m_inputRoads_2nd = new TH1I("srft_input_roads_2nd", "srft_input_roads_2nd", 1000, -0.5, 1000-0.5);
49  m_badRoads = new TH1I("srft_bad_roads", "srft_bad_roads", 1000, -0.5, 1000-0.5);
50  m_badRoads_2nd = new TH1I("srft_bad_roads_2nd", "srft_bad_roads_2nd", 1000, -0.5, 1000-0.5);
51 
52  return StatusCode::SUCCESS;
53 }
54 
56 {
57  ATH_MSG_DEBUG("Spacepoint road filter: processed average of " << m_inputRoads->GetMean() << " input roads, found average of " << m_badRoads->GetMean() << " bad roads per event.");
58  ATH_MSG_DEBUG("Spacepoint road filter 2nd: processed average of " << m_inputRoads_2nd->GetMean() << " input roads, found average of " << m_badRoads_2nd->GetMean() << " bad roads per event.");
59  return StatusCode::SUCCESS;
60 }
61 
63 // Main Algorithm
64 
65 StatusCode FPGATrackSimSpacepointRoadFilterTool::filterRoads(const std::vector<FPGATrackSimRoad*> & prefilter_roads, std::vector<FPGATrackSimRoad*> & postfilter_roads) {
66  // Record the number of input roads and roads with problems.
67  int badRoads = 0;
68  bool isSecondStage = false;
69  if (prefilter_roads.size() > 0) {
70  // NOTE when we add back support for second stage roads, fix this.
71  isSecondStage = false; //prefilter_roads[0]->isSecondStage();
72  if (isSecondStage) {
73  m_inputRoads_2nd->Fill(prefilter_roads.size());
74  } else {
75  m_inputRoads->Fill(prefilter_roads.size());
76  }
77  }
78 
79  // Depending on isSecondStage, clear the underlying memory for the filtered roads.
80  postfilter_roads.clear();
81  if (prefilter_roads.size() == 0) {
82  m_postfilter_roads_2nd.clear();
83  m_postfilter_roads.clear();
84  return StatusCode::SUCCESS;
85  }
86  if (isSecondStage) {
87  m_postfilter_roads_2nd.clear();
88  } else {
89  m_postfilter_roads.clear();
90  }
91 
92  // This tool takes a road and checks to see if there are any layers containing
93  // both spacepoints and unpaired strip hits. If so, it splits the road into
94  // multiple roads as many times as needed to remove this ambiguity, such that
95  // every layer in each created road contains *only* spacepoints or hits, but
96  // not both. Then we can match each new road unambiguously to a single set of
97  // spacepoint-dependent fit constants.
98  for (auto& road : prefilter_roads) {
99  bool success = splitRoad(road);
100  if (!success) {
101  badRoads += 1;
102  }
103  }
104  if (isSecondStage) {
105  m_badRoads_2nd->Fill(badRoads);
106  } else {
107  m_badRoads->Fill(badRoads);
108  }
109 
110  // copy roads to outputs - borrowed from the eta pattern filter.
111  postfilter_roads.reserve((isSecondStage) ? m_postfilter_roads_2nd.size() : m_postfilter_roads.size());
112  for (FPGATrackSimRoad & r : (isSecondStage ? m_postfilter_roads_2nd : m_postfilter_roads))
113  postfilter_roads.push_back(&r);
114 
115  return StatusCode::SUCCESS;
116 }
117 
119 
120  // Loop through the initial road, keeping track of the spacepoints and single hits as we go.
121  std::map<size_t, std::vector<const FPGATrackSimHit*>> strip_hits;
122  std::map<size_t, std::vector<const FPGATrackSimHit*>> inner_spacepoints;
123  std::map<size_t, std::vector<const FPGATrackSimHit*>> outer_spacepoints;
124 
125  bool retval = true;
126  // Loop over each pair of strip layers.
127  for (size_t layer = 0; layer < initial_road->getNLayers(); layer++) {
128  // Do nothing for pixel layers.
129  /*if (initial_road->isSecondStage()){
130  if(m_FPGATrackSimMapping->PlaneMap_2nd()->isPixel(layer)){
131  continue;
132  }
133  }
134  else*/ if (m_FPGATrackSimMapping->PlaneMap_1st()->isPixel(layer)) {
135  continue;
136  }
137 
138  // Get the hits in these two layers, split by whether or not they are SPs.
139  std::vector<const FPGATrackSimHit*> strip_hits_in;
140  std::vector<const FPGATrackSimHit*> spacepoints_in;
141  const std::vector<const FPGATrackSimHit*> hits_in = initial_road->getHits(layer);
142  for (auto* hit : hits_in) {
143  if (hit->getHitType() == HitType::spacepoint) {
144  spacepoints_in.push_back(hit);
145  } else {
146  strip_hits_in.push_back(hit);
147  }
148  }
149 
150  // Do the same for the next layer.
151  std::vector<const FPGATrackSimHit*> strip_hits_out;
152  std::vector<const FPGATrackSimHit*> spacepoints_out;
153  const std::vector<const FPGATrackSimHit*> hits_out = initial_road->getHits(layer + 1);
154  for (auto* hit : hits_out) {
155  if (hit->getHitType() == HitType::spacepoint) {
156  spacepoints_out.push_back(hit);
157  } else {
158  strip_hits_out.push_back(hit);
159  }
160  }
161 
162  // Now, we have a potential issue if, for whatever reason, we only have one copy of a duplicated spacepoint.
163  // I wrote this kind of clunky logic to find and fix this; where "fix" means either "drop the half-spacepoint"
164  // or "convert it back to an unpaired strip hit" depending on whether filering is turned on.
165  // In principle the only way this can happen legitimately is in the eta pattern filter; if it happens
166  // for any other reason it's a bug.
167 
168  std::vector<const FPGATrackSimHit*> new_sp_in;
169  std::vector<const FPGATrackSimHit*> new_sp_out;
170  unsigned num_unique = findUnique(spacepoints_in, spacepoints_out, strip_hits_in, strip_hits_out, new_sp_in, new_sp_out);
171 
172  if (num_unique > 0) {
173  // This can now only happen due to eta pattern filtering, so don't drop the road, but leave a way to track.
174  retval = false;
175 
176  // Update the spacepoint vectors.
177  spacepoints_in = new_sp_in;
178  spacepoints_out = new_sp_out;
179 
180  // Now update the two layers accordingly, having converted invalid SPs back to paired hits.
181  std::vector<const FPGATrackSimHit*> new_all_in = spacepoints_in;
182  new_all_in.insert(std::end(new_all_in), std::begin(strip_hits_in), std::end(strip_hits_in));
183  initial_road->setHits(layer, new_all_in);
184 
185  std::vector<const FPGATrackSimHit*> new_all_out = spacepoints_out;
186  new_all_out.insert(std::end(new_all_out), std::begin(strip_hits_out), std::end(strip_hits_out));
187  initial_road->setHits(layer + 1, new_all_out);
188 
189  // Debug message.
190  ATH_MSG_DEBUG("Found inconsistent number of spacepoints in road with x = " << initial_road->getXBin() << ", y = " << initial_road->getYBin());
191  }
192 
193  strip_hits.emplace(layer, strip_hits_in);
194  strip_hits.emplace(layer + 1, strip_hits_out);
195 
196  // Update our spacepoint maps now that any uniques have been eliminated.
197  inner_spacepoints.emplace(layer, spacepoints_in);
198  outer_spacepoints.emplace(layer+1, spacepoints_out);
199  if (spacepoints_in.size() != spacepoints_out.size()) {
200  ATH_MSG_WARNING("Handling of unique spacepoints failed, " << spacepoints_in.size() << " != " << spacepoints_out.size());
201  return false;
202  }
203 
204  layer += 1;
205  }
206 
207  // Create a copy of the initial road. this is our first working road.
208  std::vector<FPGATrackSimRoad> working_roads;
209  FPGATrackSimRoad new_road(*initial_road);
210  working_roads.push_back(new_road);
211 
212  // Now loop through the processed spacepoints.
213  for (auto& entry : inner_spacepoints) {
214  size_t layer = entry.first;
215 
216  // Look up the associated strip hits.
217  std::vector<const FPGATrackSimHit*> strip_hits_in = strip_hits[layer];
218  std::vector<const FPGATrackSimHit*> strip_hits_out = strip_hits[layer + 1];
219 
220  ATH_MSG_DEBUG("Road (x = " << new_road.getXBin() << ", y = " << new_road.getYBin() << ") has merged spacepoints: " << entry.second.size() << ", unpaired inner hits: " << strip_hits_in.size() << ", unpaired outer hits: " << strip_hits_out.size());
221 
222  // If we have a nonzero number of hits AND spacepoints in this pair of layers,
223  // then we'll need to split the road.
224  if ((strip_hits_in.size() > 0 && entry.second.size() > 0) ||
225  (strip_hits_out.size() > 0 && entry.second.size() > 0)) {
226 
227  // If there is only a strip hit in one of the two layers, we'll need to add a wildcard.
228  int wildcard_layer = -1;
229  if (strip_hits_in.size() == 0 || strip_hits_out.size() == 0) {
230  FPGATrackSimHit *wcHit = new FPGATrackSimHit();
232  wcHit->setDetType(/*initial_road->isSecondStage() ? m_FPGATrackSimMapping->PlaneMap_2nd()->getDetType(layer) :*/ m_FPGATrackSimMapping->PlaneMap_1st()->getDetType(layer));
233  if (strip_hits_in.size() == 0) {
234  strip_hits_in.push_back(wcHit);
235  wildcard_layer = layer;
236  } else {
237  strip_hits_out.push_back(wcHit);
238  wildcard_layer = layer + 1;
239  }
240  wcHit->setLayer(wildcard_layer);
241  }
242 
243  // This could probably be expressed with an iterator, but it's a little cleaner
244  // this way. we want to replace each working_road with two new working roads.
245  unsigned num_working = working_roads.size();
246  for (unsigned i = 0; i < num_working; i++) {
247  // For each working road, create two new ones!
248  FPGATrackSimRoad strips_only(working_roads[i]);
249  FPGATrackSimRoad spacepoints_only(working_roads[i]);
250 
251  // Update their hits in these layers accordingly.
252  strips_only.setHits(layer, strip_hits_in);
253  strips_only.setHits(layer + 1, strip_hits_out);
254  spacepoints_only.setHits(layer, entry.second);
255  spacepoints_only.setHits(layer + 1, outer_spacepoints[layer + 1]);
256 
257  // If we inserted a wildcard hit previously, update the WC layers accordingly
258  // in the strips_only road.
259  if (wildcard_layer != -1) {
260  layer_bitmask_t wc_layers = strips_only.getWCLayers();
261  wc_layers |= (0x1 << wildcard_layer);
262  strips_only.setWCLayers(wc_layers);
263 
264  layer_bitmask_t hit_layers = strips_only.getHitLayers();
265  hit_layers -= (0x1 << wildcard_layer);
266  if (strips_only.getHitLayers() < (unsigned)(0x1 << wildcard_layer)) {
267  ATH_MSG_WARNING("Found weird problem: current layers is " << strips_only.getHitLayers() << ", adding wildcard in layer " << wildcard_layer);
268  }
269  strips_only.setHitLayers(hit_layers);
270  }
271 
272  // Because we are only iterating up to the *original* size, we can add new
273  // entries to the end like this.
274  // Require that we only keep roads that have enough hits to save time.
275  working_roads[i] = spacepoints_only;
276  if (strips_only.getNHitLayers() >= m_threshold) {
277  working_roads.push_back(strips_only);
278  }
279  }
280  }
281  }
282 
283  ATH_MSG_DEBUG("Created " << working_roads.size() << " new roads in spacepoint road filter.");
284 
285  // Now, any finalized roads need to have their sectors set/updated, and added to the output vector.
286  for (auto road : working_roads) {
287  //if (initial_road->isSecondStage()) road.setSecondStage();
288  unsigned numSpacePlusPixel = setSector(road);
289  ATH_MSG_DEBUG("This road has sector = " << road.getSector() << " and q/pt = " << road.getX() << ", x = " << road.getY());
290 
291  // Filter any roads that don't have enough real hits.
292  if (road.getNHitLayers() < m_threshold) {
293  continue;
294  }
295 
296  // Filter any roads that don't have enough spacepoints + pixel hits.
297  if (numSpacePlusPixel < (/*initial_road->isSecondStage() ? m_minSpacePlusPixel2 :*/ m_minSpacePlusPixel)) {
298  continue;
299  }
300 
301  // NOTE fix with second stage support later.
302  /*if (initial_road->isSecondStage()) {
303  m_postfilter_roads_2nd.push_back(road);
304  } else {*/
305  m_postfilter_roads.push_back(road);
306  //}
307  }
308 
309  return retval;
310 }
311 
313  // We've now removed any ambiguity, and so can assign the road's sector.
314  int sectorbin = road.getSectorBin();
315  std::vector<module_t> modules;
316 
317  ATH_MSG_DEBUG("Road has sector bin ID: " << sectorbin << ", layers: " << road.getNLayers());
318  unsigned num_pixel = 0;
319  unsigned num_spacepoints = 0;
320  for (unsigned int il = 0; il < road.getNLayers(); il++) {
321  if (road.getNHits_layer()[il] == 0) {
322  modules.push_back(-1);
323  } else if (road.getNHits_layer()[il] == 1 && road.getHits(il)[0]->getHitType() == HitType::wildcard) {
324  modules.push_back(-1);
325  //ATH_MSG_INFO(" modules[" << il << "] = -1");
326  } else {
327  // Add 100 to the sector bin if this layer contains spacepoints.
328  // We know at this stage that a layer will only have spacepoints or hits
329  // so we can just check teh first hit.
330  bool is_spacepoint = (road.getHits(il)[0]->getHitType() == HitType::spacepoint);
331  bool is_pixel = (road.getHits(il)[0]->isPixel());
332  modules.push_back(is_spacepoint ? sectorbin + fpgatracksim::SPACEPOINT_SECTOR_OFFSET : sectorbin);
333  //ATH_MSG_INFO(" modules[" << il << "] = " << (is_spacepoint ? 100+sectorbin : sectorbin));
334  if (is_spacepoint) {
335  num_spacepoints += 1;
336  }
337  if (is_pixel) {
338  num_pixel += 1;
339  }
340  }
341  }
342 
343  unsigned numSpacePlusPixel = (num_spacepoints/2) + num_pixel;
344  const FPGATrackSimSectorBank* sectorbank = m_FPGATrackSimBankSvc->SectorBank_1st(); //: m_FPGATrackSimBankSvc->SectorBank_2nd();
345  // Written a bit unintuitively, but the "default" should be that it's not second stage
346  // NOTE fix this when we add second stage roads back.
347  road.setSector(sectorbank->findSector(modules));
348  return numSpacePlusPixel;
349 }
350 
351 unsigned FPGATrackSimSpacepointRoadFilterTool::findUnique(std::vector<const FPGATrackSimHit*>& sp_in, std::vector<const FPGATrackSimHit*>& sp_out,
352  std::vector<const FPGATrackSimHit*>& unique_in, std::vector<const FPGATrackSimHit*>& unique_out,
353  std::vector<const FPGATrackSimHit*>& new_sp_in, std::vector<const FPGATrackSimHit*>& new_sp_out) {
354 
355  std::map<std::tuple<float, float, float>, const FPGATrackSimHit*> merged_map;
356  std::tuple<float, float, float> coords;
357 
358  // Loop over the inner spacepoints and fill the (x,y,z)->hit map.
359  unsigned num_unique = 0;
360  for (auto* spacepoint : sp_in) {
361  coords = {spacepoint->getX(), spacepoint->getY(), spacepoint->getZ()};
362  merged_map.try_emplace(coords, spacepoint);
363  }
364 
365  // Loop over the outer spacepoints. If a hit is *not* in the map already,
366  // then it's unique. In which case we either convert it back to a normal hit
367  // and add it to the "unique_out" vector, or we
368  for (auto* spacepoint : sp_out) {
369  coords = {spacepoint->getX(), spacepoint->getY(), spacepoint->getZ()};
370  if (merged_map.count(coords) == 0) {
371  merged_map.emplace(coords, spacepoint);
372  if (!m_filtering) {
373  FPGATrackSimHit* original = new FPGATrackSimHit(spacepoint->getOriginalHit());
374  unique_out.push_back(original);
375  }
376  num_unique += 1;
377  } else {
378  new_sp_out.push_back(spacepoint);
379  // Remove this from the map to mark that we found it.
380  merged_map.erase(coords);
381  }
382  }
383 
384  // Now loop over the inner hits a second time, and find the unique entries.
385  // At this point, if it IS present in the map, it's a unique entry.
386  for (auto* spacepoint : sp_in) {
387  coords = {spacepoint->getX(), spacepoint->getY(), spacepoint->getZ()};
388  if (merged_map.count(coords) != 0) {
389  if (!m_filtering) {
390  FPGATrackSimHit* original = new FPGATrackSimHit(spacepoint->getOriginalHit());
391  unique_in.push_back(original);
392  }
393  num_unique += 1;
394  } else {
395  new_sp_in.push_back(spacepoint);
396  }
397  }
398 
399  return num_unique;
400 }
PlotCalibFromCool.il
il
Definition: PlotCalibFromCool.py:381
beamspotman.r
def r
Definition: beamspotman.py:676
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
FPGATrackSimRoad::getHitLayers
layer_bitmask_t getHitLayers() const
Definition: FPGATrackSimRoad.h:82
getMenu.algname
algname
Definition: getMenu.py:53
FPGATrackSimSpacepointRoadFilterTool::finalize
virtual StatusCode finalize() override
Definition: FPGATrackSimSpacepointRoadFilterTool.cxx:55
FPGATrackSimSpacepointRoadFilterTool::m_FPGATrackSimMapping
ServiceHandle< IFPGATrackSimMappingSvc > m_FPGATrackSimMapping
Definition: FPGATrackSimSpacepointRoadFilterTool.h:60
FPGATrackSimSpacepointRoadFilterTool::m_postfilter_roads_2nd
std::vector< FPGATrackSimRoad > m_postfilter_roads_2nd
Definition: FPGATrackSimSpacepointRoadFilterTool.h:74
TH1I
Definition: rootspy.cxx:332
FPGATrackSimPlaneMap.h
Maps physical layers to logical layers.
FPGATrackSimSpacepointRoadFilterTool::findUnique
unsigned findUnique(std::vector< const FPGATrackSimHit * > &sp_in, std::vector< const FPGATrackSimHit * > &sp_out, std::vector< const FPGATrackSimHit * > &unique_in, std::vector< const FPGATrackSimHit * > &unique_out, std::vector< const FPGATrackSimHit * > &new_sp_in, std::vector< const FPGATrackSimHit * > &new_sp_out)
Definition: FPGATrackSimSpacepointRoadFilterTool.cxx:351
IFPGATrackSimMappingSvc.h
fpgatracksim::SPACEPOINT_SECTOR_OFFSET
constexpr int SPACEPOINT_SECTOR_OFFSET
Definition: FPGATrackSimConstants.h:22
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
FPGATrackSimSpacepointRoadFilterTool::m_minSpacePlusPixel
Gaudi::Property< unsigned > m_minSpacePlusPixel
Definition: FPGATrackSimSpacepointRoadFilterTool.h:67
FPGATrackSimRoad::getSectorBin
int getSectorBin() const
Definition: FPGATrackSimRoad.h:80
FPGATrackSimRoad::getHits
std::vector< const FPGATrackSimHit * > const & getHits(size_t layer) const
Definition: FPGATrackSimRoad.h:87
HitType::spacepoint
@ spacepoint
FPGATrackSimRoad::getNHitLayers
size_t getNHitLayers() const
Definition: FPGATrackSimRoad.h:99
FPGATrackSimSpacepointRoadFilterTool::splitRoad
bool splitRoad(FPGATrackSimRoad *initial_road)
Definition: FPGATrackSimSpacepointRoadFilterTool.cxx:118
FPGATrackSimRoad::getNHits_layer
std::vector< size_t > getNHits_layer() const
Definition: FPGATrackSimRoad.cxx:25
xAOD::unsigned
unsigned
Definition: RingSetConf_v1.cxx:662
FPGATrackSimSpacepointRoadFilterTool::setSector
unsigned setSector(FPGATrackSimRoad &road)
Definition: FPGATrackSimSpacepointRoadFilterTool.cxx:312
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
FPGATrackSimHit
Definition: FPGATrackSimHit.h:38
HitType::wildcard
@ wildcard
LArCellBinning_test.retval
def retval
Definition: LArCellBinning_test.py:112
FPGATrackSimHit::setDetType
void setDetType(SiliconTech detType)
Definition: FPGATrackSimHit.h:52
FPGATrackSimSpacepointRoadFilterTool::m_postfilter_roads
std::vector< FPGATrackSimRoad > m_postfilter_roads
Definition: FPGATrackSimSpacepointRoadFilterTool.h:73
FPGATrackSimSectorBank::findSector
sector_t findSector(std::vector< module_t > const &modules) const
Definition: FPGATrackSimSectorBank.cxx:121
lumiFormat.i
int i
Definition: lumiFormat.py:92
FPGATrackSimSpacepointRoadFilterTool::m_filtering
Gaudi::Property< bool > m_filtering
Definition: FPGATrackSimSpacepointRoadFilterTool.h:69
FPGATrackSimSpacepointRoadFilterTool::m_badRoads
TH1I * m_badRoads
Definition: FPGATrackSimSpacepointRoadFilterTool.h:82
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
FPGATrackSimSpacepointRoadFilterTool::m_threshold
Gaudi::Property< unsigned > m_threshold
Definition: FPGATrackSimSpacepointRoadFilterTool.h:66
FPGATrackSimSpacepointRoadFilterTool::initialize
virtual StatusCode initialize() override
Definition: FPGATrackSimSpacepointRoadFilterTool.cxx:40
FPGATrackSimRoad::getXBin
unsigned getXBin() const
Definition: FPGATrackSimRoad.h:72
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
FPGATrackSimSectorBank
Definition: FPGATrackSimSectorBank.h:30
FPGATrackSimRoad::getYBin
unsigned getYBin() const
Definition: FPGATrackSimRoad.h:73
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
FPGATrackSimHit.h
: FPGATrackSim-specific class to represent an hit in the detector.
FPGATrackSimSpacepointRoadFilterTool.h
FPGATrackSimRoad::getWCLayers
layer_bitmask_t getWCLayers() const
Definition: FPGATrackSimRoad.h:83
FPGATrackSimSpacepointRoadFilterTool::m_inputRoads
TH1I * m_inputRoads
Definition: FPGATrackSimSpacepointRoadFilterTool.h:81
FPGATrackSimSpacepointRoadFilterTool::m_inputRoads_2nd
TH1I * m_inputRoads_2nd
Definition: FPGATrackSimSpacepointRoadFilterTool.h:83
FPGATrackSimHit::setLayer
void setLayer(unsigned v)
Definition: FPGATrackSimHit.h:87
FPGATrackSimRoad::setSector
void setSector(sector_t sector)
Definition: FPGATrackSimRoad.h:50
FPGATrackSimRoad::getNLayers
size_t getNLayers() const
Definition: FPGATrackSimRoad.h:98
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
layer_bitmask_t
uint32_t layer_bitmask_t
Definition: FPGATrackSimTypes.h:22
IFPGATrackSimBankSvc.h
FPGATrackSimSpacepointRoadFilterTool::m_badRoads_2nd
TH1I * m_badRoads_2nd
Definition: FPGATrackSimSpacepointRoadFilterTool.h:84
FPGATrackSimRoad::setHits
void setHits(std::vector< std::vector< const FPGATrackSimHit * >> const &hits)
Definition: FPGATrackSimRoad.h:57
FPGATrackSimSpacepointRoadFilterTool::filterRoads
virtual StatusCode filterRoads(const std::vector< FPGATrackSimRoad * > &prefilter_roads, std::vector< FPGATrackSimRoad * > &postfilter_roads) override
Definition: FPGATrackSimSpacepointRoadFilterTool.cxx:65
FPGATrackSimRoad::setHitLayers
void setHitLayers(layer_bitmask_t hit_layers)
Definition: FPGATrackSimRoad.h:53
FPGATrackSimTypes.h
FPGATrackSimSectorBank.h
This file declares a class that stores the module IDs of the sectors.
FPGATrackSimSpacepointRoadFilterTool::m_FPGATrackSimBankSvc
ServiceHandle< IFPGATrackSimBankSvc > m_FPGATrackSimBankSvc
Definition: FPGATrackSimSpacepointRoadFilterTool.h:61
FPGATrackSimRoad
Definition: FPGATrackSimRoad.h:29
FPGATrackSimRoad::setWCLayers
void setWCLayers(layer_bitmask_t wc_layers)
Definition: FPGATrackSimRoad.h:54
FPGATrackSimSpacepointRoadFilterTool::FPGATrackSimSpacepointRoadFilterTool
FPGATrackSimSpacepointRoadFilterTool(const std::string &, const std::string &, const IInterface *)
Definition: FPGATrackSimSpacepointRoadFilterTool.cxx:33
FPGATrackSimHit::setHitType
void setHitType(HitType type)
Definition: FPGATrackSimHit.h:51