ATLAS Offline Software
FPGATrackSimHoughFunctions.cxx
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3  */
4 
7 #include <stdexcept>
8 
9 // EPSILON for hit position float comparisons
10 constexpr float EPSILON = 1e-5;
11 
12 StatusCode runOverlapRemoval(std::vector<FPGATrackSimTrack>& tracks, const float minChi2, const int NumOfHitPerGrouping, ORAlgo orAlgo)
13 {
14 
15  // Create tracks to hold and compare
16  FPGATrackSimTrack fit1, fit2;
17  for(unsigned int i=0; i<tracks.size();i++)
18  {
19  fit1=tracks.at(i);
20  // Apply Chi2 cut
21  if(fit1.getChi2ndof() > minChi2)
22  {
23  // Only consider track with chi2 smaller than minChi2
24  tracks.at(i).setPassedOR(0);
25  continue;
26  }
27 
28  // Create vector for holding duplicate track list
29  std::vector<int> duplicates(1,i);
30 
31  // Loop through the remaning tracks
32  for(unsigned int j=i+1; j<tracks.size(); j++)
33  {
34  if(i!=j)
35  {
36  fit2=tracks.at(j);
37  // Apply Chi2 cut
38  if(fit2.getChi2ndof()>minChi2)
39  {
40  // Only consider track with chi2 smaller than minChi2
41  tracks.at(j).setPassedOR(0);
42  continue;
43  }
44  // Based on the algorithm choose common hit of non-common hit
45  if(orAlgo == ORAlgo::Normal)
46  {
47  // Find the number of common hits between two tracks
48  int nOverlappingHits = 0;
49  nOverlappingHits=findNCommonHits(fit1,fit2);
50 
51  // Group overlapping tracks into a vector for removal if at least [NumOfHitPerGrouping] hits are the same
52  if(nOverlappingHits >= NumOfHitPerGrouping)
53  {
54  duplicates.push_back(j);
55  }
56  }
57  else if(orAlgo == ORAlgo::InvertGrouping)
58  {
59  // Find the number of non-common hits between two tracks
60  int nNotOverlappingHits=0;
61  nNotOverlappingHits=findNonOverlapHits(fit1, fit2);
62 
63  // If the number of non-overlapping hit is [NumOfHitPerGrouping] or less
64  if(nNotOverlappingHits <= NumOfHitPerGrouping)
65  {
66  duplicates.push_back(j);
67  }
68  }
69  }
70  }
71 
73  }
74  return StatusCode::SUCCESS;
75 }
76 
77 int findNonOverlapHits(const FPGATrackSimTrack& Track1, const FPGATrackSimTrack& Track2)
78 {
79  int nonOverlapHits=0;
80 
81  // Loop through all layers
82  for(unsigned int i = 0; i < Track1.getFPGATrackSimHits().size(); ++i)
83  {
84  const FPGATrackSimHit& hit1 = Track1.getFPGATrackSimHits().at(i);
85  const FPGATrackSimHit& hit2 = Track2.getFPGATrackSimHits().at(i);
86  // First make sure we are looking at real hits
87  if(!hit1.isReal() || !hit2.isReal())
88  {
89  continue;
90  }
91  // Check if two hits are on the same plane
92  else if(hit1.getLayer() != hit2.getLayer())
93  {
94  nonOverlapHits++;
95  }
96  // Check if two hits have the same hashID
97  else if(hit1.getIdentifierHash() != hit2.getIdentifierHash())
98  {
99  nonOverlapHits++;
100  }
101  // Check if two hits have same coordinate. this is difficult due to spacepoints,
102  // since the same hit can be used to make multiple spacepoints.
103  else if (hit1.getHitType() == HitType::spacepoint && hit2.getHitType() == HitType::spacepoint) {
104  if ((abs(hit1.getX() - hit2.getX()) > EPSILON) || (abs(hit1.getY() - hit2.getY()) < EPSILON) || (abs(hit1.getZ() - hit2.getZ()) < EPSILON)) {
105  nonOverlapHits++;
106  } else {
107  continue;
108  }
109  }
110  else if(hit1.getPhiCoord() != hit1.getPhiCoord()
111  || hit1.getEtaCoord() != hit1.getEtaCoord())
112  {
113  nonOverlapHits++;
114  }
115  else
116  {
117  continue;
118  }
119  }
120  return nonOverlapHits;
121 }
122 
123 
124 void findMinChi2MaxHit(const std::vector<int>& duplicates, std::vector<FPGATrackSimTrack>& RMtracks)
125 {
126 
127  float minChi2=100000.;
128  int prevID =-1;
129  int maxHitLayers=0;
130  for(auto dup: duplicates)
131  {
132  float t_chi2 = RMtracks.at(dup).getChi2ndof();
133  int t_nhitlayers = RMtracks.at(dup).getFPGATrackSimHits().size();
134  for(auto& hit : RMtracks.at(dup).getFPGATrackSimHits())
135  {
136  if(!hit.isReal())
137  {
138  t_nhitlayers--;
139  }
140  }
141 
142  if(t_nhitlayers>maxHitLayers)
143  {
144  if(prevID!=-1)
145  {
146  RMtracks.at(prevID).setPassedOR(0);
147  }
148  prevID=dup;
149  maxHitLayers=t_nhitlayers;
150  minChi2=t_chi2;
151  }
152  else if(t_nhitlayers==maxHitLayers)
153  {
154  if(t_chi2<minChi2)
155  {
156  if(prevID!=-1)
157  {
158  RMtracks.at(prevID).setPassedOR(0);
159  }
160  prevID=dup;
161  minChi2=t_chi2;
162  }
163  else
164  {
165  RMtracks.at(dup).setPassedOR(0);
166  }
167  }
168  else
169  {
170  RMtracks.at(dup).setPassedOR(0);
171  }
172  }
173 }
174 
175 
176 int findNCommonHits(const FPGATrackSimTrack& Track1, const FPGATrackSimTrack& Track2)
177 {
178  int nCommHits=0;
179 
180  // Loop through all layers
181  for(unsigned int i = 0; i < Track1.getFPGATrackSimHits().size(); ++i)
182  {
183  const FPGATrackSimHit& hit1 = Track1.getFPGATrackSimHits().at(i);
184  const FPGATrackSimHit& hit2 = Track2.getFPGATrackSimHits().at(i);
185 
186  // Check if hit is missing
187  if(!hit1.isReal() || !hit2.isReal())
188  {
189  continue;
190  }
191  // Check if hit on the same plane
192  else if(hit1.getLayer() != hit2.getLayer())
193  {
194  continue;
195  }
196  // Check if two hits have the same hashID
197  else if(hit1.getIdentifierHash() != hit2.getIdentifierHash())
198  {
199  continue;
200  }
201  // Check if two hits have same coordinate. this is difficult due to spacepoints,
202  // since the same hit can be used to make multiple spacepoints.
203  else if (hit1.getHitType() == HitType::spacepoint && hit2.getHitType() == HitType::spacepoint) {
204 
205  if ((std::abs(hit1.getX() - hit2.getX()) < EPSILON) && (std::abs(hit1.getY() - hit2.getY()) < EPSILON) && (std::abs(hit1.getZ() - hit2.getZ()) < EPSILON)) {
206  nCommHits++;
207  } else {
208  continue;
209  }
210  }
211  // If both hits aren't spacepoints, we should be able to do this comparison.
212  else if (hit1.getPhiCoord() == hit2.getPhiCoord() && hit1.getEtaCoord() == hit2.getEtaCoord()) {
213  nCommHits++;
214  }
215  else
216  {
217  continue;
218  }
219  }
220  return nCommHits;
221 }
222 
223 
224 // Given road, populates the supplied variables with info on which layers missed hits
225 void getMissingInfo(const FPGATrackSimRoad & road, int & nMissing, bool & missPixel, bool & missStrip, layer_bitmask_t & missing_mask, layer_bitmask_t & norecovery_mask, const ServiceHandle<IFPGATrackSimMappingSvc> &FPGATrackSimMapping, const TrackCorrType idealCoordFitType)
226 {
227  int subregion = road.getSubRegion();
228  nMissing = FPGATrackSimMapping->PlaneMap_1st(subregion)->getNCoords(); // init with nCoords and decrement as we find misses
229  missPixel = false;
230  missStrip = false;
231  missing_mask = 0;
232  norecovery_mask = 0;
233  unsigned int wclayers = road.getWCLayers();
234  for (unsigned layer = 0; layer < FPGATrackSimMapping->PlaneMap_1st(subregion)->getNLogiLayers(); layer++)
235  {
236  int nHits = road.getHits(layer).size();
237  if (nHits==0)
238  {
239  if (idealCoordFitType == TrackCorrType::None && ((wclayers >> layer) & 1))
240  {
241  int ix = FPGATrackSimMapping->PlaneMap_1st(subregion)->getCoordOffset(layer);
242  int iy = ix + 1;
243  if (FPGATrackSimMapping->PlaneMap_1st(subregion)->isSCT(layer))
244  {
245  missing_mask |= 1 << ix;
246  nMissing -= 1;
247  }
248  else
249  {
250  missing_mask |= (1<<ix) | (1<<iy);
251  nMissing -= 2;
252  }
253  }
254  else
255  {
256  if (FPGATrackSimMapping->PlaneMap_1st(subregion)->isSCT(layer)) missStrip = true;
257  else missPixel = true;
258  }
259  }
260  else if (!((wclayers >> layer) & 1)) { // we have a hit
261  int ix = FPGATrackSimMapping->PlaneMap_1st(subregion)->getCoordOffset(layer);
262  int iy = ix + 1;
263  if (FPGATrackSimMapping->PlaneMap_1st(subregion)->isSCT(layer))
264  {
265  missing_mask |= 1 << ix;
266  nMissing -= 1;
267  }
268  else
269  {
270  missing_mask |= (1<<ix) | (1<<iy);
271  nMissing -= 2;
272  }
273 
274  }
275  }
276 }
277 
278 
287 void makeTrackCandidates(const FPGATrackSimRoad & road, const FPGATrackSimTrack & temp, std::vector<FPGATrackSimTrack>& track_cands, const ServiceHandle<IFPGATrackSimMappingSvc> & FPGATrackSimMapping)
288 {
289  int idbase = 0; // offset for new track ids
290  int subregion = road.getSubRegion();
291 
292  std::vector<std::vector<int>> combs = ::getComboIndices(road.getNHits_layer());
293  track_cands.resize(combs.size(), temp);
294 
295  const FPGATrackSimRegionMap* SUBREGIONMAP = FPGATrackSimMapping->SubRegionMap();
296  //
297  //get the WC hits:
298  layer_bitmask_t wcbits= road.getWCLayers();
299  // Add the hits from each combination to the track, and set ID
300  for (size_t icomb = 0; icomb < combs.size(); icomb++)
301  {
302  //Need to set the ID and the hits size of this track
303  track_cands[icomb].setTrackID(idbase + icomb);
304  track_cands[icomb].setNLayers(FPGATrackSimMapping->PlaneMap_1st(subregion)->getNLogiLayers());
305 
306  // If this is an idealized coordinate fit; keep references to the idealized radii.
307  track_cands[icomb].setIdealRadii(SUBREGIONMAP->getAvgRadii(0));
308  track_cands[icomb].setPassedOR(1);
309 
310  std::vector<int> const & hit_indices = combs[icomb]; // size nLayers
311  for (unsigned layer = 0; layer < FPGATrackSimMapping->PlaneMap_1st(subregion)->getNLogiLayers(); layer++)
312  {
313  if (hit_indices[layer] < 0) // Set a dummy hit if road has no hits in this layer
314  {
316  newhit.setLayer(layer);
317  newhit.setSection(0);
318  if (FPGATrackSimMapping->PlaneMap_1st(subregion)->getDim(layer) == 2) newhit.setDetType(SiliconTech::pixel);
319  else newhit.setDetType(SiliconTech::strip);
320 
321  if (wcbits & (1 << layer ) ) {
323  newhit.setLayer(layer);
324  }
325 
326  track_cands[icomb].setFPGATrackSimHit(layer, newhit);
327  }
328  else
329  {
330  const std::shared_ptr<const FPGATrackSimHit> hit = road.getHits(layer)[hit_indices[layer]];
331  // If this is an outer spacepoint, and it is not the same as the inner spacepoint, reject it.
332  // Here we "reject" it by marking the candidate as "invalid", to be rejected later.
333  // That require another field on the track object, but it avoids having to change the sizes
334  // of arrays computed above.
335  if (hit->getHitType() == HitType::spacepoint && (hit->getPhysLayer() % 2) == 1) {
336  if (layer == 0) throw (std::out_of_range("makeTrackCandidates: Attempt to access vector at element -1"));
337  const FPGATrackSimHit & inner_hit = track_cands[icomb].getFPGATrackSimHits().at(layer - 1);
338  if ((abs(hit->getX() - inner_hit.getX()) > EPSILON) || (abs(hit->getY() - inner_hit.getY()) > EPSILON) || (abs(hit->getZ() - inner_hit.getZ()) > EPSILON)) {
339  track_cands[icomb].setValidCand(false);
340  }
341  }
342  track_cands[icomb].setFPGATrackSimHit(layer, *hit);
343  }
344  }
345  }
346 
347  idbase += combs.size();
348 }
349 
350 
351 long getVolumeID(const FPGATrackSimHit & hit)
352 {
353  // Custom labelling for the detector volumes
354  // to be used in NN training.
355  // Convention:
356  // barrel | else
357  //-------------------------------------
358  // Pixel | 0 | 2*sign(z)
359  // Strip | 10 | 10 + 2*sign(z)
360  //
361  // Explicitly:
362  // -2: C-side (-z) end cap pixel
363  // 0: barrel pixel
364  // 2: A-side (+z) end cap pixel
365  // 8: C-side end cap strip
366  // 10: barrel strip
367  // 12: A-sde end cap strip
368  // returns -999 if not a real hit
369 
370 
371  long volumeID = -1;
372 
373  if (hit.getR() == 0.0) {
374  return -999; //hit not in any physical layer
375  }
376 
377  if(hit.isBarrel()) {
378  if (hit.isPixel()) {
379  volumeID = 0;
380  }
381  if (hit.isStrip()) {
382  volumeID = 10;
383  }
384  }
385  else {
386  if (hit.isPixel()) {
387  if (hit.getZ() >= 0.) {
388  volumeID = 2;
389  }
390  else {
391  volumeID = -2;
392  }
393  }
394  else if (hit.isStrip()) {
395  if (hit.getZ() >= 0.) {
396  volumeID = 12;
397  }
398  else {
399  volumeID = 8;
400  }
401  }
402  }
403  return volumeID;
404 }
405 
406 long getCoarseID(const FPGATrackSimHit & hit)
407 {
408  // Custom labelling for the detector layers
409  // to be used in NN training.
410  // This aims at providing a continuous numbering according to this convention:
411  // strip barrel layers in [0,3]
412  // strip C-side end cap layers in [4,9]
413  // strip A-side end cap layers in [10,15]
414  // pixel barrel layers in [16,20]
415  // pixel C-side end cap layers in [21,29]
416  // pixel A-side end cap layers > 30
417  // returns large negative value if no layer
418 
419  long volumeID = getVolumeID(hit);
420  unsigned layerID = hit.getLayerDisk();
421 
422  long offset = -10000;
423 
424  if(volumeID == 10) offset = 0; //strip barrel
425  if(volumeID == 8) offset = 4; //strip -ve EC
426  if(volumeID == 12) offset = 10; //strip +ve EC
427  if(volumeID == 0) offset = 16; // pix barrel
428  if(volumeID == -2) offset = 21; //pix -ve EC
429  if(volumeID == 2) offset = 30; //pix +ve EC
430  return offset + layerID;
431 }
432 
433 long getFineID(const FPGATrackSimHit & hit)
434 {
435  // Custom labelling for the detector layers
436  // to be used in NN training.
437  // Returns a labelling of non-barrel pixel hits similar to a hit's eta index,
438  // but with a continuous numbering.
439  // Otherwise return convention defined in getCoarseID.
440 
441  long volumeID = getVolumeID(hit);
442  unsigned layerID = hit.getLayerDisk();
443  int etaID = hit.getEtaModule();
444 
445  long offset = -1000;
446 
447  if(volumeID == 10) return getCoarseID(hit); //strip barrel
448  if(volumeID == 8) return getCoarseID(hit); //strip -ve EC
449  if(volumeID == 12) return getCoarseID(hit); //strip +ve EC
450  if(volumeID == 0) return getCoarseID(hit); //pix barrel
451  if(volumeID == -999) return -999; //hit not in any physical layer
452  if(volumeID == -2)
453  {
454  if(layerID == 0) offset = 21;
455  if(layerID == 1) offset = 21+15;
456  if(layerID == 2) offset = 21+15+6;
457  if(layerID == 3) offset = 21+15+6+23;
458  if(layerID == 4) offset = 21+15+6+23+6;
459  if(layerID == 5) offset = 21+15+6+23+6+11;
460  if(layerID == 6) offset = 21+15+6+23+6+11+8;
461  if(layerID == 7) offset = 21+15+6+23+6+11+8+8;
462  if(layerID == 8) offset = 21+15+6+23+6+11+8+8+9;
463  return offset + etaID;
464  }
465  if(volumeID == 2)
466  {
467  if(layerID == 0) offset = 116;
468  if(layerID == 1) offset = 116+15;
469  if(layerID == 2) offset = 116+15+6;
470  if(layerID == 3) offset = 116+15+6+23;
471  if(layerID == 4) offset = 116+15+6+23+6;
472  if(layerID == 5) offset = 116+15+6+23+6+11;
473  if(layerID == 6) offset = 116+15+6+23+6+11+8;
474  if(layerID == 7) offset = 116+15+6+23+6+11+8+8;
475  if(layerID == 8) offset = 116+15+6+23+6+11+8+8+9;
476  return offset + etaID;
477  }
478 
479  return -1;
480 }
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
findNCommonHits
int findNCommonHits(const FPGATrackSimTrack &Track1, const FPGATrackSimTrack &Track2)
Definition: FPGATrackSimHoughFunctions.cxx:176
FPGATrackSimHit::setSection
void setSection(unsigned v)
Definition: FPGATrackSimHit.h:93
SiliconTech::strip
@ strip
FPGATrackSimHit::isStrip
bool isStrip() const
Definition: FPGATrackSimHit.h:65
FPGATrackSimHit::getPhysLayer
unsigned getPhysLayer() const
Definition: FPGATrackSimHit.cxx:69
getCoarseID
long getCoarseID(const FPGATrackSimHit &hit)
Definition: FPGATrackSimHoughFunctions.cxx:406
FPGATrackSimRoad::getSubRegion
int getSubRegion() const
Definition: FPGATrackSimRoad.h:83
FPGATrackSimTrack
Definition: FPGATrackSimTrack.h:18
findNonOverlapHits
int findNonOverlapHits(const FPGATrackSimTrack &Track1, const FPGATrackSimTrack &Track2)
Definition: FPGATrackSimHoughFunctions.cxx:77
runOverlapRemoval
StatusCode runOverlapRemoval(std::vector< FPGATrackSimTrack > &tracks, const float minChi2, const int NumOfHitPerGrouping, ORAlgo orAlgo)
Definition: FPGATrackSimHoughFunctions.cxx:12
FPGATrackSimHoughFunctions.h
FPGATrackSimRoad::getHits
const std::vector< std::shared_ptr< const FPGATrackSimHit > > & getHits(size_t layer) const
Definition: FPGATrackSimRoad.h:99
ORAlgo
ORAlgo
Definition: FPGATrackSimHoughFunctions.h:17
FPGATrackSimHit::getX
float getX() const
Definition: FPGATrackSimHit.h:137
makeTrackCandidates
void makeTrackCandidates(const FPGATrackSimRoad &road, const FPGATrackSimTrack &temp, std::vector< FPGATrackSimTrack > &track_cands, const ServiceHandle< IFPGATrackSimMappingSvc > &FPGATrackSimMapping)
Creates a list of track candidates by taking all possible combination of hits in road.
Definition: FPGATrackSimHoughFunctions.cxx:287
FPGATrackSimHit::isReal
bool isReal() const
Definition: FPGATrackSimHit.cxx:40
ORAlgo::Normal
@ Normal
FPGATrackSimHit::getLayer
unsigned getLayer() const
Definition: FPGATrackSimHit.cxx:77
getMissingInfo
void getMissingInfo(const FPGATrackSimRoad &road, int &nMissing, bool &missPixel, bool &missStrip, layer_bitmask_t &missing_mask, layer_bitmask_t &norecovery_mask, const ServiceHandle< IFPGATrackSimMappingSvc > &FPGATrackSimMapping, const TrackCorrType idealCoordFitType)
Definition: FPGATrackSimHoughFunctions.cxx:225
HitType::spacepoint
@ spacepoint
FPGATrackSimHit::getEtaModule
int getEtaModule() const
Definition: FPGATrackSimHit.h:87
FPGATrackSimHit::getLayerDisk
unsigned getLayerDisk() const
Definition: FPGATrackSimHit.h:82
FPGATrackSimRoad::getNHits_layer
std::vector< size_t > getNHits_layer() const
Definition: FPGATrackSimRoad.cxx:27
FPGATrackSimHit
Definition: FPGATrackSimHit.h:41
EPSILON
constexpr float EPSILON
Definition: FPGATrackSimHoughFunctions.cxx:10
HitType::wildcard
@ wildcard
FPGATrackSimTrack::getFPGATrackSimHits
const std::vector< FPGATrackSimHit > & getFPGATrackSimHits() const
Definition: FPGATrackSimTrack.h:63
getVolumeID
long getVolumeID(const FPGATrackSimHit &hit)
Definition: FPGATrackSimHoughFunctions.cxx:351
FPGATrackSimHit::getPhiCoord
float getPhiCoord() const
Definition: FPGATrackSimHit.h:108
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
FPGATrackSimHit::setDetType
void setDetType(SiliconTech detType)
Definition: FPGATrackSimHit.h:55
FPGATrackSimTrack::getChi2ndof
float getChi2ndof() const
Definition: FPGATrackSimTrack.h:46
lumiFormat.i
int i
Definition: lumiFormat.py:85
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
FPGATrackSimHit::getY
float getY() const
Definition: FPGATrackSimHit.h:138
FPGATrackSimHit::getIdentifierHash
unsigned getIdentifierHash() const
Definition: FPGATrackSimHit.h:81
FPGATrackSimHit::isPixel
bool isPixel() const
Definition: FPGATrackSimHit.h:64
FPGATrackSimHit::getZ
float getZ() const
Definition: FPGATrackSimHit.h:139
getComboIndices
std::vector< std::vector< int > > getComboIndices(std::vector< size_t > const &sizes)
Given a vector of sizes (of arrays), generates a vector of all combinations of indices to index one e...
Definition: FPGATrackSimFunctions.cxx:21
TrackCorrType::None
@ None
FPGATrackSimFunctions.h
getFineID
long getFineID(const FPGATrackSimHit &hit)
Definition: FPGATrackSimHoughFunctions.cxx:433
FPGATrackSimRoad::getWCLayers
layer_bitmask_t getWCLayers() const
Definition: FPGATrackSimRoad.h:95
FPGATrackSimRegionMap::getAvgRadii
const std::vector< double > & getAvgRadii(unsigned region) const
Definition: FPGATrackSimRegionMap.h:104
FPGATrackSimHit::getEtaCoord
float getEtaCoord() const
Definition: FPGATrackSimHit.h:109
ORAlgo::InvertGrouping
@ InvertGrouping
FPGATrackSimHit::getR
float getR() const
Definition: FPGATrackSimHit.h:140
FPGATrackSimHit::setLayer
void setLayer(unsigned v)
Definition: FPGATrackSimHit.h:92
layer_bitmask_t
uint32_t layer_bitmask_t
Definition: FPGATrackSimTypes.h:22
convertTimingResiduals.offset
offset
Definition: convertTimingResiduals.py:71
FPGATrackSimRegionMap
Definition: FPGATrackSimRegionMap.h:62
findMinChi2MaxHit
void findMinChi2MaxHit(const std::vector< int > &duplicates, std::vector< FPGATrackSimTrack > &RMtracks)
Definition: FPGATrackSimHoughFunctions.cxx:124
TrackCorrType
TrackCorrType
Definition: FPGATrackSimTypes.h:37
FPGATrackSimHit::isBarrel
bool isBarrel() const
Definition: FPGATrackSimHit.h:66
generateReferenceFile.duplicates
duplicates
Definition: generateReferenceFile.py:24
SiliconTech::pixel
@ pixel
FPGATrackSimRoad
Definition: FPGATrackSimRoad.h:30
FPGATrackSimHit::getHitType
HitType getHitType() const
Definition: FPGATrackSimHit.h:57
FPGATrackSimHit::setHitType
void setHitType(HitType type)
Definition: FPGATrackSimHit.h:54
ServiceHandle< IFPGATrackSimMappingSvc >