ATLAS Offline Software
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
TrackFitter Class Reference

#include <TrackFitter.h>

Inheritance diagram for TrackFitter:
Collaboration diagram for TrackFitter:

Public Member Functions

int fitTracks (const std::vector< std::shared_ptr< const FPGATrackSimRoad >> &roads, std::vector< FPGATrackSimTrack > &tracks)
 
const std::vector< FPGATrackSimTrack > & getMissingHitsCheckTracks ()
 
 TrackFitter (const FPGATrackSimFitConstantBank *nominalbank, const std::vector< const FPGATrackSimFitConstantBank * > &droppedLayerbanks, bool guessingHits)
 
void setIdentifyBadHit (bool flag)
 
bool getIdentifyBadHit () const
 
void setPlaneMap (FPGATrackSimPlaneMap const *map)
 
FPGATrackSimPlaneMap constgetPlaneMap () const
 
void setRegionMap (FPGATrackSimRegionMap const *map)
 
void setNorecoveryNhits (int v)
 
int getNorecoveryNhits () const
 
void setRequireFirst (bool v)
 
bool getRequireFirst () const
 
void setDoMajority (unsigned int v)
 
unsigned getDoMajority () const
 
void setDoMissingHitsCheck (bool v)
 
bool getDoMissingHitsCheck () const
 
void setChi2DofRecoveryMin (float v)
 
float getChi2DofRecoveryMin () const
 
void setChi2DofRecoveryMax (float v)
 
float getChi2DofRecoveryMax () const
 
void setDoSecondStage (bool v)
 
bool getDoSecondStage () const
 
void setIdealCoordFitType (TrackCorrType type)
 
TrackCorrType getIdealCoordFitType () const
 
void setDoDeltaGPhis (bool v)
 
bool getDoDeltaGPhis () const
 
int getNFits ()
 
int getNFitsMajority ()
 
int getNFitsMajoritySCI ()
 
int getNFitsMajorityPix ()
 
int getNFitsRecovery ()
 
 TrackFitter (void)
 
virtual ~TrackFitter (void)
 
virtual DkfTrackfit (const RecTrack *)
 
bool msgLvl (const MSG::Level lvl) const
 Test the output level. More...
 
MsgStream & msg () const
 The standard message stream. More...
 
MsgStream & msg (const MSG::Level lvl) const
 The standard message stream. More...
 
void setLevel (MSG::Level lvl)
 Change the current logging level. More...
 

Protected Member Functions

virtual TrkTrackStateextrapolate (TrkTrackState *pTS, TrkPlanarSurface *pSB, TrkPlanarSurface *pSE, double J[5][5], double &path)
 
void matrixInversion5x5 (double a[5][5])
 
virtual DkfTrackcreateDkfTrack (const RecTrack *inputTrack)
 

Protected Attributes

double m_startB [3] {}
 
double m_endB [3] {}
 
std::vector< int > m_reMapVector
 

Private Member Functions

void resetCounters ()
 
int fitTracks (const std::shared_ptr< const FPGATrackSimRoad > &road, std::vector< FPGATrackSimTrack > &tracks)
 Creates tracks from the given road. More...
 
void getMissingInfo (const FPGATrackSimRoad &road, int &nMissing, bool &missPixel, bool &missStrip, layer_bitmask_t &missing_mask, layer_bitmask_t &norecovery_mask)
 
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. More...
 
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, trying N combinations of N-1/N tracks. More...
 
void compute_truth (FPGATrackSimTrack &newtrk) const
 
void initMessaging () const
 Initialize our message level and MessageSvc. More...
 

Private Attributes

bool m_do2ndStage = false
 
bool m_guessinghits = true
 
TrackCorrType m_IdealCoordFitType = TrackCorrType::None
 
bool m_doDeltaGPhis = false
 
const int m_max_ncomb = 10000
 
unsigned m_do_majority = 1
 
bool m_require_first = true
 
int m_norecovery_nhits = -1
 
bool m_setDoMissingHitsCheck = false
 
float m_Chi2Dof_recovery_min = 40.
 
float m_Chi2Dof_recovery_max = 1e30
 
bool m_identify_badhit = false
 
FPGATrackSimPlaneMap constm_pmap = nullptr
 
FPGATrackSimRegionMap constm_rmap = nullptr
 
const FPGATrackSimFitConstantBankm_nominalBank
 
std::vector< const FPGATrackSimFitConstantBank * > m_droppedLayerBanks
 
std::vector< FPGATrackSimTrackm_tracks_missinghits_track
 
int m_idbase = 0
 
int m_nfits = 0
 
int m_nfits_maj = 0
 
int m_nfits_maj_SCT = 0
 
int m_nfits_maj_pix = 0
 
int m_nfits_rec = 0
 
int m_nfits_addrec = 0
 
std::string m_nm
 Message source name. More...
 
boost::thread_specific_ptr< MsgStream > m_msg_tls
 MsgStream instance (a std::cout like with print-out levels) More...
 
std::atomic< IMessageSvc * > m_imsg { nullptr }
 MessageSvc pointer. More...
 
std::atomic< MSG::Level > m_lvl { MSG::NIL }
 Current logging level. More...
 
std::atomic_flag m_initialized ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
 Messaging initialized (initMessaging) More...
 

Detailed Description

Author
Riley Xu riley.nosp@m..xu@.nosp@m.cern..nosp@m.ch
Date
March 3, 2020

This class fits tracks from roads.

Definition at line 24 of file EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h.

Constructor & Destructor Documentation

◆ TrackFitter() [1/2]

TrackFitter::TrackFitter ( const FPGATrackSimFitConstantBank nominalbank,
const std::vector< const FPGATrackSimFitConstantBank * > &  droppedLayerbanks,
bool  guessingHits 
)

Definition at line 25 of file TrackFitter.cxx.

26  :
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 }

◆ TrackFitter() [2/2]

TrackFitter::TrackFitter ( void  )

◆ ~TrackFitter()

virtual TrackFitter::~TrackFitter ( void  )
virtual

Member Function Documentation

◆ compute_truth()

void TrackFitter::compute_truth ( FPGATrackSimTrack newtrk) const
private

Definition at line 427 of file TrackFitter.cxx.

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 }

◆ createDkfTrack()

virtual DkfTrack* TrackFitter::createDkfTrack ( const RecTrack inputTrack)
protectedvirtual

◆ extrapolate()

virtual TrkTrackState* TrackFitter::extrapolate ( TrkTrackState pTS,
TrkPlanarSurface pSB,
TrkPlanarSurface pSE,
double  J[5][5],
double &  path 
)
protectedvirtual

◆ fit()

virtual DkfTrack* TrackFitter::fit ( const RecTrack )
virtual

◆ fitTracks() [1/2]

int TrackFitter::fitTracks ( const std::shared_ptr< const FPGATrackSimRoad > &  road,
std::vector< FPGATrackSimTrack > &  tracks 
)
private

Creates tracks from the given road.

Takes all combinations of hits in the road to create track candidates, fits them using the constant bank, and filters them based on the chi2 of the fit.

Definition at line 74 of file TrackFitter.cxx.

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 }

◆ fitTracks() [2/2]

int TrackFitter::fitTracks ( const std::vector< std::shared_ptr< const FPGATrackSimRoad >> &  roads,
std::vector< FPGATrackSimTrack > &  tracks 
)

Definition at line 56 of file TrackFitter.cxx.

56  {
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 }

◆ getChi2DofRecoveryMax()

float TrackFitter::getChi2DofRecoveryMax ( ) const
inline

◆ getChi2DofRecoveryMin()

float TrackFitter::getChi2DofRecoveryMin ( ) const
inline

◆ getDoDeltaGPhis()

bool TrackFitter::getDoDeltaGPhis ( ) const
inline

◆ getDoMajority()

unsigned TrackFitter::getDoMajority ( ) const
inline

◆ getDoMissingHitsCheck()

bool TrackFitter::getDoMissingHitsCheck ( ) const
inline

◆ getDoSecondStage()

bool TrackFitter::getDoSecondStage ( ) const
inline

◆ getIdealCoordFitType()

TrackCorrType TrackFitter::getIdealCoordFitType ( ) const
inline

◆ getIdentifyBadHit()

bool TrackFitter::getIdentifyBadHit ( ) const
inline

◆ getMissingHitsCheckTracks()

const std::vector<FPGATrackSimTrack>& TrackFitter::getMissingHitsCheckTracks ( )
inline

◆ getMissingInfo()

void TrackFitter::getMissingInfo ( const FPGATrackSimRoad road,
int &  nMissing,
bool &  missPixel,
bool &  missStrip,
layer_bitmask_t missing_mask,
layer_bitmask_t norecovery_mask 
)
private

Definition at line 234 of file TrackFitter.cxx.

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 }

◆ getNFits()

int TrackFitter::getNFits ( )
inline

◆ getNFitsMajority()

int TrackFitter::getNFitsMajority ( )
inline

◆ getNFitsMajorityPix()

int TrackFitter::getNFitsMajorityPix ( )
inline

◆ getNFitsMajoritySCI()

int TrackFitter::getNFitsMajoritySCI ( )
inline

◆ getNFitsRecovery()

int TrackFitter::getNFitsRecovery ( )
inline

◆ getNorecoveryNhits()

int TrackFitter::getNorecoveryNhits ( ) const
inline

◆ getPlaneMap()

FPGATrackSimPlaneMap const* TrackFitter::getPlaneMap ( ) const
inline

◆ getRequireFirst()

bool TrackFitter::getRequireFirst ( ) const
inline

◆ initMessaging()

void AthMessaging::initMessaging ( ) const
privateinherited

Initialize our message level and MessageSvc.

This method should only be called once.

Definition at line 39 of file AthMessaging.cxx.

40 {
42  m_lvl = m_imsg ?
43  static_cast<MSG::Level>( m_imsg.load()->outputLevel(m_nm) ) :
44  MSG::INFO;
45 }

◆ makeTrackCandidates()

void TrackFitter::makeTrackCandidates ( const FPGATrackSimRoad road,
const FPGATrackSimTrack temp,
std::vector< FPGATrackSimTrack > &  track_cands 
)
private

Creates a list of track candidates by taking all possible combination of hits in road.

Sets basic ID info and hits.

NB: If the number of combinations becomes large and memory is a concern, it may be worth turning this function into a sort of iterator over combs, return a single track each call.

Definition at line 300 of file TrackFitter.cxx.

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 }

◆ matrixInversion5x5()

void TrackFitter::matrixInversion5x5 ( double  a[5][5])
protected

◆ msg() [1/2]

MsgStream & AthMessaging::msg ( ) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 164 of file AthMessaging.h.

165 {
166  MsgStream* ms = m_msg_tls.get();
167  if (!ms) {
168  if (!m_initialized.test_and_set()) initMessaging();
169  ms = new MsgStream(m_imsg,m_nm);
170  m_msg_tls.reset( ms );
171  }
172 
173  ms->setLevel (m_lvl);
174  return *ms;
175 }

◆ msg() [2/2]

MsgStream & AthMessaging::msg ( const MSG::Level  lvl) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 179 of file AthMessaging.h.

180 { return msg() << lvl; }

◆ msgLvl()

bool AthMessaging::msgLvl ( const MSG::Level  lvl) const
inlineinherited

Test the output level.

Parameters
lvlThe message level to test against
Returns
boolean Indicating if messages at given level will be printed
Return values
trueMessages at level "lvl" will be printed

Definition at line 151 of file AthMessaging.h.

152 {
153  if (!m_initialized.test_and_set()) initMessaging();
154  if (m_lvl <= lvl) {
155  msg() << lvl;
156  return true;
157  } else {
158  return false;
159  }
160 }

◆ recoverTrack()

FPGATrackSimTrack TrackFitter::recoverTrack ( FPGATrackSimTrack const t,
sector_t  sector,
layer_bitmask_t  norecovery_mask,
double  qoverpt 
)
private

Given a N/N track that has a bad chi2, try to refit the track by taking away a single hit, trying N combinations of N-1/N tracks.

Returns the track with the best chi2 (or the original track if none of the N-1/N tracks are an improvement).

Parameters
norecovery_mask- will skip removing hits from layers with bit set in this mask

Definition at line 365 of file TrackFitter.cxx.

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 }

◆ resetCounters()

void TrackFitter::resetCounters ( )
private

Definition at line 39 of file TrackFitter.cxx.

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 }

◆ setChi2DofRecoveryMax()

void TrackFitter::setChi2DofRecoveryMax ( float  v)
inline

◆ setChi2DofRecoveryMin()

void TrackFitter::setChi2DofRecoveryMin ( float  v)
inline

◆ setDoDeltaGPhis()

void TrackFitter::setDoDeltaGPhis ( bool  v)
inline

◆ setDoMajority()

void TrackFitter::setDoMajority ( unsigned int  v)
inline

◆ setDoMissingHitsCheck()

void TrackFitter::setDoMissingHitsCheck ( bool  v)
inline

◆ setDoSecondStage()

void TrackFitter::setDoSecondStage ( bool  v)
inline

◆ setIdealCoordFitType()

void TrackFitter::setIdealCoordFitType ( TrackCorrType  type)
inline

◆ setIdentifyBadHit()

void TrackFitter::setIdentifyBadHit ( bool  flag)
inline

◆ setLevel()

void AthMessaging::setLevel ( MSG::Level  lvl)
inherited

Change the current logging level.

Use this rather than msg().setLevel() for proper operation with MT.

Definition at line 28 of file AthMessaging.cxx.

29 {
30  m_lvl = lvl;
31 }

◆ setNorecoveryNhits()

void TrackFitter::setNorecoveryNhits ( int  v)
inline

◆ setPlaneMap()

void TrackFitter::setPlaneMap ( FPGATrackSimPlaneMap const map)
inline

◆ setRegionMap()

void TrackFitter::setRegionMap ( FPGATrackSimRegionMap const map)
inline

◆ setRequireFirst()

void TrackFitter::setRequireFirst ( bool  v)
inline

Member Data Documentation

◆ ATLAS_THREAD_SAFE

std::atomic_flag m_initialized AthMessaging::ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
mutableprivateinherited

Messaging initialized (initMessaging)

Definition at line 141 of file AthMessaging.h.

◆ m_Chi2Dof_recovery_max

float TrackFitter::m_Chi2Dof_recovery_max = 1e30
private

◆ m_Chi2Dof_recovery_min

float TrackFitter::m_Chi2Dof_recovery_min = 40.
private

◆ m_do2ndStage

bool TrackFitter::m_do2ndStage = false
private

◆ m_do_majority

unsigned TrackFitter::m_do_majority = 1
private

◆ m_doDeltaGPhis

bool TrackFitter::m_doDeltaGPhis = false
private

◆ m_droppedLayerBanks

std::vector<const FPGATrackSimFitConstantBank*> TrackFitter::m_droppedLayerBanks
private

◆ m_endB

double TrackFitter::m_endB[3] {}
protected

Definition at line 24 of file TrigAccel/TrigCudaFitter/src/TrackFitter.h.

◆ m_guessinghits

bool TrackFitter::m_guessinghits = true
private

◆ m_idbase

int TrackFitter::m_idbase = 0
private

◆ m_IdealCoordFitType

TrackCorrType TrackFitter::m_IdealCoordFitType = TrackCorrType::None
private

◆ m_identify_badhit

bool TrackFitter::m_identify_badhit = false
private

◆ m_imsg

std::atomic<IMessageSvc*> AthMessaging::m_imsg { nullptr }
mutableprivateinherited

MessageSvc pointer.

Definition at line 135 of file AthMessaging.h.

◆ m_lvl

std::atomic<MSG::Level> AthMessaging::m_lvl { MSG::NIL }
mutableprivateinherited

Current logging level.

Definition at line 138 of file AthMessaging.h.

◆ m_max_ncomb

const int TrackFitter::m_max_ncomb = 10000
private

◆ m_msg_tls

boost::thread_specific_ptr<MsgStream> AthMessaging::m_msg_tls
mutableprivateinherited

MsgStream instance (a std::cout like with print-out levels)

Definition at line 132 of file AthMessaging.h.

◆ m_nfits

int TrackFitter::m_nfits = 0
private

◆ m_nfits_addrec

int TrackFitter::m_nfits_addrec = 0
private

◆ m_nfits_maj

int TrackFitter::m_nfits_maj = 0
private

◆ m_nfits_maj_pix

int TrackFitter::m_nfits_maj_pix = 0
private

◆ m_nfits_maj_SCT

int TrackFitter::m_nfits_maj_SCT = 0
private

◆ m_nfits_rec

int TrackFitter::m_nfits_rec = 0
private

◆ m_nm

std::string AthMessaging::m_nm
privateinherited

Message source name.

Definition at line 129 of file AthMessaging.h.

◆ m_nominalBank

const FPGATrackSimFitConstantBank* TrackFitter::m_nominalBank
private

◆ m_norecovery_nhits

int TrackFitter::m_norecovery_nhits = -1
private

◆ m_pmap

FPGATrackSimPlaneMap const* TrackFitter::m_pmap = nullptr
private

◆ m_reMapVector

std::vector<int> TrackFitter::m_reMapVector
protected

Definition at line 25 of file TrigAccel/TrigCudaFitter/src/TrackFitter.h.

◆ m_require_first

bool TrackFitter::m_require_first = true
private

◆ m_rmap

FPGATrackSimRegionMap const* TrackFitter::m_rmap = nullptr
private

◆ m_setDoMissingHitsCheck

bool TrackFitter::m_setDoMissingHitsCheck = false
private

◆ m_startB

double TrackFitter::m_startB[3] {}
protected

Definition at line 23 of file TrigAccel/TrigCudaFitter/src/TrackFitter.h.

◆ m_tracks_missinghits_track

std::vector<FPGATrackSimTrack> TrackFitter::m_tracks_missinghits_track
private

The documentation for this class was generated from the following files:
FPGATrackSimTrack::setHitMap
void setHitMap(unsigned int v)
Definition: FPGATrackSimTrack.h:101
TrackFitter::compute_truth
void compute_truth(FPGATrackSimTrack &newtrk) const
Definition: TrackFitter.cxx:427
AthMessaging::m_lvl
std::atomic< MSG::Level > m_lvl
Current logging level.
Definition: AthMessaging.h:138
TrackFitter::m_idbase
int m_idbase
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/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/FPGATrackSimAlgorithms/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
TrackFitter::m_Chi2Dof_recovery_max
float m_Chi2Dof_recovery_max
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:107
TrackFitter::m_nfits_maj_pix
int m_nfits_maj_pix
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/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/FPGATrackSimAlgorithms/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/FPGATrackSimAlgorithms/TrackFitter.h:106
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
TrackFitter::m_identify_badhit
bool m_identify_badhit
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:110
HitType::spacepoint
@ spacepoint
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
FITTRACKS_OK
#define FITTRACKS_OK
Definition: FPGATrackSimTypes.h:15
AthMessaging::m_imsg
std::atomic< IMessageSvc * > m_imsg
MessageSvc pointer.
Definition: AthMessaging.h:135
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
python.SystemOfUnits.ms
int ms
Definition: SystemOfUnits.py:132
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:131
FPGATrackSimPlaneMap::getCoordLayer
uint32_t getCoordLayer(uint32_t coord) const
Definition: FPGATrackSimPlaneMap.h:98
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/FPGATrackSimAlgorithms/TrackFitter.h:136
HitType::wildcard
@ wildcard
TrackFitter::m_doDeltaGPhis
bool m_doDeltaGPhis
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/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/FPGATrackSimAlgorithms/TrackFitter.h:92
FPGATrackSimPlaneMap::isPixel
bool isPixel(int pl) const
Definition: FPGATrackSimPlaneMap.h:107
FPGATrackSimHit::setDetType
void setDetType(SiliconTech detType)
Definition: FPGATrackSimHit.h:55
AthMessaging::AthMessaging
AthMessaging()
Default constructor:
FPGATrackSimTrack::setHoughYBin
void setHoughYBin(unsigned v)
Definition: FPGATrackSimTrack.h:109
FITTRACKS_BAD
#define FITTRACKS_BAD
Definition: FPGATrackSimTypes.h:16
TrigConf::MSGTC::Level
Level
Definition: Trigger/TrigConfiguration/TrigConfBase/TrigConfBase/MsgStream.h:21
TrackFitter::m_guessinghits
bool m_guessinghits
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:93
TrackFitter::m_do_majority
unsigned m_do_majority
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:99
TrackFitter::m_pmap
FPGATrackSimPlaneMap const * m_pmap
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:117
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
master.flag
bool flag
Definition: master.py:29
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_setDoMissingHitsCheck
bool m_setDoMissingHitsCheck
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:103
TrackFitter::m_nfits_addrec
int m_nfits_addrec
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:140
TrackFitter::m_nfits_maj_SCT
int m_nfits_maj_SCT
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:137
TrackStage::SECOND
@ SECOND
TrackFitter::m_IdealCoordFitType
TrackCorrType m_IdealCoordFitType
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:94
TrackFitter::m_norecovery_nhits
int m_norecovery_nhits
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:101
FPGATrackSimHit::getY
float getY() const
Definition: FPGATrackSimHit.h:138
FPGATrackSimTrack::setTrackCorrType
void setTrackCorrType(TrackCorrType v)
Definition: FPGATrackSimTrack.h:81
AthMessaging::msg
MsgStream & msg() const
The standard message stream.
Definition: AthMessaging.h:164
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
TrackFitter::m_rmap
FPGATrackSimRegionMap const * m_rmap
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/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
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/FPGATrackSimAlgorithms/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:304
python.PyAthena.v
v
Definition: PyAthena.py:154
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/FPGATrackSimAlgorithms/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
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
AthMessaging::m_nm
std::string m_nm
Message source name.
Definition: AthMessaging.h:129
FPGATrackSimTrack::setSubRegion
void setSubRegion(unsigned v)
Definition: FPGATrackSimTrack.h:107
TrackFitter::resetCounters
void resetCounters()
Definition: TrackFitter.cxx:39
AthMessaging::initMessaging
void initMessaging() const
Initialize our message level and MessageSvc.
Definition: AthMessaging.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/FPGATrackSimAlgorithms/TrackFitter.h:62
AthMessaging::m_msg_tls
boost::thread_specific_ptr< MsgStream > m_msg_tls
MsgStream instance (a std::cout like with print-out levels)
Definition: AthMessaging.h:132
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
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/FPGATrackSimAlgorithms/TrackFitter.h:128
TrackFitter::m_nfits_rec
int m_nfits_rec
Definition: EFTracking/FPGATrackSim/FPGATrackSimAlgorithms/FPGATrackSimAlgorithms/TrackFitter.h:139