ATLAS Offline Software
TrackFindingBaseAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 // ActsTrk
9 #include "ActsInterop/Logger.h"
13 #include "ActsInterop/TableUtils.h"
14 #include "Acts/Surfaces/PerigeeSurface.hpp"
15 
16 namespace ActsTrk {
17  struct TrackFindingBaseAlg::CKF_pimpl : public detail::CKF_config {};
18 
21 
22  TrackFindingBaseAlg::TrackFindingBaseAlg(const std::string &name, ISvcLocator *pSvcLocator) : AthReentrantAlgorithm(name, pSvcLocator) {}
23 
25 
27  ATH_MSG_DEBUG("Properties Summary:");
29  ATH_MSG_DEBUG(" " << m_etaBins);
37  ATH_MSG_DEBUG(" " << m_doTwoWay);
38  ATH_MSG_DEBUG(" " << m_phiMin);
39  ATH_MSG_DEBUG(" " << m_phiMax);
40  ATH_MSG_DEBUG(" " << m_etaMin);
41  ATH_MSG_DEBUG(" " << m_etaMax);
42  ATH_MSG_DEBUG(" " << m_absEtaMin);
43  ATH_MSG_DEBUG(" " << m_absEtaMax);
44  ATH_MSG_DEBUG(" " << m_ptMin);
45  ATH_MSG_DEBUG(" " << m_ptMax);
46  ATH_MSG_DEBUG(" " << m_d0Min);
47  ATH_MSG_DEBUG(" " << m_d0Max);
48  ATH_MSG_DEBUG(" " << m_z0Min);
49  ATH_MSG_DEBUG(" " << m_z0Max);
53  ATH_MSG_DEBUG(" " << m_maxHoles);
60  ATH_MSG_DEBUG(" " << m_maxChi2);
66 
67  m_logger = makeActsAthenaLogger(this, "Acts");
68 
69  // Read and Write handles
72 
73  ATH_CHECK(m_monTool.retrieve(EnableTool{not m_monTool.empty()}));
75  ATH_CHECK(m_extrapolationTool.retrieve());
76  ATH_CHECK(m_trackStatePrinter.retrieve(EnableTool{not m_trackStatePrinter.empty()}));
77  ATH_CHECK(m_ATLASConverterTool.retrieve());
78  ATH_CHECK(m_fitterTool.retrieve());
79  ATH_CHECK(m_pixelCalibTool.retrieve(EnableTool{not m_pixelCalibTool.empty()}));
80  ATH_CHECK(m_stripCalibTool.retrieve(EnableTool{not m_stripCalibTool.empty()}));
81  ATH_CHECK(m_hgtdCalibTool.retrieve(EnableTool{not m_hgtdCalibTool.empty()}));
82 
83  auto magneticField = std::make_unique<ATLASMagneticFieldWrapper>();
84  auto trackingGeometry = m_trackingGeometryTool->trackingGeometry();
85 
86  detail::Stepper stepper(std::move(magneticField));
87  detail::Navigator::Config config{trackingGeometry};
88  config.resolvePassive = false;
89  config.resolveMaterial = true;
90  config.resolveSensitive = true;
91  detail::Navigator navigator(config, logger().cloneWithSuffix("Navigator"));
92  detail::Propagator propagator(std::move(stepper), std::move(navigator), logger().cloneWithSuffix("Prop"));
93 
94  // Using the CKF propagator as extrapolator
95  detail::Extrapolator extrapolator = propagator;
96 
97  // m_etaBins (from flags.Tracking.ActiveConfig.etaBins) includes a dummy first and last bin, which we ignore
98  std::vector<double> absEtaEdges;
99  if (m_etaBins.size() <= 2)
100  {
101  absEtaEdges.reserve(2ul);
102  absEtaEdges.push_back(0.0);
103  absEtaEdges.push_back(std::numeric_limits<double>::infinity());
104  }
105  else
106  {
107  absEtaEdges.reserve(m_etaBins.size());
108  absEtaEdges.push_back(m_absEtaMin);
109  absEtaEdges.insert(absEtaEdges.end(), m_etaBins.begin() + 1, m_etaBins.end() - 1);
110  absEtaEdges.push_back(m_absEtaMax);
111  }
112 
113  auto setCut = [](auto &cfgVal, const auto &cuts, size_t ind) -> void
114  {
115  if (cuts.empty())
116  return;
117  cfgVal = (ind < cuts.size()) ? cuts[ind] : cuts[cuts.size() - 1];
118  };
119 
120  Acts::TrackSelector::EtaBinnedConfig trackSelectorCfg{std::move(absEtaEdges)};
121  if (m_etaBins.size() <= 2)
122  {
123  assert(trackSelectorCfg.cutSets.size() == 1);
124  trackSelectorCfg.cutSets[0].absEtaMin = m_absEtaMin;
125  trackSelectorCfg.cutSets[0].absEtaMax = m_absEtaMax;
126  }
127  size_t cutIndex = 0;
128  for (auto &cfg : trackSelectorCfg.cutSets)
129  {
130  setCut(cfg.phiMin, m_phiMin, cutIndex);
131  setCut(cfg.phiMax, m_phiMax, cutIndex);
132  setCut(cfg.etaMin, m_etaMin, cutIndex);
133  setCut(cfg.etaMax, m_etaMax, cutIndex);
134  setCut(cfg.ptMin, m_ptMin, cutIndex);
135  setCut(cfg.ptMax, m_ptMax, cutIndex);
136  setCut(cfg.loc0Min, m_d0Min, cutIndex);
137  setCut(cfg.loc0Max, m_d0Max, cutIndex);
138  setCut(cfg.loc1Min, m_z0Min, cutIndex);
139  setCut(cfg.loc1Max, m_z0Max, cutIndex);
140  setCut(cfg.minMeasurements, m_minMeasurements, cutIndex);
141  setCut(cfg.maxHoles, m_maxHoles, cutIndex);
142  setCut(cfg.maxOutliers, m_maxOutliers, cutIndex);
143  setCut(cfg.maxSharedHits, m_maxSharedHits, cutIndex);
144  setCut(cfg.maxChi2, m_maxChi2, cutIndex);
145  ++cutIndex;
146  }
147 
148  ATH_MSG_DEBUG(trackSelectorCfg);
149 
150  // initializer measurement selector and connect it to the delegates of the track finder optins
152 
153  detail::CKF_config ckfConfig{
154  std::move(extrapolator),
155  detail::CKF{std::move(propagator), logger().cloneWithSuffix("CKF")},
156  {},
157  Acts::TrackSelector{trackSelectorCfg}};
158 
159  m_trackFinder = std::make_unique<CKF_pimpl>(std::move(ckfConfig));
160 
161  trackFinder().ckfExtensions.updater.connect<&ActsTrk::detail::FitterHelperFunctions::gainMatrixUpdate<detail::RecoTrackStateContainer>>();
162 
164 
165  initStatTables();
166 
167  return StatusCode::SUCCESS;
168  }
169 
170  StatusCode TrackFindingBaseAlg::execute(const EventContext &) const {
171  ATH_MSG_FATAL("execute() method from the base class was called! Implement proper execute() method in the derived class!");
172 
173  return StatusCode::FAILURE;
174  }
175 
177  printStatTables();
178 
179  return StatusCode::SUCCESS;
180  }
181 
182  std::unique_ptr<ActsTrk::IMeasurementSelector> TrackFindingBaseAlg::setMeasurementSelector(
183  const detail::TrackFindingMeasurements &measurements,
184  TrackFinderOptions &options) const {
185  ATH_MSG_DEBUG(name() << "::" << __FUNCTION__);
186 
187  std::unique_ptr<ActsTrk::IMeasurementSelector> measurementSelector = ActsTrk::detail::getMeasurementSelector(
188  m_pixelCalibTool.isEnabled() ? &(*m_pixelCalibTool) : nullptr,
189  measurements.measurementRanges(),
192  m_numMeasurementsCutOff.value());
193 
194  measurementSelector->connect(&options.extensions.createTrackStates);
195 
196  return measurementSelector;
197  }
198 
200  const DetectorContextHolder &detContext,
201  const detail::TrackFindingMeasurements &measurements,
202  const Acts::PerigeeSurface* pSurface) const {
203  Acts::PropagatorPlainOptions plainOptions{detContext.geometry, detContext.magField};
204  plainOptions.maxSteps = m_maxPropagationStep;
205  plainOptions.direction = Acts::Direction::Forward();
206  plainOptions.endOfWorldVolumeIds = m_endOfWorldVolumeIds;
207 
208  // Set the CombinatorialKalmanFilter options
209  TrackFinderOptions options(detContext.geometry, detContext.magField, detContext.calib,
210  trackFinder().ckfExtensions, plainOptions, pSurface);
211 
212  std::unique_ptr<ActsTrk::IMeasurementSelector> measurementSelector = setMeasurementSelector(measurements, options);
213 
214  Acts::PropagatorPlainOptions plainSecondOptions{detContext.geometry, detContext.magField};
215  plainSecondOptions.maxSteps = m_maxPropagationStep;
216  plainSecondOptions.direction = plainOptions.direction.invert();
217 
218  TrackFinderOptions secondOptions(detContext.geometry, detContext.magField, detContext.calib,
219  options.extensions, plainSecondOptions, pSurface);
220  secondOptions.targetSurface = pSurface;
221  secondOptions.skipPrePropagationUpdate = true;
222 
223  return {std::move(options), std::move(secondOptions), std::move(measurementSelector)};
224  };
225 
226  const Acts::TrackSelector::Config& TrackFindingBaseAlg::getCuts (double eta) const {
227  const auto &trackSelectorCfg = trackFinder().trackSelector.config();
228  // return the last bin for |eta|>=4 or nan
229  return (!(std::abs(eta) < trackSelectorCfg.absEtaEdges.back())) ? trackSelectorCfg.cutSets.back()
230  : (std::abs(eta) < trackSelectorCfg.absEtaEdges.front()) ? trackSelectorCfg.cutSets.front()
231  : trackSelectorCfg.getCuts(eta);
232  };
233 
234  std::vector<typename detail::RecoTrackContainer::TrackProxy>
236  const TrkProxy &trackProxy,
237  detail::RecoTrackContainer &tracksContainerTemp,
238  const TrackFinderOptions &options) const {
239  if (not m_doTwoWay) return {};
240 
241  // Create initial parameters for the propagation
242  Acts::BoundTrackParameters secondInitialParameters = trackProxy.createParametersFromState(detail::RecoConstTrackStateContainerProxy{firstMeasurement});
243  if (!secondInitialParameters.referenceSurface().insideBounds(secondInitialParameters.localPosition())) { // #3751
244  return {};
245  }
246 
247  auto rootBranch = tracksContainerTemp.makeTrack();
248  rootBranch.copyFrom(trackProxy, false); // #3534
249  if (m_addPixelStripCounts) {
250  copyPixelStripCounts(rootBranch, trackProxy);
251  }
252 
253  // perform track finding
254  auto secondResult =
255  trackFinder().ckf.findTracks(secondInitialParameters, options, tracksContainerTemp, rootBranch);
256  if (not secondResult.ok()) {
257  return {};
258  }
259  return secondResult.value();
260  }
261 
262  xAOD::UncalibMeasType TrackFindingBaseAlg::measurementType (const detail::RecoTrackContainer::TrackStateProxy &trackState) {
263  if (trackState.hasReferenceSurface()) {
264  if (const auto *actsDetElem = dynamic_cast<const IDetectorElementBase *>(trackState.referenceSurface().associatedDetectorElement())) {
265  switch (actsDetElem->detectorType()) {
266  case DetectorType::Pixel:
268  case DetectorType::Sct:
270  default:
271  break;
272  }
273  }
274  }
275 
277  }
278 
280  const detail::RecoTrackContainer::TrackProxy &track,
281  const detail::RecoTrackContainer::TrackStateProxy &trackState,
282  const Acts::TrackSelector::EtaBinnedConfig &trackSelectorCfg,
283  const Acts::GeometryContext &tgContext,
284  const detail::MeasurementIndex &measurementIndex,
285  const std::size_t typeIndex,
286  EventStats::value_type &event_stat_category_i) const {
287  if (m_addPixelStripCounts) {
288  updatePixelStripCounts(track, trackState.typeFlags(),
289  measurementType(trackState));
291  }
292 
293  if (m_trackStatePrinter.isSet()) {
294  m_trackStatePrinter->printTrackState(tgContext, trackState,
295  measurementIndex, true);
296  }
297 
298  if (!m_doBranchStopper) {
299  return BranchStopperResult::Continue;
300  }
301 
302  const auto &parameters = trackState.hasFiltered() ? trackState.filtered()
303  : trackState.predicted();
304  double eta = -std::log(std::tan(0.5 * parameters[Acts::eBoundTheta]));
305  const auto &cutSet = getCuts(eta);
306 
307  if (typeIndex < m_ptMinMeasurements.size() &&
308  !(track.nMeasurements() < m_ptMinMeasurements[typeIndex])) {
309  double pT = std::sin(parameters[Acts::eBoundTheta]) /
310  parameters[Acts::eBoundQOverP];
311  if (std::abs(pT) < cutSet.ptMin * m_branchStopperPtMinFactor) {
312  ++event_stat_category_i[kNStoppedTracksMinPt];
313  ATH_MSG_DEBUG("CkfBranchStopper: drop branch with q*pT="
314  << pT << " after " << track.nMeasurements()
315  << " measurements");
316  return BranchStopperResult::StopAndDrop;
317  }
318  }
319 
320  if (typeIndex < m_absEtaMaxMeasurements.size() &&
321  !(track.nMeasurements() < m_absEtaMaxMeasurements[typeIndex]) &&
322  !(std::abs(eta) < trackSelectorCfg.absEtaEdges.back() +
324  ++event_stat_category_i[kNStoppedTracksMaxEta];
325  ATH_MSG_DEBUG("CkfBranchStopper: drop branch with eta="
326  << eta << " after " << track.nMeasurements()
327  << " measurements");
328  return BranchStopperResult::StopAndDrop;
329  }
330 
331 
332  // In the pixel endcap regions relax the requirement for minMeasurements before cutting the branch off
333  auto minMeasurementsBranchStop = std::abs(eta) > m_branchStopperAbsEtaMeasCut ? cutSet.minMeasurements - m_branchStopperMeasCutReduce : cutSet.minMeasurements;
334  bool enoughMeasurements = (track.nMeasurements() >= minMeasurementsBranchStop);
335  bool tooManyHoles = (track.nHoles() > cutSet.maxHoles);
336  bool tooManyOutliers = (track.nOutliers() > cutSet.maxOutliers);
337 
338  if (m_addPixelStripCounts) {
339  auto [enoughMeasurementsPS, tooManyHolesPS, tooManyOutliersPS] =
341  enoughMeasurements = enoughMeasurements && enoughMeasurementsPS;
342  tooManyHoles = tooManyHoles || tooManyHolesPS;
343  tooManyOutliers = tooManyOutliers || tooManyOutliersPS;
344  }
345 
346  if (!(tooManyHoles || tooManyOutliers)) {
347  return BranchStopperResult::Continue;
348  }
349 
350  if (!enoughMeasurements) {
351  ++event_stat_category_i[kNStoppedTracksMaxHoles];
352  }
353 
354  if (m_addPixelStripCounts) {
355  ATH_MSG_DEBUG("CkfBranchStopper: stop and "
356  << (enoughMeasurements ? "keep" : "drop")
357  << " branch with nHoles=" << track.nHoles() << " ("
358  << s_branchState.nPixelHoles(track) << " pixel+"
360  << " strip), nOutliers=" << track.nOutliers() << " ("
363  << "), nMeasurements=" << track.nMeasurements() << " ("
364  << s_branchState.nPixelHits(track) << "+"
365  << s_branchState.nStripHits(track) << ")");
366  } else {
367  ATH_MSG_DEBUG("CkfBranchStopper: stop and "
368  << (enoughMeasurements ? "keep" : "drop")
369  << " branch with nHoles=" << track.nHoles()
370  << ", nOutliers=" << track.nOutliers()
371  << ", nMeasurements=" << track.nMeasurements());
372  }
373 
374  return enoughMeasurements ? BranchStopperResult::StopAndKeep
375  : BranchStopperResult::StopAndDrop;
376  }
377 
378 
380  {
381  tracksContainer.addColumn<unsigned int>("nPixelHits");
382  tracksContainer.addColumn<unsigned int>("nStripHits");
383  tracksContainer.addColumn<unsigned int>("nPixelHoles");
384  tracksContainer.addColumn<unsigned int>("nStripHoles");
385  tracksContainer.addColumn<unsigned int>("nPixelOutliers");
386  tracksContainer.addColumn<unsigned int>("nStripOutliers");
387  }
388 
389  void TrackFindingBaseAlg::initPixelStripCounts(const detail::RecoTrackContainer::TrackProxy &track)
390  {
397  }
398 
400  const detail::RecoTrackContainer::TrackProxy &track,
401  Acts::ConstTrackStateType typeFlags, xAOD::UncalibMeasType detType) {
403  if (typeFlags.test(Acts::TrackStateFlag::HoleFlag)) {
405  } else if (typeFlags.test(Acts::TrackStateFlag::OutlierFlag)) {
407  } else if (typeFlags.test(Acts::TrackStateFlag::MeasurementFlag)) {
409  }
410  } else if (detType == xAOD::UncalibMeasType::StripClusterType) {
411  if (typeFlags.test(Acts::TrackStateFlag::HoleFlag)) {
413  } else if (typeFlags.test(Acts::TrackStateFlag::OutlierFlag)) {
415  } else if (typeFlags.test(Acts::TrackStateFlag::MeasurementFlag)) {
417  }
418  }
419  }
420 
422  const detail::RecoTrackContainer::TrackProxy &track,
423  const detail::RecoTrackContainer::TrackProxy &other) {
430  }
431 
432  void TrackFindingBaseAlg::checkPixelStripCounts(const detail::RecoTrackContainer::TrackProxy &track) const {
433  // This check will fail if there are other types (HGTD, MS?) of hits, holes, or outliers.
434  // The check can be removed when it is no longer appropriate.
435  if (track.nMeasurements() != s_branchState.nPixelHits(track) + s_branchState.nStripHits(track))
436  ATH_MSG_WARNING("mismatched hit count: total (" << track.nMeasurements()
437  << ") != pixel (" << s_branchState.nPixelHits(track)
438  << ") + strip (" << s_branchState.nStripHits(track) << ")");
439  if (track.nHoles() < s_branchState.nPixelHoles(track) + s_branchState.nStripHoles(track)) // allow extra HGTD holes
440  ATH_MSG_WARNING("mismatched hole count: total (" << track.nHoles()
441  << ") < pixel (" << s_branchState.nPixelHoles(track)
442  << ") + strip (" << s_branchState.nStripHoles(track) << ")");
444  ATH_MSG_WARNING("mismatched outlier count: total (" << track.nOutliers()
445  << ") != pixel (" << s_branchState.nPixelOutliers(track)
446  << ") + strip (" << s_branchState.nStripOutliers(track) << ")");
447  };
448 
449  std::array<bool, 3> TrackFindingBaseAlg::selectPixelStripCounts(const detail::RecoTrackContainer::TrackProxy &track, double eta) const {
450  bool enoughMeasurements = true, tooManyHoles = false, tooManyOutliers = false;
451  const auto &trackSelectorCfg = trackFinder().trackSelector.config();
452  std::size_t etaBin = (std::abs(eta) < trackSelectorCfg.absEtaEdges.front()) ? 0
453  : (std::abs(eta) >= trackSelectorCfg.absEtaEdges.back()) ? trackSelectorCfg.absEtaEdges.size() - 1
454  : trackSelectorCfg.binIndex(eta);
455  auto cutMin = [etaBin](std::size_t val, const std::vector<std::size_t> &cutSet) {
456  return !cutSet.empty() && (val < (etaBin < cutSet.size() ? cutSet[etaBin] : cutSet.back()));
457  };
458  auto cutMax = [etaBin](std::size_t val, const std::vector<std::size_t> &cutSet) {
459  return !cutSet.empty() && (val > (etaBin < cutSet.size() ? cutSet[etaBin] : cutSet.back()));
460  };
461 
462  enoughMeasurements = enoughMeasurements && !cutMin(s_branchState.nPixelHits(track), m_minPixelHits);
463  enoughMeasurements = enoughMeasurements && !cutMin(s_branchState.nStripHits(track), m_minStripHits);
464  tooManyHoles = tooManyHoles || cutMax(s_branchState.nPixelHoles(track), m_maxPixelHoles);
465  tooManyHoles = tooManyHoles || cutMax(s_branchState.nStripHoles(track), m_maxStripHoles);
466  tooManyOutliers = tooManyOutliers || cutMax(s_branchState.nPixelOutliers(track), m_maxPixelOutliers);
467  tooManyOutliers = tooManyOutliers || cutMax(s_branchState.nStripOutliers(track), m_maxStripOutliers);
468 
469  return {enoughMeasurements, tooManyHoles, tooManyOutliers};
470  }
471 
473  std::vector<std::pair<float, float> > &chi2CutOffOutlier = m_measurementSelectorConfig.m_chi2CutOffOutlier;
474  chi2CutOffOutlier .reserve( m_chi2CutOff.size() );
475  if (!m_chi2OutlierCutOff.empty()) {
476  if (m_chi2CutOff.size() != m_chi2OutlierCutOff.size()) {
477  ATH_MSG_ERROR("Outlier chi2 cut off provided but number of elements does not agree with"
478  " chi2 cut off for measurements which however is required: "
479  << m_chi2CutOff.size() << " != " << m_chi2OutlierCutOff.size());
480  return StatusCode::FAILURE;
481  }
482  }
483  unsigned int idx=0;
484  for (const auto &elm : m_chi2CutOff) {
485  chi2CutOffOutlier.push_back( std::make_pair(static_cast<float>(elm),
486  idx < m_chi2OutlierCutOff.size()
487  ? static_cast<float>(m_chi2OutlierCutOff[idx])
489  ++idx;
490  }
491  if (m_etaBins.size() > 2) {
492  std::vector<float> &etaBinsf = m_measurementSelectorConfig.m_etaBins;
493  etaBinsf.assign(m_etaBins.begin() + 1, m_etaBins.end() - 1);
494  }
495 
496  return /*m_measurementSelector ?*/ StatusCode::SUCCESS /*: StatusCode::FAILURE*/;
497  }
498 
499  // === Statistics printout =================================================
500 
502  if (!m_statEtaBins.empty())
503  {
504  m_useAbsEtaForStat = (m_statEtaBins[0] > 0.);
505  float last_eta = m_statEtaBins[0];
506  for (float eta : m_statEtaBins)
507  {
508  if (eta < last_eta)
509  {
510  ATH_MSG_FATAL("Eta bins for statistics counter not in ascending order.");
511  }
512  last_eta = eta;
513  }
514  }
515  m_stat.resize(nSeedCollections() * seedCollectionStride());
516  }
517 
518  // copy statistics
519  void TrackFindingBaseAlg::copyStats(const EventStats &event_stat) const {
520  std::lock_guard<std::mutex> lock(m_mutex);
521  std::size_t category_i = 0;
522  for (const std::array<unsigned int, kNStat> &src_stat : event_stat)
523  {
524  std::array<std::size_t, kNStat> &dest_stat = m_stat[category_i++];
525  for (std::size_t i = 0; i < src_stat.size(); ++i)
526  {
527  assert(i < dest_stat.size());
528  dest_stat[i] += src_stat[i];
529  }
530  }
531  }
532 
533  // print statistics
535  if (msgLvl(MSG::INFO))
536  {
537  std::vector<std::string> stat_labels =
539  {
540  std::make_pair(kNTotalSeeds, "Input seeds"),
541  std::make_pair(kNoTrackParam, "No track parameters"),
542  std::make_pair(kNUsedSeeds, "Used seeds"),
543  std::make_pair(kNoTrack, "Cannot find track"),
544  std::make_pair(kNDuplicateSeeds, "Duplicate seeds"),
545  std::make_pair(kNNoEstimatedParams, "Initial param estimation failed"),
546  std::make_pair(kNRejectedRefinedSeeds, "Rejected refined parameters"),
547  std::make_pair(kNOutputTracks, "CKF tracks"),
548  std::make_pair(kNSelectedTracks, "selected tracks"),
549  std::make_pair(kNStoppedTracksMaxHoles, "Stopped tracks reaching max holes"),
550  std::make_pair(kMultipleBranches, "Seeds with more than one branch"),
551  std::make_pair(kNoSecond, "Tracks failing second CKF"),
552  std::make_pair(kNStoppedTracksMinPt, "Stopped tracks below pT cut"),
553  std::make_pair(kNStoppedTracksMaxEta, "Stopped tracks above max eta"),
554  std::make_pair(kNTotalSharedHits, "Total shared hits")
555  });
556  assert(stat_labels.size() == kNStat);
557  std::vector<std::string> categories;
558  categories.reserve(m_seedLabels.size() + 1);
559  categories.insert(categories.end(), m_seedLabels.begin(), m_seedLabels.end());
560  categories.push_back("ALL");
561 
562  std::vector<std::string> eta_labels;
563  eta_labels.reserve(m_statEtaBins.size() + 2);
564  for (std::size_t eta_bin_i = 0; eta_bin_i < m_statEtaBins.size() + 2; ++eta_bin_i)
565  {
566  eta_labels.push_back(TableUtils::makeEtaBinLabel(m_statEtaBins, eta_bin_i, m_useAbsEtaForStat));
567  }
568 
569  // vector used as 3D array stat[ eta_bin ][ stat_i ][ seed_type]
570  // stat_i = [0, kNStat)
571  // eta_bin = [0, m_statEtaBins.size()+2 ); eta_bin == m_statEtaBinsSize()+1 means sum of all etaBins
572  // seed_type = [0, nSeedCollections()+1) seed_type == nSeedCollections() means sum of all seed collections
573  std::vector<std::size_t> stat =
574  TableUtils::createCounterArrayWithProjections<std::size_t>(nSeedCollections(),
575  m_statEtaBins.size() + 1,
576  m_stat);
577 
578  // the extra columns and rows for the projections are addeded internally:
579  std::size_t stat_stride =
581  m_statEtaBins.size() + 1,
582  kNStat);
583  std::size_t eta_stride =
585  m_statEtaBins.size() + 1,
586  kNStat);
587  std::stringstream table_out;
588 
589  if (m_dumpAllStatEtaBins.value())
590  {
591  // dump for each counter a table with one row per eta bin
592  std::size_t max_label_width = TableUtils::maxLabelWidth(stat_labels) + TableUtils::maxLabelWidth(eta_labels);
593  for (std::size_t stat_i = 0; stat_i < kNStat; ++stat_i)
594  {
595  std::size_t dest_idx_offset = stat_i * stat_stride;
596  table_out << makeTable(stat, dest_idx_offset, eta_stride,
597  eta_labels,
598  categories)
599  .columnWidth(10)
600  // only dump the footer for the last eta bin i.e. total
601  .dumpHeader(stat_i == 0)
602  .dumpFooter(stat_i + 1 == kNStat)
603  .separateLastRow(true) // separate the sum of all eta bins
604  .minLabelWidth(max_label_width)
605  .labelPrefix(stat_labels.at(stat_i));
606  }
607  }
608  else
609  {
610  // dump one table with one row per counter showing the total eta range
611  for (std::size_t eta_bin_i = (m_dumpAllStatEtaBins.value() ? 0 : m_statEtaBins.size() + 1);
612  eta_bin_i < m_statEtaBins.size() + 2;
613  ++eta_bin_i)
614  {
615  std::size_t dest_idx_offset = eta_bin_i * eta_stride;
616  table_out << makeTable(stat, dest_idx_offset, stat_stride,
617  stat_labels,
618  categories,
619  eta_labels.at(eta_bin_i))
620  .columnWidth(10)
621  // only dump the footer for the last eta bin i.e. total
622  .dumpFooter(!m_dumpAllStatEtaBins.value() || eta_bin_i == m_statEtaBins.size() + 1);
623  }
624  }
625  ATH_MSG_INFO("statistics:\n"
626  << table_out.str());
627  table_out.str("");
628 
629  // define retios first element numerator, second element denominator
630  // each element contains a vector of counter and a multiplier e.g. +- 1
631  // ratios are computed as (sum_i stat[stat_i] * multiplier_i ) / (sum_j stat[stat_j] * multiplier_j )
632  auto [ratio_labels, ratio_def] =
634  std::vector<TableUtils::SummandDefinition>{
638  // no track counted as used but want to include it as failed
640  }, // failed seeds i.e. seeds which are not duplicates but did not produce a track
641  std::vector<TableUtils::SummandDefinition>{TableUtils::defineSummand(kNTotalSeeds, 1)}),
643  TableUtils::defineSimpleRatio("Rejected refined params / seeds", kNRejectedRefinedSeeds, kNTotalSeeds),
645  TableUtils::defineSimpleRatio("selected tracks / used seeds", kNSelectedTracks, kNUsedSeeds),
646  TableUtils::defineSimpleRatio("branched tracks / used seeds", kMultipleBranches, kNUsedSeeds),
647  TableUtils::defineSimpleRatio("no 2nd CKF / CKF tracks", kNoSecond, kNOutputTracks),
648  TableUtils::defineSimpleRatio("shared hits / CKF tracks", kNTotalSharedHits, kNOutputTracks)});
649 
650  std::vector<float> ratio = TableUtils::computeRatios(ratio_def,
651  nSeedCollections() + 1,
652  m_statEtaBins.size() + 2,
653  stat);
654 
655  // the extra columns and rows for the projections are _not_ added internally
656  std::size_t ratio_stride = TableUtils::ratioStride(nSeedCollections() + 1,
657  m_statEtaBins.size() + 2,
658  ratio_def);
659  std::size_t ratio_eta_stride = TableUtils::subCategoryStride(nSeedCollections() + 1,
660  m_statEtaBins.size() + 2,
661  ratio_def);
662 
663  std::size_t max_label_width = TableUtils::maxLabelWidth(ratio_labels) + TableUtils::maxLabelWidth(eta_labels);
664  if (m_dumpAllStatEtaBins.value())
665  {
666  // show for each ratio a table with one row per eta bin
667  for (std::size_t ratio_i = 0; ratio_i < ratio_labels.size(); ++ratio_i)
668  {
669  table_out << makeTable(ratio,
670  ratio_i * ratio_stride,
671  ratio_eta_stride,
672  eta_labels,
673  categories)
674  .columnWidth(10)
675  // only dump the footer for the last eta bin i.e. total
676  .dumpHeader(ratio_i == 0)
677  .dumpFooter(ratio_i + 1 == ratio_labels.size())
678  .separateLastRow(true) // separate the sum of las
679  .minLabelWidth(max_label_width)
680  .labelPrefix(ratio_labels.at(ratio_i));
681  }
682  }
683  else
684  {
685  // dump one table with one row per ratio showing the total eta range
686  table_out << makeTable(ratio,
687  (m_statEtaBins.size() + 1) * ratio_eta_stride + 0 * ratio_stride,
688  ratio_stride,
689  ratio_labels,
690  categories)
691  .columnWidth(10)
692  // only dump the footer for the last eta bin i.e. total
693  .minLabelWidth(max_label_width)
694  .dumpFooter(false);
695 
696  // also dump a table for final tracks over seeds (ratio_i==3) showing one row per eta bin
697  eta_labels.erase(eta_labels.end() - 1); // drop last line of table which shows again all eta bins summed.
698  constexpr std::size_t ratio_i = 3;
699  table_out << makeTable(ratio,
700  ratio_i * ratio_stride,
701  ratio_eta_stride,
702  eta_labels,
703  categories)
704  .columnWidth(10)
705  .dumpHeader(false)
706  // only dump the footer for the last eta bin i.e. total
707  .dumpFooter(!m_dumpAllStatEtaBins.value() || ratio_i + 1 == ratio_labels.size())
708  .separateLastRow(false)
709  .minLabelWidth(max_label_width)
710  .labelPrefix(ratio_labels.at(ratio_i));
711  }
712 
713  ATH_MSG_INFO("Ratios:\n"
714  << table_out.str());
715  }
716  }
717 
718  std::size_t TrackFindingBaseAlg::getStatCategory(std::size_t seed_collection, float eta) const {
719  std::vector<float>::const_iterator bin_iter = std::upper_bound(m_statEtaBins.begin(),
720  m_statEtaBins.end(),
721  m_useAbsEtaForStat ? std::abs(eta) : eta);
722  std::size_t category_i = seed_collection * seedCollectionStride() + static_cast<std::size_t>(bin_iter - m_statEtaBins.begin());
723  assert(category_i < m_stat.size());
724  return category_i;
725  }
726 
727  std::size_t TrackFindingBaseAlg::computeStatSum(std::size_t seed_collection, EStat counter_i, const EventStats &stat) const {
728  std::size_t out = 0u;
729  for (std::size_t category_i = seed_collection * seedCollectionStride();
730  category_i < (seed_collection + 1) * seedCollectionStride();
731  ++category_i)
732  {
733  assert(category_i < stat.size());
734  out += stat[category_i][counter_i];
735  }
736  return out;
737  }
738 
739  bool TrackFindingBaseAlg::selectPixelStripCountsFinal(const detail::RecoTrackContainer::TrackProxy &track) const {
740  if (not m_addPixelStripCounts) return true;
741  double eta = -std::log(std::tan(0.5 * track.theta()));
742  auto [enoughMeasurementsPS, tooManyHolesPS, tooManyOutliersPS] = selectPixelStripCounts(track, eta);
743  return enoughMeasurementsPS && !tooManyHolesPS && !tooManyOutliersPS;
744  }
745 
746 } // namespace ActsTrk
ActsTrk::detail::RecoTrackStateContainerProxy
RecoTrackStateContainer::TrackStateProxy RecoTrackStateContainerProxy
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:25
ActsTrk::TrackFindingBaseAlg::m_trackContainerKey
SG::WriteHandleKey< ActsTrk::TrackContainer > m_trackContainerKey
Definition: TrackFindingBaseAlg.h:97
ActsTrk::TrackFindingBaseAlg::BranchState::nPixelOutliers
static constexpr Acts::ProxyAccessor< unsigned int > nPixelOutliers
Definition: TrackFindingBaseAlg.h:295
ActsTrk::TrackFindingBaseAlg::doTwoWayTrackFinding
std::vector< typename detail::RecoTrackContainer::TrackProxy > doTwoWayTrackFinding(const detail::RecoTrackStateContainerProxy &firstMeasurement, const TrkProxy &trackProxy, detail::RecoTrackContainer &tracksContainerTemp, const TrackFinderOptions &options) const
Perform two-way track finding.
Definition: TrackFindingBaseAlg.cxx:235
ActsTrk::TrackFindingBaseAlg::m_d0Min
Gaudi::Property< std::vector< double > > m_d0Min
Definition: TrackFindingBaseAlg.h:126
ActsTrk::TrackFindingBaseAlg::m_doBranchStopper
Gaudi::Property< bool > m_doBranchStopper
Definition: TrackFindingBaseAlg.h:109
CalculateHighPtTerm.pT
pT
Definition: ICHEP2016/CalculateHighPtTerm.py:57
ActsTrk::detail::getMeasurementSelector
std::unique_ptr< ActsTrk::IMeasurementSelector > getMeasurementSelector(const ActsTrk::IOnBoundStateCalibratorTool *onTrackCalibratorTool, const ActsTrk::detail::MeasurementRangeList &measurementRanges, const std::vector< float > &etaBinsf, const std::vector< std::pair< float, float > > &chi2CutOffOutlier, const std::vector< size_t > &numMeasurementsCutOff)
Definition: AtlasMeasurementSelector.cxx:385
ActsTrk::TrackFindingBaseAlg::m_absEtaMax
Gaudi::Property< double > m_absEtaMax
Definition: TrackFindingBaseAlg.h:123
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
ActsTrk::TrackFindingBaseAlg::kNStat
@ kNStat
Definition: TrackFindingBaseAlg.h:169
ActsTrk::TrackFindingBaseAlg::EStat
EStat
Definition: TrackFindingBaseAlg.h:153
ActsTrk::TrackFindingBaseAlg::selectPixelStripCountsFinal
bool selectPixelStripCountsFinal(const detail::RecoTrackContainer::TrackProxy &track) const
Definition: TrackFindingBaseAlg.cxx:739
ActsTrk::TrackFindingBaseAlg::m_pixelCalibTool
ToolHandle< ActsTrk::IOnTrackCalibratorTool< detail::RecoTrackStateContainer > > m_pixelCalibTool
Definition: TrackFindingBaseAlg.h:93
ActsTrk::TrackFindingBaseAlg::m_maxStripHoles
Gaudi::Property< std::vector< std::size_t > > m_maxStripHoles
Definition: TrackFindingBaseAlg.h:141
ActsTrk::IMeasurementSelector::connect
virtual void connect(std::any delegate_wrap) const =0
ActsTrk::TrackFindingBaseAlg::TrkProxy
Acts::TrackProxy< Acts::VectorTrackContainer, Acts::VectorMultiTrajectory, Acts::detail::RefHolder, false > TrkProxy
Definition: TrackFindingBaseAlg.h:242
ActsTrk::TrackFindingBaseAlg::m_z0Max
Gaudi::Property< std::vector< double > > m_z0Max
Definition: TrackFindingBaseAlg.h:129
ActsTrk::TrackFindingBaseAlg::s_branchState
static constexpr BranchState s_branchState
Definition: TrackFindingBaseAlg.h:298
ActsTrk::TrackFindingBaseAlg::updatePixelStripCounts
static void updatePixelStripCounts(const detail::RecoTrackContainer::TrackProxy &track, Acts::ConstTrackStateType typeFlags, xAOD::UncalibMeasType detType)
Definition: TrackFindingBaseAlg.cxx:399
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
ActsTrk::detail::TrackFindingMeasurements
Definition: TrackFindingMeasurements.h:17
ActsTrk::TrackFindingBaseAlg::m_unalibMeasSurfAcc
detail::xAODUncalibMeasSurfAcc m_unalibMeasSurfAcc
Definition: TrackFindingBaseAlg.h:83
ActsTrk::TrackFindingBaseAlg::TrackFinderOptions
Acts::CombinatorialKalmanFilterOptions< detail::RecoTrackContainer > TrackFinderOptions
Definition: TrackFindingBaseAlg.h:54
ActsTrk::TrackFindingBaseAlg::m_tracksBackendHandlesHelper
ActsTrk::MutableTrackContainerHandlesHelper m_tracksBackendHandlesHelper
Definition: TrackFindingBaseAlg.h:98
ActsTrk::TrackFindingBaseAlg::kNoSecond
@ kNoSecond
Definition: TrackFindingBaseAlg.h:165
ActsTrk::TrackFindingBaseAlg::m_phiMax
Gaudi::Property< std::vector< double > > m_phiMax
Definition: TrackFindingBaseAlg.h:119
ActsTrk::TrackFindingBaseAlg::m_etaMin
Gaudi::Property< std::vector< double > > m_etaMin
Definition: TrackFindingBaseAlg.h:120
ActsTrk::detail::Navigator
Acts::Navigator Navigator
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:31
ActsTrk::TrackFindingBaseAlg::m_maxHoles
Gaudi::Property< std::vector< std::size_t > > m_maxHoles
Definition: TrackFindingBaseAlg.h:132
xAOD::UncalibMeasType::StripClusterType
@ StripClusterType
ActsTrk::TrackFindingBaseAlg::initialize
virtual StatusCode initialize() override
Definition: TrackFindingBaseAlg.cxx:26
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
ActsTrk::TrackFindingBaseAlg::finalize
virtual StatusCode finalize() override
Definition: TrackFindingBaseAlg.cxx:176
ActsTrk::detail::CKF_config::trackSelector
Acts::TrackSelector trackSelector
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:48
ActsTrk::TrackFindingBaseAlg::EventStats
std::vector< std::array< unsigned int, kNStat > > EventStats
Definition: TrackFindingBaseAlg.h:172
ActsTrk::detail::Extrapolator
Propagator Extrapolator
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:34
ActsTrk::TrackFindingBaseAlg::m_maxPixelHoles
Gaudi::Property< std::vector< std::size_t > > m_maxPixelHoles
Definition: TrackFindingBaseAlg.h:140
ActsTrk::TrackFindingBaseAlg::getDefaultOptions
TrackFindingDefaultOptions getDefaultOptions(const DetectorContextHolder &detContext, const detail::TrackFindingMeasurements &measurements, const Acts::PerigeeSurface *pSurface) const
Get CKF options for first and second pass + pointer to MeasurementSelector.
Definition: TrackFindingBaseAlg.cxx:199
ActsTrk::TrackFindingBaseAlg::m_dumpAllStatEtaBins
Gaudi::Property< bool > m_dumpAllStatEtaBins
Definition: TrackFindingBaseAlg.h:150
ActsTrk::TrackFindingBaseAlg::m_maxChi2
Gaudi::Property< std::vector< double > > m_maxChi2
Definition: TrackFindingBaseAlg.h:135
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:70
ActsTrk::TrackFindingBaseAlg::m_absEtaMaxMeasurements
Gaudi::Property< std::vector< std::size_t > > m_absEtaMaxMeasurements
Definition: TrackFindingBaseAlg.h:108
ATLASMagneticFieldWrapper.h
ActsTrk::TrackFindingBaseAlg::BranchStopperResult
Acts::CombinatorialKalmanFilterBranchStopperResult BranchStopperResult
Definition: TrackFindingBaseAlg.h:267
ActsTrk::TrackFindingBaseAlg::m_hgtdCalibTool
ToolHandle< ActsTrk::IOnTrackCalibratorTool< detail::RecoTrackStateContainer > > m_hgtdCalibTool
Definition: TrackFindingBaseAlg.h:95
AthCommonMsg< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
ActsTrk::TrackFindingBaseAlg::printStatTables
void printStatTables() const
Definition: TrackFindingBaseAlg.cxx:534
TableUtils::defineSimpleRatio
RatioDefinition defineSimpleRatio(T numerator, T denominator)
Definition: TableUtils.h:384
ActsTrk::TrackFindingBaseAlg::computeStatSum
std::size_t computeStatSum(std::size_t seed_collection, EStat counter_i, const EventStats &stat) const
Definition: TrackFindingBaseAlg.cxx:727
ActsTrk::TrackFindingBaseAlg::DetectorContextHolder::magField
Acts::MagneticFieldContext magField
Definition: TrackFindingBaseAlg.h:63
ActsTrk::prefixFromTrackContainerName
std::string prefixFromTrackContainerName(const std::string &tracks)
Parse TrackContainer name to get the prefix for backends The name has to contain XYZTracks,...
Definition: TrackContainerHandlesHelper.cxx:20
ActsTrk::TrackFindingBaseAlg::kNUsedSeeds
@ kNUsedSeeds
Definition: TrackFindingBaseAlg.h:156
ActsTrk::TrackFindingBaseAlg::BranchState::nPixelHits
static constexpr Acts::ProxyAccessor< unsigned int > nPixelHits
Definition: TrackFindingBaseAlg.h:291
ActsTrk::DetectorType::Sct
@ Sct
python.RatesEmulationExample.lock
lock
Definition: RatesEmulationExample.py:148
ActsTrk::TrackFindingBaseAlg::m_branchStopperAbsEtaMaxExtra
Gaudi::Property< double > m_branchStopperAbsEtaMaxExtra
Definition: TrackFindingBaseAlg.h:112
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
ActsTrk::TrackFindingBaseAlg::m_chi2OutlierCutOff
Gaudi::Property< std::vector< double > > m_chi2OutlierCutOff
Definition: TrackFindingBaseAlg.h:105
ActsTrk::detail::MeasurementIndex
Definition: MeasurementIndex.h:16
TrackFindingMeasurements.h
ActsTrk::TrackFindingBaseAlg::m_ATLASConverterTool
ToolHandle< ActsTrk::IActsToTrkConverterTool > m_ATLASConverterTool
Definition: TrackFindingBaseAlg.h:91
ActsTrk::detail::RecoTrackContainer
Acts::TrackContainer< Acts::VectorTrackContainer, Acts::VectorMultiTrajectory > RecoTrackContainer
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:22
ActsTrk::TrackFindingBaseAlg::m_maxOutliers
Gaudi::Property< std::vector< std::size_t > > m_maxOutliers
Definition: TrackFindingBaseAlg.h:133
ActsTrk::TrackFindingBaseAlg::BranchState::nStripHoles
static constexpr Acts::ProxyAccessor< unsigned int > nStripHoles
Definition: TrackFindingBaseAlg.h:294
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
ActsTrk::TrackFindingBaseAlg::initStatTables
void initStatTables()
Definition: TrackFindingBaseAlg.cxx:501
ActsTrk::TrackFindingBaseAlg::trackFinder
CKF_pimpl & trackFinder()
Definition: TrackFindingBaseAlg.cxx:19
ActsTrk::TrackFindingBaseAlg::TrackFindingDefaultOptions
Definition: TrackFindingBaseAlg.h:67
config
Definition: PhysicsAnalysis/AnalysisCommon/AssociationUtils/python/config.py:1
ActsTrk::TrackFindingBaseAlg::kMultipleBranches
@ kMultipleBranches
Definition: TrackFindingBaseAlg.h:164
ActsTrk::MutableTrackContainerHandlesHelper::initialize
StatusCode initialize(const std::string &prefix)
Sets up the handles.
Definition: TrackContainerHandlesHelper.cxx:47
ActsTrk::TrackFindingBaseAlg::kNoTrackParam
@ kNoTrackParam
Definition: TrackFindingBaseAlg.h:155
ActsTrk::TrackFindingBaseAlg::m_etaMax
Gaudi::Property< std::vector< double > > m_etaMax
Definition: TrackFindingBaseAlg.h:121
ActsTrk::TrackFindingBaseAlg::MeasurementSelectorConfig::m_chi2CutOffOutlier
std::vector< std::pair< float, float > > m_chi2CutOffOutlier
Definition: TrackFindingBaseAlg.h:57
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:74
TableUtils::subCategoryStride
constexpr std::size_t subCategoryStride([[maybe_unused]] const std::size_t categories, [[maybe_unused]] const std::size_t sub_categories, [[maybe_unused]] const std::size_t n_counter)
Definition: TableUtils.h:304
ActsTrk::TrackFindingBaseAlg::m_endOfWorldVolumeIds
Gaudi::Property< std::vector< std::uint32_t > > m_endOfWorldVolumeIds
Definition: TrackFindingBaseAlg.h:145
ActsTrk::TrackFindingBaseAlg::kNStoppedTracksMinPt
@ kNStoppedTracksMinPt
Definition: TrackFindingBaseAlg.h:166
ActsTrk::TrackFindingBaseAlg::getStatCategory
std::size_t getStatCategory(std::size_t seed_collection, float eta) const
Definition: TrackFindingBaseAlg.cxx:718
makeActsAthenaLogger
std::unique_ptr< const Acts::Logger > makeActsAthenaLogger(IMessageSvc *svc, const std::string &name, int level, std::optional< std::string > parent_name)
Definition: Tracking/Acts/ActsInterop/src/Logger.cxx:64
ActsTrk::TrackFindingBaseAlg::m_maxSharedHits
Gaudi::Property< std::vector< std::size_t > > m_maxSharedHits
Definition: TrackFindingBaseAlg.h:134
ActsTrk::TrackFindingBaseAlg::m_branchStopperPtMinFactor
Gaudi::Property< double > m_branchStopperPtMinFactor
Definition: TrackFindingBaseAlg.h:111
ActsTrk::TrackFindingBaseAlg::setMeasurementSelector
std::unique_ptr< ActsTrk::IMeasurementSelector > setMeasurementSelector(const detail::TrackFindingMeasurements &measurements, TrackFinderOptions &options) const
Setup and attach measurement selector to KF options.
Definition: TrackFindingBaseAlg.cxx:182
ActsTrk::TrackFindingBaseAlg::m_addPixelStripCounts
Gaudi::Property< bool > m_addPixelStripCounts
Definition: TrackFindingBaseAlg.h:137
ActsTrk::TrackFindingBaseAlg::m_phiMin
Gaudi::Property< std::vector< double > > m_phiMin
Definition: TrackFindingBaseAlg.h:118
ActsTrk::TrackFindingBaseAlg::m_minMeasurements
Gaudi::Property< std::vector< std::size_t > > m_minMeasurements
Definition: TrackFindingBaseAlg.h:131
mergePhysValFiles.categories
categories
Definition: PhysicsAnalysis/JetTagging/JetTagValidation/JetTagDQA/scripts/mergePhysValFiles.py:18
xAOD::etaBin
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap etaBin
Definition: L2StandAloneMuon_v1.cxx:149
ActsTrk::TrackFindingBaseAlg::m_chi2CutOff
Gaudi::Property< std::vector< double > > m_chi2CutOff
Definition: TrackFindingBaseAlg.h:104
TableUtils::counterStride
constexpr std::size_t counterStride([[maybe_unused]] const std::size_t categories, [[maybe_unused]] const std::size_t sub_categories, [[maybe_unused]] const std::size_t n_counter)
Definition: TableUtils.h:309
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ActsTrk::DetectorType::Pixel
@ Pixel
Inner detector legacy.
ActsTrk::IDetectorElementBase
base class interface providing the bare minimal interface extension.
Definition: IDetectorElement.h:32
makeTable
TableUtils::StatTable< T > makeTable(const std::array< T, N > &counter, const std::array< std::string, N > &label)
Definition: TableUtils.h:523
ActsTrk::detail::RecoConstTrackStateContainerProxy
RecoTrackStateContainer::ConstTrackStateProxy RecoConstTrackStateContainerProxy
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:26
TableUtils::maxLabelWidth
std::size_t maxLabelWidth(const T_Collection &col)
Definition: TableUtils.h:290
TrackFindingBaseAlg.h
lumiFormat.i
int i
Definition: lumiFormat.py:85
ActsTrk::TrackFindingBaseAlg::kNOutputTracks
@ kNOutputTracks
Definition: TrackFindingBaseAlg.h:160
ActsTrk::TrackFindingBaseAlg::DetectorContextHolder::calib
Acts::CalibrationContext calib
Definition: TrackFindingBaseAlg.h:64
ActsTrk::TrackFindingBaseAlg::m_branchStopperMeasCutReduce
Gaudi::Property< double > m_branchStopperMeasCutReduce
Definition: TrackFindingBaseAlg.h:113
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ActsTrk::detail::CKF_config
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:40
ActsTrk::TrackFindingBaseAlg::seedCollectionStride
std::size_t seedCollectionStride() const
Definition: TrackFindingBaseAlg.h:329
ActsTrk::TrackFindingBaseAlg::m_seedLabels
Gaudi::Property< std::vector< std::string > > m_seedLabels
Definition: TrackFindingBaseAlg.h:149
ActsTrk::TrackFindingBaseAlg::m_maxPixelOutliers
Gaudi::Property< std::vector< std::size_t > > m_maxPixelOutliers
Definition: TrackFindingBaseAlg.h:142
ActsTrk::TrackFindingBaseAlg::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: TrackFindingBaseAlg.h:87
ActsTrk::TrackFindingBaseAlg::m_d0Max
Gaudi::Property< std::vector< double > > m_d0Max
Definition: TrackFindingBaseAlg.h:127
ActsTrk::TrackFindingBaseAlg::DetectorContextHolder
Definition: TrackFindingBaseAlg.h:61
ActsTrk::TrackFindingBaseAlg::BranchState::nStripOutliers
static constexpr Acts::ProxyAccessor< unsigned int > nStripOutliers
Definition: TrackFindingBaseAlg.h:296
plotBeamSpotVert.cuts
string cuts
Definition: plotBeamSpotVert.py:92
ActsTrk::TrackFindingBaseAlg::measurementType
static xAOD::UncalibMeasType measurementType(const detail::RecoTrackContainer::TrackStateProxy &trackState)
Definition: TrackFindingBaseAlg.cxx:262
xAOD::Other
@ Other
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
ActsTrk::TrackFindingBaseAlg::m_branchStopperAbsEtaMeasCut
Gaudi::Property< double > m_branchStopperAbsEtaMeasCut
Definition: TrackFindingBaseAlg.h:114
python.AtlRunQueryLib.options
options
Definition: AtlRunQueryLib.py:378
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
ActsTrk::detail::CKF_config::ckf
CKF ckf
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:44
detail::ul
unsigned long ul
Definition: PrimitiveHelpers.h:46
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
ActsTrk::TrackFindingBaseAlg::m_maxPropagationStep
Gaudi::Property< unsigned int > m_maxPropagationStep
Definition: TrackFindingBaseAlg.h:101
beamspotman.stat
stat
Definition: beamspotman.py:264
ActsTrk::TrackFindingBaseAlg::DetectorContextHolder::geometry
Acts::GeometryContext geometry
Definition: TrackFindingBaseAlg.h:62
ActsTrk::TrackFindingBaseAlg::addPixelStripCounts
static void addPixelStripCounts(detail::RecoTrackContainer &tracksContainer)
Definition: TrackFindingBaseAlg.cxx:379
ActsTrk::TrackFindingBaseAlg::m_numMeasurementsCutOff
Gaudi::Property< std::vector< size_t > > m_numMeasurementsCutOff
Definition: TrackFindingBaseAlg.h:106
ActsTrk::TrackFindingBaseAlg::m_stripCalibTool
ToolHandle< ActsTrk::IOnTrackCalibratorTool< detail::RecoTrackStateContainer > > m_stripCalibTool
Definition: TrackFindingBaseAlg.h:94
ActsTrk::TrackFindingBaseAlg::copyPixelStripCounts
static void copyPixelStripCounts(const detail::RecoTrackContainer::TrackProxy &track, const detail::RecoTrackContainer::TrackProxy &other)
Definition: TrackFindingBaseAlg.cxx:421
ActsTrk::TrackFindingBaseAlg::m_minStripHits
Gaudi::Property< std::vector< std::size_t > > m_minStripHits
Definition: TrackFindingBaseAlg.h:139
ActsTrk::TrackFindingBaseAlg::kNStoppedTracksMaxHoles
@ kNStoppedTracksMaxHoles
Definition: TrackFindingBaseAlg.h:163
ActsTrk::TrackFindingBaseAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: TrackFindingBaseAlg.cxx:170
ActsTrk::TrackFindingBaseAlg::m_useAbsEtaForStat
bool m_useAbsEtaForStat
Definition: TrackFindingBaseAlg.h:335
ActsTrk::TrackFindingBaseAlg::m_etaBins
Gaudi::Property< std::vector< double > > m_etaBins
Definition: TrackFindingBaseAlg.h:102
ActsTrk::TrackFindingBaseAlg::kNNoEstimatedParams
@ kNNoEstimatedParams
Definition: TrackFindingBaseAlg.h:159
TableUtils::makeLabelVector
std::vector< std::string > makeLabelVector(T_index n_entries, std::initializer_list< std::pair< T_index, T_string > > a_list)
Definition: TableUtils.h:275
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
ActsTrk::TrackFindingBaseAlg::kNTotalSeeds
@ kNTotalSeeds
Definition: TrackFindingBaseAlg.h:154
AtlasMeasurementSelector.h
ActsTrk::TrackFindingBaseAlg::m_extrapolationTool
ToolHandle< IActsExtrapolationTool > m_extrapolationTool
Definition: TrackFindingBaseAlg.h:88
ActsTrk::TrackFindingBaseAlg::TrackFindingBaseAlg
TrackFindingBaseAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TrackFindingBaseAlg.cxx:22
ActsTrk::TrackFindingBaseAlg::stopBranch
BranchStopperResult stopBranch(const detail::RecoTrackContainer::TrackProxy &track, const detail::RecoTrackContainer::TrackStateProxy &trackState, const Acts::TrackSelector::EtaBinnedConfig &trackSelectorCfg, const Acts::GeometryContext &tgContext, const detail::MeasurementIndex &measurementIndex, const std::size_t typeIndex, EventStats::value_type &event_stat_category_i) const
Branch stopper.
Definition: TrackFindingBaseAlg.cxx:279
ActsTrk::TrackFindingBaseAlg::kNStoppedTracksMaxEta
@ kNStoppedTracksMaxEta
Definition: TrackFindingBaseAlg.h:167
WriteCaloSwCorrections.cfg
cfg
Definition: WriteCaloSwCorrections.py:23
TableUtils::splitRatioDefinitionsAndLabels
std::tuple< std::vector< std::string >, std::vector< RatioDefinition > > splitRatioDefinitionsAndLabels(std::initializer_list< std::tuple< std::string, RatioDefinition > > a_ratio_list)
Definition: TableUtils.h:448
ActsTrk::detail::TrackFindingMeasurements::measurementRanges
const ActsTrk::detail::MeasurementRangeList & measurementRanges() const
ActsTrk::TrackFindingBaseAlg::getCuts
const Acts::TrackSelector::Config & getCuts(double eta) const
Retrieves track selector configuration for given eta value.
Definition: TrackFindingBaseAlg.cxx:226
ActsTrk::TrackFindingBaseAlg::initializeMeasurementSelector
StatusCode initializeMeasurementSelector()
Definition: TrackFindingBaseAlg.cxx:472
ActsTrk::TrackFindingBaseAlg::checkPixelStripCounts
void checkPixelStripCounts(const detail::RecoTrackContainer::TrackProxy &track) const
Definition: TrackFindingBaseAlg.cxx:432
ActsTrk::detail::Stepper
Acts::SympyStepper Stepper
Adapted from Acts Examples/Algorithms/TrackFinding/src/TrackFindingAlgorithmFunction....
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:30
ActsTrk::TrackFindingBaseAlg::m_minPixelHits
Gaudi::Property< std::vector< std::size_t > > m_minPixelHits
Definition: TrackFindingBaseAlg.h:138
TableUtils::makeEtaBinLabel
std::string makeEtaBinLabel(const std::vector< float > &eta_bins, std::size_t eta_bin_i, bool abs_eta=false)
Definition: TableUtils.h:514
ActsTrk::TrackFindingBaseAlg::BranchState::nStripHits
static constexpr Acts::ProxyAccessor< unsigned int > nStripHits
Definition: TrackFindingBaseAlg.h:292
ActsTrk::TrackFindingBaseAlg::CKF_pimpl
Definition: TrackFindingAlg.cxx:71
ActsTrk::TrackFindingBaseAlg::m_trackingGeometryTool
PublicToolHandle< ActsTrk::ITrackingGeometryTool > m_trackingGeometryTool
Definition: TrackFindingBaseAlg.h:89
ActsTrk::TrackFindingBaseAlg::BranchState::nPixelHoles
static constexpr Acts::ProxyAccessor< unsigned int > nPixelHoles
Definition: TrackFindingBaseAlg.h:293
ActsTrk::TrackFindingBaseAlg::nSeedCollections
std::size_t nSeedCollections() const
Definition: TrackFindingBaseAlg.h:326
ActsTrk::TrackFindingBaseAlg::selectPixelStripCounts
std::array< bool, 3 > selectPixelStripCounts(const detail::RecoTrackContainer::TrackProxy &track, double eta) const
Definition: TrackFindingBaseAlg.cxx:449
FitterHelperFunctions.h
InDetDD::other
@ other
Definition: InDetDD_Defs.h:16
ActsTrk::detail::Propagator
Acts::Propagator< Stepper, Navigator > Propagator
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:32
python.compareTCTs.ratio
ratio
Definition: compareTCTs.py:294
ActsTrk::TrackFindingBaseAlg::m_ptMin
Gaudi::Property< std::vector< double > > m_ptMin
Definition: TrackFindingBaseAlg.h:124
ActsTrk::TrackFindingBaseAlg::m_ptMax
Gaudi::Property< std::vector< double > > m_ptMax
Definition: TrackFindingBaseAlg.h:125
ActsTrk::TrackFindingBaseAlg::kNDuplicateSeeds
@ kNDuplicateSeeds
Definition: TrackFindingBaseAlg.h:158
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.Constants.INFO
int INFO
Definition: Control/AthenaCommon/python/Constants.py:15
ActsTrk::TrackFindingBaseAlg::m_absEtaMin
Gaudi::Property< double > m_absEtaMin
Definition: TrackFindingBaseAlg.h:122
ActsTrk::TrackFindingBaseAlg::kNTotalSharedHits
@ kNTotalSharedHits
Definition: TrackFindingBaseAlg.h:168
ActsTrk::TrackFindingBaseAlg::m_logger
std::unique_ptr< const Acts::Logger > m_logger
logging instance
Definition: TrackFindingBaseAlg.h:319
ActsTrk::TrackFindingBaseAlg::m_ptMinMeasurements
Gaudi::Property< std::vector< std::size_t > > m_ptMinMeasurements
Definition: TrackFindingBaseAlg.h:107
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
ActsTrk::TrackFindingBaseAlg::m_trackStatePrinter
ToolHandle< ActsTrk::TrackStatePrinterTool > m_trackStatePrinter
Definition: TrackFindingBaseAlg.h:90
ActsTrk::TrackFindingBaseAlg::copyStats
void copyStats(const EventStats &event_stat) const
Definition: TrackFindingBaseAlg.cxx:519
ActsTrk::TrackFindingBaseAlg::m_measurementSelectorConfig
struct ActsTrk::TrackFindingBaseAlg::MeasurementSelectorConfig m_measurementSelectorConfig
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
xAOD::UncalibMeasType
UncalibMeasType
Define the type of the uncalibrated measurement.
Definition: MeasurementDefs.h:25
ActsTrk::TrackFindingBaseAlg::MeasurementSelectorConfig::m_etaBins
std::vector< float > m_etaBins
Definition: TrackFindingBaseAlg.h:58
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
ActsTrk::TrackFindingBaseAlg::m_statEtaBins
Gaudi::Property< std::vector< float > > m_statEtaBins
Definition: TrackFindingBaseAlg.h:148
ActsTrk::TrackFindingBaseAlg::m_maxStripOutliers
Gaudi::Property< std::vector< std::size_t > > m_maxStripOutliers
Definition: TrackFindingBaseAlg.h:143
ActsTrk::TrackFindingBaseAlg::m_fitterTool
ToolHandle< ActsTrk::IFitterTool > m_fitterTool
Definition: TrackFindingBaseAlg.h:92
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
ActsTrk::TrackFindingBaseAlg::kNSelectedTracks
@ kNSelectedTracks
Definition: TrackFindingBaseAlg.h:162
ActsTrk::TrackFindingBaseAlg::kNoTrack
@ kNoTrack
Definition: TrackFindingBaseAlg.h:157
ActsTrk::TrackFindingBaseAlg::m_trackFinder
std::unique_ptr< CKF_pimpl > m_trackFinder
Definition: TrackFindingBaseAlg.h:81
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MSTrackingVolumeBuilder.cxx:24
ActsTrk::detail::CKF
Acts::CombinatorialKalmanFilter< Propagator, RecoTrackContainer > CKF
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:33
ActsTrk::TrackFindingBaseAlg::~TrackFindingBaseAlg
~TrackFindingBaseAlg()
ActsTrk::detail::xAODUncalibMeasSurfAcc
Helper class to access the Acts::surface associated with an Uncalibrated xAOD measurement.
Definition: xAODUncalibMeasSurfAcc.h:22
TableUtils.h
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
TableUtils::makeRatioDefinition
std::tuple< std::string, RatioDefinition > makeRatioDefinition(std::string &&name, std::vector< SummandDefinition > &&numerator, std::vector< SummandDefinition > &&denominator)
Definition: TableUtils.h:438
ActsTrk::TrackFindingBaseAlg::initPixelStripCounts
static void initPixelStripCounts(const detail::RecoTrackContainer::TrackProxy &track)
Definition: TrackFindingBaseAlg.cxx:389
TableUtils::ratioStride
constexpr std::size_t ratioStride([[maybe_unused]] const std::size_t categories, [[maybe_unused]] const std::size_t sub_categories, [[maybe_unused]] const std::vector< RatioDefinition > &ratio_def)
Definition: TableUtils.h:473
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
TableUtils::computeRatios
std::vector< float > computeRatios(const std::vector< RatioDefinition > &ratio_def, const std::size_t categories, const std::size_t sub_categories, const std::vector< std::size_t > &counter)
Definition: TableUtils.cxx:21
TableUtils::defineSummand
SummandDefinition defineSummand(T counter_idx, int multiplier)
Definition: TableUtils.h:402
Logger.h
ActsTrk::TrackFindingBaseAlg::m_z0Min
Gaudi::Property< std::vector< double > > m_z0Min
Definition: TrackFindingBaseAlg.h:128
ActsTrk::TrackFindingBaseAlg::logger
const Acts::Logger & logger() const
Private access to the logger.
Definition: TrackFindingBaseAlg.h:313
ActsTrk::detail::CKF_config::ckfExtensions
Acts::CombinatorialKalmanFilterExtensions< RecoTrackContainer > ckfExtensions
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:46
xAOD::UncalibMeasType::PixelClusterType
@ PixelClusterType
ActsTrk::TrackFindingBaseAlg::m_doTwoWay
Gaudi::Property< bool > m_doTwoWay
Definition: TrackFindingBaseAlg.h:110
ActsTrk::TrackFindingBaseAlg::kNRejectedRefinedSeeds
@ kNRejectedRefinedSeeds
Definition: TrackFindingBaseAlg.h:161