ATLAS Offline Software
T2BSTrackFilterTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2020, 2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include <string>
6 #include <sstream>
7 #include <cmath>
8 
9 // This algorithm
10 #include "T2BSTrackFilterTool.h"
11 
12 // Specific to this algorithm
13 #include "T2Track.h"
15 
16 // Generic Trigger tools
18 
19 //Conversion units
20 #include "GaudiKernel/SystemOfUnits.h"
21 
22 using Gaudi::Units::GeV;
23 using Gaudi::Units::mm;
24 
25 
26 using namespace PESA;
27 
28 namespace {
29 
30 const char* trackRejectReasonName(T2BSTrackFilterTool::TrackRejectReason reason)
31 {
32  switch (reason) {
34  return "PT";
36  return "SiHits";
38  return "PIXHits";
40  return "SCTHits";
42  return "TRTHits";
44  return "NDF";
46  return "D0";
48  return "Z0";
50  return "D0err";
52  return "Z0err";
54  return "Eta";
56  return "MinQual";
58  return "MaxQual";
60  return "Chi2Prob";
62  return "D0Chi2";
64  return "InvalidReason";
65  }
66  return "InvalidReason";
67 }
68 
69 std::string rejectReasonsToString(T2BSTrackFilterTool::TrackRejectReasonSet const& reasons)
70 {
71  std::string str;
72  for (int i = 0; i < T2BSTrackFilterTool::numRejectReasons; ++ i) {
73  if (reasons.test(i)) {
74  if (!str.empty()) str += ',';
75  str += trackRejectReasonName(T2BSTrackFilterTool::TrackRejectReason(i));
76  }
77  }
78  return str;
79 }
80 
81 } // namespace
82 
83 
85  trk_param.setZero();
86  trk_d0.setZero();
87 }
88 
89 void
91  double const sin_phi0 = std::sin(seed.phi0);
92  double const cos_phi0 = std::cos(seed.phi0);
93  double const param[] = { -sin_phi0, cos_phi0, -seed.z0*sin_phi0, seed.z0*cos_phi0};
94  double d0_var = seed.d0_var + beamSize*beamSize;
95  for (int i = 0; i < 4; ++ i) {
96  for (int j = 0; j < 4; ++ j) {
97  trk_param(i, j) += param[i]*param[j] / d0_var;
98  }
99  trk_d0(i) += seed.d0*param[i] / d0_var;
100  }
101  ++ trk_count;
102  trk_d0_sq += seed.d0*seed.d0 / d0_var;
103 }
104 
105 void
107  trk_count += other.trk_count;
108  trk_d0_sq += other.trk_d0_sq;
109  trk_param += other.trk_param;
110  trk_d0 += other.trk_d0;
111 }
112 
113 // Produce a solution based on current data, can only be called if trk_count > 0
115 T2BSTrackFilterTool::TrackStatAccumulator::solution() const {
116  auto solution = trk_param.inverse()*trk_d0;
117  return solution;
118 }
119 
120 T2BSTrackFilterTool::T2BSTrackFilterTool( const std::string& type, const std::string& name, const IInterface* parent )
122 {
123  // Track Selection criteria
124  declareProperty("TrackMinPt", m_minTrackPt = 0.7*GeV );
125  declareProperty("TrackMaxEta", m_maxTrackEta = 2.5 );
126  declareProperty("TrackMaxZ0", m_maxTrackZ0 = 200.*mm );
127  declareProperty("TrackMaxD0", m_maxTrackD0 = 10.*mm );
128  declareProperty("TrackMaxZ0err", m_maxTrackZ0err = 2.*mm );
129  declareProperty("TrackMaxD0err", m_maxTrackD0err = 2.*mm );
130  declareProperty("TrackMinNDF", m_minTrackNDF = 2 );
131  declareProperty("TrackMinQual", m_minTrackQual = 0.2 );
132  declareProperty("TrackMaxQual", m_maxTrackQual = 5.0 );
133  declareProperty("TrackMinChi2Prob",m_minTrackChi2Prob = 0.0 );
134  declareProperty("TrackMinSiHits", m_minSiHits = 4 );
135  declareProperty("TrackMinPIXHits", m_minPIXHits = 1 );
136  declareProperty("TrackMinSCTHits", m_minSCTHits = 3 );
137  declareProperty("TrackMinTRTHits", m_minTRTHits = 0 );
138 
139  // beamspot estimate params
140  declareProperty("GoalSeedTracks", m_goalSeedTracks = 500 );
141  declareProperty("D0Chi2Cutoff", m_chi2cutoff = 30 );
142  declareProperty("BeamSizeLS", m_beamSizeLS = 0.01*mm);
143  declareProperty("BSLbnInterval", m_lbnInterval = 1 );
144 }
145 
147 {
148  ATH_MSG_INFO("Initialising T2BSTrackFilterTool tool");
149 
150  //Retrieve monitoring tool
151  if (!m_monTool.empty()) ATH_CHECK(m_monTool.retrieve());
152 
153  m_accumulators.clear();
154 
155  return StatusCode::SUCCESS;
156 }
157 
158 std::vector<const Trk::Track*>
160 {
161  ATH_MSG_DEBUG( "Selecting tracks for the beamSpot algorithm" );
162 
163  //Monitoring counters and timers
164  auto timerTrackSelection = Monitored::Timer("TIME_TrackFilter");
165  auto nTracksInput = Monitored::Scalar<unsigned>("TracksInput", 0);
166  auto nTracksFilter = Monitored::Scalar<unsigned>("TracksFilter", 0);
167  std::vector<unsigned> trackRejectReasonsCounts(numRejectReasons);
168 
169  //T2Track with easily accesable parameters
170  std::vector<T2Track> myTracks;
171  myTracks.reserve(tracks.size());
172  std::vector<const Trk::Track*> selectedTracks;
173  selectedTracks.reserve(tracks.size());
174 
175  // Loop over all tracks in the given track collections
176  for (auto trackIter = tracks.begin(); trackIter != tracks.end(); ++trackIter) {
177 
178  const Trk::Track& track = **trackIter;
179 
180  //Counter for all input tracks
181  nTracksInput++;
182 
183  const T2Track myTrack(track);
184  // Check for passed track
185  TrackRejectReasonSet const rejectSet = isGoodTrack(myTrack);
186  if (rejectSet.none()) {
187  // Add this track to the set used to find a vertex
188  selectedTracks.push_back(*trackIter);
189 
190  //Stored only for monitoring
191  myTracks.push_back(myTrack);
192 
193  //Counter for selected tracks
194  nTracksFilter++;
195 
196  } else {
197  for (unsigned bit = 0; bit < numRejectReasons; ++ bit) {
198  if (rejectSet.test(bit)) {
199  ++trackRejectReasonsCounts[bit];
200  }
201  }
202  }
203 
205  "Track " << (rejectSet.none() ? "passed" : "failed") << " selection:" <<
206  " mask: " << rejectReasonsToString(rejectSet) <<
207  " d0: " << myTrack.D0() <<
208  " z0: " << myTrack.Z0() <<
209  " phi0: " << myTrack.Phi() <<
210  " eta: " << myTrack.Eta() <<
211  " pT: " << myTrack.Pt()*GeV <<
212  " Z0err: " << myTrack.Z0err() <<
213  " D0err: " << myTrack.D0err() <<
214  " Qual: " << myTrack.Qual() <<
215  " Chi2Prob: " << myTrack.Chi2Prob() <<
216  " NpixSPs: " << myTrack.PIXHits() <<
217  " NsctSPs: " << myTrack.SCTHits() <<
218  " NstrawHits: " << myTrack.TRTHits());
219  } //end for loop over tracks in a collection
220 
221  //How many tracks per collection
222  ATH_MSG_DEBUG("Total Tracks: " << nTracksInput << " selectedTracks: " << nTracksFilter);
223 
224  //Monitor all passed tracks variables/parameters
225  monitor_tracks("Track", "Filter", myTracks);
226 
227  auto rejectReason = Monitored::Collection("TrackRejectReason", trackRejectReasonsCounts);
228 
229  //Monitor counters per track collection and time to select tracks
230  auto mon = Monitored::Group(m_monTool, nTracksInput, nTracksFilter,
231  timerTrackSelection, rejectReason);
232 
233  return selectedTracks;
234 }
235 
236 bool T2BSTrackFilterTool::updateBS(const std::vector<const Trk::Track*>& tracks,
237  unsigned lbn, unsigned bcid,
238  std::vector<TrackData>* bsTracks) const
239 {
240  std::lock_guard<std::mutex> lock(m_mutex);
241 
242  if (m_accumulators.empty()) {
243  // no beamspot yet, store track params in the seeds array
244  m_bsSeeds.reserve(m_bsSeeds.size() + tracks.size());
245  for (auto& track: tracks) {
246  m_bsSeeds.emplace_back(*track->perigeeParameters(), lbn, bcid);
247  }
248 
249  // initial calculation of the beamspot and matrix
250  bool has_bs = bootstrapFromSeeds(bsTracks);
251  if (has_bs) {
252  // can clear seeds
253  m_bsSeeds.clear();
254  }
255  return has_bs;
256  }
257 
258  // We need to cleanup accumulators for old LBs from time to time,
259  // do it when there is a LBN change.
260  if (m_accumulators.count(lbn) == 0) {
261 
262  // count number of track in all existing accumulators
263  unsigned accumTrackCount = std::accumulate(
264  m_accumulators.begin(), m_accumulators.end(), 0,
265  [](unsigned counter, auto const& pair) { return counter + pair.second.trk_count; }
266  );
267  ATH_MSG_DEBUG("Currently have " << m_accumulators.size() << " accumulators with "
268  << accumTrackCount << " tracks");
269 
270  // only need few recent accumulators to have a reasonable track count, drop
271  // some eralier accumulators, for now keep two recent LBNs
272  // TODO: need smarter way to decide what to keep
273  while (m_accumulators.size() > 2) {
274  ATH_MSG_DEBUG("Removing accumulator for LB=" << m_accumulators.begin()->first
275  << " with " << m_accumulators.begin()->second.trk_count << " tracks");
276  m_accumulators.erase(m_accumulators.begin());
277  }
278  }
279 
280  // current local solution for beam position
282  for (auto&& pair: m_accumulators) {
283  acc.update(pair.second);
284  }
285  auto solution = acc.solution();
286 
287  // update already collected statistics, filtering some contributions
288  for (auto& track: tracks) {
289  auto trackPars = track->perigeeParameters();
290  if (trackPars != nullptr) {
291  TrackData seed(*trackPars, lbn, bcid);
292  double chi2 = trackChi2(seed, solution);
293  if (chi2 < m_chi2cutoff) {
294  if (msgLvl(MSG::DEBUG)) {
295  dumpTrackParams(trackPars, chi2, "updateBS: track passed chi2 selection");
296  }
297  m_accumulators[lbn].update(seed, m_beamSizeLS);
298  } else {
299  if (msgLvl(MSG::DEBUG)) {
300  dumpTrackParams(trackPars, chi2, "updateBS: track failed chi2_d0 restriction");
301  }
302  }
303  }
304  }
305 
306  return true;
307 }
308 
309 std::vector<const Trk::Track*>
310 T2BSTrackFilterTool::filterBS(const std::vector<const Trk::Track*>& tracks) const
311 {
312  auto timerTrackFilterBS = Monitored::Timer("TIME_TrackFilterBS");
313  auto nTracksFilterBS = Monitored::Scalar<unsigned>("TracksFilterBS", 0);
314 
315  std::lock_guard<std::mutex> lock(m_mutex);
316 
317  std::vector<const Trk::Track*> selected;
318  if (m_accumulators.empty()) {
319  // no beamspot yet
320  return selected;
321  }
322 
323  // current local solution for beam position
325  for (auto&& pair: m_accumulators) {
326  acc.update(pair.second);
327  }
328  auto solution = acc.solution();
329 
330  // update already collected statistics, filtering some contributions
331  std::vector<unsigned> trackRejectReasonsCounts(numRejectReasons);
332  std::vector<T2Track> t2Tracks;
333  t2Tracks.reserve(tracks.size());
334  for (auto& track: tracks) {
335  auto trackPars = track->perigeeParameters();
336  if (trackPars != nullptr) {
337  TrackData seed(*trackPars, 0, 0);
338  double chi2 = trackChi2(seed, solution);
339  if (chi2 < m_chi2cutoff) {
340  if (msgLvl(MSG::DEBUG)) {
341  dumpTrackParams(trackPars, chi2, "filterBS: track passed chi2 selection");
342  }
343  selected.push_back(track);
344  t2Tracks.emplace_back(*track);
345  ++ nTracksFilterBS;
346  } else {
347  if (msgLvl(MSG::DEBUG)) {
348  dumpTrackParams(trackPars, chi2, "filterBS: track failed chi2_d0 restriction");
349  }
350  ++trackRejectReasonsCounts[fail_D0Chi2];
351  }
352  }
353  }
354 
355  // monitoring
356  auto rejectReason = Monitored::Collection("TrackRejectReason", trackRejectReasonsCounts);
357 
358  //Monitor counters per track collection and time to select tracks
359  auto mon = Monitored::Group(m_monTool, rejectReason, nTracksFilterBS, timerTrackFilterBS);
360 
361  monitor_tracks("Track", "FilterBS", t2Tracks);
362 
363  return selected;
364 }
365 
368 {
369  TrackRejectReasonSet reasons;
370  if (std::abs(track.Pt()) < m_minTrackPt) reasons.set(fail_PT);
371  if (track.SiHits() < m_minSiHits) reasons.set(fail_SiHits);
372  if (track.PIXHits() < m_minPIXHits) reasons.set(fail_PIXHits);
373  if (track.SCTHits() < m_minSCTHits) reasons.set(fail_SCTHits);
374  if (track.TRTHits() < m_minTRTHits) reasons.set(fail_TRTHits);
375  if (track.NDF() < m_minTrackNDF) reasons.set(fail_NDF);
376  if (std::abs(track.D0()) > m_maxTrackD0) reasons.set(fail_D0);
377  if (std::abs(track.Z0()) > m_maxTrackZ0) reasons.set(fail_Z0);
378  if (track.D0err() > m_maxTrackD0err) reasons.set(fail_D0err);
379  if (track.Z0err() > m_maxTrackZ0err) reasons.set(fail_Z0err);
380  if (std::abs(track.Eta()) > m_maxTrackEta) reasons.set(fail_Eta);
381  if (track.Qual() < m_minTrackQual) reasons.set(fail_MinQual);
382  if (track.Qual() > m_maxTrackQual) reasons.set(fail_MaxQual);
383  if (track.Chi2Prob() < m_minTrackChi2Prob) reasons.set(fail_Chi2Prob);
384  return reasons;
385 }
386 
387 //Monitoring track variables
388 void T2BSTrackFilterTool::monitor_tracks(std::string const& prefix, std::string const& suffix, std::vector<T2Track> const& tracks) const
389 {
390  auto trackPt = Monitored::Collection( prefix + "Pt" + suffix, tracks, [](const T2Track& t){ return t.Pt() ;});
391  auto trackEta = Monitored::Collection( prefix + "Eta" + suffix, tracks, [](const T2Track& t){ return t.Eta() ;});
392  auto trackPhi = Monitored::Collection( prefix + "Phi" + suffix, tracks, [](const T2Track& t){ return t.Phi() ;});
393  auto trackZ0 = Monitored::Collection( prefix + "Z0" + suffix, tracks, [](const T2Track& t){ return t.Z0() ;});
394  auto trackD0 = Monitored::Collection( prefix + "D0" + suffix, tracks, [](const T2Track& t){ return t.D0() ;});
395  auto trackZ0err = Monitored::Collection( prefix + "Z0err" + suffix, tracks, [](const T2Track& t){ return t.Z0err() ;});
396  auto trackD0err = Monitored::Collection( prefix + "D0err" + suffix, tracks, [](const T2Track& t){ return t.D0err() ;});
397  auto trackNDF = Monitored::Collection( prefix + "NDF" + suffix, tracks, [](const T2Track& t){ return t.NDF() ;});
398  auto trackQual = Monitored::Collection( prefix + "Qual" + suffix, tracks, [](const T2Track& t){ return t.Qual() ;});
399  auto trackChi2Prob= Monitored::Collection( prefix + "Chi2Prob" + suffix, tracks, [](const T2Track& t){ return t.Chi2Prob();});
400  auto trackSiHits = Monitored::Collection( prefix + "SiHits" + suffix, tracks, [](const T2Track& t){ return t.SiHits() ;});
401  auto trackPiHits = Monitored::Collection( prefix + "PIXHits" + suffix, tracks, [](const T2Track& t){ return t.PIXHits() ;});
402  auto trackSCTHits = Monitored::Collection( prefix + "SCTHits" + suffix, tracks, [](const T2Track& t){ return t.SCTHits() ;});
403  auto trackTRTHits = Monitored::Collection( prefix + "TRTHits" + suffix, tracks, [](const T2Track& t){ return t.TRTHits() ;});
404  auto mon = Monitored::Group(m_monTool, trackPt, trackEta, trackPhi, trackZ0, trackD0, trackZ0err, trackD0err,
405  trackNDF, trackQual, trackChi2Prob, trackSiHits, trackPiHits, trackSCTHits, trackTRTHits);
406 }
407 
408 bool T2BSTrackFilterTool::bootstrapFromSeeds(std::vector<TrackData>* bsTracks) const
409 {
410  // needs a number of seeds
411  if (m_bsSeeds.size() < m_goalSeedTracks) return false;
412 
413  // do all seed track first without filtering
415  for (auto const& seed: m_bsSeeds) {
416  acc0.update(seed, m_beamSizeLS);
417  }
418  auto solution = acc0.solution();
419  ATH_MSG_DEBUG("Unfiltered solution=" << solution[0] << ", " << solution[1]
420  << ", " << solution[2] << ", " << solution[3]);
421  ATH_MSG_DEBUG("m_trk_count=" << acc0.trk_count);
422 
423  // few iterations of the same fit removing outliers
424  const int Niter = 2;
425  for (int c = 0; c < Niter; ++ c) {
427 
428  for (auto const& seed: m_bsSeeds) {
429  double chi2 = trackChi2(seed, solution);
430  if (chi2 < m_chi2cutoff) {
431  acc.update(seed, m_beamSizeLS);
432  }
433  }
434  solution = acc.solution();
435  ATH_MSG_DEBUG("Filtered solution [iter " << c << "]=" << solution[0] << ", " << solution[1]
436  << ", " << solution[2] << ", " << solution[3]);
437  ATH_MSG_DEBUG("m_trk_count=" << acc.trk_count);
438  }
439 
440  // final pass
441  m_accumulators.clear(); // they should be clear already, just in case
442  if (bsTracks != nullptr) {
443  // we expects more than half tracks to pass
444  bsTracks->reserve(m_bsSeeds.size());
445  }
446  std::vector<unsigned> trackRejectReasonsCounts(numRejectReasons);
447  for (auto const& seed: m_bsSeeds) {
448  double chi2 = trackChi2(seed, solution);
449  ATH_MSG_DEBUG("chi2=" << chi2);
450  if (chi2 < m_chi2cutoff) {
451  if (m_accumulators.count(seed.lbn) == 0) {
452  ATH_MSG_DEBUG("Adding accumulator for LB=" << seed.lbn);
453  }
454  m_accumulators[seed.lbn].update(seed, m_beamSizeLS);
455  if (bsTracks != nullptr) {
456  bsTracks->push_back(seed);
457  }
458  } else {
459  ++trackRejectReasonsCounts[fail_D0Chi2];
460  }
461  }
462 
464  for (auto&& pair: m_accumulators) {
465  acc.update(pair.second);
466  }
467  solution = acc.solution();
468  ATH_MSG_DEBUG("Final filtered solution=" << solution[0] << ", " << solution[1]
469  << ", " << solution[2] << ", " << solution[3]);
470  ATH_MSG_DEBUG("m_trk_count=" << acc.trk_count);
471 
472  // monitoring
473  auto rejectReason = Monitored::Collection("TrackRejectReason", trackRejectReasonsCounts);
474 
475  //Monitor counters per track collection and time to select tracks
477 
478  return true;
479 }
480 
481 double T2BSTrackFilterTool::trackChi2(TrackData const& seed, AmgVector(4) const& solution) const {
482  double const sin_phi0 = std::sin(seed.phi0);
483  double const cos_phi0 = std::cos(seed.phi0);
484  double const param[] = {-sin_phi0, cos_phi0, -seed.z0*sin_phi0, seed.z0*cos_phi0};
485  double chi2 = seed.d0;
486  for (int i = 0; i < 4; ++ i) {
487  chi2 -= solution[i]*param[i];
488  }
489  chi2 = chi2*chi2 / (seed.d0_var + m_beamSizeLS*m_beamSizeLS);
490  return chi2;
491 }
492 
493 void T2BSTrackFilterTool::dumpTrackParams(Trk::Perigee const* trackPars, double chi2, std::string const& message) const {
494  auto&& par = trackPars->parameters();
495  auto&& cov = trackPars->covariance();
496  if (cov != nullptr) {
497  double d0_err = Amg::error(*cov, Trk::d0);
498  double phi0_err = Amg::error(*cov, Trk::phi0);
499  double z0_err = Amg::error(*cov, Trk::z0);
500  double r_est = std::abs((*cov)(Trk::d0, Trk::phi0) / (*cov)(Trk::phi0, Trk::phi0));
501  double psi_err = (*cov)(Trk::d0, Trk::d0) / (r_est*r_est) - (*cov)(Trk::phi0, Trk::phi0);
502  if (psi_err > 0) {
503  psi_err = std::sqrt(psi_err);
504  } else {
505  psi_err = -std::sqrt(-psi_err);
506  }
507  ATH_MSG_DEBUG(message << ':'
508  << std::setprecision(15)
509  << " z0: " << par[Trk::z0]
510  << " d0: " << par[Trk::d0]
511  << " phi0: " << par[Trk::phi0]
512  << " d0_err: " << d0_err
513  << " phi0_err: " << phi0_err
514  << " d0_phi0_cov: " << (*cov)(Trk::d0, Trk::phi0)
515  << " r_est: " << r_est
516  << " psi_err: " << psi_err
517  << " z0_err: " << z0_err
518  << " chi2: " << chi2
519  << std::setprecision(6));
520  }
521 }
PESA::T2BSTrackFilterTool
Definition: T2BSTrackFilterTool.h:30
PESA::T2BSTrackFilterTool::monitor_tracks
void monitor_tracks(std::string const &prefix, std::string const &suffix, std::vector< T2Track > const &tracks) const
Definition: T2BSTrackFilterTool.cxx:388
PESA::T2Track::TRTHits
int TRTHits() const
Definition: T2Track.h:131
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
PESA::T2BSTrackFilterTool::filterBS
TrackVector filterBS(const TrackVector &tracks) const
Select tracks based on their distance to estimated beamspot.
Definition: T2BSTrackFilterTool.cxx:310
PESA::T2BSTrackFilterTool::updateBS
bool updateBS(const TrackVector &tracks, unsigned lbn, unsigned bcid, std::vector< TrackData > *bsTracks=nullptr) const
Update beam spot estimate with new tracks.
Definition: T2BSTrackFilterTool.cxx:236
hotSpotInTAG.suffix
string suffix
Definition: hotSpotInTAG.py:186
TrackParameters.h
PESA::T2BSTrackFilterTool::isGoodTrack
TrackRejectReasonSet isGoodTrack(const T2Track &track) const
Definition: T2BSTrackFilterTool.cxx:367
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
PESA::T2BSTrackFilterTool::m_beamSizeLS
double m_beamSizeLS
Definition: T2BSTrackFilterTool.h:184
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
PESA::T2BSTrackFilterTool::fail_Chi2Prob
@ fail_Chi2Prob
Definition: T2BSTrackFilterTool.h:74
PESA::T2BSTrackFilterTool::fail_D0
@ fail_D0
Definition: T2BSTrackFilterTool.h:67
PESA::T2BSTrackFilterTool::TrackStatAccumulator
Definition: T2BSTrackFilterTool.h:127
PESA::T2BSTrackFilterTool::fail_Z0err
@ fail_Z0err
Definition: T2BSTrackFilterTool.h:70
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
PESA::T2BSTrackFilterTool::TrackRejectReason
TrackRejectReason
Definition: T2BSTrackFilterTool.h:60
initialize
void initialize()
Definition: run_EoverP.cxx:894
accumulate
bool accumulate(AccumulateMap &map, std::vector< module_t > const &modules, FPGATrackSimMatrixAccumulator const &acc)
Accumulates an accumulator (e.g.
Definition: FPGATrackSimMatrixAccumulator.cxx:22
PESA::T2Track::SCTHits
int SCTHits() const
Definition: T2Track.h:130
plotBeamSpotVxVal.cov
cov
Definition: plotBeamSpotVxVal.py:201
PESA::T2Track::D0err
double D0err() const
Definition: T2Track.h:124
PESA::T2BSTrackFilterTool::fail_D0Chi2
@ fail_D0Chi2
Definition: T2BSTrackFilterTool.h:75
Trk::z0
@ z0
Definition: ParamDefs.h:70
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
PESA::T2BSTrackFilterTool::fail_PIXHits
@ fail_PIXHits
Definition: T2BSTrackFilterTool.h:63
PESA::T2Track::PIXHits
int PIXHits() const
Definition: T2Track.h:129
PESA::T2BSTrackFilterTool::fail_NDF
@ fail_NDF
Definition: T2BSTrackFilterTool.h:66
PESA::T2BSTrackFilterTool::m_maxTrackQual
double m_maxTrackQual
Definition: T2BSTrackFilterTool.h:175
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
PESA::T2BSTrackFilterTool::m_mutex
std::mutex m_mutex
Definition: T2BSTrackFilterTool.h:187
PESA::T2BSTrackFilterTool::m_goalSeedTracks
unsigned m_goalSeedTracks
Definition: T2BSTrackFilterTool.h:182
PESA::T2Track::Eta
double Eta() const
Definition: T2Track.h:119
PESA::T2BSTrackFilterTool::fail_PT
@ fail_PT
Definition: T2BSTrackFilterTool.h:61
PESA::T2BSTrackFilterTool::fail_SCTHits
@ fail_SCTHits
Definition: T2BSTrackFilterTool.h:64
ReweightUtils.message
message
Definition: ReweightUtils.py:15
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
PESA::T2BSTrackFilterTool::m_minTrackQual
double m_minTrackQual
Definition: T2BSTrackFilterTool.h:174
PESA::T2BSTrackFilterTool::m_minTrackPt
double m_minTrackPt
Definition: T2BSTrackFilterTool.h:167
PESA
Local tools.
Definition: T2BeamSpot.cxx:13
PESA::T2BSTrackFilterTool::numRejectReasons
@ numRejectReasons
Definition: T2BSTrackFilterTool.h:77
lumiFormat.i
int i
Definition: lumiFormat.py:92
TrackCollection
DataVector< Trk::Track > TrackCollection
This typedef represents a collection of Trk::Track objects.
Definition: TrackCollection.h:19
PESA::T2BSTrackFilterTool::T2BSTrackFilterTool
T2BSTrackFilterTool(const std::string &type, const std::string &name, const IInterface *parent)
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
PESA::T2BSTrackFilterTool::m_maxTrackEta
double m_maxTrackEta
Definition: T2BSTrackFilterTool.h:168
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
PESA::T2BSTrackFilterTool::TrackStatAccumulator::update
void update(TrackData const &seed, double beamSize)
Definition: T2BSTrackFilterTool.cxx:90
AmgVector
AmgVector(4) T2BSTrackFilterTool
Definition: T2BSTrackFilterTool.cxx:114
PESA::T2BSTrackFilterTool::TrackStatAccumulator::TrackStatAccumulator
TrackStatAccumulator()
Definition: T2BSTrackFilterTool.cxx:84
PESA::T2BSTrackFilterTool::fail_D0err
@ fail_D0err
Definition: T2BSTrackFilterTool.h:69
PESA::T2BSTrackFilterTool::m_minTRTHits
int m_minTRTHits
Definition: T2BSTrackFilterTool.h:180
T2Track.h
chi2
double chi2(TH1 *h0, TH1 *h1)
Definition: comparitor.cxx:522
checkCorrelInHIST.prefix
dictionary prefix
Definition: checkCorrelInHIST.py:391
PESA::T2BSTrackFilterTool::TrackData
Class which holds track parameters.
Definition: T2BSTrackFilterTool.h:38
test_pyathena.parent
parent
Definition: test_pyathena.py:15
PESA::T2BSTrackFilterTool::dumpTrackParams
void dumpTrackParams(Trk::Perigee const *trackPars, double chi2, std::string const &message) const
Definition: T2BSTrackFilterTool.cxx:493
PESA::T2BSTrackFilterTool::fail_SiHits
@ fail_SiHits
Definition: T2BSTrackFilterTool.h:62
AthenaPoolTestRead.acc
acc
Definition: AthenaPoolTestRead.py:16
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
PESA::T2Track::D0
double D0() const
Definition: T2Track.h:122
PESA::T2Track::Z0
double Z0() const
Definition: T2Track.h:121
PESA::T2BSTrackFilterTool::m_minSiHits
int m_minSiHits
Definition: T2BSTrackFilterTool.h:177
PESA::T2BSTrackFilterTool::m_maxTrackD0
double m_maxTrackD0
Definition: T2BSTrackFilterTool.h:170
PESA::T2BSTrackFilterTool::TrackRejectReasonSet
std::bitset< numRejectReasons > TrackRejectReasonSet
Definition: T2BSTrackFilterTool.h:79
PESA::T2BSTrackFilterTool::m_maxTrackZ0err
double m_maxTrackZ0err
Definition: T2BSTrackFilterTool.h:171
TauGNNUtils::Variables::Track::trackPt
bool trackPt(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauGNNUtils.cxx:470
T2BSTrackFilterTool.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
Trk::d0
@ d0
Definition: ParamDefs.h:69
createCoolChannelIdFile.par
par
Definition: createCoolChannelIdFile.py:29
Amg::error
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...
Definition: EventPrimitivesHelpers.h:40
PESA::T2BSTrackFilterTool::filter
TrackVector filter(const TrackCollection &tracks) const
Select tracks that can be used for further processing.
Definition: T2BSTrackFilterTool.cxx:159
PESA::T2BSTrackFilterTool::fail_Eta
@ fail_Eta
Definition: T2BSTrackFilterTool.h:71
PESA::T2Track::Qual
double Qual() const
Definition: T2Track.h:126
xAOD::bcid
setEventNumber setTimeStamp bcid
Definition: EventInfo_v1.cxx:133
PESA::T2Track::Phi
double Phi() const
Definition: T2Track.h:120
PESA::T2Track
Definition: T2Track.h:44
PESA::T2Track::Pt
double Pt() const
Definition: T2Track.h:118
PESA::T2BSTrackFilterTool::m_minSCTHits
int m_minSCTHits
Definition: T2BSTrackFilterTool.h:179
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
PESA::T2BSTrackFilterTool::m_chi2cutoff
double m_chi2cutoff
Definition: T2BSTrackFilterTool.h:183
PESA::T2BSTrackFilterTool::fail_MinQual
@ fail_MinQual
Definition: T2BSTrackFilterTool.h:72
InDetDD::other
@ other
Definition: InDetDD_Defs.h:16
python.CaloScaleNoiseConfig.str
str
Definition: CaloScaleNoiseConfig.py:78
PESA::T2BSTrackFilterTool::m_maxTrackZ0
double m_maxTrackZ0
Definition: T2BSTrackFilterTool.h:169
PESA::T2BSTrackFilterTool::m_minPIXHits
int m_minPIXHits
Definition: T2BSTrackFilterTool.h:178
xAOD::rejectReason
@ rejectReason
Definition: TrackingPrimitives.h:515
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DEBUG
#define DEBUG
Definition: page_access.h:11
plotBeamSpotMon.mon
mon
Definition: plotBeamSpotMon.py:67
PESA::T2BSTrackFilterTool::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: T2BSTrackFilterTool.h:195
PESA::T2BSTrackFilterTool::m_maxTrackD0err
double m_maxTrackD0err
Definition: T2BSTrackFilterTool.h:172
PESA::T2BSTrackFilterTool::fail_Z0
@ fail_Z0
Definition: T2BSTrackFilterTool.h:68
PESA::T2Track::Z0err
double Z0err() const
Definition: T2Track.h:123
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
PESA::T2BSTrackFilterTool::fail_MaxQual
@ fail_MaxQual
Definition: T2BSTrackFilterTool.h:73
TauGNNUtils::Variables::Track::trackPhi
bool trackPhi(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauGNNUtils.cxx:480
PESA::T2BSTrackFilterTool::TrackStatAccumulator::trk_count
unsigned trk_count
Definition: T2BSTrackFilterTool.h:141
str
Definition: BTagTrackIpAccessor.cxx:11
TrigRoiDescriptor.h
PESA::T2BSTrackFilterTool::m_minTrackChi2Prob
double m_minTrackChi2Prob
Definition: T2BSTrackFilterTool.h:176
PESA::T2BSTrackFilterTool::bootstrapFromSeeds
bool bootstrapFromSeeds(std::vector< TrackData > *bsTracks=nullptr) const
Definition: T2BSTrackFilterTool.cxx:408
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
PESA::T2Track::Chi2Prob
double Chi2Prob() const
Definition: T2Track.h:127
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
AthAlgTool
Definition: AthAlgTool.h:26
PESA::T2BSTrackFilterTool::trackChi2
double trackChi2(TrackData const &seed, AmgVector(4) const &solution) const
Calculate track chi2 w.r.t.
Definition: T2BSTrackFilterTool.cxx:481
test_pyathena.counter
counter
Definition: test_pyathena.py:15
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
python.compressB64.c
def c
Definition: compressB64.py:93
Monitored::Timer
A monitored timer.
Definition: MonitoredTimer.h:32
Trk::phi0
@ phi0
Definition: ParamDefs.h:71
PESA::T2BSTrackFilterTool::m_minTrackNDF
double m_minTrackNDF
Definition: T2BSTrackFilterTool.h:173
TauGNNUtils::Variables::Track::trackEta
bool trackEta(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauGNNUtils.cxx:475
LB_AnalMapSplitter.lbn
lbn
Definition: LB_AnalMapSplitter.py:28
PESA::T2BSTrackFilterTool::fail_TRTHits
@ fail_TRTHits
Definition: T2BSTrackFilterTool.h:65