ATLAS Offline Software
Public Member Functions | Private Member Functions | Private Attributes | List of all members
FPGATrackSimSpacepointRoadFilterTool Class Reference

#include <FPGATrackSimSpacepointRoadFilterTool.h>

Inheritance diagram for FPGATrackSimSpacepointRoadFilterTool:
Collaboration diagram for FPGATrackSimSpacepointRoadFilterTool:

Public Member Functions

virtual StatusCode initialize () override
 
virtual StatusCode finalize () override
 
virtual StatusCode filterRoads (std::vector< std::shared_ptr< const FPGATrackSimRoad >> &prefilter_roads, std::vector< std::shared_ptr< const FPGATrackSimRoad >> &postfilter_roads) override
 

Private Member Functions

bool splitRoad (FPGATrackSimRoad *initial_road)
 
unsigned setSector (FPGATrackSimRoad &road)
 
unsigned findUnique (std::vector< std::shared_ptr< const FPGATrackSimHit >> &sp_in, std::vector< std::shared_ptr< const FPGATrackSimHit >> &sp_out, std::vector< std::shared_ptr< const FPGATrackSimHit >> &unique_in, std::vector< std::shared_ptr< const FPGATrackSimHit >> &unique_out, std::vector< std::shared_ptr< const FPGATrackSimHit >> &new_sp_in, std::vector< std::shared_ptr< const FPGATrackSimHit >> &new_sp_out)
 

Private Attributes

ServiceHandle< IFPGATrackSimMappingSvcm_FPGATrackSimMapping {this, "FPGATrackSimMappingSvc", "FPGATrackSimMappingSvc"}
 
ServiceHandle< IFPGATrackSimBankSvcm_FPGATrackSimBankSvc {this, "FPGATrackSimBankSvc", ""}
 
Gaudi::Property< unsigned > m_threshold {this, "threshold", 0, "Minimum number of hit layers to accept as a road (inclusive"}
 
Gaudi::Property< unsigned > m_minSpacePlusPixel {this, "minSpacePlusPixel", 0, "Minimum number of '2D' hits to accept as a road"}
 
Gaudi::Property< unsigned > m_minSpacePlusPixel2 {this, "minSpacePlusPixel2", 0, "Minimum number of '2D' hits to accept as a road for 2nd stage"}
 
Gaudi::Property< bool > m_filtering {this, "filtering", 0, "Filter out unpaired strip hits"}
 
Gaudi::Property< bool > m_setSectors {this, "setSectors", true, "Should the bank service be used to set sectors."}
 
Gaudi::Property< bool > m_isSecondStage {this, "isSecondStage", false, "Is this the second stage?"}
 
Gaudi::Property< bool > m_dropUnpairedIfSP {this, "dropUnpairedIfSP", true, "If there are spacepoints in a layer, drop any additional unpaired strip hits" }
 
std::vector< FPGATrackSimRoadm_postfilter_roads
 
TH1I * m_inputRoads {nullptr}
 
TH1I * m_badRoads {nullptr}
 

Detailed Description

Definition at line 39 of file FPGATrackSimSpacepointRoadFilterTool.h.

Member Function Documentation

◆ filterRoads()

StatusCode FPGATrackSimSpacepointRoadFilterTool::filterRoads ( std::vector< std::shared_ptr< const FPGATrackSimRoad >> &  prefilter_roads,
std::vector< std::shared_ptr< const FPGATrackSimRoad >> &  postfilter_roads 
)
overridevirtual

Definition at line 57 of file FPGATrackSimSpacepointRoadFilterTool.cxx.

57  {
58  // Record the number of input roads and roads with problems.
59  int badRoads = 0;
60  if (prefilter_roads.size() > 0) {
61  m_inputRoads->Fill(prefilter_roads.size());
62  }
63 
64  // Clear the underlying memory for the filtered roads.
65  postfilter_roads.clear();
66  m_postfilter_roads.clear();
67  if (prefilter_roads.size() == 0) {
68  return StatusCode::SUCCESS;
69  }
70 
71 
72  // This tool takes a road and checks to see if there are any layers containing
73  // both spacepoints and unpaired strip hits. If so, it splits the road into
74  // multiple roads as many times as needed to remove this ambiguity, such that
75  // every layer in each created road contains *only* spacepoints or hits, but
76  // not both. Then we can match each new road unambiguously to a single set of
77  // spacepoint-dependent fit constants.
78  for (auto & road : prefilter_roads) {
79  std::shared_ptr<FPGATrackSimRoad> nonConstRoad = std::const_pointer_cast<FPGATrackSimRoad>(road);
80  bool success = splitRoad(nonConstRoad.get());
81  road = nonConstRoad;
82  if (!success) {
83  badRoads += 1;
84  }
85  }
86 
87  m_badRoads->Fill(badRoads);
88 
89  // copy roads to outputs - borrowed from the eta pattern filter.
90  postfilter_roads.reserve(m_postfilter_roads.size());
92  postfilter_roads.emplace_back(std::make_shared<const FPGATrackSimRoad>(r));
93 
94  return StatusCode::SUCCESS;
95 }

◆ finalize()

StatusCode FPGATrackSimSpacepointRoadFilterTool::finalize ( )
overridevirtual

Definition at line 48 of file FPGATrackSimSpacepointRoadFilterTool.cxx.

49 {
50  ATH_MSG_DEBUG("Spacepoint road filter: processed average of " << m_inputRoads->GetMean() << " input roads, found average of " << m_badRoads->GetMean() << " bad roads per event.");
51  return StatusCode::SUCCESS;
52 }

◆ findUnique()

unsigned FPGATrackSimSpacepointRoadFilterTool::findUnique ( std::vector< std::shared_ptr< const FPGATrackSimHit >> &  sp_in,
std::vector< std::shared_ptr< const FPGATrackSimHit >> &  sp_out,
std::vector< std::shared_ptr< const FPGATrackSimHit >> &  unique_in,
std::vector< std::shared_ptr< const FPGATrackSimHit >> &  unique_out,
std::vector< std::shared_ptr< const FPGATrackSimHit >> &  new_sp_in,
std::vector< std::shared_ptr< const FPGATrackSimHit >> &  new_sp_out 
)
private

Definition at line 333 of file FPGATrackSimSpacepointRoadFilterTool.cxx.

335  {
336 
337  std::map<std::tuple<float, float, float>, std::shared_ptr<const FPGATrackSimHit>> merged_map;
338  std::tuple<float, float, float> coords;
339 
340  // Loop over the inner spacepoints and fill the (x,y,z)->hit map.
341  unsigned num_unique = 0;
342  for (const auto& spacepoint : sp_in) {
343  coords = {spacepoint->getX(), spacepoint->getY(), spacepoint->getZ()};
344  merged_map.try_emplace(coords, spacepoint);
345  }
346 
347  // Loop over the outer spacepoints. If a hit is *not* in the map already,
348  // then it's unique. In which case we either convert it back to a normal hit
349  // and add it to the "unique_out" vector, or we
350  for (auto& spacepoint : sp_out) {
351  coords = {spacepoint->getX(), spacepoint->getY(), spacepoint->getZ()};
352  if (merged_map.count(coords) == 0) {
353  merged_map.emplace(coords, spacepoint);
354  if (!m_filtering) {
355  std::unique_ptr<const FPGATrackSimHit> original = std::make_unique<FPGATrackSimHit>(spacepoint->getOriginalHit());
356  unique_out.push_back(std::move(original));
357  }
358  num_unique += 1;
359  } else {
360  new_sp_out.push_back(spacepoint);
361  // Remove this from the map to mark that we found it.
362  merged_map.erase(coords);
363  }
364  }
365 
366  // Now loop over the inner hits a second time, and find the unique entries.
367  // At this point, if it IS present in the map, it's a unique entry.
368  for (auto& spacepoint : sp_in) {
369  coords = {spacepoint->getX(), spacepoint->getY(), spacepoint->getZ()};
370  if (merged_map.count(coords) != 0) {
371  if (!m_filtering) {
372  std::unique_ptr<const FPGATrackSimHit> original = std::make_unique<FPGATrackSimHit>(spacepoint->getOriginalHit());
373  unique_in.push_back(std::move(original));
374  }
375  num_unique += 1;
376  } else {
377  new_sp_in.push_back(spacepoint);
378  }
379  }
380 
381  return num_unique;
382 }

