ATLAS Offline Software
TrackFindingAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 #include "src/TrackFindingAlg.h"
5 #include "Acts/Propagator/PropagatorOptions.hpp"
7 
8 // Athena
9 #include "AsgTools/ToolStore.h"
20 
21 // ACTS
22 #include "Acts/Definitions/Units.hpp"
23 #include "Acts/Geometry/TrackingGeometry.hpp"
24 #include "Acts/Geometry/GeometryIdentifier.hpp"
25 #include "Acts/MagneticField/MagneticFieldProvider.hpp"
26 #include "Acts/Surfaces/Surface.hpp"
27 #include "Acts/TrackFinding/MeasurementSelector.hpp"
28 #include "Acts/TrackFinding/CombinatorialKalmanFilter.hpp"
29 #include "Acts/Surfaces/PerigeeSurface.hpp"
30 #include "Acts/Utilities/TrackHelpers.hpp"
31 #include "Acts/TrackFitting/MbfSmoother.hpp"
32 
33 // ActsTrk
37 #include "ActsInterop/Logger.h"
38 #include "ActsInterop/TableUtils.h"
41 
42 // STL
43 #include <sstream>
44 #include <functional>
45 #include <tuple>
46 #include <utility>
47 #include <algorithm>
48 
49 namespace ActsTrk
50 {
52  {
53  };
54 
57 
59  ISvcLocator *pSvcLocator)
60  : AthReentrantAlgorithm(name, pSvcLocator)
61  {
62  }
63 
65 
66  // === initialize ==========================================================
67 
69  {
70  ATH_MSG_INFO("Initializing " << name() << " ... ");
71  ATH_MSG_DEBUG("Properties Summary:");
75  ATH_MSG_DEBUG(" " << m_etaBins);
82  ATH_MSG_DEBUG(" " << m_doTwoWay);
84  ATH_MSG_DEBUG(" " << m_phiMin);
85  ATH_MSG_DEBUG(" " << m_phiMax);
86  ATH_MSG_DEBUG(" " << m_etaMin);
87  ATH_MSG_DEBUG(" " << m_etaMax);
88  ATH_MSG_DEBUG(" " << m_absEtaMin);
89  ATH_MSG_DEBUG(" " << m_absEtaMax);
90  ATH_MSG_DEBUG(" " << m_ptMin);
91  ATH_MSG_DEBUG(" " << m_ptMax);
93  ATH_MSG_DEBUG(" " << m_maxHoles);
96  ATH_MSG_DEBUG(" " << m_maxChi2);
102 
103  // Read and Write handles
104  ATH_CHECK(m_seedContainerKeys.initialize());
110 
111  if (m_estimatedTrackParametersKeys.size() != m_seedLabels.size())
112  {
113  ATH_MSG_FATAL("There are " << m_seedLabels.size() << " SeedLabels, but " << m_estimatedTrackParametersKeys.size() << " EstimatedTrackParametersKeys");
114  return StatusCode::FAILURE;
115  }
116 
118  {
119  ATH_MSG_FATAL("There are " << m_estimatedTrackParametersKeys.size() << " EstimatedTrackParametersKeys, but " << m_seedContainerKeys.size() << " SeedContainerKeys");
120  return StatusCode::FAILURE;
121  }
122 
123  ATH_CHECK(m_monTool.retrieve(EnableTool{not m_monTool.empty()}));
124  ATH_CHECK(m_trackingGeometryTool.retrieve());
125  ATH_CHECK(m_extrapolationTool.retrieve());
126  ATH_CHECK(m_trackStatePrinter.retrieve(EnableTool{not m_trackStatePrinter.empty()}));
127  ATH_CHECK(m_fitterTool.retrieve());
128  ATH_CHECK(m_pixelCalibTool.retrieve(EnableTool{not m_pixelCalibTool.empty()}));
129  ATH_CHECK(m_stripCalibTool.retrieve(EnableTool{not m_stripCalibTool.empty()}));
130 
131  m_logger = makeActsAthenaLogger(this, "Acts");
132 
133  auto magneticField = std::make_unique<ATLASMagneticFieldWrapper>();
134  auto trackingGeometry = m_trackingGeometryTool->trackingGeometry();
135 
136  detail::Stepper stepper(std::move(magneticField));
137  detail::Navigator::Config cfg{trackingGeometry};
138  cfg.resolvePassive = false;
139  cfg.resolveMaterial = true;
140  cfg.resolveSensitive = true;
141  detail::Navigator navigator(cfg, logger().cloneWithSuffix("Navigator"));
142  detail::Propagator propagator(std::move(stepper), std::move(navigator), logger().cloneWithSuffix("Prop"));
143 
144  // Using the CKF propagator as extrapolator
145  detail::Extrapolator extrapolator = propagator;
146 
147  std::vector<double> etaBins;
148  // m_etaBins (from flags.Tracking.ActiveConfig.etaBins) includes a dummy first and last bin, which we ignore
149  if (m_etaBins.size() > 2) {
150  etaBins.assign(m_etaBins.begin() + 1, m_etaBins.end() - 1);
151  }
152  Acts::MeasurementSelectorCuts measurementSelectorCuts{etaBins};
153 
154  if (!m_chi2CutOff.empty())
155  measurementSelectorCuts.chi2CutOff = m_chi2CutOff;
156  if (!m_numMeasurementsCutOff.empty())
157  measurementSelectorCuts.numMeasurementsCutOff = m_numMeasurementsCutOff;
158 
159  Acts::MeasurementSelector::Config measurementSelectorCfg{{Acts::GeometryIdentifier(), std::move(measurementSelectorCuts)}};
160  Acts::MeasurementSelector measurementSelector(measurementSelectorCfg);
161 
162  std::vector<double> absEtaEdges;
163  absEtaEdges.reserve(etaBins.size() + 2);
164  if (etaBins.empty())
165  {
166  absEtaEdges.push_back(0.0);
167  absEtaEdges.push_back(std::numeric_limits<double>::infinity());
168  }
169  else
170  {
171  absEtaEdges.push_back(m_absEtaMin);
172  absEtaEdges.insert(absEtaEdges.end(), etaBins.begin(), etaBins.end());
173  absEtaEdges.push_back(m_absEtaMax);
174  }
175 
176  auto setCut = [](auto &cfgVal, const auto &cuts, size_t ind) -> void
177  {
178  if (cuts.empty())
179  return;
180  cfgVal = (ind < cuts.size()) ? cuts[ind] : cuts[cuts.size() - 1];
181  };
182 
183  Acts::TrackSelector::EtaBinnedConfig trackSelectorCfg{std::move(absEtaEdges)};
184  if (etaBins.empty())
185  {
186  assert(trackSelectorCfg.cutSets.size() == 1);
187  trackSelectorCfg.cutSets[0].absEtaMin = m_absEtaMin;
188  trackSelectorCfg.cutSets[0].absEtaMax = m_absEtaMax;
189  }
190  size_t cutIndex = 0;
191  for (auto &cfg : trackSelectorCfg.cutSets)
192  {
193  setCut(cfg.phiMin, m_phiMin, cutIndex);
194  setCut(cfg.phiMax, m_phiMax, cutIndex);
195  setCut(cfg.etaMin, m_etaMin, cutIndex);
196  setCut(cfg.etaMax, m_etaMax, cutIndex);
197  setCut(cfg.ptMin, m_ptMin, cutIndex);
198  setCut(cfg.ptMax, m_ptMax, cutIndex);
199  setCut(cfg.minMeasurements, m_minMeasurements, cutIndex);
200  setCut(cfg.maxHoles, m_maxHoles, cutIndex);
201  setCut(cfg.maxOutliers, m_maxOutliers, cutIndex);
202  setCut(cfg.maxSharedHits, m_maxSharedHits, cutIndex);
203  setCut(cfg.maxChi2, m_maxChi2, cutIndex);
204  ++cutIndex;
205  }
206 
207  ATH_MSG_INFO(trackSelectorCfg);
208 
209  if (!m_useDefaultMeasurementSelector.value()) {
210  // initializer measurement selector and connect it to the delegates of the track finder optins
212  }
213  else if (!m_chi2OutlierCutOff.empty()) {
214  ATH_MSG_DEBUG("chi2OutlierCutOff set but not supported when using the default measurement selector.");
215  }
216 
217  detail::CKF_config ckfConfig{
218  std::move(extrapolator),
219  {std::move(propagator), logger().cloneWithSuffix("CKF")},
220  measurementSelector,
221  {},
222  trackSelectorCfg};
223 
224  m_trackFinder = std::make_unique<CKF_pimpl>(std::move(ckfConfig));
225 
226  trackFinder().ckfExtensions.updater.connect<&ActsTrk::detail::FitterHelperFunctions::gainMatrixUpdate<detail::RecoTrackStateContainer>>();
227  trackFinder().ckfExtensions.measurementSelector.connect<&Acts::MeasurementSelector::select<detail::RecoTrackStateContainer>>(&trackFinder().measurementSelector);
228  initStatTables();
229 
230  return StatusCode::SUCCESS;
231  }
232 
233  // === finalize ============================================================
234 
236  {
237  printStatTables();
238  return StatusCode::SUCCESS;
239  }
240 
241  // === execute =============================================================
242 
243  StatusCode TrackFindingAlg::execute(const EventContext &ctx) const
244  {
245  ATH_MSG_DEBUG("Executing " << name() << " ... ");
246 
247  auto timer = Monitored::Timer<std::chrono::milliseconds>("TIME_execute");
248  auto mon_nTracks = Monitored::Scalar<int>("nTracks");
249  auto mon = Monitored::Group(m_monTool, timer, mon_nTracks);
250 
251  // ================================================== //
252  // ===================== INPUTS ===================== //
253  // ================================================== //
254 
255  // SEED PARAMETERS
256  std::vector<const ActsTrk::BoundTrackParametersContainer *> estimatedTrackParametersContainers;
257  estimatedTrackParametersContainers.reserve(m_estimatedTrackParametersKeys.size());
258  for (const auto &estimatedTrackParametersKey : m_estimatedTrackParametersKeys)
259  {
260  ATH_MSG_DEBUG("Reading input collection with key " << estimatedTrackParametersKey.key());
261  SG::ReadHandle<ActsTrk::BoundTrackParametersContainer> estimatedTrackParametersHandle = SG::makeHandle(estimatedTrackParametersKey, ctx);
262  ATH_CHECK(estimatedTrackParametersHandle.isValid());
263  estimatedTrackParametersContainers.push_back(estimatedTrackParametersHandle.cptr());
264  ATH_MSG_DEBUG("Retrieved " << estimatedTrackParametersContainers.back()->size() << " input elements from key " << estimatedTrackParametersKey.key());
265  }
266 
267  // SEED TRIPLETS
268  std::vector<const ActsTrk::SeedContainer *> seedContainers;
269  seedContainers.reserve(m_seedContainerKeys.size());
270  std::size_t total_seeds = 0;
271  for (const auto &seedContainerKey : m_seedContainerKeys)
272  {
273  ATH_MSG_DEBUG("Reading input collection with key " << seedContainerKey.key());
274  SG::ReadHandle<ActsTrk::SeedContainer> seedsHandle = SG::makeHandle(seedContainerKey, ctx);
275  ATH_CHECK(seedsHandle.isValid());
276  seedContainers.push_back(seedsHandle.cptr());
277  ATH_MSG_DEBUG("Retrieved " << seedContainers.back()->size() << " input elements from key " << seedContainerKey.key());
278  total_seeds += seedContainers.back()->size();
279  }
280 
281  // MEASUREMENTS
282  std::vector<const xAOD::UncalibratedMeasurementContainer *> uncalibratedMeasurementContainers;
283  uncalibratedMeasurementContainers.reserve(m_uncalibratedMeasurementContainerKeys.size());
284  for (const auto &uncalibratedMeasurementContainerKey : m_uncalibratedMeasurementContainerKeys)
285  {
286  ATH_MSG_DEBUG("Reading input collection with key " << uncalibratedMeasurementContainerKey.key());
287  SG::ReadHandle<xAOD::UncalibratedMeasurementContainer> uncalibratedMeasurementContainerHandle = SG::makeHandle(uncalibratedMeasurementContainerKey, ctx);
288  ATH_CHECK(uncalibratedMeasurementContainerHandle.isValid());
289  uncalibratedMeasurementContainers.push_back(uncalibratedMeasurementContainerHandle.cptr());
290  ATH_MSG_DEBUG("Retrieved " << uncalibratedMeasurementContainers.back()->size() << " input elements from key " << uncalibratedMeasurementContainerKey.key());
291  }
292 
294  detectorElementToGeometryIdMap{m_detectorElementToGeometryIdMapKey, ctx};
295  ATH_CHECK(detectorElementToGeometryIdMap.isValid());
296 
297  detail::DuplicateSeedDetector duplicateSeedDetector(total_seeds, m_skipDuplicateSeeds);
298  for (std::size_t icontainer = 0; icontainer < seedContainers.size(); ++icontainer)
299  {
300  if (!seedContainers[icontainer])
301  continue;
302  duplicateSeedDetector.addSeeds(icontainer, *seedContainers[icontainer]);
303  }
304 
305  detail::TrackFindingMeasurements measurements(uncalibratedMeasurementContainers.size() /* number of measurement containers*/);
306  const Acts::TrackingGeometry *
307  acts_tracking_geometry = m_trackingGeometryTool->trackingGeometry().get();
308  ATH_CHECK(acts_tracking_geometry != nullptr);
309 
310  for (std::size_t icontainer = 0; icontainer < uncalibratedMeasurementContainers.size(); ++icontainer) {
311  ATH_MSG_DEBUG("Create " << uncalibratedMeasurementContainers[icontainer]->size() << " source links from measurements in " << m_uncalibratedMeasurementContainerKeys[icontainer].key());
312  measurements.addMeasurements(icontainer,
313  *uncalibratedMeasurementContainers[icontainer],
314  **detectorElementToGeometryIdMap);
315  }
316 
317  if (!m_trackStatePrinter.empty()) {
318  m_trackStatePrinter->printMeasurements(ctx, uncalibratedMeasurementContainers, **detectorElementToGeometryIdMap, measurements.measurementOffsets());
319  }
320 
321 
322  // ================================================== //
323  // ===================== COMPUTATION ================ //
324  // ================================================== //
325  ActsTrk::MutableTrackContainer tracksContainer;
326  EventStats event_stat;
327  event_stat.resize(m_stat.size());
328 
329  // Perform the track finding for all initial parameters.
330  for (std::size_t icontainer = 0; icontainer < estimatedTrackParametersContainers.size(); ++icontainer)
331  {
332  if (estimatedTrackParametersContainers[icontainer]->empty())
333  continue;
334  ATH_CHECK(findTracks(ctx,
335  *acts_tracking_geometry,
336  **detectorElementToGeometryIdMap,
337  measurements,
338  duplicateSeedDetector,
339  *estimatedTrackParametersContainers[icontainer],
340  seedContainers[icontainer],
341  tracksContainer,
342  icontainer,
343  icontainer < m_seedLabels.size() ? m_seedLabels[icontainer].c_str() : m_seedContainerKeys[icontainer].key().c_str(),
344  event_stat));
345  }
346 
347  ATH_MSG_DEBUG(" \\__ Created " << tracksContainer.size() << " tracks");
348 
349  mon_nTracks = tracksContainer.size();
350 
351  copyStats(event_stat);
352 
353  std::unique_ptr<ActsTrk::TrackContainer> constTracksContainer = m_tracksBackendHandlesHelper.moveToConst(std::move(tracksContainer),
354  m_trackingGeometryTool->getGeometryContext(ctx).context(), ctx);
355  // ================================================== //
356  // ===================== OUTPUTS ==================== //
357  // ================================================== //
358  auto trackContainerHandle = SG::makeHandle(m_trackContainerKey, ctx);
359  ATH_MSG_DEBUG(" \\__ Tracks Container `" << m_trackContainerKey.key() << "` created ...");
360 
361  ATH_CHECK(trackContainerHandle.record(std::move(constTracksContainer)));
362  if (!trackContainerHandle.isValid())
363  {
364  ATH_MSG_FATAL("Failed to write TrackContainer with key " << m_trackContainerKey.key());
365  return StatusCode::FAILURE;
366  }
367 
368  return StatusCode::SUCCESS;
369  }
370 
371  // === findTracks ==========================================================
372 
373  StatusCode
374  TrackFindingAlg::findTracks(const EventContext &ctx,
375  const Acts::TrackingGeometry &trackingGeometry,
376  const ActsTrk::DetectorElementToActsGeometryIdMap &detectorElementToGeoId,
377  const detail::TrackFindingMeasurements &measurements,
378  detail::DuplicateSeedDetector &duplicateSeedDetector,
379  const ActsTrk::BoundTrackParametersContainer &estimatedTrackParameters,
380  const ActsTrk::SeedContainer *seeds,
381  ActsTrk::MutableTrackContainer &tracksContainer,
382  size_t typeIndex,
383  const char *seedType,
384  EventStats &event_stat) const
385  {
386  ATH_MSG_DEBUG(name() << "::" << __FUNCTION__);
387 
388  if (seeds && seeds->size() != estimatedTrackParameters.size())
389  {
390  // should be the same, but we can cope if not
391  ATH_MSG_WARNING("Have " << seeds->size() << " " << seedType << " seeds, but " << estimatedTrackParameters.size() << "estimated track parameters");
392  }
393 
394  // Construct a perigee surface as the target surface
395  auto pSurface = Acts::Surface::makeShared<Acts::PerigeeSurface>(Acts::Vector3::Zero());
396 
397  Acts::GeometryContext tgContext = m_trackingGeometryTool->getGeometryContext(ctx).context();
398  Acts::MagneticFieldContext mfContext = m_extrapolationTool->getMagneticFieldContext(ctx);
399  // CalibrationContext converter not implemented yet.
400  Acts::CalibrationContext calContext = Acts::CalibrationContext();
401 
402  using AtlUncalibSourceLinkAccessor = detail::UncalibSourceLinkAccessor;
403 
404  AtlUncalibSourceLinkAccessor slAccessor(measurements.measurementRanges());
405  Acts::SourceLinkAccessorDelegate<detail::UncalibSourceLinkAccessor::Iterator> slAccessorDelegate;
406  slAccessorDelegate.connect<&detail::UncalibSourceLinkAccessor::range>(&slAccessor);
407 
408  Acts::PropagatorPlainOptions plainOptions{tgContext, mfContext};
409  Acts::PropagatorPlainOptions plainSecondOptions{tgContext, mfContext};
410 
411  const bool reverseSearch = (typeIndex < m_reverseSearch.size() && m_reverseSearch[typeIndex]);
412  plainOptions.maxSteps = m_maxPropagationStep;
413  plainOptions.direction = reverseSearch ? Acts::Direction::Backward : Acts::Direction::Forward;
414  plainSecondOptions.maxSteps = m_maxPropagationStep;
415  plainSecondOptions.direction = plainOptions.direction.invert();
416 
417  // Set the CombinatorialKalmanFilter options
418  using TrackFinderOptions = Acts::CombinatorialKalmanFilterOptions<detail::UncalibSourceLinkAccessor::Iterator, detail::RecoTrackContainer>;
419  TrackFinderOptions options(tgContext,
420  mfContext,
421  calContext,
422  slAccessorDelegate,
423  trackFinder().ckfExtensions,
424  plainOptions,
425  pSurface.get());
426  if (reverseSearch) options.targetSurface = pSurface.get();
427  if (!m_useDefaultMeasurementSelector.value()) {
428  m_measurementSelector->connect( &options.trackStateCandidateCreator );
429  }
430  std::optional<TrackFinderOptions> secondOptions;
431  if (m_doTwoWay) {
432  secondOptions.emplace(tgContext,
433  mfContext,
434  calContext,
435  slAccessorDelegate,
436  trackFinder().ckfExtensions,
437  plainSecondOptions,
438  pSurface.get());
439  if (!reverseSearch) secondOptions->targetSurface = pSurface.get();
440  if (!m_useDefaultMeasurementSelector.value()) {
441  m_measurementSelector->connect( &secondOptions->trackStateCandidateCreator);
442  }
443  secondOptions->skipPrePropagationUpdate = true;
444  }
445 
446  // ActsTrk::MutableTrackContainer tracksContainerTemp;
447  Acts::VectorTrackContainer trackBackend;
448  Acts::VectorMultiTrajectory trackStateBackend;
449  detail::RecoTrackContainer tracksContainerTemp(trackBackend, trackStateBackend);
450 
451  // Measurement calibration
452  // N.B. OnTrackCalibrator expects disabled tool handles when no calibration is requested.
453  // Therefore, passing them without checking if they are enabled is safe.
454 
455  auto calibrator = detail::OnTrackCalibrator<detail::RecoTrackStateContainer>(trackingGeometry,
456  detectorElementToGeoId,
459 
460  if (m_useDefaultMeasurementSelector.value()) {
461  // for default measurement selector need connect calibrator
462  options.extensions.calibrator.connect<&detail::OnTrackCalibrator<detail::RecoTrackStateContainer>::calibrate>(&calibrator);
463  if (m_doTwoWay) {
464  secondOptions->extensions.calibrator.connect<&detail::OnTrackCalibrator<detail::RecoTrackStateContainer>::calibrate>(&calibrator);
465  }
466  }
467 
468  const auto &trackSelectorCfg = trackFinder().trackSelector.config();
469  auto getCuts = [&trackSelectorCfg](double eta) -> const Acts::TrackSelector::Config & {
470  // return the last bin for |eta|>=4 or nan
471  return (!(std::abs(eta) < trackSelectorCfg.absEtaEdges.back())) ? trackSelectorCfg.cutSets.back()
472  : (std::abs(eta) < trackSelectorCfg.absEtaEdges.front()) ? trackSelectorCfg.cutSets.front()
473  : trackSelectorCfg.getCuts(eta);
474  };
475 
476  std::size_t category_i = 0;
477  const auto measurementContainerOffsets = measurements.measurementContainerOffsets();
478 
479  using BranchStopperResult = Acts::CombinatorialKalmanFilterBranchStopperResult;
480  auto stopBranch = [&](const detail::RecoTrackContainer::TrackProxy &track,
481  const detail::RecoTrackContainer::TrackStateProxy &trackState) -> BranchStopperResult {
482  if (!m_trackStatePrinter.empty()) {
483  m_trackStatePrinter->printTrackState(tgContext, trackState, measurementContainerOffsets, true);
484  }
485 
486  if (!m_doBranchStopper)
487  return BranchStopperResult::Continue;
488 
489  const auto &parameters = trackState.hasFiltered() ? trackState.filtered() : trackState.predicted();
490  double eta = -std::log(std::tan(0.5 * parameters[Acts::eBoundTheta]));
491  const auto &cutSet = getCuts(eta);
492 
493  if (typeIndex < m_ptMinMeasurements.size() &&
494  !(track.nMeasurements() < m_ptMinMeasurements[typeIndex])) {
495  double pT = std::sin(parameters[Acts::eBoundTheta]) / parameters[Acts::eBoundQOverP];
496  if (std::abs(pT) < cutSet.ptMin * m_branchStopperPtMinFactor) {
497  ++event_stat[category_i][kNStoppedTracksMinPt];
498  ATH_MSG_DEBUG("CkfBranchStopper: drop branch with q*pT="
499  << pT << " after "
500  << track.nMeasurements() << " measurements");
501  return BranchStopperResult::StopAndDrop;
502  }
503  }
504 
505  if (typeIndex < m_absEtaMaxMeasurements.size() &&
506  !(track.nMeasurements() < m_absEtaMaxMeasurements[typeIndex]) &&
507  !(std::abs(eta) < trackSelectorCfg.absEtaEdges.back() + m_branchStopperAbsEtaMaxExtra)) {
508  ++event_stat[category_i][kNStoppedTracksMaxEta];
509  ATH_MSG_DEBUG("CkfBranchStopper: drop branch with eta="
510  << eta << " after "
511  << track.nMeasurements() << " measurements");
512  return BranchStopperResult::StopAndDrop;
513  }
514 
515  if (!(track.nHoles() > cutSet.maxHoles || track.nOutliers() > cutSet.maxOutliers))
516  return BranchStopperResult::Continue;
517 
518  bool enoughMeasurements = !(track.nMeasurements() < cutSet.minMeasurements);
519  if (!enoughMeasurements)
520  ++event_stat[category_i][kNStoppedTracksMaxHoles];
521  ATH_MSG_DEBUG("CkfBranchStopper: stop and "
522  << (enoughMeasurements ? "keep" : "drop")
523  << " branch with nHoles=" << track.nHoles()
524  << ", nOutliers=" << track.nOutliers()
525  << ", nMeasurements=" << track.nMeasurements());
526  return enoughMeasurements ? BranchStopperResult::StopAndKeep
527  : BranchStopperResult::StopAndDrop;
528  };
529 
530  options.extensions.branchStopper.connect(stopBranch);
531  if (m_doTwoWay) {
532  // If we extend the track inwards we can utilize the CKF propagation
533  // as extrapolator and therefore do not need to stop branches.
534  // This only works for outside-in extensions.
535  if (reverseSearch)
536  secondOptions->extensions.branchStopper.connect(stopBranch);
537  }
538 
539  Acts::PropagatorOptions<detail::Stepper::Options, detail::Navigator::Options,
540  Acts::ActorList<Acts::MaterialInteractor>>
541  extrapolationOptions(tgContext, mfContext);
542 
543  Acts::TrackExtrapolationStrategy extrapolationStrategy =
545 
546  // Perform the track finding for all initial parameters
547  ATH_MSG_DEBUG("Invoke track finding with " << estimatedTrackParameters.size() << ' ' << seedType << " seeds.");
548 
549  std::size_t nPrinted = 0;
550  auto printSeed = [&](std::size_t iseed, const Acts::BoundTrackParameters &seedParameters, bool isKF = false)
551  {
552  if (m_trackStatePrinter.empty() || !seeds)
553  return;
554  if (!nPrinted++)
555  {
556  ATH_MSG_INFO("CKF results for " << estimatedTrackParameters.size() << ' ' << seedType << " seeds:");
557  }
558  m_trackStatePrinter->printSeed(tgContext, *(*seeds)[iseed], seedParameters, measurementContainerOffsets, iseed, isKF);
559  };
560 
561  // Loop over the track finding results for all initial parameters
562  for (std::size_t iseed = 0; iseed < estimatedTrackParameters.size(); ++iseed)
563  {
564  category_i = typeIndex * (m_statEtaBins.size() + 1);
565  tracksContainerTemp.clear();
566 
567  if (!estimatedTrackParameters[iseed])
568  {
569  ATH_MSG_WARNING("No " << seedType << " seed " << iseed);
570  ++event_stat[category_i][kNoTrackParam];
571  continue;
572  }
573 
574  const Acts::BoundTrackParameters *initialParameters = estimatedTrackParameters[iseed];
575  printSeed(iseed, *initialParameters);
576 
577  double eta = -std::log(std::tan(0.5 * initialParameters->theta()));
578  category_i = getStatCategory(typeIndex, eta);
579  ++event_stat[category_i][kNTotalSeeds];
580 
581  if (duplicateSeedDetector.isDuplicate(typeIndex, iseed))
582  {
583  ATH_MSG_DEBUG("skip " << seedType << " seed " << iseed << " - already found");
584  ++event_stat[category_i][kNDuplicateSeeds];
585  continue;
586  }
587 
588  // Get the Acts tracks, given this seed
589  // Result here contains a vector of TrackProxy objects
590  ++event_stat[category_i][kNUsedSeeds];
591 
592  std::unique_ptr<Acts::BoundTrackParameters> seedParameters;
593  const bool refitSeeds = (typeIndex < m_refitSeeds.size() && m_refitSeeds[typeIndex]);
594  if (refitSeeds)
595  {
596  // Perform KF before CKF
597  const auto fittedSeedCollection = m_fitterTool->fit(ctx, *(*seeds)[iseed], *initialParameters,
598  tgContext, mfContext, calContext,
599  detectorElementToGeoId);
600  if (not fittedSeedCollection)
601  {
602  ATH_MSG_WARNING("KF Fitted Track is nullptr");
603  }
604  else if (fittedSeedCollection->size() != 1)
605  {
606  ATH_MSG_WARNING("KF produced " << fittedSeedCollection->size() << " tracks but should produce 1!");
607  }
608  else
609  {
610  // Check pTmin requirement
611  const auto fittedSeed = fittedSeedCollection->getTrack(0);
612 
613  double etaSeed = -std::log(std::tan(0.5 * fittedSeed.parameters()[Acts::eBoundTheta]));
614  const auto &cutSet = getCuts(etaSeed);
615  if (fittedSeed.transverseMomentum() < cutSet.ptMin)
616  {
617  ATH_MSG_VERBOSE("min pt requirement not satisfied after param refinement: pt min is " << cutSet.ptMin << " but Refined params have pt of " << fittedSeed.transverseMomentum());
618  ++event_stat[category_i][kNRejectedRefinedSeeds];
619  continue;
620  }
621 
622  seedParameters.reset(new Acts::BoundTrackParameters(fittedSeed.referenceSurface().getSharedPtr(),
623  fittedSeed.parameters(),
624  initialParameters->covariance(),
625  fittedSeed.particleHypothesis()));
626  printSeed(iseed, *seedParameters, true);
627 
628  // Pass the refined params to the CKF
629  initialParameters = seedParameters.get();
630  }
631  }
632 
633  auto result = trackFinder().ckf.findTracks(*initialParameters, options, tracksContainerTemp);
634 
635  // The result for this seed
636  if (not result.ok()) {
637  ATH_MSG_WARNING("Track finding failed for " << seedType << " seed " << iseed << " with error" << result.error());
638  continue;
639  }
640  auto &tracksForSeed = result.value();
641 
642  size_t ntracks = 0;
643 
644  // lambda to collect together all the things we do with a viable track.
646  // if the the perigeeSurface was not hit (in particular the case for the inside-out pass,
647  // the track has no reference surface and the extrapolation to the perigee has not been done
648  // yet.
649  if (!track.hasReferenceSurface()) {
650  auto extrapolationResult = Acts::extrapolateTrackToReferenceSurface(
651  track, *pSurface, trackFinder().extrapolator, extrapolationOptions,
652  extrapolationStrategy, logger());
653  if (!extrapolationResult.ok()) {
654  ATH_MSG_WARNING("Extrapolation for seed "
655  << iseed << " and " << track.index()
656  << " failed with error " << extrapolationResult.error()
657  << " dropping track candidate.");
658  return;
659  }
660  }
661 
662  Acts::trimTrack(track, true, true, true);
663  Acts::calculateTrackQuantities(track);
664 
665  if (!m_trackStatePrinter.empty()) {
666  m_trackStatePrinter->printTrack(tgContext, tracksContainerTemp, track, measurementContainerOffsets);
667  }
668 
669  ++ntracks;
670  ++event_stat[category_i][kNOutputTracks];
671 
672  // copy selected tracks into output tracksContainer
673  auto isValidEta = [&](const detail::RecoTrackContainer::TrackProxy &track) {
674  // Protect against eta=nan, which currently crashes in Acts::TrackSelector::isValidTrack().
675  // Can remove once this is fixed in Acts Core.
676  return track.theta() > 0.0 && track.theta() < M_PI;
677  };
678 
679  if (isValidEta(track) && trackFinder().trackSelector.isValidTrack(track)) {
680  auto destProxy = tracksContainer.getTrack(tracksContainer.addTrack());
681  destProxy.copyFrom(track, true); // make sure we copy track states!
682  ++event_stat[category_i][kNSelectedTracks];
683 
684  // Fill the track infos into the duplicate seed detector
685  if (m_skipDuplicateSeeds) {
686  storeSeedInfo(tracksContainerTemp, track, duplicateSeedDetector);
687  }
688  } else {
689  ATH_MSG_DEBUG("Track " << ntracks << " from " << seedType << " seed " << iseed << " failed track selection");
690  }
691  };
692 
693  std::size_t nfirst = 0;
694  for (auto &firstTrack : tracksForSeed) {
695  std::size_t nsecond = 0;
696 
697  auto smoothingResult = Acts::smoothTrack(tgContext, firstTrack, logger(), Acts::MbfSmoother());
698  if (!smoothingResult.ok()) {
699  ATH_MSG_DEBUG("Smoothing for seed "
700  << iseed << " and first track " << firstTrack.index()
701  << " failed with error " << smoothingResult.error());
702  continue;
703  }
704 
705  if (m_doTwoWay) {
706  std::optional<detail::RecoTrackStateContainerProxy> firstMeasurement;
707  for (auto st : firstTrack.trackStatesReversed()) {
708  bool isMeasurement = st.typeFlags().test(Acts::TrackStateFlag::MeasurementFlag);
709  bool isOutlier = st.typeFlags().test(Acts::TrackStateFlag::OutlierFlag);
710  // We are excluding non measurement states and outlier here. Those can
711  // decrease resolution because only the smoothing corrected the very
712  // first prediction as filtering is not possible.
713  if (isMeasurement && !isOutlier)
714  firstMeasurement = st;
715  }
716 
717  if (firstMeasurement.has_value()) {
718  Acts::BoundTrackParameters secondInitialParameters(
719  firstMeasurement->referenceSurface().getSharedPtr(),
720  firstMeasurement->parameters(), firstMeasurement->covariance(),
721  initialParameters->particleHypothesis());
722 
723  auto secondResult = trackFinder().ckf.findTracks(secondInitialParameters, *secondOptions, tracksContainerTemp);
724 
725  if (not secondResult.ok()) {
726  ATH_MSG_WARNING("Second track finding failed for " << seedType << " seed " << iseed << " track " << nfirst << " with error" << secondResult.error());
727  } else {
728 
729  // store the original previous state to restore it later
730  auto originalFirstMeasurementPrevious = firstMeasurement->previous();
731 
732  auto &secondTracksForSeed = secondResult.value();
733  for (auto &secondTrack : secondTracksForSeed) {
734  secondTrack.reverseTrackStates(true);
735 
736  firstMeasurement->previous() = secondTrack.outermostTrackState().index();
737  secondTrack.tipIndex() = firstTrack.tipIndex();
738 
739  if (reverseSearch) {
740  // smooth the full track
741  auto secondSmoothingResult = Acts::smoothTrack(tgContext, secondTrack, logger());
742  if (!secondSmoothingResult.ok()) {
743  ATH_MSG_WARNING("Second smoothing for seed " << iseed << " and track " << secondTrack.index() << " failed with error " << secondSmoothingResult.error());
744  continue;
745  }
746 
747  secondTrack.reverseTrackStates(true);
748  }
749 
750  addTrack(secondTrack);
751 
752  ++nsecond;
753  }
754 
755  // restore the original previous state for the first track
756  firstMeasurement->previous() = originalFirstMeasurementPrevious;
757  }
758  }
759  }
760  if (nsecond == 0) {
761  if (m_doTwoWay) {
762  ATH_MSG_DEBUG("No viable result from second track finding for " << seedType << " seed " << iseed << " track " << nfirst);
763  ++event_stat[category_i][kNoSecond];
764  }
765 
766  addTrack(firstTrack);
767  }
768  nfirst++;
769  }
770  if (ntracks == 0) {
771  ATH_MSG_DEBUG("Track finding found no track candidates for " << seedType << " seed " << iseed);
772  ++event_stat[category_i][kNoTrack];
773  } else if (ntracks >= 2) {
774  ++event_stat[category_i][kMultipleBranches];
775  }
776  if (!m_trackStatePrinter.empty())
777  std::cout << std::flush;
778  }
779 
780  ATH_MSG_DEBUG("Completed " << seedType << " track finding with " << computeStatSum(typeIndex, kNOutputTracks, event_stat) << " track candidates.");
781 
782  return StatusCode::SUCCESS;
783  }
784 
785  void
788  detail::DuplicateSeedDetector &duplicateSeedDetector) const {
789 
790  const auto lastMeasurementIndex = track.tipIndex();
791  duplicateSeedDetector.newTrajectory();
792 
793  tracksContainer.trackStateContainer().visitBackwards(
794  lastMeasurementIndex,
795  [&duplicateSeedDetector](const detail::RecoTrackStateContainer::ConstTrackStateProxy &state) -> void
796  {
797  // Check there is a source link
798  if (not state.hasUncalibratedSourceLink())
799  return;
800 
801  // Fill the duplicate selector
802  auto sl = state.getUncalibratedSourceLink().template get<ATLASUncalibSourceLink>();
803  duplicateSeedDetector.addMeasurement(sl);
804  }); // end visitBackwards
805  }
806 
807  // === Statistics printout =================================================
808 
810  {
811  if (!m_statEtaBins.empty())
812  {
813  m_useAbsEtaForStat = (m_statEtaBins[0] > 0.);
814  float last_eta = m_statEtaBins[0];
815  for (float eta : m_statEtaBins)
816  {
817  if (eta < last_eta)
818  {
819  ATH_MSG_FATAL("Eta bins for statistics counter not in ascending order.");
820  }
821  last_eta = eta;
822  }
823  }
824  m_stat.resize(nSeedCollections() * seedCollectionStride());
825  }
826 
827  // copy statistics
828  void TrackFindingAlg::copyStats(const EventStats &event_stat) const
829  {
830  std::lock_guard<std::mutex> lock(m_mutex);
831  std::size_t category_i = 0;
832  for (const std::array<unsigned int, kNStat> &src_stat : event_stat)
833  {
834  std::array<std::size_t, kNStat> &dest_stat = m_stat[category_i++];
835  for (std::size_t i = 0; i < src_stat.size(); ++i)
836  {
837  assert(i < dest_stat.size());
838  dest_stat[i] += src_stat[i];
839  }
840  }
841  }
842 
843  // print statistics
845  {
846  if (msgLvl(MSG::INFO))
847  {
848  std::vector<std::string> stat_labels =
850  {
851  std::make_pair(kNTotalSeeds, "Input seeds"),
852  std::make_pair(kNoTrackParam, "No track parameters"),
853  std::make_pair(kNUsedSeeds, "Used seeds"),
854  std::make_pair(kNoTrack, "Cannot find track"),
855  std::make_pair(kNDuplicateSeeds, "Duplicate seeds"),
856  std::make_pair(kNRejectedRefinedSeeds, "Rejected refined parameters"),
857  std::make_pair(kNOutputTracks, "CKF tracks"),
858  std::make_pair(kNSelectedTracks, "selected tracks"),
859  std::make_pair(kNStoppedTracksMaxHoles, "Stopped tracks reaching max holes"),
860  std::make_pair(kMultipleBranches, "Seeds with more than one branch"),
861  std::make_pair(kNoSecond, "Tracks failing second CKF"),
862  std::make_pair(kNStoppedTracksMinPt, "Stopped tracks below pT cut"),
863  std::make_pair(kNStoppedTracksMaxEta, "Stopped tracks above max eta")
864  });
865  assert(stat_labels.size() == kNStat);
866  std::vector<std::string> categories;
867  categories.reserve(m_seedLabels.size() + 1);
868  categories.insert(categories.end(), m_seedLabels.begin(), m_seedLabels.end());
869  categories.push_back("ALL");
870 
871  std::vector<std::string> eta_labels;
872  eta_labels.reserve(m_statEtaBins.size() + 2);
873  for (std::size_t eta_bin_i = 0; eta_bin_i < m_statEtaBins.size() + 2; ++eta_bin_i)
874  {
875  eta_labels.push_back(TableUtils::makeEtaBinLabel(m_statEtaBins, eta_bin_i, m_useAbsEtaForStat));
876  }
877 
878  // vector used as 3D array stat[ eta_bin ][ stat_i ][ seed_type]
879  // stat_i = [0, kNStat)
880  // eta_bin = [0, m_statEtaBins.size()+2 ); eta_bin == m_statEtaBinsSize()+1 means sum of all etaBins
881  // seed_type = [0, nSeedCollections()+1) seed_type == nSeedCollections() means sum of all seed collections
882  std::vector<std::size_t> stat =
883  TableUtils::createCounterArrayWithProjections<std::size_t>(nSeedCollections(),
884  m_statEtaBins.size() + 1,
885  m_stat);
886 
887  // the extra columns and rows for the projections are addeded internally:
888  std::size_t stat_stride =
890  m_statEtaBins.size() + 1,
891  kNStat);
892  std::size_t eta_stride =
894  m_statEtaBins.size() + 1,
895  kNStat);
896  std::stringstream table_out;
897 
898  if (m_dumpAllStatEtaBins.value())
899  {
900  // dump for each counter a table with one row per eta bin
901  std::size_t max_label_width = TableUtils::maxLabelWidth(stat_labels) + TableUtils::maxLabelWidth(eta_labels);
902  for (std::size_t stat_i = 0; stat_i < kNStat; ++stat_i)
903  {
904  std::size_t dest_idx_offset = stat_i * stat_stride;
905  table_out << makeTable(stat, dest_idx_offset, eta_stride,
906  eta_labels,
907  categories)
908  .columnWidth(10)
909  // only dump the footer for the last eta bin i.e. total
910  .dumpHeader(stat_i == 0)
911  .dumpFooter(stat_i + 1 == kNStat)
912  .separateLastRow(true) // separate the sum of all eta bins
913  .minLabelWidth(max_label_width)
914  .labelPrefix(stat_labels.at(stat_i));
915  }
916  }
917  else
918  {
919  // dump one table with one row per counter showing the total eta range
920  for (std::size_t eta_bin_i = (m_dumpAllStatEtaBins.value() ? 0 : m_statEtaBins.size() + 1);
921  eta_bin_i < m_statEtaBins.size() + 2;
922  ++eta_bin_i)
923  {
924  std::size_t dest_idx_offset = eta_bin_i * eta_stride;
925  table_out << makeTable(stat, dest_idx_offset, stat_stride,
926  stat_labels,
927  categories,
928  eta_labels.at(eta_bin_i))
929  .columnWidth(10)
930  // only dump the footer for the last eta bin i.e. total
931  .dumpFooter(!m_dumpAllStatEtaBins.value() || eta_bin_i == m_statEtaBins.size() + 1);
932  }
933  }
934  ATH_MSG_INFO("statistics:\n"
935  << table_out.str());
936  table_out.str("");
937 
938  // define retios first element numerator, second element denominator
939  // each element contains a vector of counter and a multiplier e.g. +- 1
940  // ratios are computed as (sum_i stat[stat_i] * multiplier_i ) / (sum_j stat[stat_j] * multiplier_j )
941  auto [ratio_labels, ratio_def] =
943  std::vector<TableUtils::SummandDefinition>{
947  // no track counted as used but want to include it as failed
949  }, // failed seeds i.e. seeds which are not duplicates but did not produce a track
950  std::vector<TableUtils::SummandDefinition>{TableUtils::defineSummand(kNTotalSeeds, 1)}),
952  TableUtils::defineSimpleRatio("Rejected refined params / seeds", kNRejectedRefinedSeeds, kNTotalSeeds),
954  TableUtils::defineSimpleRatio("selected tracks / used seeds", kNSelectedTracks, kNUsedSeeds),
955  TableUtils::defineSimpleRatio("branched tracks / used seeds", kMultipleBranches, kNUsedSeeds),
956  TableUtils::defineSimpleRatio("no 2nd CKF / CKF tracks", kNoSecond, kNOutputTracks)});
957 
958  std::vector<float> ratio = TableUtils::computeRatios(ratio_def,
959  nSeedCollections() + 1,
960  m_statEtaBins.size() + 2,
961  stat);
962 
963  // the extra columns and rows for the projections are _not_ added internally
964  std::size_t ratio_stride = TableUtils::ratioStride(nSeedCollections() + 1,
965  m_statEtaBins.size() + 2,
966  ratio_def);
967  std::size_t ratio_eta_stride = TableUtils::subCategoryStride(nSeedCollections() + 1,
968  m_statEtaBins.size() + 2,
969  ratio_def);
970 
971  std::size_t max_label_width = TableUtils::maxLabelWidth(ratio_labels) + TableUtils::maxLabelWidth(eta_labels);
972  if (m_dumpAllStatEtaBins.value())
973  {
974  // show for each ratio a table with one row per eta bin
975  for (std::size_t ratio_i = 0; ratio_i < ratio_labels.size(); ++ratio_i)
976  {
977  table_out << makeTable(ratio,
978  ratio_i * ratio_stride,
979  ratio_eta_stride,
980  eta_labels,
981  categories)
982  .columnWidth(10)
983  // only dump the footer for the last eta bin i.e. total
984  .dumpHeader(ratio_i == 0)
985  .dumpFooter(ratio_i + 1 == ratio_labels.size())
986  .separateLastRow(true) // separate the sum of las
987  .minLabelWidth(max_label_width)
988  .labelPrefix(ratio_labels.at(ratio_i));
989  }
990  }
991  else
992  {
993  // dump one table with one row per ratio showing the total eta range
994  table_out << makeTable(ratio,
995  (m_statEtaBins.size() + 1) * ratio_eta_stride + 0 * ratio_stride,
996  ratio_stride,
997  ratio_labels,
998  categories)
999  .columnWidth(10)
1000  // only dump the footer for the last eta bin i.e. total
1001  .minLabelWidth(max_label_width)
1002  .dumpFooter(false);
1003 
1004  // also dump a table for final tracks over seeds (ratio_i==3) showing one row per eta bin
1005  eta_labels.erase(eta_labels.end() - 1); // drop last line of table which shows again all eta bins summed.
1006  constexpr std::size_t ratio_i = 3;
1007  table_out << makeTable(ratio,
1008  ratio_i * ratio_stride,
1009  ratio_eta_stride,
1010  eta_labels,
1011  categories)
1012  .columnWidth(10)
1013  .dumpHeader(false)
1014  // only dump the footer for the last eta bin i.e. total
1015  .dumpFooter(!m_dumpAllStatEtaBins.value() || ratio_i + 1 == ratio_labels.size())
1016  .separateLastRow(false)
1017  .minLabelWidth(max_label_width)
1018  .labelPrefix(ratio_labels.at(ratio_i));
1019  }
1020 
1021  ATH_MSG_INFO("Ratios:\n"
1022  << table_out.str());
1023  }
1024  }
1025 
1026  inline std::size_t TrackFindingAlg::getStatCategory(std::size_t seed_collection, float eta) const
1027  {
1028  std::vector<float>::const_iterator bin_iter = std::upper_bound(m_statEtaBins.begin(),
1029  m_statEtaBins.end(),
1030  m_useAbsEtaForStat ? std::abs(eta) : eta);
1031  std::size_t category_i = seed_collection * seedCollectionStride() + static_cast<std::size_t>(bin_iter - m_statEtaBins.begin());
1032  assert(category_i < m_stat.size());
1033  return category_i;
1034  }
1035 
1036  inline std::size_t TrackFindingAlg::computeStatSum(std::size_t seed_collection, EStat counter_i, const EventStats &stat) const
1037  {
1038  std::size_t out = 0u;
1039  for (std::size_t category_i = seed_collection * seedCollectionStride() + static_cast<std::size_t>(counter_i);
1040  category_i < (seed_collection + 1) * seedCollectionStride();
1041  ++category_i)
1042  {
1043  assert(category_i < stat.size());
1044  out += stat[category_i][counter_i];
1045  }
1046  return out;
1047  }
1048 
1049 
1051  std::vector<std::pair<float, float> > chi2CutOffOutlier ;
1052  chi2CutOffOutlier .reserve( m_chi2CutOff.size() );
1053  if (!m_chi2OutlierCutOff.empty()) {
1054  if (m_chi2CutOff.size() != m_chi2OutlierCutOff.size()) {
1055  ATH_MSG_ERROR("Outlier chi2 cut off provided but number of elements does not agree with"
1056  " chi2 cut off for measurements which however is required: "
1057  << m_chi2CutOff.size() << " != " << m_chi2OutlierCutOff.size());
1058  return StatusCode::FAILURE;
1059  }
1060  }
1061  unsigned int idx=0;
1062  for (const auto &elm : m_chi2CutOff) {
1063  chi2CutOffOutlier.push_back( std::make_pair(static_cast<float>(elm),
1064  idx < m_chi2OutlierCutOff.size()
1065  ? static_cast<float>(m_chi2OutlierCutOff[idx])
1067  ++idx;
1068  }
1069  std::vector<float> etaBinsf;
1070  if (m_etaBins.size() > 2) {
1071  etaBinsf.assign(m_etaBins.begin() + 1, m_etaBins.end() - 1);
1072  }
1073 
1075  etaBinsf,
1076  chi2CutOffOutlier,
1077  m_numMeasurementsCutOff.value());
1078 
1079  return m_measurementSelector ? StatusCode::SUCCESS : StatusCode::FAILURE;
1080  }
1081 
1082 } // namespace
SCT_ClusterOnTrack.h
CalculateHighPtTerm.pT
pT
Definition: ICHEP2016/CalculateHighPtTerm.py:57
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
ActsTrk::TrackFindingAlg::m_extrapolationTool
ToolHandle< IActsExtrapolationTool > m_extrapolationTool
Definition: TrackFindingAlg.h:76
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
ActsTrk::TrackFindingAlg::m_maxSharedHits
Gaudi::Property< std::vector< std::size_t > > m_maxSharedHits
Definition: TrackFindingAlg.h:128
ActsTrk::TrackFindingAlg::m_statEtaBins
Gaudi::Property< std::vector< float > > m_statEtaBins
Definition: TrackFindingAlg.h:132
get_generator_info.result
result
Definition: get_generator_info.py:21
max
#define max(a, b)
Definition: cfImp.cxx:41
ActsTrk::TrackFindingAlg::kNStoppedTracksMaxEta
@ kNStoppedTracksMaxEta
Definition: TrackFindingAlg.h:152
TrackParameters.h
ActsTrk::TrackFindingAlg::m_trackingGeometryTool
ToolHandle< IActsTrackingGeometryTool > m_trackingGeometryTool
Definition: TrackFindingAlg.h:77
ActsTrk::MutableTrackContainerHandlesHelper::moveToConst
std::unique_ptr< ActsTrk::TrackContainer > moveToConst(ActsTrk::MutableTrackContainer &&tc, const Acts::GeometryContext &geoContext, const EventContext &evtContext) const
produces ActsTrk::ConstTrackContainer with all backends stored in SG
Definition: TrackContainerHandlesHelper.cxx:130
ActsTrk::TrackFindingAlg::m_branchStopperAbsEtaMaxExtra
Gaudi::Property< double > m_branchStopperAbsEtaMaxExtra
Definition: TrackFindingAlg.h:113
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
FullCPAlgorithmsTest_eljob.flush
flush
Definition: FullCPAlgorithmsTest_eljob.py:186
ActsTrk::detail::TrackFindingMeasurements
Definition: TrackFindingMeasurements.h:17
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
ActsTrk::DetectorElementToActsGeometryIdMap
Definition: DetectorElementToActsGeometryIdMap.h:31
ActsGeometryContext.h
ActsTrk::TrackFindingAlg::logger
const Acts::Logger & logger() const
Private access to the logger.
Definition: TrackFindingAlg.h:222
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
ActsTrk::detail::Navigator
Acts::Navigator Navigator
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:31
ActsTrk::TrackFindingAlg::m_absEtaMax
Gaudi::Property< double > m_absEtaMax
Definition: TrackFindingAlg.h:122
ActsTrk::TrackFindingAlg::m_detectorElementToGeometryIdMapKey
SG::ReadCondHandleKey< ActsTrk::DetectorElementToActsGeometryIdMap > m_detectorElementToGeometryIdMapKey
Definition: TrackFindingAlg.h:92
ActsTrk::detail::CKF_config::trackSelector
Acts::TrackSelector trackSelector
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:49
ActsTrk::detail::Extrapolator
Propagator Extrapolator
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:34
ActsTrk::detail::DuplicateSeedDetector::addSeeds
void addSeeds(std::size_t typeIndex, const ActsTrk::SeedContainer &seeds)
Definition: DuplicateSeedDetector.cxx:22
ConvertOldUJHistosToNewHistos.etaBins
list etaBins
Definition: ConvertOldUJHistosToNewHistos.py:145
ActsTrk::TrackFindingAlg::TrackFindingAlg
TrackFindingAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TrackFindingAlg.cxx:58
ActsTrk::TrackFindingAlg::kNoTrack
@ kNoTrack
Definition: TrackFindingAlg.h:143
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
M_PI
#define M_PI
Definition: ActiveFraction.h:11
ATLASMagneticFieldWrapper.h
AthCommonMsg< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
ActsTrk::TrackFindingAlg::m_phiMin
Gaudi::Property< std::vector< double > > m_phiMin
Definition: TrackFindingAlg.h:117
TableUtils::defineSimpleRatio
RatioDefinition defineSimpleRatio(T numerator, T denominator)
Definition: TableUtils.h:382
ActsTrk::TrackFindingAlg::m_refitSeeds
Gaudi::Property< std::vector< bool > > m_refitSeeds
Definition: TrackFindingAlg.h:101
ActsTrk::TrackFindingAlg::trackFinder
CKF_pimpl & trackFinder()
Definition: TrackFindingAlg.cxx:55
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:18
ActsTrk::TrackFindingAlg::m_branchStopperPtMinFactor
Gaudi::Property< double > m_branchStopperPtMinFactor
Definition: TrackFindingAlg.h:112
ActsTrk::TrackFindingAlg::m_maxOutliers
Gaudi::Property< std::vector< std::size_t > > m_maxOutliers
Definition: TrackFindingAlg.h:127
ActsTrk::TrackFindingAlg::kNOutputTracks
@ kNOutputTracks
Definition: TrackFindingAlg.h:145
ActsTrk::TrackFindingAlg::kNUsedSeeds
@ kNUsedSeeds
Definition: TrackFindingAlg.h:142
ActsTrk::TrackFindingAlg::m_useAbsEtaForStat
bool m_useAbsEtaForStat
Definition: TrackFindingAlg.h:217
ActsTrk::detail::RecoTrackContainerProxy
RecoTrackContainer::TrackProxy RecoTrackContainerProxy
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:24
ActsTrk::TrackFindingAlg::kNoTrackParam
@ kNoTrackParam
Definition: TrackFindingAlg.h:141
ActsTrk::TrackFindingAlg::m_seedContainerKeys
SG::ReadHandleKeyArray< ActsTrk::SeedContainer > m_seedContainerKeys
Definition: TrackFindingAlg.h:87
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
ActsTrk::detail::RecoTrackContainer
Acts::TrackContainer< Acts::VectorTrackContainer, Acts::VectorMultiTrajectory > RecoTrackContainer
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:23
empty
bool empty(TH1 *h)
Definition: computils.cxx:294
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
ActsTrk::MutableTrackContainerHandlesHelper::initialize
StatusCode initialize(const std::string &prefix)
Sets up the handles.
Definition: TrackContainerHandlesHelper.cxx:51
python.utils.AtlRunQueryTimer.timer
def timer(name, disabled=False)
Definition: AtlRunQueryTimer.py:86
ActsTrk::TrackFindingAlg::m_maxPropagationStep
Gaudi::Property< unsigned int > m_maxPropagationStep
Definition: TrackFindingAlg.h:99
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
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:302
ActsTrk::TrackFindingAlg::nSeedCollections
std::size_t nSeedCollections() const
Definition: TrackFindingAlg.h:206
ActsTrk::TrackFindingAlg::m_estimatedTrackParametersKeys
SG::ReadHandleKeyArray< ActsTrk::BoundTrackParametersContainer > m_estimatedTrackParametersKeys
Definition: TrackFindingAlg.h:88
ActsTrk::detail::getMeasurementSelector
std::unique_ptr< ActsTrk::IMeasurementSelector > getMeasurementSelector(const ActsTrk::IOnBoundStateCalibratorTool *onTrackCalibratorTool, const std::vector< float > &etaBinsf, const std::vector< std::pair< float, float > > &chi2CutOffOutlier, const std::vector< size_t > &numMeasurementsCutOff)
Definition: AtlasMeasurementSelector.cxx:333
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:270
ActsTrk::TrackFindingAlg::m_uncalibratedMeasurementContainerKeys
SG::ReadHandleKeyArray< xAOD::UncalibratedMeasurementContainer > m_uncalibratedMeasurementContainerKeys
Definition: TrackFindingAlg.h:90
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::TrackFindingAlg::copyStats
void copyStats(const EventStats &event_stat) const
Definition: TrackFindingAlg.cxx:828
ActsTrk::TrackFindingAlg::m_chi2OutlierCutOff
Gaudi::Property< std::vector< double > > m_chi2OutlierCutOff
Definition: TrackFindingAlg.h:105
ActsTrk::TrackFindingAlg::finalize
virtual StatusCode finalize() override
Definition: TrackFindingAlg.cxx:235
ActsTrk::TrackFindingAlg::printStatTables
void printStatTables() const
Definition: TrackFindingAlg.cxx:844
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
ActsTrk::detail::UncalibSourceLinkAccessor
GenUncalibSourceLinkAccessor< MeasurementRangeList > UncalibSourceLinkAccessor
Definition: AtlasUncalibSourceLinkAccessor.h:205
HGTD_ClusterCollection.h
Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration.
ActsTrk::TrackFindingAlg::computeStatSum
std::size_t computeStatSum(std::size_t seed_collection, EStat counter_i, const EventStats &stat) const
Definition: TrackFindingAlg.cxx:1036
OnTrackCalibrator.h
ActsTrk::TrackFindingAlg::kNDuplicateSeeds
@ kNDuplicateSeeds
Definition: TrackFindingAlg.h:144
ActsTrk::TrackFindingAlg::m_seedLabels
Gaudi::Property< std::vector< std::string > > m_seedLabels
Definition: TrackFindingAlg.h:133
SCT_ClusterCollection.h
xAOD::addTrack
@ addTrack
Definition: TrackingPrimitives.h:465
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:307
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ActsTrk::TrackFindingAlg::m_stripCalibTool
ToolHandle< ActsTrk::IOnTrackCalibratorTool< detail::RecoTrackStateContainer > > m_stripCalibTool
Definition: TrackFindingAlg.h:82
makeTable
TableUtils::StatTable< T > makeTable(const std::array< T, N > &counter, const std::array< std::string, N > &label)
Definition: TableUtils.h:521
TableUtils::maxLabelWidth
std::size_t maxLabelWidth(const T_Collection &col)
Definition: TableUtils.h:288
ActsTrk::TrackFindingAlg::findTracks
StatusCode findTracks(const EventContext &ctx, const Acts::TrackingGeometry &trackingGeometry, const ActsTrk::DetectorElementToActsGeometryIdMap &detectorElementToGeoId, const detail::TrackFindingMeasurements &measurements, detail::DuplicateSeedDetector &duplicateSeedDetector, const ActsTrk::BoundTrackParametersContainer &estimatedTrackParameters, const ActsTrk::SeedContainer *seeds, ActsTrk::MutableTrackContainer &tracksContainer, size_t seedCollectionIndex, const char *seedType, EventStats &event_stat) const
invoke track finding procedure
Definition: TrackFindingAlg.cxx:374
lumiFormat.i
int i
Definition: lumiFormat.py:85
ActsTrk::detail::GenUncalibSourceLinkAccessor::range
std::pair< Iterator, Iterator > range(const Acts::Surface &surface) const
Definition: AtlasUncalibSourceLinkAccessor.h:161
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::TrackFindingAlg::m_ptMin
Gaudi::Property< std::vector< double > > m_ptMin
Definition: TrackFindingAlg.h:123
ActsTrk::TrackFindingAlg::storeSeedInfo
void storeSeedInfo(const detail::RecoTrackContainer &tracksContainer, const detail::RecoTrackContainerProxy &track, detail::DuplicateSeedDetector &duplicateSeedDetector) const
Definition: TrackFindingAlg.cxx:786
ActsTrk::detail::TrackFindingMeasurements::measurementContainerOffsets
std::vector< std::pair< const xAOD::UncalibratedMeasurementContainer *, std::size_t > > measurementContainerOffsets() const
Definition: TrackFindingMeasurements.cxx:82
ActsTrk::TrackFindingAlg::initializeMeasurementSelector
StatusCode initializeMeasurementSelector()
Definition: TrackFindingAlg.cxx:1050
plotBeamSpotVert.cuts
string cuts
Definition: plotBeamSpotVert.py:93
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
ActsTrk::TrackFindingAlg::kNStoppedTracksMinPt
@ kNStoppedTracksMinPt
Definition: TrackFindingAlg.h:151
ActsTrk::TrackFindingAlg::m_absEtaMin
Gaudi::Property< double > m_absEtaMin
Definition: TrackFindingAlg.h:121
python.AtlRunQueryLib.options
options
Definition: AtlRunQueryLib.py:379
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
ActsTrk::detail::CKF_config::ckf
CKF ckf
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:44
TrackSummary.h
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
PixelClusterCollection.h
ActsTrk::TrackFindingAlg::m_numMeasurementsCutOff
Gaudi::Property< std::vector< size_t > > m_numMeasurementsCutOff
Definition: TrackFindingAlg.h:106
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
ActsTrk::TrackFindingAlg::m_useDefaultMeasurementSelector
Gaudi::Property< bool > m_useDefaultMeasurementSelector
Definition: TrackFindingAlg.h:136
beamspotman.stat
stat
Definition: beamspotman.py:266
ActsTrk::TrackFindingAlg::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: TrackFindingAlg.h:75
Monitored.h
Header file to be included by clients of the Monitored infrastructure.
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
ActsTrk::TrackFindingAlg::m_measurementSelector
std::unique_ptr< ActsTrk::IMeasurementSelector > m_measurementSelector
Definition: TrackFindingAlg.h:198
ActsTrk::detail::DuplicateSeedDetector::addMeasurement
void addMeasurement(const ActsTrk::ATLASUncalibSourceLink &sl)
Definition: DuplicateSeedDetector.cxx:56
ActsTrk::TrackFindingAlg::kNRejectedRefinedSeeds
@ kNRejectedRefinedSeeds
Definition: TrackFindingAlg.h:146
ActsTrk::TrackFindingAlg::initialize
virtual StatusCode initialize() override
Definition: TrackFindingAlg.cxx:68
ActsTrk::detail::TrackFindingMeasurements::addMeasurements
void addMeasurements(std::size_t typeIndex, const xAOD::UncalibratedMeasurementContainer &clusterContainer, const DetectorElementToActsGeometryIdMap &detectorElementToGeoid)
Definition: TrackFindingMeasurements.cxx:14
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:273
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
RIO_OnTrack.h
checkNSWValTree.Options
Options
Definition: checkNSWValTree.py:15
AtlasMeasurementSelector.h
ActsTrk::TrackFindingAlg::kMultipleBranches
@ kMultipleBranches
Definition: TrackFindingAlg.h:149
ActsTrk::detail::DuplicateSeedDetector::newTrajectory
void newTrajectory()
Definition: DuplicateSeedDetector.cxx:44
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
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:446
ActsTrk::detail::TrackFindingMeasurements::measurementRanges
const ActsTrk::detail::MeasurementRangeList & measurementRanges() const
ActsTrk::TrackFindingAlg::~TrackFindingAlg
virtual ~TrackFindingAlg()
ActsTrk::TrackFindingAlg::m_chi2CutOff
Gaudi::Property< std::vector< double > > m_chi2CutOff
Definition: TrackFindingAlg.h:104
ActsTrk::detail::Stepper
Acts::SympyStepper Stepper
Adapted from Acts Examples/Algorithms/TrackFinding/src/TrackFindingAlgorithmFunction....
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:30
ActsTrk::TrackFindingAlg::m_doBranchStopper
Gaudi::Property< bool > m_doBranchStopper
Definition: TrackFindingAlg.h:109
TableUtils::makeEtaBinLabel
std::string makeEtaBinLabel(const std::vector< float > &eta_bins, std::size_t eta_bin_i, bool abs_eta=false)
Definition: TableUtils.h:512
ActsTrk::detail::DuplicateSeedDetector::isDuplicate
bool isDuplicate(std::size_t typeIndex, std::size_t iseed)
Definition: DuplicateSeedDetector.cxx:75
ActsTrk::TrackFindingAlg::m_skipDuplicateSeeds
Gaudi::Property< bool > m_skipDuplicateSeeds
Definition: TrackFindingAlg.h:100
mergePhysValFiles.categories
list categories
Definition: PhysicsAnalysis/JetTagging/JetTagValidation/JetTagDQA/scripts/mergePhysValFiles.py:18
ActsTrk::detail::CKF_config::measurementSelector
Acts::MeasurementSelector measurementSelector
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:46
ActsTrk::TrackFindingAlg::CKF_pimpl
Definition: TrackFindingAlg.cxx:52
FitterHelperFunctions.h
ActsTrk::TrackFindingAlg::getStatCategory
std::size_t getStatCategory(std::size_t seed_collection, float eta) const
Definition: TrackFindingAlg.cxx:1026
ActsTrk::TrackFindingAlg::initStatTables
void initStatTables()
Definition: TrackFindingAlg.cxx:809
ActsTrk::detail::Propagator
Acts::Propagator< Stepper, Navigator > Propagator
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:32
python.compareTCTs.ratio
ratio
Definition: compareTCTs.py:295
ActsTrk::TrackFindingAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: TrackFindingAlg.cxx:243
TrackFindingAlg.h
ActsTrk::TrackFindingAlg::m_etaMin
Gaudi::Property< std::vector< double > > m_etaMin
Definition: TrackFindingAlg.h:119
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
ActsTrk::TrackFindingAlg::kNStat
@ kNStat
Definition: TrackFindingAlg.h:153
ActsTrk::TrackFindingAlg::m_minMeasurements
Gaudi::Property< std::vector< std::size_t > > m_minMeasurements
Definition: TrackFindingAlg.h:125
ActsTrk::detail::TrackFindingMeasurements::measurementOffsets
const std::vector< std::size_t > & measurementOffsets() const
DeMoScan.first
bool first
Definition: DeMoScan.py:536
ActsTrk::TrackFindingAlg::m_ptMinMeasurements
Gaudi::Property< std::vector< std::size_t > > m_ptMinMeasurements
Definition: TrackFindingAlg.h:107
plotBeamSpotMon.mon
mon
Definition: plotBeamSpotMon.py:67
ActsTrk::TrackFindingAlg::m_logger
std::unique_ptr< const Acts::Logger > m_logger
logging instance
Definition: TrackFindingAlg.h:228
ActsTrk::TrackFindingAlg::m_trackStatePrinter
ToolHandle< ActsTrk::TrackStatePrinter > m_trackStatePrinter
Definition: TrackFindingAlg.h:78
ActsTrk::TrackFindingAlg::m_tracksBackendHandlesHelper
ActsTrk::MutableTrackContainerHandlesHelper m_tracksBackendHandlesHelper
Definition: TrackFindingAlg.h:96
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
ActsTrk::TrackFindingAlg::m_trackFinder
std::unique_ptr< CKF_pimpl > m_trackFinder
Definition: TrackFindingAlg.h:199
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
ActsTrk::TrackFindingAlg::m_doTwoWay
Gaudi::Property< bool > m_doTwoWay
Definition: TrackFindingAlg.h:110
ActsTrk::TrackFindingAlg::EventStats
std::vector< std::array< unsigned int, kNStat > > EventStats
Definition: TrackFindingAlg.h:155
ActsTrk::TrackFindingAlg::m_trackContainerKey
SG::WriteHandleKey< ActsTrk::TrackContainer > m_trackContainerKey
Definition: TrackFindingAlg.h:95
ActsTrk::TrackFindingAlg::m_reverseSearch
Gaudi::Property< std::vector< bool > > m_reverseSearch
Definition: TrackFindingAlg.h:111
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
ActsTrk::TrackFindingAlg::kNTotalSeeds
@ kNTotalSeeds
Definition: TrackFindingAlg.h:140
ActsTrk::TrackFindingAlg::kNSelectedTracks
@ kNSelectedTracks
Definition: TrackFindingAlg.h:147
ActsTrk::TrackFindingAlg::kNoSecond
@ kNoSecond
Definition: TrackFindingAlg.h:150
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MuonDetectorBuilderTool.cxx:49
ActsTrk::TrackFindingAlg::m_absEtaMaxMeasurements
Gaudi::Property< std::vector< std::size_t > > m_absEtaMaxMeasurements
Definition: TrackFindingAlg.h:108
ActsTrk::TrackFindingAlg::m_etaBins
Gaudi::Property< std::vector< double > > m_etaBins
Definition: TrackFindingAlg.h:102
ActsTrk::TrackFindingAlg::m_maxChi2
Gaudi::Property< std::vector< double > > m_maxChi2
Definition: TrackFindingAlg.h:129
ActsTrk::TrackFindingAlg::seedCollectionStride
std::size_t seedCollectionStride() const
Definition: TrackFindingAlg.h:210
TableUtils.h
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
TableUtils::makeRatioDefinition
std::tuple< std::string, RatioDefinition > makeRatioDefinition(std::string &&name, std::vector< SummandDefinition > &&numerator, std::vector< SummandDefinition > &&denominator)
Definition: TableUtils.h:436
ActsTrk::TrackFindingAlg::m_ptMax
Gaudi::Property< std::vector< double > > m_ptMax
Definition: TrackFindingAlg.h:124
ActsTrk::detail::OnTrackCalibrator
Definition: IOnTrackCalibratorTool.h:14
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:471
ToolStore.h
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
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:400
Logger.h
PixelClusterOnTrack.h
ActsTrk::TrackFindingAlg::m_phiMax
Gaudi::Property< std::vector< double > > m_phiMax
Definition: TrackFindingAlg.h:118
ActsTrk::TrackFindingAlg::EStat
EStat
Definition: TrackFindingAlg.h:139
ActsTrk::MutableTrackContainer
Definition: TrackContainer.h:122
ActsTrk::TrackFindingAlg::m_dumpAllStatEtaBins
Gaudi::Property< bool > m_dumpAllStatEtaBins
Definition: TrackFindingAlg.h:134
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
TrackContainer.h
ActsTrk::TrackFindingAlg::m_etaMax
Gaudi::Property< std::vector< double > > m_etaMax
Definition: TrackFindingAlg.h:120
Monitored::Timer
A monitored timer.
Definition: MonitoredTimer.h:32
ActsTrk::detail::CKF_config::ckfExtensions
Acts::CombinatorialKalmanFilterExtensions< RecoTrackContainer > ckfExtensions
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:47
checkFileSG.ind
list ind
Definition: checkFileSG.py:118
ActsTrk::detail::DuplicateSeedDetector
Definition: DuplicateSeedDetector.h:19
HGTD_ClusterOnTrack.h
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration.
ActsTrk::TrackFindingAlg::kNStoppedTracksMaxHoles
@ kNStoppedTracksMaxHoles
Definition: TrackFindingAlg.h:148
ActsTrk::TrackFindingAlg::m_fitterTool
ToolHandle< ActsTrk::IFitterTool > m_fitterTool
Definition: TrackFindingAlg.h:79
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
ActsTrk::TrackFindingAlg::m_pixelCalibTool
ToolHandle< ActsTrk::IOnTrackCalibratorTool< detail::RecoTrackStateContainer > > m_pixelCalibTool
Definition: TrackFindingAlg.h:80
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
ActsTrk::TrackFindingAlg::m_maxHoles
Gaudi::Property< std::vector< std::size_t > > m_maxHoles
Definition: TrackFindingAlg.h:126