ATLAS Offline Software
TrackFitter.cxx
Go to the documentation of this file.
1 
2 // Copyright (C) 2002-2025 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 
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() << "and nhits = " << road->getNHits());
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 
141  // This may not even need to be a class member. Create the vector of possible combinations.
142  std::vector<std::vector<int>> comboIndices = getComboIndices(road->getNHits_layer());
143  ATH_MSG_DEBUG("There are theoretically " << comboIndices.size() << " combinations to process for this road");
144  size_t nFits = 0;
145  for (size_t icomb = 0; icomb < comboIndices.size(); icomb++) {
146  FPGATrackSimTrack track_cand = makeTrackCandidate(*road, temp, comboIndices[icomb]);
147 
148  // Before we start, make sure this track candidate has not been marked as invalid
149  // due to combinatorics issues with spacepoints.
150  bool ok = track_cand.isValidCand();
151  if (!ok) {
152  continue;
153  }
154 
155  // If the "fit from road" flag is set, then just assign track chi2 and parameters from that.
156  if (!m_do2ndStage && m_fitFromRoad) {
157  // Then actually do it using the road values.
158  track_cand.setChi2(road->getFitChi2());
159  track_cand.setPars(road->getFitParams());
160  ATH_MSG_DEBUG("Assigned chi2 = " << track_cand.getChi2() << " and parameters from genscan tool");
161  ATH_MSG_DEBUG("Set q/pt = " << track_cand.getQOverPt());
162  ATH_MSG_DEBUG("Set d0 = " << track_cand.getD0());
163  ATH_MSG_DEBUG("Set z0 = " << track_cand.getZ0());
164  ATH_MSG_DEBUG("Set eta = " << track_cand.getEta());
165  ATH_MSG_DEBUG("Set phi = " << track_cand.getPhi());
166  } else {
167 
168  if (nMissing == 0 || m_guessinghits)
169  {
170  ok = m_nominalBank->linfit(sector, track_cand, m_do2ndStage);
171  }
172  else
173  {
174  unsigned int ic = 0; // this will be the leading coordinate with a missing hit
175  for (unsigned int ic = 0; ic < m_pmap->getNCoords(); ic++) {
176  if (!( (missing_mask >> ic) & 0x1)) break; // if we found one, stop
177  }
178  // banks are indexed by plane, not by coordinate
179  ok = m_droppedLayerBanks[m_pmap->getCoordLayer(ic)]->linfit(sector, track_cand, m_do2ndStage);
180  }
181 
182  if (!ok) {
183  continue;
184  }
185  track_cand.setOrigChi2(track_cand.getChi2());
186  if (getDoMissingHitsCheck()) {
187  if (track_cand.getNMissing() == 0) { // missing 0 hits, drop hits one at a time and refit!
188  for (unsigned icoord = 0; icoord < m_pmap->getNCoords(); icoord++) { // 9 coordinates to refit, nominally
189 
190  FPGATrackSimTrack newtrack = track_cand;
191  newtrack.setNMissing(1);
192  unsigned int bitmask = ( 1 << m_pmap->getNCoords() ) - 1; // all bits set to 1
193  bitmask &= ~(1 << icoord); // remove this coordinate
194  if (m_pmap->getDim(icoord) == 2) { // if we need to do two coordinates at once
195  bitmask &= ~(1 << (icoord+1)); // remove the next coordinate, too
196  newtrack.setNMissing(2);
197  }
198  newtrack.setHitMap(bitmask); // update bitmask
199  m_nominalBank->linfit(sector, newtrack, m_do2ndStage);
200  m_tracks_missinghits_track.push_back(newtrack);
201  if (m_pmap->getDim(icoord) == 2) {
202  icoord++; // skip 2nd of pixel coordinates so we don't do them twice
203  }
204  }
205  }
206  }
207  }
208  tracks.push_back(track_cand);
209 
210  // Enforce m_max_ncomb here, but only for the tracks that we actually fit.
211  // Let's see how often this warning fires.
212  nFits += 1;
213  if (nFits > (size_t)m_max_ncomb) {
214  ATH_MSG_WARNING("Reached " << m_max_ncomb << " fits when processing track combinations for single road, breaking");
215  }
216  }
217  ATH_MSG_DEBUG("Processed " << tracks.size() << " actual/valid tracks for this road");
218 
219  // Increment counters
220  m_nfits += nFits;
221  if (nMissing > 0)
222  {
223  m_nfits_maj += nFits;
224  if (missPixel) m_nfits_maj_pix += nFits;
225  if (missStrip) m_nfits_maj_SCT += nFits;
226  }
227 
228  // Do recovery fits
229  if (nMissing == 0) {
230  // In the case of m_do_majority > 1, we only do majority fits if ALL full fits fail the chi2 cut
231  if (m_do_majority == 1 || (m_do_majority > 1 && !hasGoodFit(tracks, m_Chi2Dof_recovery_min)))
232  {
233  for (FPGATrackSimTrack & t : tracks)
234  if (t.getChi2ndof() > m_Chi2Dof_recovery_min && t.getChi2ndof() < m_Chi2Dof_recovery_max){
235  double y(0);
236  if (road != nullptr && m_IdealCoordFitType != TrackCorrType::None)
237  y = road->getY();
238  t = recoverTrack(t, norecovery_mask, sector, y);
239 
240  }
241  }
242  }
243 
244  // Add truth info
245  for (FPGATrackSimTrack & t : tracks) {
246  compute_truth(t); // match the track to a geant particle using the channel-level geant info in the hit data.
247  }
248 
249  return FITTRACKS_OK;
250 }
251 
252 
254 // fitTracks core helper functions
256 
257 
258 // Given road, populates the supplied variables with info on which layers missed hits
259 void TrackFitter::getMissingInfo(const FPGATrackSimRoad & road, int & nMissing, bool & missPixel, bool & missStrip,
260  layer_bitmask_t & missing_mask, layer_bitmask_t & norecovery_mask)
261 {
262  nMissing = m_pmap->getNCoords(); // init with nCoords and decrement as we find misses
263  missPixel = false;
264  missStrip = false;
265  missing_mask = 0;
266  norecovery_mask = 0;
267  unsigned int wclayers = road.getWCLayers();
268  for (unsigned layer = 0; layer < m_pmap->getNLogiLayers(); layer++)
269  {
270  int nHits = road.getHits(layer).size();
271  if (nHits==0)
272  {
273  if (m_IdealCoordFitType == TrackCorrType::None && ((wclayers >> layer) & 1))
274  {
275  int ix = m_pmap->getCoordOffset(layer);
276  int iy = ix + 1;
277  if (m_pmap->isSCT(layer))
278  {
279  missing_mask |= 1 << ix;
280  nMissing -= 1;
281  }
282  else
283  {
284  missing_mask |= (1<<ix) | (1<<iy);
285  nMissing -= 2;
286  }
287  }
288  else
289  {
290  if (m_pmap->isSCT(layer)) missStrip = true;
291  else missPixel = true;
292  }
293  }
294  else if (!((wclayers >> layer) & 1)) { // we have a hit
295  int ix = m_pmap->getCoordOffset(layer);
296  int iy = ix + 1;
297  if (m_pmap->isSCT(layer))
298  {
299  missing_mask |= 1 << ix;
300  nMissing -= 1;
301  }
302  else
303  {
304  missing_mask |= (1<<ix) | (1<<iy);
305  nMissing -= 2;
306  }
307 
308  // set the mask to avoid recovery in crowded planes
309  if (m_norecovery_nhits != -1 && nHits > m_norecovery_nhits)
310  norecovery_mask |= (1<<layer);
311  }
312  }
313 }
314 
315 
316 
327 void TrackFitter::makeTrackCandidates(const FPGATrackSimRoad & road, const FPGATrackSimTrack & temp, std::vector<FPGATrackSimTrack>& track_cands)
328 {
329  std::vector<std::vector<int>> combs = getComboIndices(road.getNHits_layer());
330  track_cands.resize(combs.size(), temp);
331 
332  //get the WC hits:
333  layer_bitmask_t wcbits= road.getWCLayers();
334  for (size_t icomb = 0; icomb < combs.size(); icomb++)
335  {
336  //Need to set the ID and the hits size of this track
337  track_cands[icomb].setTrackID(m_idbase + icomb);
338  track_cands[icomb].setNLayers(m_pmap->getNLogiLayers());
339 
340  // If this is an idealized coordinate fit; keep references to the idealized radii.
341  track_cands[icomb].setIdealRadii(m_rmap->getAvgRadii(0));
342 
343  std::vector<int> const & hit_indices = m_comboIndices[icomb]; // size nLayers
344  for (unsigned layer = 0; layer < m_pmap->getNLogiLayers(); layer++)
345  {
346  if (hit_indices[layer] < 0) // Set a dummy hit if road has no hits in this layer
347  {
349  newhit.setLayer(layer);
350  newhit.setSection(0);
351  if (m_pmap->getDim(layer) == 2) newhit.setDetType(SiliconTech::pixel);
352  else newhit.setDetType(SiliconTech::strip);
353 
354  if (wcbits & (1 << layer ) ) {
356  newhit.setLayer(layer);
357  }
358 
359  track_cands[icomb].setFPGATrackSimHit(layer, newhit);
360  }
361  else
362  {
363  const std::shared_ptr<const FPGATrackSimHit> hit = road.getHits(layer)[hit_indices[layer]];
364  // If this is an outer spacepoint, and it is not the same as the inner spacepoint, reject it.
365  // Here we "reject" it by marking the candidate as "invalid", to be rejected later.
366  // That require another field on the track object, but it avoids having to change the sizes
367  // of arrays computed above.
368  if (hit->getHitType() == HitType::spacepoint && hit->getSide() == 1 && layer > 0) {
369  const FPGATrackSimHit inner_hit = track_cands[icomb].getFPGATrackSimHits().at(layer - 1);//avoid negative index
370  if ((hit->getX() != inner_hit.getX()) || (hit->getY() != inner_hit.getY()) || (hit->getZ() != inner_hit.getZ())) {
371  track_cands[icomb].setValidCand(false);
372  }
373  }
374  track_cands[icomb].setFPGATrackSimHit(layer, *hit);
375  }
376  }
377  }
378 
379  m_idbase += combs.size();
380 }
381 
382 // This is a version of the above that produces a single track candidate on demand.
383 FPGATrackSimTrack TrackFitter::makeTrackCandidate(const FPGATrackSimRoad & road, const FPGATrackSimTrack & temp, const std::vector<int>& hit_indices)
384 {
385  m_idbase += 1;
386 
387  FPGATrackSimTrack track_cand(temp);
388 
389  //get the WC hits:
390  layer_bitmask_t wcbits= road.getWCLayers();
391 
392  //Need to set the ID and the hits size of this track
393  track_cand.setTrackID(m_idbase);
394  track_cand.setNLayers(m_pmap->getNLogiLayers());
395 
396  // If this is an idealized coordinate fit; keep references to the idealized radii.
397  track_cand.setIdealRadii(m_rmap->getAvgRadii(0));
398 
399  for (unsigned layer = 0; layer < m_pmap->getNLogiLayers(); layer++)
400  {
401  if (hit_indices[layer] < 0) // Set a dummy hit if road has no hits in this layer
402  {
404  newhit.setLayer(layer);
405  newhit.setSection(0);
406  if (m_pmap->getDim(layer) == 2) newhit.setDetType(SiliconTech::pixel);
407  else newhit.setDetType(SiliconTech::strip);
408 
409  if (wcbits & (1 << layer ) ) {
411  newhit.setLayer(layer);
412  }
413 
414  track_cand.setFPGATrackSimHit(layer, newhit);
415  }
416  else
417  {
418  const std::shared_ptr<const FPGATrackSimHit> hit = road.getHits(layer)[hit_indices[layer]];
419  // If this is an outer spacepoint, and it is not the same as the inner spacepoint, reject it.
420  // Here we "reject" it by marking the candidate as "invalid", to be rejected later.
421  // That require another field on the track object, but it avoids having to change the sizes
422  // of arrays computed above.
423  if (hit->getHitType() == HitType::spacepoint && hit->getSide() == 1 && layer > 0) {
424  const FPGATrackSimHit inner_hit = track_cand.getFPGATrackSimHits().at(layer - 1);//avoid negative index
425  if ((hit->getX() != inner_hit.getX()) || (hit->getY() != inner_hit.getY()) || (hit->getZ() != inner_hit.getZ())) {
426  track_cand.setValidCand(false);
427  break;
428  }
429  }
430  track_cand.setFPGATrackSimHit(layer, *hit);
431  }
432  }
433 
434  return track_cand;
435 }
436 
445 {
446  m_nfits_rec += 1;
447 
448  std::vector<FPGATrackSimTrack> recovered_tracks(m_pmap->getNLogiLayers(),t); // start with the complete track in all layers
449 
450  float best_chi2ndof = t.getChi2ndof();
451  int best_i = -1;
452 
453  // Remove a hit from each layer and do a fit
454  for (unsigned layer = (m_require_first ? 1 : 0); layer < recovered_tracks.size(); ++layer)
455  {
456  // Skip planes with multiple hits
457  if (norecovery_mask & (1<<layer)) continue;
458  m_nfits_addrec += 1;
459  // Zero the cluster for the missing layer, make sure to set the number of dimensions for it
460 
462  newhit.setLayer(layer);
463  newhit.setSection(0);
465  recovered_tracks[layer].setFPGATrackSimHit(layer,newhit);
466  // Set the number of missing points and the related bitmask
467  int ix = m_pmap->getCoordOffset(layer);
468 
469  unsigned int missing_mask = t.getHitMap();
470  missing_mask &= ~(1 << ix);
471 
472  if (m_pmap->isPixel(layer)) missing_mask &= ~(1 << (ix + 1));
473 
474  recovered_tracks[layer].setHitMap(missing_mask);
475  recovered_tracks[layer].setNMissing(t.getNMissing() + m_pmap->getDim(layer));
476 
477  // reset the pt
478  recovered_tracks[layer].setQOverPt(qoverpt);
479  recovered_tracks[layer].setTrackCorrType(m_IdealCoordFitType);
480 
481 
482  // If not guessing do the fit using layer+1 since 1st set of constants are the 8/8
483  if (m_guessinghits) m_nominalBank->linfit(sector, recovered_tracks[layer], m_do2ndStage);
484  else m_droppedLayerBanks[layer]->linfit(sector, recovered_tracks[layer], m_do2ndStage);
485 
486 
487  // Check if the chi2ndof is better
488  if (recovered_tracks[layer].getChi2ndof() < best_chi2ndof)
489  {
490  best_chi2ndof = recovered_tracks[layer].getChi2ndof();
491  best_i = layer;
492  }
493  }
494 
495  if (best_i >= 0) {// a better track was found
496  return recovered_tracks[best_i];
497  } else
498  return t;
499 }
500 
501 
502 
503 
504 // compute the best geant match, the barcode with the largest number of hits contributing to the track,
505 // and store in the track.
507 {
508  std::vector<FPGATrackSimMultiTruth> mtv;
509 
510  for (unsigned layer = 0; layer < m_pmap->getNLogiLayers(); layer++)
511  {
512  if (t.getHitMap() & (1 << m_pmap->getCoordOffset(layer))) continue; // no hit in this plane
513  //Sanity check that we have enough hits.
514  if (layer < t.getFPGATrackSimHits().size()) mtv.push_back(t.getFPGATrackSimHits().at(layer).getTruth());
515 
516  // adjust weight for hits without (and also with) a truth match, so that each is counted with the same weight.
517  mtv.back().assign_equal_normalization();
518  }
519 
521  // frac is then the fraction of the total number of hits on the track attributed to the barcode.
522 
525  const bool ok = mt.best(tbarcode, tfrac);
526  if (ok)
527  {
528  t.setEventIndex(tbarcode.first);
529  t.setBarcode(tbarcode.second);
530  t.setBarcodeFrac(tfrac);
531  }
532 }
533 
534 
536 // findTracks utility helper functions
538 
539 // Returns true if there is a fit in track_cands with chi2ndof < minchi2ndof
540 bool hasGoodFit(std::vector<FPGATrackSimTrack> const & track_cands, float minchi2ndof)
541 {
542  for (FPGATrackSimTrack const & t: track_cands)
543  {
544  if (t.getChi2ndof() > 0 && t.getChi2ndof() < minchi2ndof)
545  return true;
546  }
547  return false;
548 }
FPGATrackSimTrack::setHitMap
void setHitMap(unsigned int v)
Definition: FPGATrackSimTrack.h:101
TrackFitter::compute_truth
void compute_truth(FPGATrackSimTrack &newtrk) const
Definition: TrackFitter.cxx:506
TrackFitter::m_idbase
int m_idbase
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:142
FPGATrackSimTrack::getEta
float getEta() const
Definition: FPGATrackSimTrack.h:41
FPGATrackSimHit::getSide
unsigned getSide() const
Definition: FPGATrackSimHit.h:83
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:215
FPGATrackSimHit::setSection
void setSection(unsigned v)
Definition: FPGATrackSimHit.h:93
TrackFitter::m_max_ncomb
const int m_max_ncomb
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:101
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
FPGATrackSimPlaneMap::getNLogiLayers
uint32_t getNLogiLayers() const
Definition: FPGATrackSimPlaneMap.h:75
FPGATrackSimTrack::setPars
void setPars(FPGATrackSimTrackPars const &pars)
Definition: FPGATrackSimTrack.h:118
SiliconTech::strip
@ strip
FPGATrackSimTrack::setBankID
void setBankID(int v)
Definition: FPGATrackSimTrack.h:84
FPGATrackSimTrack::getNMissing
int getNMissing() const
Definition: FPGATrackSimTrack.h:52
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/FPGATrackSimAlgorithms/TrackFitter.h:110
TrackFitter::m_nfits_maj_pix
int m_nfits_maj_pix
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:146
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:327
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:102
FPGATrackSimTrack::getPhi
float getPhi() const
Definition: FPGATrackSimTrack.h:39
TrackFitter::m_require_first
bool m_require_first
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:103
FPGATrackSimHit::getX
float getX() const
Definition: FPGATrackSimHit.h:149
FPGATrackSimTrack::setNMissing
void setNMissing(int v)
Definition: FPGATrackSimTrack.h:99
TrackFitter::m_Chi2Dof_recovery_min
float m_Chi2Dof_recovery_min
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:109
FPGATrackSimTrack::getD0
float getD0() const
Definition: FPGATrackSimTrack.h:38
FPGATrackSimTrack::setHoughXBin
void setHoughXBin(unsigned v)
Definition: FPGATrackSimTrack.h:109
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:444
FPGATrackSimTrack::setFPGATrackSimHit
void setFPGATrackSimHit(unsigned i, const FPGATrackSimHit &hit)
Definition: FPGATrackSimTrack.cxx:98
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/FPGATrackSimAlgorithms/TrackFitter.h:139
FPGATrackSimTrack::setOrigChi2
void setOrigChi2(float v)
Definition: FPGATrackSimTrack.h:98
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
FPGATrackSimTrack::getQOverPt
float getQOverPt() const
Definition: FPGATrackSimTrack.h:36
FPGATrackSimHit
Definition: FPGATrackSimHit.h:41
TrackFitter.h
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/FPGATrackSimAlgorithms/TrackFitter.h:144
HitType::wildcard
@ wildcard
TrackFitter::m_doDeltaGPhis
bool m_doDeltaGPhis
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:98
FPGATrackSimPlaneMap::getCoordOffset
uint32_t getCoordOffset(size_t logiLayer) const
Definition: FPGATrackSimPlaneMap.h:92
FPGATrackSimTrack::getFPGATrackSimHits
const std::vector< FPGATrackSimHit > & getFPGATrackSimHits() const
Definition: FPGATrackSimTrack.h:63
TrackFitter::m_do2ndStage
bool m_do2ndStage
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:95
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:110
FPGATrackSimTrack::getChi2
float getChi2() const
Definition: FPGATrackSimTrack.h:43
FITTRACKS_BAD
#define FITTRACKS_BAD
Definition: FPGATrackSimTypes.h:16
FPGATrackSimTrack::getZ0
float getZ0() const
Definition: FPGATrackSimTrack.h:40
TrackFitter::m_guessinghits
bool m_guessinghits
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:96
FPGATrackSimTrack::setValidCand
void setValidCand(bool v)
Definition: FPGATrackSimTrack.h:112
Athena
Some weak symbol referencing magic...
Definition: AthLegacySequence.h:21
TrackFitter::m_do_majority
unsigned m_do_majority
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:102
TrackFitter::m_pmap
FPGATrackSimPlaneMap const * m_pmap
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:121
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/FPGATrackSimAlgorithms/TrackFitter.h:148
TrackFitter::m_nfits_maj_SCT
int m_nfits_maj_SCT
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:145
AthMessaging
Class to provide easy MsgStream access and capabilities.
Definition: AthMessaging.h:55
TrackFitter::m_comboIndices
std::vector< std::vector< int > > m_comboIndices
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:127
TrackStage::SECOND
@ SECOND
TrackFitter::m_IdealCoordFitType
TrackCorrType m_IdealCoordFitType
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:97
TrackFitter::m_norecovery_nhits
int m_norecovery_nhits
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:104
FPGATrackSimHit::getY
float getY() const
Definition: FPGATrackSimHit.h:150
FPGATrackSimTrack::setTrackCorrType
void setTrackCorrType(TrackCorrType v)
Definition: FPGATrackSimTrack.h:81
FPGATrackSimHit::getZ
float getZ() const
Definition: FPGATrackSimHit.h:151
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
FPGATrackSimTrack::setIdealRadii
void setIdealRadii(const std::vector< double > &v)
Definition: FPGATrackSimTrack.h:113
TrackFitter::m_rmap
FPGATrackSimRegionMap const * m_rmap
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:122
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:259
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:98
FPGATrackSimTrack::setHoughY
void setHoughY(float v)
Definition: FPGATrackSimTrack.h:91
FPGATrackSimTrack::setTrackID
void setTrackID(int v)
Definition: FPGATrackSimTrack.h:88
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/FPGATrackSimAlgorithms/TrackFitter.h:143
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:304
runIDAlign.accumulate
accumulate
Update flags based on parser line args.
Definition: runIDAlign.py:107
FPGATrackSimFitConstantBank::getNSectors
int getNSectors() const
Definition: FPGATrackSimFitConstantBank.h:37
FPGATrackSimHit::setLayer
void setLayer(unsigned v)
Definition: FPGATrackSimHit.h:92
y
#define y
FPGATrackSimTrack::setChi2
void setChi2(float v)
Definition: FPGATrackSimTrack.h:97
TrackFitter::m_nominalBank
const FPGATrackSimFitConstantBank * m_nominalBank
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:132
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::isValidCand
bool isValidCand() const
Definition: FPGATrackSimTrack.h:79
TrackFitter::makeTrackCandidate
FPGATrackSimTrack makeTrackCandidate(const FPGATrackSimRoad &road, const FPGATrackSimTrack &temp, const std::vector< int > &hit_indices)
Definition: TrackFitter.cxx:383
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:107
TrackFitter::getDoMissingHitsCheck
bool getDoMissingHitsCheck() const
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:62
TrackFitter::m_fitFromRoad
bool m_fitFromRoad
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:115
SiliconTech::pixel
@ pixel
TrackFitter::TrackFitter
TrackFitter(void)
FPGATrackSimRoad
Definition: FPGATrackSimRoad.h:31
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:540
TrackFitter::m_droppedLayerBanks
std::vector< const FPGATrackSimFitConstantBank * > m_droppedLayerBanks
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:136
TrackFitter::m_nfits_rec
int m_nfits_rec
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:147