◆ initialize()

StatusCode FPGATrackSimSpacepointRoadFilterTool::initialize ( )
overridevirtual

Definition at line 31 of file FPGATrackSimSpacepointRoadFilterTool.cxx.

32 {
33  // Retrieve info
34  ATH_CHECK(m_FPGATrackSimMapping.retrieve());
36 
37  // Convert number of missing hits to threshold.
38  m_threshold = ((m_isSecondStage) ? m_FPGATrackSimMapping->PlaneMap_2nd(0)->getNLogiLayers() : m_FPGATrackSimMapping->PlaneMap_1st(0)->getNLogiLayers()) - m_threshold;
39 
40  // This should be done properly through the monitors, later.
41  m_inputRoads = new TH1I((m_isSecondStage) ? "srft_input_roads2" : "srft_input_roads", "srft_input_roads", 1000, -0.5, 1000-0.5);
42  m_badRoads = new TH1I((m_isSecondStage) ? "srft_bad_roads2" : "srft_bad_roads", "srft_bad_roads", 1000, -0.5, 1000-0.5);
43  ATH_MSG_INFO("Configuring SPRT for " << m_isSecondStage);
44 
45  return StatusCode::SUCCESS;
46 }

◆ setSector()

unsigned FPGATrackSimSpacepointRoadFilterTool::setSector ( FPGATrackSimRoad road)
private

Definition at line 292 of file FPGATrackSimSpacepointRoadFilterTool.cxx.

292  {
293  // We've now removed any ambiguity, and so can assign the road's sector.
294  int sectorbin = road.getSectorBin();
295  std::vector<module_t> modules;
296 
297  ATH_MSG_DEBUG("Road has sector bin ID: " << sectorbin << ", layers: " << road.getNLayers());
298  unsigned num_pixel = 0;
299  unsigned num_spacepoints = 0;
300  for (unsigned int il = 0; il < road.getNLayers(); il++) {
301  if (road.getNHits_layer()[il] == 0) {
302  modules.push_back(-1);
303  } else if (road.getNHits_layer()[il] == 1 && road.getHits(il)[0]->getHitType() == HitType::wildcard) {
304  modules.push_back(-1);
305  //ATH_MSG_INFO(" modules[" << il << "] = -1");
306  } else {
307  // Add 100 to the sector bin if this layer contains spacepoints.
308  // We know at this stage that a layer will only have spacepoints or hits
309  // so we can just check teh first hit.
310  bool is_spacepoint = (road.getHits(il)[0]->getHitType() == HitType::spacepoint);
311  bool is_pixel = (road.getHits(il)[0]->isPixel());
312  modules.push_back(is_spacepoint ? sectorbin + fpgatracksim::SPACEPOINT_SECTOR_OFFSET : sectorbin);
313  //ATH_MSG_INFO(" modules[" << il << "] = " << (is_spacepoint ? 100+sectorbin : sectorbin));
314  if (is_spacepoint) {
315  num_spacepoints += 1;
316  }
317  if (is_pixel) {
318  num_pixel += 1;
319  }
320  }
321  }
322 
323  unsigned numSpacePlusPixel = (num_spacepoints/2) + num_pixel;
324  if (m_setSectors) {
325  const FPGATrackSimSectorBank* sectorbank = m_isSecondStage ? m_FPGATrackSimBankSvc->SectorBank_2nd() : m_FPGATrackSimBankSvc->SectorBank_1st();
326  // Written a bit unintuitively, but the "default" should be that it's not second stage
327  // NOTE fix this when we add second stage roads back.
328  road.setSector(sectorbank->findSector(modules));
329  }
330  return numSpacePlusPixel;
331 }

◆ splitRoad()

bool FPGATrackSimSpacepointRoadFilterTool::splitRoad ( FPGATrackSimRoad initial_road)
private

Definition at line 97 of file FPGATrackSimSpacepointRoadFilterTool.cxx.

97  {
98 
99  // Loop through the initial road, keeping track of the spacepoints and single hits as we go.
100  std::map<size_t, std::vector<std::shared_ptr<const FPGATrackSimHit>>> strip_hits;
101  std::map<size_t, std::vector<std::shared_ptr<const FPGATrackSimHit>>> inner_spacepoints;
102  std::map<size_t, std::vector<std::shared_ptr<const FPGATrackSimHit>>> outer_spacepoints;
103 
104  bool retval = true;
105  // Loop over each pair of strip layers.
106  for (size_t layer = 0; layer < initial_road->getNLayers(); layer++) {
107  // Do nothing for pixel layers.
108  if (m_isSecondStage){
109  if(m_FPGATrackSimMapping->PlaneMap_2nd(initial_road->getSubRegion())->isPixel(layer)){
110  continue;
111  }
112  }
113  else if (m_FPGATrackSimMapping->PlaneMap_1st(initial_road->getSubRegion())->isPixel(layer)) {
114  continue;
115  }
116 
117  // Get the hits in these two layers, split by whether or not they are SPs.
118  std::vector<std::shared_ptr<const FPGATrackSimHit>> strip_hits_in;
119  std::vector<std::shared_ptr<const FPGATrackSimHit>> spacepoints_in;
120  const std::vector<std::shared_ptr<const FPGATrackSimHit>> hits_in = initial_road->getHits(layer);
121  for (auto& hit : hits_in) {
122  if (hit->getHitType() == HitType::spacepoint) {
123  spacepoints_in.push_back(hit);
124  } else {
125  strip_hits_in.push_back(hit);
126  }
127  }
128 
129  // Do the same for the next layer.
130  std::vector<std::shared_ptr<const FPGATrackSimHit>> strip_hits_out;
131  std::vector<std::shared_ptr<const FPGATrackSimHit>> spacepoints_out;
132  const std::vector<std::shared_ptr<const FPGATrackSimHit>> hits_out = initial_road->getHits(layer + 1);
133  for (auto& hit : hits_out) {
134  if (hit->getHitType() == HitType::spacepoint) {
135  spacepoints_out.push_back(hit);
136  } else {
137  strip_hits_out.push_back(hit);
138  }
139  }
140 
141  // Now, we have a potential issue if, for whatever reason, we only have one copy of a duplicated spacepoint.
142  // I wrote this kind of clunky logic to find and fix this; where "fix" means either "drop the half-spacepoint"
143  // or "convert it back to an unpaired strip hit" depending on whether filering is turned on.
144  // In principle the only way this can happen legitimately is in the eta pattern filter; if it happens
145  // for any other reason it's a bug.
146 
147  std::vector<std::shared_ptr<const FPGATrackSimHit>> new_sp_in;
148  std::vector<std::shared_ptr<const FPGATrackSimHit>> new_sp_out;
149  unsigned num_unique = findUnique(spacepoints_in, spacepoints_out, strip_hits_in, strip_hits_out, new_sp_in, new_sp_out);
150 
151  if (num_unique > 0) {
152  // This can now only happen due to eta pattern filtering, so don't drop the road, but leave a way to track.
153  retval = false;
154 
155  // Debug message. Let's see if this still happens, now.
156  ATH_MSG_DEBUG("Found inconsistent number of spacepoints in road with x = " << initial_road->getXBin() << ", y = " << initial_road->getYBin() << ": spacepoints_in = " << spacepoints_in << ", spacepoints_out = " << spacepoints_out);
157 
158  // Update the spacepoint vectors.
159  spacepoints_in = std::move(new_sp_in);
160  spacepoints_out = std::move(new_sp_out);
161 
162  // Now update the two layers accordingly, having converted invalid SPs back to paired hits.
163  std::vector<std::shared_ptr<const FPGATrackSimHit>> new_all_in = spacepoints_in;
164  new_all_in.insert(std::end(new_all_in), std::begin(strip_hits_in), std::end(strip_hits_in));
165  initial_road->setHits(layer, std::move(new_all_in));
166 
167  std::vector<std::shared_ptr<const FPGATrackSimHit>> new_all_out = spacepoints_out;
168  new_all_out.insert(std::end(new_all_out), std::begin(strip_hits_out), std::end(strip_hits_out));
169  initial_road->setHits(layer + 1, std::move(new_all_out));
170  }
171 
172  // Update our spacepoint maps now that any uniques have been eliminated.
173  inner_spacepoints.emplace(layer, spacepoints_in);
174  outer_spacepoints.emplace(layer+1, spacepoints_out);
175  if (spacepoints_in.size() != spacepoints_out.size()) {
176  ATH_MSG_WARNING("Handling of unique spacepoints failed, " << spacepoints_in.size() << " != " << spacepoints_out.size());
177  return false;
178  }
179 
180  // If told to do so, filter out any strip hits if there were ALSO spacepoints.
181  if (spacepoints_in.size() > 0 && !m_dropUnpairedIfSP) {
182  strip_hits_in.clear();
183  strip_hits_out.clear();
184  }
185  strip_hits.emplace(layer, strip_hits_in);
186  strip_hits.emplace(layer + 1, strip_hits_out);
187 
188  layer += 1;
189  }
190 
191  // Create a copy of the initial road. this is our first working road.
192  std::vector<FPGATrackSimRoad> working_roads;
193  FPGATrackSimRoad new_road(*initial_road);
194  working_roads.push_back(new_road);
195 
196  // Now loop through the processed spacepoints.
197  for (auto& entry : inner_spacepoints) {
198  size_t layer = entry.first;
199 
200  // Look up the associated strip hits.
201  std::vector<std::shared_ptr<const FPGATrackSimHit>> strip_hits_in = strip_hits[layer];
202  std::vector<std::shared_ptr<const FPGATrackSimHit>> strip_hits_out = strip_hits[layer + 1];
203 
204  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());
205 
206  // If we have a nonzero number of hits AND spacepoints in this pair of layers,
207  // then we'll need to split the road.
208  if ((strip_hits_in.size() > 0 && entry.second.size() > 0) ||
209  (strip_hits_out.size() > 0 && entry.second.size() > 0)) {
210 
211  // If there is only a strip hit in one of the two layers, we'll need to add a wildcard.
212  int wildcard_layer = -1;
213  if (strip_hits_in.size() == 0 || strip_hits_out.size() == 0) {
214  std::unique_ptr<FPGATrackSimHit> wcHit = std::make_unique<FPGATrackSimHit>();
216  wcHit->setDetType(m_isSecondStage ? m_FPGATrackSimMapping->PlaneMap_2nd(new_road.getSubRegion())->getDetType(layer) : m_FPGATrackSimMapping->PlaneMap_1st(new_road.getSubRegion())->getDetType(layer));
217  if (strip_hits_in.size() == 0) {
218  wildcard_layer = layer;
219  wcHit->setLayer(wildcard_layer);
220  strip_hits_in.push_back(std::move(wcHit));
221  } else {
222  wildcard_layer = layer + 1;
223  wcHit->setLayer(wildcard_layer);
224  strip_hits_out.push_back(std::move(wcHit));
225  }
226  }
227 
228  // This could probably be expressed with an iterator, but it's a little cleaner
229  // this way. we want to replace each working_road with two new working roads.
230  unsigned num_working = working_roads.size();
231  for (unsigned i = 0; i < num_working; i++) {
232  // For each working road, create two new ones!
233  FPGATrackSimRoad strips_only(working_roads[i]);
234  FPGATrackSimRoad spacepoints_only(working_roads[i]);
235 
236  // Update their hits in these layers accordingly.
237  strips_only.setHits(layer, std::vector<std::shared_ptr<const FPGATrackSimHit>>(strip_hits_in));
238  strips_only.setHits(layer + 1, std::vector<std::shared_ptr<const FPGATrackSimHit>>(strip_hits_out));
239  spacepoints_only.setHits(layer, std::vector<std::shared_ptr<const FPGATrackSimHit>>(entry.second));
240  spacepoints_only.setHits(layer + 1, std::vector<std::shared_ptr<const FPGATrackSimHit>>(outer_spacepoints[layer + 1]));
241 
242  // If we inserted a wildcard hit previously, update the WC layers accordingly
243  // in the strips_only road.
244  if (wildcard_layer != -1) {
245  layer_bitmask_t wc_layers = strips_only.getWCLayers();
246  wc_layers |= (0x1 << wildcard_layer);
247  strips_only.setWCLayers(wc_layers);
248 
249  layer_bitmask_t hit_layers = strips_only.getHitLayers();
250  hit_layers -= (0x1 << wildcard_layer);
251  if (strips_only.getHitLayers() < (unsigned)(0x1 << wildcard_layer)) {
252  ATH_MSG_WARNING("Found weird problem: current layers is " << strips_only.getHitLayers() << ", adding wildcard in layer " << wildcard_layer);
253  }
254  strips_only.setHitLayers(hit_layers);
255  }
256 
257  // Because we are only iterating up to the *original* size, we can add new
258  // entries to the end like this.
259  // Require that we only keep roads that have enough hits to save time.
260  working_roads[i] = std::move(spacepoints_only);
261  if (strips_only.getNHitLayers() >= m_threshold) {
262  working_roads.push_back(std::move(strips_only));
263  }
264  }
265  }
266  }
267 
268  ATH_MSG_DEBUG("Created " << working_roads.size() << " new roads in spacepoint road filter.");
269 
270  // Now, any finalized roads need to have their sectors set/updated, and added to the output vector.
271  for (auto road : working_roads) {
272  unsigned numSpacePlusPixel = setSector(road);
273  ATH_MSG_DEBUG("This road has sector = " << road.getSector() << " and q/pt = " << road.getX() << ", x = " << road.getY());
274  ATH_MSG_DEBUG("numSpacePlusPixel = " << numSpacePlusPixel << ", nhitlayers = " << road.getNHitLayers());
275 
276  // Filter any roads that don't have enough real hits.
277  if (road.getNHitLayers() < m_threshold) {
278  continue;
279  }
280 
281  // Filter any roads that don't have enough spacepoints + pixel hits.
282  if (numSpacePlusPixel < m_minSpacePlusPixel) {
283  continue;
284  }
285 
286  m_postfilter_roads.push_back(std::move(road));
287  }
288 
289  return retval;
290 }

Member Data Documentation

◆ m_badRoads

TH1I* FPGATrackSimSpacepointRoadFilterTool::m_badRoads {nullptr}
private

Definition at line 81 of file FPGATrackSimSpacepointRoadFilterTool.h.

◆ m_dropUnpairedIfSP

Gaudi::Property<bool> FPGATrackSimSpacepointRoadFilterTool::m_dropUnpairedIfSP {this, "dropUnpairedIfSP", true, "If there are spacepoints in a layer, drop any additional unpaired strip hits" }
private

Definition at line 69 of file FPGATrackSimSpacepointRoadFilterTool.h.

◆ m_filtering

Gaudi::Property<bool> FPGATrackSimSpacepointRoadFilterTool::m_filtering {this, "filtering", 0, "Filter out unpaired strip hits"}
private

Definition at line 66 of file FPGATrackSimSpacepointRoadFilterTool.h.

◆ m_FPGATrackSimBankSvc

ServiceHandle<IFPGATrackSimBankSvc> FPGATrackSimSpacepointRoadFilterTool::m_FPGATrackSimBankSvc {this, "FPGATrackSimBankSvc", ""}
private

Definition at line 58 of file FPGATrackSimSpacepointRoadFilterTool.h.

◆ m_FPGATrackSimMapping

ServiceHandle<IFPGATrackSimMappingSvc> FPGATrackSimSpacepointRoadFilterTool::m_FPGATrackSimMapping {this, "FPGATrackSimMappingSvc", "FPGATrackSimMappingSvc"}
private

Definition at line 57 of file FPGATrackSimSpacepointRoadFilterTool.h.

◆ m_inputRoads

TH1I* FPGATrackSimSpacepointRoadFilterTool::m_inputRoads {nullptr}
private

Definition at line 80 of file FPGATrackSimSpacepointRoadFilterTool.h.

◆ m_isSecondStage

Gaudi::Property<bool> FPGATrackSimSpacepointRoadFilterTool::m_isSecondStage {this, "isSecondStage", false, "Is this the second stage?"}
private

Definition at line 68 of file FPGATrackSimSpacepointRoadFilterTool.h.

◆ m_minSpacePlusPixel

Gaudi::Property<unsigned> FPGATrackSimSpacepointRoadFilterTool::m_minSpacePlusPixel {this, "minSpacePlusPixel", 0, "Minimum number of '2D' hits to accept as a road"}
private

Definition at line 64 of file FPGATrackSimSpacepointRoadFilterTool.h.

◆ m_minSpacePlusPixel2

Gaudi::Property<unsigned> FPGATrackSimSpacepointRoadFilterTool::m_minSpacePlusPixel2 {this, "minSpacePlusPixel2", 0, "Minimum number of '2D' hits to accept as a road for 2nd stage"}
private

