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);
36  ATH_MSG_DEBUG(" " << m_addCounts);
38  ATH_MSG_DEBUG(" " << m_doTwoWay);
39  ATH_MSG_DEBUG(" " << m_phiMin);
40  ATH_MSG_DEBUG(" " << m_phiMax);
41  ATH_MSG_DEBUG(" " << m_etaMin);
42  ATH_MSG_DEBUG(" " << m_etaMax);
43  ATH_MSG_DEBUG(" " << m_absEtaMin);
44  ATH_MSG_DEBUG(" " << m_absEtaMax);
45  ATH_MSG_DEBUG(" " << m_ptMin);
46  ATH_MSG_DEBUG(" " << m_ptMax);
47  ATH_MSG_DEBUG(" " << m_d0Min);
48  ATH_MSG_DEBUG(" " << m_d0Max);
49  ATH_MSG_DEBUG(" " << m_z0Min);
50  ATH_MSG_DEBUG(" " << m_z0Max);
54  ATH_MSG_DEBUG(" " << m_maxHoles);
61  ATH_MSG_DEBUG(" " << m_maxChi2);
67 
68  m_logger = makeActsAthenaLogger(this, "Acts");
69 
70  // Read and Write handles
73 
74  ATH_CHECK(m_monTool.retrieve(EnableTool{not m_monTool.empty()}));
76  ATH_CHECK(m_extrapolationTool.retrieve());
77  ATH_CHECK(m_trackStatePrinter.retrieve(EnableTool{not m_trackStatePrinter.empty()}));
78  ATH_CHECK(m_ATLASConverterTool.retrieve());
79  ATH_CHECK(m_fitterTool.retrieve());
80  ATH_CHECK(m_pixelCalibTool.retrieve(EnableTool{not m_pixelCalibTool.empty()}));
81  ATH_CHECK(m_stripCalibTool.retrieve(EnableTool{not m_stripCalibTool.empty()}));
82  ATH_CHECK(m_hgtdCalibTool.retrieve(EnableTool{not m_hgtdCalibTool.empty()}));
83 
84  auto magneticField = std::make_unique<ATLASMagneticFieldWrapper>();
85  auto trackingGeometry = m_trackingGeometryTool->trackingGeometry();
86 
87  detail::Stepper stepper(std::move(magneticField));
88  detail::Navigator::Config config{trackingGeometry};
89  config.resolvePassive = false;
90  config.resolveMaterial = true;
91  config.resolveSensitive = true;
92  detail::Navigator navigator(config, logger().cloneWithSuffix("Navigator"));
93  detail::Propagator propagator(std::move(stepper), std::move(navigator), logger().cloneWithSuffix("Prop"));
94 
95  // Using the CKF propagator as extrapolator
96  detail::Extrapolator extrapolator = propagator;
97 
98  // m_etaBins (from flags.Tracking.ActiveConfig.etaBins) includes a dummy first and last bin, which we ignore
99  std::vector<double> absEtaEdges;
100  if (m_etaBins.size() <= 2)
101  {
102  absEtaEdges.reserve(2ul);
103  absEtaEdges.push_back(0.0);
104  absEtaEdges.push_back(std::numeric_limits<double>::infinity());
105  }
106  else
107  {
108  absEtaEdges.reserve(m_etaBins.size());
109  absEtaEdges.push_back(m_absEtaMin);
110  absEtaEdges.insert(absEtaEdges.end(), m_etaBins.begin() + 1, m_etaBins.end() - 1);
111  absEtaEdges.push_back(m_absEtaMax);
112  }
113 
114  auto setCut = [](auto &cfgVal, const auto &cuts, size_t ind) -> void
115  {
116  if (cuts.empty())
117  return;
118  cfgVal = (ind < cuts.size()) ? cuts[ind] : cuts[cuts.size() - 1];
119  };
120 
121  Acts::TrackSelector::EtaBinnedConfig trackSelectorCfg{std::move(absEtaEdges)};
122  if (m_etaBins.size() <= 2)
123  {
124  assert(trackSelectorCfg.cutSets.size() == 1);
125  trackSelectorCfg.cutSets[0].absEtaMin = m_absEtaMin;
126  trackSelectorCfg.cutSets[0].absEtaMax = m_absEtaMax;
127  }
128  size_t cutIndex = 0;
129  for (auto &cfg : trackSelectorCfg.cutSets)
130  {
131  setCut(cfg.phiMin, m_phiMin, cutIndex);
132  setCut(cfg.phiMax, m_phiMax, cutIndex);
133  setCut(cfg.etaMin, m_etaMin, cutIndex);
134  setCut(cfg.etaMax, m_etaMax, cutIndex);
135  setCut(cfg.ptMin, m_ptMin, cutIndex);
136  setCut(cfg.ptMax, m_ptMax, cutIndex);
137  setCut(cfg.loc0Min, m_d0Min, cutIndex);
138  setCut(cfg.loc0Max, m_d0Max, cutIndex);
139  setCut(cfg.loc1Min, m_z0Min, cutIndex);
140  setCut(cfg.loc1Max, m_z0Max, cutIndex);
141  setCut(cfg.minMeasurements, m_minMeasurements, cutIndex);
142  setCut(cfg.maxHoles, m_maxHoles, cutIndex);
143  setCut(cfg.maxOutliers, m_maxOutliers, cutIndex);
144  setCut(cfg.maxSharedHits, m_maxSharedHits, cutIndex);
145  setCut(cfg.maxChi2, m_maxChi2, cutIndex);
146  ++cutIndex;
147  }
148 
149  ATH_MSG_DEBUG(trackSelectorCfg);
150 
151  // initializer measurement selector and connect it to the delegates of the track finder optins
153 
154  detail::CKF_config ckfConfig{
155  std::move(extrapolator),
156  detail::CKF{std::move(propagator), logger().cloneWithSuffix("CKF")},
157  {},
158  Acts::TrackSelector{trackSelectorCfg}};
159 
160  m_trackFinder = std::make_unique<CKF_pimpl>(std::move(ckfConfig));
161 
162  trackFinder().ckfExtensions.updater.connect<&ActsTrk::detail::FitterHelperFunctions::gainMatrixUpdate<detail::RecoTrackStateContainer>>();
163 
165 
166  initStatTables();
167 
168  return StatusCode::SUCCESS;
169  }
170 
171  StatusCode TrackFindingBaseAlg::execute(const EventContext &) const {
172  ATH_MSG_FATAL("execute() method from the base class was called! Implement proper execute() method in the derived class!");
173 
174  return StatusCode::FAILURE;
175  }
176 
178  printStatTables();
179 
180  return StatusCode::SUCCESS;
181  }
182 
183  std::unique_ptr<ActsTrk::IMeasurementSelector> TrackFindingBaseAlg::setMeasurementSelector(
184  const detail::TrackFindingMeasurements &measurements,
185  TrackFinderOptions &options) const {
186 
187  std::unique_ptr<ActsTrk::IMeasurementSelector> measurementSelector = ActsTrk::detail::getMeasurementSelector(
188  m_pixelCalibTool.isEnabled() ? &(*m_pixelCalibTool) : nullptr,
189  m_stripCalibTool.isEnabled() ? &(*m_stripCalibTool) : nullptr,
190  m_hgtdCalibTool.isEnabled() ? &(*m_hgtdCalibTool) : nullptr,
191  measurements.measurementRanges(),
194  m_numMeasurementsCutOff.value());
195 
196  measurementSelector->connect(&options.extensions.createTrackStates);
197 
198  return measurementSelector;
199  }
200 
202  const DetectorContextHolder &detContext,
203  const detail::TrackFindingMeasurements &measurements,
204  const Acts::PerigeeSurface* pSurface) const {
205  Acts::PropagatorPlainOptions plainOptions{detContext.geometry, detContext.magField};
206  plainOptions.maxSteps = m_maxPropagationStep;
207  plainOptions.direction = Acts::Direction::Forward();
208  plainOptions.endOfWorldVolumeIds = m_endOfWorldVolumeIds;
209 
210  // Set the CombinatorialKalmanFilter options
211  TrackFinderOptions options(detContext.geometry, detContext.magField, detContext.calib,
212  trackFinder().ckfExtensions, plainOptions, pSurface);
213 
214  std::unique_ptr<ActsTrk::IMeasurementSelector> measurementSelector = setMeasurementSelector(measurements, options);
215 
216  Acts::PropagatorPlainOptions plainSecondOptions{detContext.geometry, detContext.magField};
217  plainSecondOptions.maxSteps = m_maxPropagationStep;
218  plainSecondOptions.direction = plainOptions.direction.invert();
219 
220  TrackFinderOptions secondOptions(detContext.geometry, detContext.magField, detContext.calib,
221  options.extensions, plainSecondOptions, pSurface);
222  secondOptions.targetSurface = pSurface;
223  secondOptions.skipPrePropagationUpdate = true;
224 
225  return {std::move(options), std::move(secondOptions), std::move(measurementSelector)};
226  };
227 
228  const Acts::TrackSelector::Config& TrackFindingBaseAlg::getCuts (double eta) const {
229  const auto &trackSelectorCfg = trackFinder().trackSelector.config();
230  // return the last bin for |eta|>=4 or nan
231  return (!(std::abs(eta) < trackSelectorCfg.absEtaEdges.back())) ? trackSelectorCfg.cutSets.back()
232  : (std::abs(eta) < trackSelectorCfg.absEtaEdges.front()) ? trackSelectorCfg.cutSets.front()
233  : trackSelectorCfg.getCuts(eta);
234  };
235 
236  std::vector<typename detail::RecoTrackContainer::TrackProxy>
238  const TrkProxy &trackProxy,
239  detail::RecoTrackContainer &tracksContainerTemp,
240  const TrackFinderOptions &options) const {
241  if (not m_doTwoWay) return {};
242 
243  // Create initial parameters for the propagation
244  Acts::BoundTrackParameters secondInitialParameters = trackProxy.createParametersFromState(detail::RecoConstTrackStateContainerProxy{firstMeasurement});
245  if (!secondInitialParameters.referenceSurface().insideBounds(secondInitialParameters.localPosition())) { // #3751
246  return {};
247  }
248 
249  auto rootBranch = tracksContainerTemp.makeTrack();
250  rootBranch.copyFromWithoutStates(trackProxy); // #3534
251 
252  // perform track finding
253  auto secondResult =
254  trackFinder().ckf.findTracks(secondInitialParameters, options, tracksContainerTemp, rootBranch);
255  if (not secondResult.ok()) {
256  return {};
257  }
258  return secondResult.value();
259  }
260 
261  xAOD::UncalibMeasType TrackFindingBaseAlg::measurementType (const detail::RecoTrackContainer::TrackStateProxy &trackState) {
262  if (trackState.hasReferenceSurface()) {
263  if (const auto *actsDetElem = dynamic_cast<const IDetectorElementBase *>(trackState.referenceSurface().associatedDetectorElement())) {
264  switch (actsDetElem->detectorType()) {
265  case DetectorType::Pixel:
267  case DetectorType::Sct:
269  case DetectorType::Hgtd:
271  default:
272  break;
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_addCounts) {
288  updateCounts(track, trackState.typeFlags(),
289  measurementType(trackState));
290  if (m_checkCounts) {
292  }
293  }
294 
295  if (m_trackStatePrinter.isSet()) {
296  m_trackStatePrinter->printTrackState(tgContext, trackState,
297  measurementIndex, true);
298  }
299 
300  if (!m_doBranchStopper) {
301  return BranchStopperResult::Continue;
302  }
303 
304  const auto &parameters = trackState.hasFiltered() ? trackState.filtered()
305  : trackState.predicted();
306  double eta = -std::log(std::tan(0.5 * parameters[Acts::eBoundTheta]));
307  const auto &cutSet = getCuts(eta);
308 
309  if (typeIndex < m_ptMinMeasurements.size() &&
310  !(track.nMeasurements() < m_ptMinMeasurements[typeIndex])) {
311  double pT = std::sin(parameters[Acts::eBoundTheta]) /
312  parameters[Acts::eBoundQOverP];
313  if (std::abs(pT) < cutSet.ptMin * m_branchStopperPtMinFactor) {
314  ++event_stat_category_i[kNStoppedTracksMinPt];
315  ATH_MSG_DEBUG("CkfBranchStopper: drop branch with q*pT="
316  << pT << " after " << track.nMeasurements()
317  << " measurements");
318  return BranchStopperResult::StopAndDrop;
319  }
320  }
321 
322  if (typeIndex < m_absEtaMaxMeasurements.size() &&
323  !(track.nMeasurements() < m_absEtaMaxMeasurements[typeIndex]) &&
324  !(std::abs(eta) < trackSelectorCfg.absEtaEdges.back() +
326  ++event_stat_category_i[kNStoppedTracksMaxEta];
327  ATH_MSG_DEBUG("CkfBranchStopper: drop branch with eta="
328  << eta << " after " << track.nMeasurements()
329  << " measurements");
330  return BranchStopperResult::StopAndDrop;
331  }
332 
333 
334  // In the pixel endcap regions relax the requirement for minMeasurements before cutting the branch off
335  auto minMeasurementsBranchStop = std::abs(eta) > m_branchStopperAbsEtaMeasCut ? cutSet.minMeasurements - m_branchStopperMeasCutReduce : cutSet.minMeasurements;
336  bool enoughMeasurements = (track.nMeasurements() >= minMeasurementsBranchStop);
337  bool tooManyHoles = (track.nHoles() > cutSet.maxHoles);
338  bool tooManyOutliers = (track.nOutliers() > cutSet.maxOutliers);
339 
340  if (m_addCounts) {
341  auto [enoughMeasurementsPS, tooManyHolesPS, tooManyOutliersPS] =
343  enoughMeasurements = enoughMeasurements && enoughMeasurementsPS;
344  tooManyHoles = tooManyHoles || tooManyHolesPS;
345  tooManyOutliers = tooManyOutliers || tooManyOutliersPS;
346  }
347 
348  if (!(tooManyHoles || tooManyOutliers)) {
349  return BranchStopperResult::Continue;
350  }
351 
352  if (!enoughMeasurements) {
353  ++event_stat_category_i[kNStoppedTracksMaxHoles];
354  }
355 
356  if (m_addCounts) {
357  ATH_MSG_DEBUG("CkfBranchStopper: stop and "
358  << (enoughMeasurements ? "keep" : "drop")
359  << " branch with nHoles=" << track.nHoles() << " ("
360  << s_branchState.nPixelHoles(track) << " pixel+"
361  << s_branchState.nStripHoles(track) << " strip+"
363  << " hgtd), nOutliers=" << track.nOutliers() << " ("
367  << "), nMeasurements=" << track.nMeasurements() << " ("
368  << s_branchState.nPixelHits(track) << "+"
369  << s_branchState.nStripHits(track) << "+"
370  << s_branchState.nHgtdHits(track) << ")");
371  } else {
372  ATH_MSG_DEBUG("CkfBranchStopper: stop and "
373  << (enoughMeasurements ? "keep" : "drop")
374  << " branch with nHoles=" << track.nHoles()
375  << ", nOutliers=" << track.nOutliers()
376  << ", nMeasurements=" << track.nMeasurements());
377  }
378 
379  return enoughMeasurements ? BranchStopperResult::StopAndKeep
380  : BranchStopperResult::StopAndDrop;
381  }
382 
383 
385  {
386  tracksContainer.addColumn<unsigned int>("nPixelHits");
387  tracksContainer.addColumn<unsigned int>("nStripHits");
388  tracksContainer.addColumn<unsigned int>("nHgtdHits");
389  tracksContainer.addColumn<unsigned int>("nPixelHoles");
390  tracksContainer.addColumn<unsigned int>("nStripHoles");
391  tracksContainer.addColumn<unsigned int>("nHgtdHoles");
392  tracksContainer.addColumn<unsigned int>("nPixelOutliers");
393  tracksContainer.addColumn<unsigned int>("nStripOutliers");
394  tracksContainer.addColumn<unsigned int>("nHgtdOutliers");
395  }
396 
397  void TrackFindingBaseAlg::initCounts(const detail::RecoTrackContainer::TrackProxy &track)
398  {
408  }
409 
411  const detail::RecoTrackContainer::TrackProxy &track,
412  Acts::ConstTrackStateType typeFlags, xAOD::UncalibMeasType detType) {
414  if (typeFlags.test(Acts::TrackStateFlag::HoleFlag)) {
416  } else if (typeFlags.test(Acts::TrackStateFlag::OutlierFlag)) {
418  } else if (typeFlags.test(Acts::TrackStateFlag::MeasurementFlag)) {
420  }
421  } else if (detType == xAOD::UncalibMeasType::StripClusterType) {
422  if (typeFlags.test(Acts::TrackStateFlag::HoleFlag)) {
424  } else if (typeFlags.test(Acts::TrackStateFlag::OutlierFlag)) {
426  } else if (typeFlags.test(Acts::TrackStateFlag::MeasurementFlag)) {
428  }
429  } else if (detType == xAOD::UncalibMeasType::HGTDClusterType) {
430  if (typeFlags.test(Acts::TrackStateFlag::HoleFlag)) {
432  } else if (typeFlags.test(Acts::TrackStateFlag::OutlierFlag)) {
434  } else if (typeFlags.test(Acts::TrackStateFlag::MeasurementFlag)) {
436  }
437  }
438  }
439 
440  void TrackFindingBaseAlg::checkCounts(const detail::RecoTrackContainer::TrackProxy &track) const {
441  // This check will fail if there are other types (HGTD, MS?) of hits, holes, or outliers.
442  // The check can be removed when it is no longer appropriate.
444  ATH_MSG_WARNING("mismatched hit count: total (" << track.nMeasurements()
445  << ") != pixel (" << s_branchState.nPixelHits(track)
446  << ") + strip (" << s_branchState.nStripHits(track)
447  << ") + hgtd (" << s_branchState.nHgtdHits(track)
448  << ")");
450  ATH_MSG_WARNING("mismatched hole count: total (" << track.nHoles()
451  << ") < pixel (" << s_branchState.nPixelHoles(track)
452  << ") + strip (" << s_branchState.nStripHoles(track)
453  << ") + hgtd (" << s_branchState.nHgtdHoles(track)
454  << ")");
456  ATH_MSG_WARNING("mismatched outlier count: total (" << track.nOutliers()
457  << ") != pixel (" << s_branchState.nPixelOutliers(track)
458  << ") + strip (" << s_branchState.nStripOutliers(track)
459  << ") + hgtd (" << s_branchState.nHgtdOutliers(track)
460  << ")");
461  };
462 
463  std::array<bool, 3> TrackFindingBaseAlg::selectCounts(const detail::RecoTrackContainer::TrackProxy &track, double eta) const {
464  bool enoughMeasurements = true, tooManyHoles = false, tooManyOutliers = false;
465  const auto &trackSelectorCfg = trackFinder().trackSelector.config();
466  std::size_t etaBin = (std::abs(eta) < trackSelectorCfg.absEtaEdges.front()) ? 0
467  : (std::abs(eta) >= trackSelectorCfg.absEtaEdges.back()) ? trackSelectorCfg.absEtaEdges.size() - 1
468  : trackSelectorCfg.binIndex(eta);
469  auto cutMin = [etaBin](std::size_t val, const std::vector<std::size_t> &cutSet) {
470  return !cutSet.empty() && (val < (etaBin < cutSet.size() ? cutSet[etaBin] : cutSet.back()));
471  };
472  auto cutMax = [etaBin](std::size_t val, const std::vector<std::size_t> &cutSet) {
473  return !cutSet.empty() && (val > (etaBin < cutSet.size() ? cutSet[etaBin] : cutSet.back()));
474  };
475 
476  enoughMeasurements = enoughMeasurements && !cutMin(s_branchState.nPixelHits(track), m_minPixelHits);
477  enoughMeasurements = enoughMeasurements && !cutMin(s_branchState.nStripHits(track), m_minStripHits);
478  enoughMeasurements = enoughMeasurements && !cutMin(s_branchState.nHgtdHits(track), m_minHgtdHits);
479  tooManyHoles = tooManyHoles || cutMax(s_branchState.nPixelHoles(track), m_maxPixelHoles);
480  tooManyHoles = tooManyHoles || cutMax(s_branchState.nStripHoles(track), m_maxStripHoles);
481  tooManyHoles = tooManyHoles || cutMax(s_branchState.nHgtdHoles(track), m_maxHgtdHoles);
482  tooManyOutliers = tooManyOutliers || cutMax(s_branchState.nPixelOutliers(track), m_maxPixelOutliers);
483  tooManyOutliers = tooManyOutliers || cutMax(s_branchState.nStripOutliers(track), m_maxStripOutliers);
484  tooManyOutliers = tooManyOutliers || cutMax(s_branchState.nHgtdOutliers(track), m_maxHgtdOutliers);
485 
486  return {enoughMeasurements, tooManyHoles, tooManyOutliers};
487  }
488 
490  std::vector<std::pair<float, float> > &chi2CutOffOutlier = m_measurementSelectorConfig.m_chi2CutOffOutlier;
491  chi2CutOffOutlier .reserve( m_chi2CutOff.size() );
492  if (!m_chi2OutlierCutOff.empty()) {
493  if (m_chi2CutOff.size() != m_chi2OutlierCutOff.size()) {
494  ATH_MSG_ERROR("Outlier chi2 cut off provided but number of elements does not agree with"
495  " chi2 cut off for measurements which however is required: "
496  << m_chi2CutOff.size() << " != " << m_chi2OutlierCutOff.size());
497  return StatusCode::FAILURE;
498  }
499  }
500  unsigned int idx=0;
501  for (const auto &elm : m_chi2CutOff) {
502  chi2CutOffOutlier.push_back( std::make_pair(static_cast<float>(elm),
503  idx < m_chi2OutlierCutOff.size()
504  ? static_cast<float>(m_chi2OutlierCutOff[idx])
506  ++idx;
507  }
508  if (m_etaBins.size() > 2) {
509  std::vector<float> &etaBinsf = m_measurementSelectorConfig.m_etaBins;
510  etaBinsf.assign(m_etaBins.begin() + 1, m_etaBins.end() - 1);
511  }
512 
513  return /*m_measurementSelector ?*/ StatusCode::SUCCESS /*: StatusCode::FAILURE*/;
514  }
515 
516  // === Statistics printout =================================================
517 
519  if (!m_statEtaBins.empty())
520  {
521  m_useAbsEtaForStat = (m_statEtaBins[0] > 0.);
522  float last_eta = m_statEtaBins[0];
523  for (float eta : m_statEtaBins)
524  {
525  if (eta < last_eta)
526  {
527  ATH_MSG_FATAL("Eta bins for statistics counter not in ascending order.");
528  }
529  last_eta = eta;
530  }
531  }
532  m_stat.resize(nSeedCollections() * seedCollectionStride());
533  }
534 
535  // copy statistics
536  void TrackFindingBaseAlg::copyStats(const EventStats &event_stat) const {
537  std::lock_guard<std::mutex> lock(m_mutex);
538  std::size_t category_i = 0;
539  for (const std::array<unsigned int, kNStat> &src_stat : event_stat)
540  {
541  std::array<std::size_t, kNStat> &dest_stat = m_stat[category_i++];
542  for (std::size_t i = 0; i < src_stat.size(); ++i)
543  {
544  assert(i < dest_stat.size());
545  dest_stat[i] += src_stat[i];
546  }
547  }
548  }
549 
550  // print statistics
552  if (msgLvl(MSG::INFO))
553  {
554  std::vector<std::string> stat_labels =
556  {
557  std::make_pair(kNTotalSeeds, "Input seeds"),
558  std::make_pair(kNoTrackParam, "No track parameters"),
559  std::make_pair(kNUsedSeeds, "Used seeds"),
560  std::make_pair(kNoTrack, "Cannot find track"),
561  std::make_pair(kNDuplicateSeeds, "Duplicate seeds"),
562  std::make_pair(kNNoEstimatedParams, "Initial param estimation failed"),
563  std::make_pair(kNRejectedRefinedSeeds, "Rejected refined parameters"),
564  std::make_pair(kNOutputTracks, "CKF tracks"),
565  std::make_pair(kNSelectedTracks, "selected tracks"),
566  std::make_pair(kNStoppedTracksMaxHoles, "Stopped tracks reaching max holes"),
567  std::make_pair(kMultipleBranches, "Seeds with more than one branch"),
568  std::make_pair(kNoSecond, "Tracks failing second CKF"),
569  std::make_pair(kNStoppedTracksMinPt, "Stopped tracks below pT cut"),
570  std::make_pair(kNStoppedTracksMaxEta, "Stopped tracks above max eta"),
571  std::make_pair(kNTotalSharedHits, "Total shared hits"),
572  std::make_pair(kNForcedSeedMeasurements, "Total forced measurements")
573  });
574  assert(stat_labels.size() == kNStat);
575  std::vector<std::string> categories;
576  categories.reserve(m_seedLabels.size() + 1);
577  categories.insert(categories.end(), m_seedLabels.begin(), m_seedLabels.end());
578  categories.push_back("ALL");
579 
580  std::vector<std::string> eta_labels;
581  eta_labels.reserve(m_statEtaBins.size() + 2);
582  for (std::size_t eta_bin_i = 0; eta_bin_i < m_statEtaBins.size() + 2; ++eta_bin_i)
583  {
584  eta_labels.push_back(TableUtils::makeEtaBinLabel(m_statEtaBins, eta_bin_i, m_useAbsEtaForStat));
585  }
586 
587  // vector used as 3D array stat[ eta_bin ][ stat_i ][ seed_type]
588  // stat_i = [0, kNStat)
589  // eta_bin = [0, m_statEtaBins.size()+2 ); eta_bin == m_statEtaBinsSize()+1 means sum of all etaBins
590  // seed_type = [0, nSeedCollections()+1) seed_type == nSeedCollections() means sum of all seed collections
591  std::vector<std::size_t> stat =
592  TableUtils::createCounterArrayWithProjections<std::size_t>(nSeedCollections(),
593  m_statEtaBins.size() + 1,
594  m_stat);
595 
596  // the extra columns and rows for the projections are addeded internally:
597  std::size_t stat_stride =
599  m_statEtaBins.size() + 1,
600  kNStat);
601  std::size_t eta_stride =
603  m_statEtaBins.size() + 1,
604  kNStat);
605  std::stringstream table_out;
606 
607  if (m_dumpAllStatEtaBins.value())
608  {
609  // dump for each counter a table with one row per eta bin
610  std::size_t max_label_width = TableUtils::maxLabelWidth(stat_labels) + TableUtils::maxLabelWidth(eta_labels);
611  for (std::size_t stat_i = 0; stat_i < kNStat; ++stat_i)
612  {
613  std::size_t dest_idx_offset = stat_i * stat_stride;
614  table_out << makeTable(stat, dest_idx_offset, eta_stride,
615  eta_labels,
616  categories)
617  .columnWidth(10)
618  // only dump the footer for the last eta bin i.e. total
619  .dumpHeader(stat_i == 0)
620  .dumpFooter(stat_i + 1 == kNStat)
621  .separateLastRow(true) // separate the sum of all eta bins
622  .minLabelWidth(max_label_width)
623  .labelPrefix(stat_labels.at(stat_i));
624  }
625  }
626  else
627  {
628  // dump one table with one row per counter showing the total eta range
629  for (std::size_t eta_bin_i = (m_dumpAllStatEtaBins.value() ? 0 : m_statEtaBins.size() + 1);
630  eta_bin_i < m_statEtaBins.size() + 2;
631  ++eta_bin_i)
632  {
633  std::size_t dest_idx_offset = eta_bin_i * eta_stride;
634  table_out << makeTable(stat, dest_idx_offset, stat_stride,
635  stat_labels,
636  categories,
637  eta_labels.at(eta_bin_i))
638  .columnWidth(10)
639  // only dump the footer for the last eta bin i.e. total
640  .dumpFooter(!m_dumpAllStatEtaBins.value() || eta_bin_i == m_statEtaBins.size() + 1);
641  }
642  }
643  ATH_MSG_INFO("statistics:\n"
644  << table_out.str());
645  table_out.str("");
646 
647  // define retios first element numerator, second element denominator
648  // each element contains a vector of counter and a multiplier e.g. +- 1
649  // ratios are computed as (sum_i stat[stat_i] * multiplier_i ) / (sum_j stat[stat_j] * multiplier_j )
650  auto [ratio_labels, ratio_def] =
652  std::vector<TableUtils::SummandDefinition>{
656  // no track counted as used but want to include it as failed
658  }, // failed seeds i.e. seeds which are not duplicates but did not produce a track
659  std::vector<TableUtils::SummandDefinition>{TableUtils::defineSummand(kNTotalSeeds, 1)}),
661  TableUtils::defineSimpleRatio("Rejected refined params / seeds", kNRejectedRefinedSeeds, kNTotalSeeds),
663  TableUtils::defineSimpleRatio("selected tracks / used seeds", kNSelectedTracks, kNUsedSeeds),
664  TableUtils::defineSimpleRatio("branched tracks / used seeds", kMultipleBranches, kNUsedSeeds),
665  TableUtils::defineSimpleRatio("no 2nd CKF / CKF tracks", kNoSecond, kNOutputTracks),
666  TableUtils::defineSimpleRatio("shared hits / CKF tracks", kNTotalSharedHits, kNOutputTracks),
667  TableUtils::defineSimpleRatio("forced measurements / used seeds", kNForcedSeedMeasurements, kNUsedSeeds)});
668 
669  std::vector<float> ratio = TableUtils::computeRatios(ratio_def,
670  nSeedCollections() + 1,
671  m_statEtaBins.size() + 2,
672  stat);
673 
674  // the extra columns and rows for the projections are _not_ added internally
675  std::size_t ratio_stride = TableUtils::ratioStride(nSeedCollections() + 1,
676  m_statEtaBins.size() + 2,
677  ratio_def);
678  std::size_t ratio_eta_stride = TableUtils::subCategoryStride(nSeedCollections() + 1,
679  m_statEtaBins.size() + 2,
680  ratio_def);
681 
682  std::size_t max_label_width = TableUtils::maxLabelWidth(ratio_labels) + TableUtils::maxLabelWidth(eta_labels);
683  if (m_dumpAllStatEtaBins.value())
684  {
685  // show for each ratio a table with one row per eta bin
686  for (std::size_t ratio_i = 0; ratio_i < ratio_labels.size(); ++ratio_i)
687  {
688  table_out << makeTable(ratio,
689  ratio_i * ratio_stride,
690  ratio_eta_stride,
691  eta_labels,
692  categories)
693  .columnWidth(10)
694  // only dump the footer for the last eta bin i.e. total
695  .dumpHeader(ratio_i == 0)
696  .dumpFooter(ratio_i + 1 == ratio_labels.size())
697  .separateLastRow(true) // separate the sum of las
698  .minLabelWidth(max_label_width)
699  .labelPrefix(ratio_labels.at(ratio_i));
700  }
701  }
702  else
703  {
704  // dump one table with one row per ratio showing the total eta range
705  table_out << makeTable(ratio,
706  (m_statEtaBins.size() + 1) * ratio_eta_stride + 0 * ratio_stride,
707  ratio_stride,
708  ratio_labels,
709  categories)
710  .columnWidth(10)
711  // only dump the footer for the last eta bin i.e. total
712  .minLabelWidth(max_label_width)
713  .dumpFooter(false);
714 
715  // also dump a table for final tracks over seeds (ratio_i==3) showing one row per eta bin
716  eta_labels.erase(eta_labels.end() - 1); // drop last line of table which shows again all eta bins summed.
717  constexpr std::size_t ratio_i = 3;
718  table_out << makeTable(ratio,
719  ratio_i * ratio_stride,
720  ratio_eta_stride,
721  eta_labels,
722  categories)
723  .columnWidth(10)
724  .dumpHeader(false)
725  // only dump the footer for the last eta bin i.e. total
726  .dumpFooter(!m_dumpAllStatEtaBins.value() || ratio_i + 1 == ratio_labels.size())
727  .separateLastRow(false)
728  .minLabelWidth(max_label_width)
729  .labelPrefix(ratio_labels.at(ratio_i));
730  }
731 
732  ATH_MSG_INFO("Ratios:\n"
733  << table_out.str());
734  }
735  }
736 
737  std::size_t TrackFindingBaseAlg::getStatCategory(std::size_t seed_collection, float eta) const {
738  std::vector<float>::const_iterator bin_iter = std::upper_bound(m_statEtaBins.begin(),
739  m_statEtaBins.end(),
740  m_useAbsEtaForStat ? std::abs(eta) : eta);
741  std::size_t category_i = seed_collection * seedCollectionStride() + static_cast<std::size_t>(bin_iter - m_statEtaBins.begin());
742  assert(category_i < m_stat.size());
743  return category_i;
744  }
745 
746  std::size_t TrackFindingBaseAlg::computeStatSum(std::size_t seed_collection, EStat counter_i, const EventStats &stat) const {
747  std::size_t out = 0u;
748  for (std::size_t category_i = seed_collection * seedCollectionStride();
749  category_i < (seed_collection + 1) * seedCollectionStride();
750  ++category_i)
751  {
752  assert(category_i < stat.size());
753  out += stat[category_i][counter_i];
754  }
755  return out;
756  }
757 
758  bool TrackFindingBaseAlg::selectCountsFinal(const detail::RecoTrackContainer::TrackProxy &track) const {
759  if (not m_addCounts) return true;
760  double eta = -std::log(std::tan(0.5 * track.theta()));
761  auto [enoughMeasurementsPS, tooManyHolesPS, tooManyOutliersPS] = selectCounts(track, eta);
762  return enoughMeasurementsPS && !tooManyHolesPS && !tooManyOutliersPS;
763  }
764 
765 } // 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:302
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:237
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::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:174
xAOD::UncalibMeasType::HGTDClusterType
@ HGTDClusterType
ActsTrk::TrackFindingBaseAlg::EStat
EStat
Definition: TrackFindingBaseAlg.h:157
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:143
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:247
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:306
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
ActsTrk::detail::TrackFindingMeasurements
Definition: TrackFindingMeasurements.h:21
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::updateCounts
static void updateCounts(const detail::RecoTrackContainer::TrackProxy &track, Acts::ConstTrackStateType typeFlags, xAOD::UncalibMeasType detType)
Definition: TrackFindingBaseAlg.cxx:410
ActsTrk::TrackFindingBaseAlg::m_tracksBackendHandlesHelper
ActsTrk::MutableTrackContainerHandlesHelper m_tracksBackendHandlesHelper
Definition: TrackFindingBaseAlg.h:98
ActsTrk::TrackFindingBaseAlg::kNoSecond
@ kNoSecond
Definition: TrackFindingBaseAlg.h:169
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
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
ActsTrk::TrackFindingBaseAlg::m_addCounts
Gaudi::Property< bool > m_addCounts
Definition: TrackFindingBaseAlg.h:137
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:177
ActsTrk::TrackFindingBaseAlg::m_maxHgtdHoles
Gaudi::Property< std::vector< std::size_t > > m_maxHgtdHoles
Definition: TrackFindingBaseAlg.h:144
ActsTrk::TrackFindingBaseAlg::m_minHgtdHits
Gaudi::Property< std::vector< std::size_t > > m_minHgtdHits
Definition: TrackFindingBaseAlg.h:141
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:177
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:142
ActsTrk::TrackFindingBaseAlg::addCounts
static void addCounts(detail::RecoTrackContainer &tracksContainer)
Definition: TrackFindingBaseAlg.cxx:384
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:201
ActsTrk::TrackFindingBaseAlg::m_dumpAllStatEtaBins
Gaudi::Property< bool > m_dumpAllStatEtaBins
Definition: TrackFindingBaseAlg.h:154
ActsTrk::TrackFindingBaseAlg::BranchState::nHgtdHits
static constexpr Acts::ProxyAccessor< unsigned int > nHgtdHits
Definition: TrackFindingBaseAlg.h:298
ActsTrk::TrackFindingBaseAlg::m_maxChi2
Gaudi::Property< std::vector< double > > m_maxChi2
Definition: TrackFindingBaseAlg.h:135
ActsTrk::TrackFindingBaseAlg::m_extrapolationTool
ToolHandle< ActsTrk::IExtrapolationTool > m_extrapolationTool
Definition: TrackFindingBaseAlg.h:88
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:272
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:551
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:746
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:160
ActsTrk::TrackFindingBaseAlg::BranchState::nPixelHits
static constexpr Acts::ProxyAccessor< unsigned int > nPixelHits
Definition: TrackFindingBaseAlg.h:296
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:300
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
ActsTrk::TrackFindingBaseAlg::initStatTables
void initStatTables()
Definition: TrackFindingBaseAlg.cxx:518
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:168
ActsTrk::MutableTrackContainerHandlesHelper::initialize
StatusCode initialize(const std::string &prefix)
Sets up the handles.
Definition: TrackContainerHandlesHelper.cxx:47
ActsTrk::TrackFindingBaseAlg::kNoTrackParam
@ kNoTrackParam
Definition: TrackFindingBaseAlg.h:159
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:149
ActsTrk::TrackFindingBaseAlg::kNStoppedTracksMinPt
@ kNStoppedTracksMinPt
Definition: TrackFindingBaseAlg.h:170
ActsTrk::TrackFindingBaseAlg::getStatCategory
std::size_t getStatCategory(std::size_t seed_collection, float eta) const
Definition: TrackFindingBaseAlg.cxx:737
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::checkCounts
void checkCounts(const detail::RecoTrackContainer::TrackProxy &track) const
Definition: TrackFindingBaseAlg.cxx:440
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:183
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:17
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:164
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:335
ActsTrk::TrackFindingBaseAlg::m_seedLabels
Gaudi::Property< std::vector< std::string > > m_seedLabels
Definition: TrackFindingBaseAlg.h:153
ActsTrk::TrackFindingBaseAlg::m_maxPixelOutliers
Gaudi::Property< std::vector< std::size_t > > m_maxPixelOutliers
Definition: TrackFindingBaseAlg.h:145
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:303
plotBeamSpotVert.cuts
string cuts
Definition: plotBeamSpotVert.py:92
ActsTrk::TrackFindingBaseAlg::measurementType
static xAOD::UncalibMeasType measurementType(const detail::RecoTrackContainer::TrackStateProxy &trackState)
Definition: TrackFindingBaseAlg.cxx:261
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::selectCounts
std::array< bool, 3 > selectCounts(const detail::RecoTrackContainer::TrackProxy &track, double eta) const
Definition: TrackFindingBaseAlg.cxx:463
ActsTrk::TrackFindingBaseAlg::m_maxPropagationStep
Gaudi::Property< unsigned int > m_maxPropagationStep
Definition: TrackFindingBaseAlg.h:101
beamspotman.stat
stat
Definition: beamspotman.py:262
ActsTrk::TrackFindingBaseAlg::DetectorContextHolder::geometry
Acts::GeometryContext geometry
Definition: TrackFindingBaseAlg.h:62
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::m_minStripHits
Gaudi::Property< std::vector< std::size_t > > m_minStripHits
Definition: TrackFindingBaseAlg.h:140
ActsTrk::TrackFindingBaseAlg::kNStoppedTracksMaxHoles
@ kNStoppedTracksMaxHoles
Definition: TrackFindingBaseAlg.h:167
ActsTrk::TrackFindingBaseAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: TrackFindingBaseAlg.cxx:171
ActsTrk::TrackFindingBaseAlg::m_useAbsEtaForStat
bool m_useAbsEtaForStat
Definition: TrackFindingBaseAlg.h:341
ActsTrk::TrackFindingBaseAlg::m_etaBins
Gaudi::Property< std::vector< double > > m_etaBins
Definition: TrackFindingBaseAlg.h:102
ActsTrk::TrackFindingBaseAlg::kNNoEstimatedParams
@ kNNoEstimatedParams
Definition: TrackFindingBaseAlg.h:163
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
ActsTrk::detail::getMeasurementSelector
std::unique_ptr< ActsTrk::IMeasurementSelector > getMeasurementSelector(const ActsTrk::IOnBoundStateCalibratorTool *pixelOnTrackCalibratorTool, const ActsTrk::IOnBoundStateCalibratorTool *stripOnTrackCalibratorTool, const ActsTrk::IOnBoundStateCalibratorTool *hgtdOnTrackCalibratorTool, 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:404
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
ActsTrk::TrackFindingBaseAlg::kNTotalSeeds
@ kNTotalSeeds
Definition: TrackFindingBaseAlg.h:158
AtlasMeasurementSelector.h
ActsTrk::TrackFindingBaseAlg::selectCountsFinal
bool selectCountsFinal(const detail::RecoTrackContainer::TrackProxy &track) const
Definition: TrackFindingBaseAlg.cxx:758
ActsTrk::DetectorType::Hgtd
@ Hgtd
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:171
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::TrackFindingBaseAlg::getCuts
const Acts::TrackSelector::Config & getCuts(double eta) const
Retrieves track selector configuration for given eta value.
Definition: TrackFindingBaseAlg.cxx:228
ActsTrk::TrackFindingBaseAlg::initializeMeasurementSelector
StatusCode initializeMeasurementSelector()
Definition: TrackFindingBaseAlg.cxx:489
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::kNForcedSeedMeasurements
@ kNForcedSeedMeasurements
Definition: TrackFindingBaseAlg.h:173
ActsTrk::TrackFindingBaseAlg::m_minPixelHits
Gaudi::Property< std::vector< std::size_t > > m_minPixelHits
Definition: TrackFindingBaseAlg.h:139
ActsTrk::TrackFindingBaseAlg::m_checkCounts
Gaudi::Property< bool > m_checkCounts
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::detail::TrackFindingMeasurements::measurementRanges
const MeasurementRangeList & measurementRanges() const
ActsTrk::TrackFindingBaseAlg::BranchState::nStripHits
static constexpr Acts::ProxyAccessor< unsigned int > nStripHits
Definition: TrackFindingBaseAlg.h:297
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:299
ActsTrk::TrackFindingBaseAlg::nSeedCollections
std::size_t nSeedCollections() const
Definition: TrackFindingBaseAlg.h:332
FitterHelperFunctions.h
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:162
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:172
ActsTrk::TrackFindingBaseAlg::m_logger
std::unique_ptr< const Acts::Logger > m_logger
logging instance
Definition: TrackFindingBaseAlg.h:325
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:536
ActsTrk::TrackFindingBaseAlg::BranchState::nHgtdHoles
static constexpr Acts::ProxyAccessor< unsigned int > nHgtdHoles
Definition: TrackFindingBaseAlg.h:301
ActsTrk::TrackFindingBaseAlg::m_measurementSelectorConfig
struct ActsTrk::TrackFindingBaseAlg::MeasurementSelectorConfig m_measurementSelectorConfig
ActsTrk::TrackFindingBaseAlg::BranchState::nHgtdOutliers
static constexpr Acts::ProxyAccessor< unsigned int > nHgtdOutliers
Definition: TrackFindingBaseAlg.h:304
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:152
ActsTrk::TrackFindingBaseAlg::m_maxStripOutliers
Gaudi::Property< std::vector< std::size_t > > m_maxStripOutliers
Definition: TrackFindingBaseAlg.h:146
ActsTrk::TrackFindingBaseAlg::initCounts
static void initCounts(const detail::RecoTrackContainer::TrackProxy &track)
Definition: TrackFindingBaseAlg.cxx:397
ActsTrk::TrackFindingBaseAlg::m_fitterTool
ToolHandle< ActsTrk::IFitterTool > m_fitterTool
Definition: TrackFindingBaseAlg.h:92
ActsTrk::TrackFindingBaseAlg::m_maxHgtdOutliers
Gaudi::Property< std::vector< std::size_t > > m_maxHgtdOutliers
Definition: TrackFindingBaseAlg.h:147
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
ActsTrk::TrackFindingBaseAlg::kNSelectedTracks
@ kNSelectedTracks
Definition: TrackFindingBaseAlg.h:166
ActsTrk::TrackFindingBaseAlg::kNoTrack
@ kNoTrack
Definition: TrackFindingBaseAlg.h:161
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: MdtCalibInput.h:31
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
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:319
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:165