ATLAS Offline Software
Loading...
Searching...
No Matches
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< FPGATrackSimRoad > &prefilter_roads, std::vector< 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< FPGATrackSimRoad > & prefilter_roads,
std::vector< 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 bool success = splitRoad(road);
80 if (!success) {
81 badRoads += 1;
82 }
83 }
84
85 m_badRoads->Fill(badRoads);
86
87 postfilter_roads = std::move(m_postfilter_roads);
88
89 return StatusCode::SUCCESS;
90}

◆ 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}
#define ATH_MSG_DEBUG(x)

◆ 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 328 of file FPGATrackSimSpacepointRoadFilterTool.cxx.

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

◆ initialize()

StatusCode FPGATrackSimSpacepointRoadFilterTool::initialize ( )
overridevirtual

Definition at line 31 of file FPGATrackSimSpacepointRoadFilterTool.cxx.

32{
33 // Retrieve info
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}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
ServiceHandle< IFPGATrackSimBankSvc > m_FPGATrackSimBankSvc
ServiceHandle< IFPGATrackSimMappingSvc > m_FPGATrackSimMapping

◆ setSector()

unsigned FPGATrackSimSpacepointRoadFilterTool::setSector ( FPGATrackSimRoad & road)
private

Definition at line 287 of file FPGATrackSimSpacepointRoadFilterTool.cxx.

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

◆ splitRoad()

bool FPGATrackSimSpacepointRoadFilterTool::splitRoad ( FPGATrackSimRoad & initial_road)
private

Definition at line 92 of file FPGATrackSimSpacepointRoadFilterTool.cxx.

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

Member Data Documentation

◆ m_badRoads

TH1I* FPGATrackSimSpacepointRoadFilterTool::m_badRoads {nullptr}
private

Definition at line 81 of file FPGATrackSimSpacepointRoadFilterTool.h.

81{nullptr};

◆ 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.

69{this, "dropUnpairedIfSP", true, "If there are spacepoints in a layer, drop any additional unpaired strip hits" };

◆ 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.

66{this, "filtering", 0, "Filter out unpaired strip hits"};

◆ m_FPGATrackSimBankSvc

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

Definition at line 58 of file FPGATrackSimSpacepointRoadFilterTool.h.

58{this, "FPGATrackSimBankSvc", ""};

◆ m_FPGATrackSimMapping

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

Definition at line 57 of file FPGATrackSimSpacepointRoadFilterTool.h.

57{this, "FPGATrackSimMappingSvc", "FPGATrackSimMappingSvc"};

◆ m_inputRoads

TH1I* FPGATrackSimSpacepointRoadFilterTool::m_inputRoads {nullptr}
private

Definition at line 80 of file FPGATrackSimSpacepointRoadFilterTool.h.

80{nullptr};

◆ 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.

68{this, "isSecondStage", false, "Is this the second stage?"};

◆ 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.

64{this, "minSpacePlusPixel", 0, "Minimum number of '2D' hits to accept as a road"};

◆ 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.

65{this, "minSpacePlusPixel2", 0, "Minimum number of '2D' hits to accept as a road for 2nd stage"};

◆ 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.

67{this, "setSectors", true, "Should the bank service be used to set sectors."};

◆ 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.

63{this, "threshold", 0, "Minimum number of hit layers to accept as a road (inclusive"};

The documentation for this class was generated from the following files: