ATLAS Offline Software
TrackFitter.cxx
Go to the documentation of this file.
1 
2 // Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 
4 #include <algorithm>
5 #include <iostream>
6 #include <fstream>
7 #include <cmath>
8 
10 #include "GaudiKernel/MsgStream.h"
12 
13 
14 #include "TrackFitter.h"
15 
16 
17 std::vector<FPGATrackSimTrack>::const_iterator getBestChi2(std::vector<FPGATrackSimTrack> const & tracks);
18 bool hasGoodFit(std::vector<FPGATrackSimTrack> const & track_cands, float minchi2);
19 
20 
22 // Constructor
24 
26  const std::vector<const FPGATrackSimFitConstantBank*>& droppedLayerbanks, bool guessingHits) :
27  AthMessaging (Athena::getMessageSvc(), "FPGATrackSimTrackFitter")
28 {
29  m_guessinghits = guessingHits;
30  m_nominalBank = nominalbank;
31 
32  if (!m_nominalBank) ATH_MSG_FATAL("Constant bank not set");
33  if (!m_guessinghits)
34  for (auto bank : droppedLayerbanks)
35  m_droppedLayerBanks.push_back(bank);
36 }
37 
38 
40 {
41  m_idbase = 0;
42  m_nfits = 0;
43  m_nfits_maj = 0;
44  m_nfits_maj_pix = 0;
45  m_nfits_maj_SCT = 0;
46  m_nfits_rec = 0;
47  m_nfits_addrec = 0;
48 }
49 
50 
52 // fitTracks
54 
55 
56 int TrackFitter::fitTracks(const std::vector<std::shared_ptr<const FPGATrackSimRoad>>& roads, std::vector<FPGATrackSimTrack>& tracks) {
57  resetCounters();
58  for (const std::shared_ptr<const FPGATrackSimRoad>& cur_road : roads) {
59  std::vector<FPGATrackSimTrack> t;
60  int isOK = fitTracks(cur_road, t);
61  if (isOK != FITTRACKS_OK) return isOK;
62  else tracks.insert(tracks.end(), t.begin(), t.end());
63  }
64  return FITTRACKS_OK;
65 }
66 
67 
74  int TrackFitter::fitTracks(const std::shared_ptr<const FPGATrackSimRoad> &road, std::vector<FPGATrackSimTrack>& tracks)
75 {
76  if (not road){
77  ATH_MSG_WARNING("road pointer is null in TrackFitter::fitTracks");
78  return FITTRACKS_BAD;
79  }
80 
82 
83  double y = 0.0;
84  double x = 0.0;
86  y = road->getY();
87  x = road->getX();
88  ATH_MSG_DEBUG("Attempting to fit Hough road with y = " << y << ", x = " << x << ", sector = " << road->getSector());
89  }
90 
91  // Error checking
92  int sector = road->getSector();
93  if (sector < 0) {
94  ATH_MSG_DEBUG("Bad sector " << sector);
95  return FITTRACKS_OK;
96  }
97  else if (sector >= m_nominalBank->getNSectors()) {
98  ATH_MSG_WARNING("Constants for sector " << sector << " don't exist");
99  return FITTRACKS_BAD;
100  }
101  else if (!m_nominalBank->getIsGood(sector)) {
102  ATH_MSG_WARNING("Constants for sector " << sector << " are not valid");
103  return FITTRACKS_BAD;
104  }
105 
106  // Get info on layers with missing hits
107  int nMissing;
108  bool missPixel;
109  bool missStrip;
110  layer_bitmask_t missing_mask;
111  layer_bitmask_t norecovery_mask; // mask to prevent majority in planes with multiple hits
112  getMissingInfo(*road, nMissing, missPixel, missStrip, missing_mask, norecovery_mask);
113  // Create a template track with common parameters filled already for initializing below
114  FPGATrackSimTrack temp;
115  if(!m_do2ndStage){
117  temp.setFirstSectorID(road->getSector());
118  }
119  else{
121  temp.setSecondSectorID(road->getSector());
122  }
124  temp.setBankID(-1); // TODO
125  temp.setPatternID(road->getPID());
126  temp.setHitMap(missing_mask);
127  temp.setNMissing(nMissing);
128  temp.setHoughX(x);
129  temp.setHoughY(y);
130  temp.setQOverPt(y);
133 
134  temp.setSubRegion(road->getSubRegion());
135  temp.setHoughXBin(road->getXBin());
136  temp.setHoughYBin(road->getYBin());
137 
138  // Create a list of track candidates by taking all possible combinations of hits in road.
139  std::vector<FPGATrackSimTrack> track_cands;
140  makeTrackCandidates(*road, temp, track_cands);
141 
142  // Fit the track candidates
143  size_t nFits = std::min((size_t)m_max_ncomb, track_cands.size());
144  for (size_t icomb = 0; icomb < nFits; icomb++)
145  {
146  // Before we start, make sure this track candidate has not been marked as invalid
147  // due to combinatorics issues with spacepoints.
148  bool ok = track_cands[icomb].isValidCand();
149  if (!ok) {
150  continue;
151  }
152  if (nMissing == 0 || m_guessinghits)
153  {
154  ok = m_nominalBank->linfit(sector, track_cands[icomb], m_do2ndStage);
155  }
156  else
157  {
158  unsigned int ic = 0; // this will be the leading coordinate with a missing hit
159  for (unsigned int ic = 0; ic < m_pmap->getNCoords(); ic++) {
160  if (!( (missing_mask >> ic) & 0x1)) break; // if we found one, stop
161  }
162  // banks are indexed by plane, not by coordinate
163  ok = m_droppedLayerBanks[m_pmap->getCoordLayer(ic)]->linfit(sector, track_cands[icomb], m_do2ndStage);
164  }
165 
166  if (!ok) {
167  continue;
168  }
169  track_cands[icomb].setOrigChi2(track_cands[icomb].getChi2());
170  if (getDoMissingHitsCheck()) {
171  if (track_cands[icomb].getNMissing() == 0) { // missing 0 hits, drop hits one at a time and refit!
172  for (unsigned icoord = 0; icoord < m_pmap->getNCoords(); icoord++) { // 9 coordinates to refit, nominally
173 
174  FPGATrackSimTrack newtrack = track_cands[icomb];
175  newtrack.setNMissing(1);
176  unsigned int bitmask = ( 1 << m_pmap->getNCoords() ) - 1; // all bits set to 1
177  bitmask &= ~(1 << icoord); // remove this coordinate
178  if (m_pmap->getDim(icoord) == 2) { // if we need to do two coordinates at once
179  bitmask &= ~(1 << (icoord+1)); // remove the next coordinate, too
180  newtrack.setNMissing(2);
181  }
182  newtrack.setHitMap(bitmask); // update bitmask
183  m_nominalBank->linfit(sector, newtrack, m_do2ndStage);
184  m_tracks_missinghits_track.push_back(newtrack);
185  if (m_pmap->getDim(icoord) == 2) {
186  icoord++; // skip 2nd of pixel coordinates so we don't do them twice
187  }
188  }
189  }
190  }
191  tracks.push_back(track_cands[icomb]);
192  }
193 
194  // Increment counters
195  m_nfits += nFits;
196  if (nMissing > 0)
197  {
198  m_nfits_maj += nFits;
199  if (missPixel) m_nfits_maj_pix += nFits;
200  if (missStrip) m_nfits_maj_SCT += nFits;
201  }
202 
203  // Do recovery fits
204  if (nMissing == 0) {
205  // In the case of m_do_majority > 1, we only do majority fits if ALL full fits fail the chi2 cut
206  if (m_do_majority == 1 || (m_do_majority > 1 && !hasGoodFit(tracks, m_Chi2Dof_recovery_min)))
207  {
208  for (FPGATrackSimTrack & t : tracks)
209  if (t.getChi2ndof() > m_Chi2Dof_recovery_min && t.getChi2ndof() < m_Chi2Dof_recovery_max){
210  double y(0);
211  if (road != nullptr && m_IdealCoordFitType != TrackCorrType::None)
212  y = road->getY();
213  t = recoverTrack(t, norecovery_mask, sector, y);
214 
215  }
216  }
217  }
218 
219  // Add truth info
220  for (FPGATrackSimTrack & t : tracks) {
221  compute_truth(t); // match the track to a geant particle using the channel-level geant info in the hit data.
222  }
223 
224  return FITTRACKS_OK;
225 }
226 
227 
229 // fitTracks core helper functions
231 
232 
233 // Given road, populates the supplied variables with info on which layers missed hits
234 void TrackFitter::getMissingInfo(const FPGATrackSimRoad & road, int & nMissing, bool & missPixel, bool & missStrip,
235  layer_bitmask_t & missing_mask, layer_bitmask_t & norecovery_mask)
236 {
237  nMissing = m_pmap->getNCoords(); // init with nCoords and decrement as we find misses
238  missPixel = false;
239  missStrip = false;
240  missing_mask = 0;
241  norecovery_mask = 0;
242  unsigned int wclayers = road.getWCLayers();
243  for (unsigned layer = 0; layer < m_pmap->getNLogiLayers(); layer++)
244  {
245  int nHits = road.getHits(layer).size();
246  if (nHits==0)
247  {
248  if (m_IdealCoordFitType == TrackCorrType::None && ((wclayers >> layer) & 1))
249  {
250  int ix = m_pmap->getCoordOffset(layer);
251  int iy = ix + 1;
252  if (m_pmap->isSCT(layer))
253  {
254  missing_mask |= 1 << ix;
255  nMissing -= 1;
256  }
257  else
258  {
259  missing_mask |= (1<<ix) | (1<<iy);
260  nMissing -= 2;
261  }
262  }
263  else
264  {
265  if (m_pmap->isSCT(layer)) missStrip = true;
266  else missPixel = true;
267  }
268  }
269  else if (!((wclayers >> layer) & 1)) { // we have a hit
270  int ix = m_pmap->getCoordOffset(layer);
271  int iy = ix + 1;
272  if (m_pmap->isSCT(layer))
273  {
274  missing_mask |= 1 << ix;
275  nMissing -= 1;
276  }
277  else
278  {
279  missing_mask |= (1<<ix) | (1<<iy);
280  nMissing -= 2;
281  }
282 
283  // set the mask to avoid recovery in crowded planes
284  if (m_norecovery_nhits != -1 && nHits > m_norecovery_nhits)
285  norecovery_mask |= (1<<layer);
286  }
287  }
288 }
289 
290 
291 
300 void TrackFitter::makeTrackCandidates(const FPGATrackSimRoad & road, const FPGATrackSimTrack & temp, std::vector<FPGATrackSimTrack>& track_cands)
301 {
302  std::vector<std::vector<int>> combs = getComboIndices(road.getNHits_layer());
303  track_cands.resize(combs.size(), temp);
304  //
305  //get the WC hits:
306  layer_bitmask_t wcbits= road.getWCLayers();
307  // Add the hits from each combination to the track, and set ID
308  for (size_t icomb = 0; icomb < combs.size(); icomb++)
309  {
310  //Need to set the ID and the hits size of this track
311  track_cands[icomb].setTrackID(m_idbase + icomb);
312  track_cands[icomb].setNLayers(m_pmap->getNLogiLayers());
313 
314  // If this is an idealized coordinate fit; keep references to the idealized radii.
315  track_cands[icomb].setIdealRadii(m_rmap->getAvgRadii(0));
316 
317  std::vector<int> const & hit_indices = combs[icomb]; // size nLayers
318  for (unsigned layer = 0; layer < m_pmap->getNLogiLayers(); layer++)
319  {
320  if (hit_indices[layer] < 0) // Set a dummy hit if road has no hits in this layer
321  {
323  newhit.setLayer(layer);
324  newhit.setSection(0);
325  if (m_pmap->getDim(layer) == 2) newhit.setDetType(SiliconTech::pixel);
326  else newhit.setDetType(SiliconTech::strip);
327 
328  if (wcbits & (1 << layer ) ) {
330  newhit.setLayer(layer);
331  }
332 
333  track_cands[icomb].setFPGATrackSimHit(layer, newhit);
334  }
335  else
336  {
337  const std::shared_ptr<const FPGATrackSimHit> hit = road.getHits(layer)[hit_indices[layer]];
338  // If this is an outer spacepoint, and it is not the same as the inner spacepoint, reject it.
339  // Here we "reject" it by marking the candidate as "invalid", to be rejected later.
340  // That require another field on the track object, but it avoids having to change the sizes
341  // of arrays computed above.
342  if (hit->getHitType() == HitType::spacepoint && (hit->getPhysLayer() % 2) == 1) {
343  const FPGATrackSimHit inner_hit = track_cands[icomb].getFPGATrackSimHits().at(layer - 1);
344  if ((hit->getX() != inner_hit.getX()) || (hit->getY() != inner_hit.getY()) || (hit->getZ() != inner_hit.getZ())) {
345  track_cands[icomb].setValidCand(false);
346  }
347  }
348  track_cands[icomb].setFPGATrackSimHit(layer, *hit);
349  }
350  }
351  }
352 
353  m_idbase += combs.size();
354 }
355 
356 
357 
366 {
367  m_nfits_rec += 1;
368 
369  std::vector<FPGATrackSimTrack> recovered_tracks(m_pmap->getNLogiLayers(),t); // start with the complete track in all layers
370 
371  float best_chi2ndof = t.getChi2ndof();
372  int best_i = -1;
373 
374  // Remove a hit from each layer and do a fit
375  for (unsigned layer = (m_require_first ? 1 : 0); layer < recovered_tracks.size(); ++layer)
376  {
377  // Skip planes with multiple hits
378  if (norecovery_mask & (1<<layer)) continue;
379  m_nfits_addrec += 1;
380  // Zero the cluster for the missing layer, make sure to set the number of dimensions for it
381 
383  newhit.setLayer(layer);
384  newhit.setSection(0);
386  recovered_tracks[layer].setFPGATrackSimHit(layer,newhit);
387  // Set the number of missing points and the related bitmask
388  int ix = m_pmap->getCoordOffset(layer);
389 
390  unsigned int missing_mask = t.getHitMap();
391  missing_mask &= ~(1 << ix);
392 
393  if (m_pmap->isPixel(layer)) missing_mask &= ~(1 << (ix + 1));
394 
395  recovered_tracks[layer].setHitMap(missing_mask);
396  recovered_tracks[layer].setNMissing(t.getNMissing() + m_pmap->getDim(layer));
397 
398  // reset the pt
399  recovered_tracks[layer].setQOverPt(qoverpt);
400  recovered_tracks[layer].setTrackCorrType(m_IdealCoordFitType);
401 
402 
403  // If not guessing do the fit using layer+1 since 1st set of constants are the 8/8
404  if (m_guessinghits) m_nominalBank->linfit(sector, recovered_tracks[layer], m_do2ndStage);
405  else m_droppedLayerBanks[layer]->linfit(sector, recovered_tracks[layer], m_do2ndStage);
406 
407 
408  // Check if the chi2ndof is better
409  if (recovered_tracks[layer].getChi2ndof() < best_chi2ndof)
410  {
411  best_chi2ndof = recovered_tracks[layer].getChi2ndof();
412  best_i = layer;
413  }
414  }
415 
416  if (best_i >= 0) {// a better track was found
417  return recovered_tracks[best_i];
418  } else
419  return t;
420 }
421 
422 
423 
424 
425 // compute the best geant match, the barcode with the largest number of hits contributing to the track,
426 // and store in the track.
428 {
429  std::vector<FPGATrackSimMultiTruth> mtv;
430 
431  for (unsigned layer = 0; layer < m_pmap->getNLogiLayers(); layer++)
432  {
433  if (t.getHitMap() & (1 << m_pmap->getCoordOffset(layer))) continue; // no hit in this plane
434  //Sanity check that we have enough hits.
435  if (layer < t.getFPGATrackSimHits().size()) mtv.push_back(t.getFPGATrackSimHits().at(layer).getTruth());
436 
437  // adjust weight for hits without (and also with) a truth match, so that each is counted with the same weight.
438  mtv.back().assign_equal_normalization();
439  }
440 
442  // frac is then the fraction of the total number of hits on the track attributed to the barcode.
443 
446  const bool ok = mt.best(tbarcode, tfrac);
447  if (ok)
448  {
449  t.setEventIndex(tbarcode.first);
450  t.setBarcode(tbarcode.second);
451  t.setBarcodeFrac(tfrac);
452  }
453 }
454 
455 
457 // findTracks utility helper functions
459 
460 // Returns true if there is a fit in track_cands with chi2ndof < minchi2ndof
461 bool hasGoodFit(std::vector<FPGATrackSimTrack> const & track_cands, float minchi2ndof)
462 {
463  for (FPGATrackSimTrack const & t: track_cands)
464  {
465  if (t.getChi2ndof() > 0 && t.getChi2ndof() < minchi2ndof)
466  return true;
467  }
468  return false;
469 }
FPGATrackSimTrack::setHitMap
void setHitMap(unsigned int v)
Definition: FPGATrackSimTrack.h:101
TrackFitter::compute_truth
void compute_truth(FPGATrackSimTrack &newtrk) const
Definition: TrackFitter.cxx:427
TrackFitter::m_idbase
int m_idbase
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:134
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
FPGATrackSimHit::setSection
void setSection(unsigned v)
Definition: FPGATrackSimHit.h:93
TrackFitter::m_max_ncomb
const int m_max_ncomb
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:98
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
FPGATrackSimPlaneMap::getNLogiLayers
uint32_t getNLogiLayers() const
Definition: FPGATrackSimPlaneMap.h:75
SiliconTech::strip
@ strip
FPGATrackSimTrack::setBankID
void setBankID(int v)
Definition: FPGATrackSimTrack.h:84
FPGATrackSimHit::getPhysLayer
unsigned getPhysLayer() const
Definition: FPGATrackSimHit.cxx:69
getMessageSvc.h
singleton-like access to IMessageSvc via open function and helper
getBestChi2
std::vector< FPGATrackSimTrack >::const_iterator getBestChi2(std::vector< FPGATrackSimTrack > const &tracks)
TrackFitter::m_Chi2Dof_recovery_max
float m_Chi2Dof_recovery_max
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:107
TrackFitter::m_nfits_maj_pix
int m_nfits_maj_pix
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:138
FPGATrackSimTrack
Definition: FPGATrackSimTrack.h:18
FPGATrackSimTrack::setPatternID
void setPatternID(int v)
Definition: FPGATrackSimTrack.h:85
TrackFitter::makeTrackCandidates
void makeTrackCandidates(const FPGATrackSimRoad &road, const FPGATrackSimTrack &temp, std::vector< FPGATrackSimTrack > &track_cands)
Creates a list of track candidates by taking all possible combination of hits in road.
Definition: TrackFitter.cxx:300
FPGATrackSimMultiTruth::Weight
float Weight
Definition: FPGATrackSimMultiTruth.h:50
FPGATrackSimRoad::getHits
const std::vector< std::shared_ptr< const FPGATrackSimHit > > & getHits(size_t layer) const
Definition: FPGATrackSimRoad.h:99
TrackFitter::m_require_first
bool m_require_first
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:100
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
FPGATrackSimHit::getX
float getX() const
Definition: FPGATrackSimHit.h:137
accumulate
bool accumulate(AccumulateMap &map, std::vector< module_t > const &modules, FPGATrackSimMatrixAccumulator const &acc)
Accumulates an accumulator (e.g.
Definition: FPGATrackSimMatrixAccumulator.cxx:22
FPGATrackSimTrack::setNMissing
void setNMissing(int v)
Definition: FPGATrackSimTrack.h:99
TrackFitter::m_Chi2Dof_recovery_min
float m_Chi2Dof_recovery_min
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:106
TrackFitter.h
FPGATrackSimTrack::setHoughXBin
void setHoughXBin(unsigned v)
Definition: FPGATrackSimTrack.h:108
FPGATrackSimPlaneMap::getNCoords
uint32_t getNCoords() const
Definition: FPGATrackSimPlaneMap.h:76
FPGATrackSimTrack::setFirstSectorID
void setFirstSectorID(int v)
Definition: FPGATrackSimTrack.h:86
HitType::spacepoint
@ spacepoint
FPGATrackSimMultiTruth.h
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
FITTRACKS_OK
#define FITTRACKS_OK
Definition: FPGATrackSimTypes.h:15
x
#define x
TrackFitter::recoverTrack
FPGATrackSimTrack recoverTrack(FPGATrackSimTrack const &t, sector_t sector, layer_bitmask_t norecovery_mask, double qoverpt)
Given a N/N track that has a bad chi2, try to refit the track by taking away a single hit,...
Definition: TrackFitter.cxx:365
HitType::guessed
@ guessed
FPGATrackSimRoad::getNHits_layer
std::vector< size_t > getNHits_layer() const
Definition: FPGATrackSimRoad.cxx:27
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition: getMessageSvc.cxx:20
TrackFitter::m_tracks_missinghits_track
std::vector< FPGATrackSimTrack > m_tracks_missinghits_track
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:131
FPGATrackSimPlaneMap::getCoordLayer
uint32_t getCoordLayer(uint32_t coord) const
Definition: FPGATrackSimPlaneMap.h:98
FPGATrackSimMultiTruth::best
bool best(FPGATrackSimMultiTruth::Barcode &code, FPGATrackSimMultiTruth::Weight &weight) const
Definition: FPGATrackSimMultiTruth.h:86
FPGATrackSimHit
Definition: FPGATrackSimHit.h:41
FPGATrackSimPlaneMap::getDim
uint32_t getDim(size_t logiLayer) const
Definition: FPGATrackSimPlaneMap.h:78
TrackFitter::fitTracks
int fitTracks(const std::vector< std::shared_ptr< const FPGATrackSimRoad >> &roads, std::vector< FPGATrackSimTrack > &tracks)
Definition: TrackFitter.cxx:56
FPGATrackSimTrack::setSecondSectorID
void setSecondSectorID(int v)
Definition: FPGATrackSimTrack.h:87
TrackFitter::m_nfits_maj
int m_nfits_maj
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:136
HitType::wildcard
@ wildcard
TrackFitter::m_doDeltaGPhis
bool m_doDeltaGPhis
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:95
FPGATrackSimPlaneMap::getCoordOffset
uint32_t getCoordOffset(size_t logiLayer) const
Definition: FPGATrackSimPlaneMap.h:92
TrackFitter::m_do2ndStage
bool m_do2ndStage
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:92
FPGATrackSimPlaneMap::isPixel
bool isPixel(int pl) const
Definition: FPGATrackSimPlaneMap.h:107
FPGATrackSimHit::setDetType
void setDetType(SiliconTech detType)
Definition: FPGATrackSimHit.h:55
FPGATrackSimTrack::setHoughYBin
void setHoughYBin(unsigned v)
Definition: FPGATrackSimTrack.h:109
FITTRACKS_BAD
#define FITTRACKS_BAD
Definition: FPGATrackSimTypes.h:16
TrackFitter::m_guessinghits
bool m_guessinghits
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:93
Athena
Some weak symbol referencing magic...
Definition: AthLegacySequence.h:21
TrackFitter::m_do_majority
unsigned m_do_majority
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:99
TrackFitter::m_pmap
FPGATrackSimPlaneMap const * m_pmap
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:117
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
TrackStage::FIRST
@ FIRST
FPGATrackSimTrack::setDoDeltaGPhis
void setDoDeltaGPhis(bool v)
Definition: FPGATrackSimTrack.h:83
FPGATrackSimMultiTruth::Barcode
std::pair< unsigned long, unsigned long > Barcode
Definition: FPGATrackSimMultiTruth.h:49
TrackFitter::m_nfits_addrec
int m_nfits_addrec
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:140
TrackFitter::m_nfits_maj_SCT
int m_nfits_maj_SCT
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:137
AthMessaging
Class to provide easy MsgStream access and capabilities.
Definition: AthMessaging.h:55
TrackStage::SECOND
@ SECOND
TrackFitter::m_IdealCoordFitType
TrackCorrType m_IdealCoordFitType
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:94
TrackFitter::m_norecovery_nhits
int m_norecovery_nhits
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:101
FPGATrackSimHit::getY
float getY() const
Definition: FPGATrackSimHit.h:138
FPGATrackSimTrack::setTrackCorrType
void setTrackCorrType(TrackCorrType v)
Definition: FPGATrackSimTrack.h:81
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
grepfile.ic
int ic
Definition: grepfile.py:33
FPGATrackSimTrack::setTrackStage
void setTrackStage(TrackStage v)
Definition: FPGATrackSimTrack.h:82
sector_t
int32_t sector_t
Definition: FPGATrackSimTypes.h:21
TrackFitter::m_rmap
FPGATrackSimRegionMap const * m_rmap
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:118
FPGATrackSimMultiTruth
Definition: FPGATrackSimMultiTruth.h:46
FPGATrackSimMultiTruth::AddAccumulator
Definition: FPGATrackSimMultiTruth.h:57
TrackFitter::getMissingInfo
void getMissingInfo(const FPGATrackSimRoad &road, int &nMissing, bool &missPixel, bool &missStrip, layer_bitmask_t &missing_mask, layer_bitmask_t &norecovery_mask)
Definition: TrackFitter.cxx:234
TrackCorrType::None
@ None
FPGATrackSimFitConstantBank
Definition: FPGATrackSimFitConstantBank.h:24
FPGATrackSimPlaneMap::isSCT
bool isSCT(int pl) const
Definition: FPGATrackSimPlaneMap.h:106
FPGATrackSimRoad::getWCLayers
layer_bitmask_t getWCLayers() const
Definition: FPGATrackSimRoad.h:95
FPGATrackSimTrack::setHoughY
void setHoughY(float v)
Definition: FPGATrackSimTrack.h:91
FPGATrackSimTrack::setQOverPt
void setQOverPt(float v)
Definition: FPGATrackSimTrack.h:92
FPGATrackSimRegionMap::getAvgRadii
const std::vector< double > & getAvgRadii(unsigned region) const
Definition: FPGATrackSimRegionMap.h:104
TrackFitter::m_nfits
int m_nfits
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:135
FPGATrackSimFitConstantBank::getIsGood
bool getIsGood(sector_t sector) const
Definition: FPGATrackSimFitConstantBank.h:41
FPGATrackSimFitConstantBank::linfit
bool linfit(sector_t sector, FPGATrackSimTrack &track, bool isSecondStage) const
Definition: FPGATrackSimFitConstantBank.cxx:303
FPGATrackSimFitConstantBank::getNSectors
int getNSectors() const
Definition: FPGATrackSimFitConstantBank.h:37
FPGATrackSimHit::setLayer
void setLayer(unsigned v)
Definition: FPGATrackSimHit.h:92
y
#define y
TrackFitter::m_nominalBank
const FPGATrackSimFitConstantBank * m_nominalBank
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:124
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
layer_bitmask_t
uint32_t layer_bitmask_t
Definition: FPGATrackSimTypes.h:22
FPGATrackSimTrack::setSubRegion
void setSubRegion(unsigned v)
Definition: FPGATrackSimTrack.h:107
TrackFitter::resetCounters
void resetCounters()
Definition: TrackFitter.cxx:39
FPGATrackSimTrack::setNLayers
void setNLayers(int)
set the number of layers in the track.
Definition: FPGATrackSimTrack.cxx:108
TrackFitter::getDoMissingHitsCheck
bool getDoMissingHitsCheck() const
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:62
muCombUtil::getChi2
double getChi2(int &ndof, double ipt, double eta1, double seta1, double phi1, double sphi1, double ipt1, double sipt1, double eta2, double seta2, double phi2, double sphi2, double ipt2, double sipt2, bool useAbsPt)
Get OLD style (i.e. muFast time) Chi2.
Definition: muCombUtil.cxx:374
SiliconTech::pixel
@ pixel
TrackFitter::TrackFitter
TrackFitter(void)
FPGATrackSimRoad
Definition: FPGATrackSimRoad.h:30
FPGATrackSimTrack::setHoughX
void setHoughX(float v)
Definition: FPGATrackSimTrack.h:90
FPGATrackSimHit::getHitType
HitType getHitType() const
Definition: FPGATrackSimHit.h:57
FPGATrackSimHit::setHitType
void setHitType(HitType type)
Definition: FPGATrackSimHit.h:54
hasGoodFit
bool hasGoodFit(std::vector< FPGATrackSimTrack > const &track_cands, float minchi2)
Definition: TrackFitter.cxx:461
TrackFitter::m_droppedLayerBanks
std::vector< const FPGATrackSimFitConstantBank * > m_droppedLayerBanks
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:128
TrackFitter::m_nfits_rec
int m_nfits_rec
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/src/TrackFitter.h:139