Definition at line 65 of file FPGATrackSimSpacepointRoadFilterTool.h.

◆ m_postfilter_roads

std::vector<FPGATrackSimRoad> FPGATrackSimSpacepointRoadFilterTool::m_postfilter_roads
private

Definition at line 73 of file FPGATrackSimSpacepointRoadFilterTool.h.

◆ m_setSectors

Gaudi::Property<bool> FPGATrackSimSpacepointRoadFilterTool::m_setSectors {this, "setSectors", true, "Should the bank service be used to set sectors."}
private

Definition at line 67 of file FPGATrackSimSpacepointRoadFilterTool.h.

◆ m_threshold

Gaudi::Property<unsigned> FPGATrackSimSpacepointRoadFilterTool::m_threshold {this, "threshold", 0, "Minimum number of hit layers to accept as a road (inclusive"}
private

Definition at line 63 of file FPGATrackSimSpacepointRoadFilterTool.h.


The documentation for this class was generated from the following files:
PlotCalibFromCool.il
il
Definition: PlotCalibFromCool.py:381
beamspotman.r
def r
Definition: beamspotman.py:672
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:215
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
FPGATrackSimSpacepointRoadFilterTool::m_FPGATrackSimMapping
ServiceHandle< IFPGATrackSimMappingSvc > m_FPGATrackSimMapping
Definition: FPGATrackSimSpacepointRoadFilterTool.h:57
FPGATrackSimRoad::getSubRegion
int getSubRegion() const
Definition: FPGATrackSimRoad.h:86
FPGATrackSimRoad::getHits
const std::vector< std::shared_ptr< const FPGATrackSimHit > > & getHits(size_t layer) const
Definition: FPGATrackSimRoad.h:102
fpgatracksim::SPACEPOINT_SECTOR_OFFSET
constexpr int SPACEPOINT_SECTOR_OFFSET
Definition: FPGATrackSimConstants.h:22
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
FPGATrackSimSpacepointRoadFilterTool::m_setSectors
Gaudi::Property< bool > m_setSectors
Definition: FPGATrackSimSpacepointRoadFilterTool.h:67
FPGATrackSimSpacepointRoadFilterTool::m_minSpacePlusPixel
Gaudi::Property< unsigned > m_minSpacePlusPixel
Definition: FPGATrackSimSpacepointRoadFilterTool.h:64
FPGATrackSimRoad::getSectorBin
int getSectorBin() const
Definition: FPGATrackSimRoad.h:95
HitType::spacepoint
@ spacepoint
FPGATrackSimSpacepointRoadFilterTool::splitRoad
bool splitRoad(FPGATrackSimRoad *initial_road)
Definition: FPGATrackSimSpacepointRoadFilterTool.cxx:97
FPGATrackSimRoad::getNHits_layer
std::vector< size_t > getNHits_layer() const
Definition: FPGATrackSimRoad.cxx:27
xAOD::unsigned
unsigned
Definition: RingSetConf_v1.cxx:662
FPGATrackSimSpacepointRoadFilterTool::setSector
unsigned setSector(FPGATrackSimRoad &road)
Definition: FPGATrackSimSpacepointRoadFilterTool.cxx:292
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:92
HitType::wildcard
@ wildcard
LArCellBinning_test.retval
def retval
Definition: LArCellBinning_test.py:112
FPGATrackSimHit::setDetType
void setDetType(SiliconTech detType)
Definition: FPGATrackSimHit.h:55
FPGATrackSimSpacepointRoadFilterTool::m_isSecondStage
Gaudi::Property< bool > m_isSecondStage
Definition: FPGATrackSimSpacepointRoadFilterTool.h:68
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:85
FPGATrackSimSpacepointRoadFilterTool::m_filtering
Gaudi::Property< bool > m_filtering
Definition: FPGATrackSimSpacepointRoadFilterTool.h:66
FPGATrackSimSpacepointRoadFilterTool::m_badRoads
TH1I * m_badRoads
Definition: FPGATrackSimSpacepointRoadFilterTool.h:81
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:63
FPGATrackSimRoad::getXBin
unsigned getXBin() const
Definition: FPGATrackSimRoad.h:87
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
FPGATrackSimSectorBank
Definition: FPGATrackSimSectorBank.h:32
FPGATrackSimRoad::getYBin
unsigned getYBin() const
Definition: FPGATrackSimRoad.h:88
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
FPGATrackSimSpacepointRoadFilterTool::m_dropUnpairedIfSP
Gaudi::Property< bool > m_dropUnpairedIfSP
Definition: FPGATrackSimSpacepointRoadFilterTool.h:69
FPGATrackSimSpacepointRoadFilterTool::findUnique
unsigned findUnique(std::vector< std::shared_ptr< const FPGATrackSimHit >> &sp_in, std::vector< std::shared_ptr< const FPGATrackSimHit >> &sp_out, std::vector< std::shared_ptr< const FPGATrackSimHit >> &unique_in, std::vector< std::shared_ptr< const FPGATrackSimHit >> &unique_out, std::vector< std::shared_ptr< const FPGATrackSimHit >> &new_sp_in, std::vector< std::shared_ptr< const FPGATrackSimHit >> &new_sp_out)
Definition: FPGATrackSimSpacepointRoadFilterTool.cxx:333
FPGATrackSimSpacepointRoadFilterTool::m_inputRoads
TH1I * m_inputRoads
Definition: FPGATrackSimSpacepointRoadFilterTool.h:80
FPGATrackSimHit::setLayer
void setLayer(unsigned v)
Definition: FPGATrackSimHit.h:92
FPGATrackSimRoad::setSector
void setSector(sector_t sector)
Definition: FPGATrackSimRoad.h:60
FPGATrackSimRoad::getNLayers
size_t getNLayers() const
Definition: FPGATrackSimRoad.h:112
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
layer_bitmask_t
uint32_t layer_bitmask_t
Definition: FPGATrackSimTypes.h:22
FPGATrackSimRoad::setHits
void setHits(std::vector< std::vector< std::shared_ptr< const FPGATrackSimHit >>> &&hits)
Definition: FPGATrackSimRoad.cxx:141
FPGATrackSimSpacepointRoadFilterTool::m_FPGATrackSimBankSvc
ServiceHandle< IFPGATrackSimBankSvc > m_FPGATrackSimBankSvc
Definition: FPGATrackSimSpacepointRoadFilterTool.h:58
FPGATrackSimRoad
Definition: FPGATrackSimRoad.h:31
FPGATrackSimHit::setHitType
void setHitType(HitType type)
Definition: FPGATrackSimHit.h:54