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< 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());
91 for (FPGATrackSimRoad & r : m_postfilter_roads)
92 postfilter_roads.emplace_back(std::make_shared<const FPGATrackSimRoad>(r));
93
94 return StatusCode::SUCCESS;
95}
int r
Definition globals.cxx:22

◆ 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 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
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 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}
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 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>();
215 wcHit->setHitType(HitType::wildcard);
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}
#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: