Loading [MathJax]/jax/output/SVG/config.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
TrackFindingAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 #include "src/TrackFindingAlg.h"
5 
6 // Athena
7 #include "AsgTools/ToolStore.h"
18 
19 // ACTS
20 #include "Acts/Definitions/Units.hpp"
21 #include "Acts/Geometry/TrackingGeometry.hpp"
22 #include "Acts/Geometry/GeometryIdentifier.hpp"
23 #include "Acts/MagneticField/MagneticFieldProvider.hpp"
24 #include "Acts/Surfaces/Surface.hpp"
25 #include "Acts/TrackFinding/CombinatorialKalmanFilter.hpp"
26 #include "Acts/Surfaces/PerigeeSurface.hpp"
27 #include "Acts/Utilities/TrackHelpers.hpp"
28 #include "Acts/TrackFitting/MbfSmoother.hpp"
29 
30 // ActsTrk
35 #include "ActsInterop/Logger.h"
36 #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);
83  ATH_MSG_DEBUG(" " << m_doTwoWay);
87  ATH_MSG_DEBUG(" " << m_phiMin);
88  ATH_MSG_DEBUG(" " << m_phiMax);
89  ATH_MSG_DEBUG(" " << m_etaMin);
90  ATH_MSG_DEBUG(" " << m_etaMax);
91  ATH_MSG_DEBUG(" " << m_absEtaMin);
92  ATH_MSG_DEBUG(" " << m_absEtaMax);
93  ATH_MSG_DEBUG(" " << m_ptMin);
94  ATH_MSG_DEBUG(" " << m_ptMax);
95  ATH_MSG_DEBUG(" " << m_z0Min);
96  ATH_MSG_DEBUG(" " << m_z0Max);
100  ATH_MSG_DEBUG(" " << m_maxHoles);
107  ATH_MSG_DEBUG(" " << m_maxChi2);
109  ATH_MSG_DEBUG(" " << m_seedLabels);
113 
114  // Read and Write handles
115  ATH_CHECK(m_seedContainerKeys.initialize());
116  ATH_CHECK(m_detEleCollKeys.initialize());
120  ATH_CHECK(m_detElStatus.initialize());
121 
124 
125  if (m_seedContainerKeys.size() != m_detEleCollKeys.size())
126  {
127  ATH_MSG_FATAL("There are " << m_detEleCollKeys.size() << " DetectorElementsKeys, but " << m_seedContainerKeys.size() << " SeedContainerKeys");
128  return StatusCode::FAILURE;
129  }
130 
131  if (m_detEleCollKeys.size() != m_seedLabels.size())
132  {
133  ATH_MSG_FATAL("There are " << m_seedLabels.size() << " SeedLabels, but " << m_detEleCollKeys.size() << " DetectorElementsKeys");
134  return StatusCode::FAILURE;
135  }
136 
137  if (m_useTopSpRZboundary.size() != 2)
138  {
139  ATH_MSG_FATAL("useTopSpRZboundary must have 2 elements, but has " << m_useTopSpRZboundary.size());
140  return StatusCode::FAILURE;
141  }
142 
143  ATH_CHECK(m_monTool.retrieve(EnableTool{not m_monTool.empty()}));
144  ATH_CHECK(m_trackingGeometryTool.retrieve());
145  ATH_CHECK(m_extrapolationTool.retrieve());
146  ATH_CHECK(m_trackStatePrinter.retrieve(EnableTool{not m_trackStatePrinter.empty()}));
147  ATH_CHECK(m_ATLASConverterTool.retrieve());
148  ATH_CHECK(m_paramEstimationTool.retrieve());
149  ATH_CHECK(m_fitterTool.retrieve());
150  ATH_CHECK(m_pixelCalibTool.retrieve(EnableTool{not m_pixelCalibTool.empty()}));
151  ATH_CHECK(m_stripCalibTool.retrieve(EnableTool{not m_stripCalibTool.empty()}));
152  ATH_CHECK(m_hgtdCalibTool.retrieve(EnableTool{not m_hgtdCalibTool.empty()}));
153 
154  m_logger = makeActsAthenaLogger(this, "Acts");
155 
156  auto magneticField = std::make_unique<ATLASMagneticFieldWrapper>();
157  auto trackingGeometry = m_trackingGeometryTool->trackingGeometry();
158 
159  detail::Stepper stepper(std::move(magneticField));
160  detail::Navigator::Config config{trackingGeometry};
161  config.resolvePassive = false;
162  config.resolveMaterial = true;
163  config.resolveSensitive = true;
164  detail::Navigator navigator(config, logger().cloneWithSuffix("Navigator"));
165  detail::Propagator propagator(std::move(stepper), std::move(navigator), logger().cloneWithSuffix("Prop"));
166 
167  // Using the CKF propagator as extrapolator
168  detail::Extrapolator extrapolator = propagator;
169 
170  // m_etaBins (from flags.Tracking.ActiveConfig.etaBins) includes a dummy first and last bin, which we ignore
171  std::vector<double> absEtaEdges;
172  if (m_etaBins.size() <= 2)
173  {
174  absEtaEdges.reserve(2ul);
175  absEtaEdges.push_back(0.0);
176  absEtaEdges.push_back(std::numeric_limits<double>::infinity());
177  }
178  else
179  {
180  absEtaEdges.reserve(m_etaBins.size());
181  absEtaEdges.push_back(m_absEtaMin);
182  absEtaEdges.insert(absEtaEdges.end(), m_etaBins.begin() + 1, m_etaBins.end() - 1);
183  absEtaEdges.push_back(m_absEtaMax);
184  }
185 
186  auto setCut = [](auto &cfgVal, const auto &cuts, size_t ind) -> void
187  {
188  if (cuts.empty())
189  return;
190  cfgVal = (ind < cuts.size()) ? cuts[ind] : cuts[cuts.size() - 1];
191  };
192 
193  Acts::TrackSelector::EtaBinnedConfig trackSelectorCfg{std::move(absEtaEdges)};
194  if (m_etaBins.size() <= 2)
195  {
196  assert(trackSelectorCfg.cutSets.size() == 1);
197  trackSelectorCfg.cutSets[0].absEtaMin = m_absEtaMin;
198  trackSelectorCfg.cutSets[0].absEtaMax = m_absEtaMax;
199  }
200  size_t cutIndex = 0;
201  for (auto &cfg : trackSelectorCfg.cutSets)
202  {
203  setCut(cfg.phiMin, m_phiMin, cutIndex);
204  setCut(cfg.phiMax, m_phiMax, cutIndex);
205  setCut(cfg.etaMin, m_etaMin, cutIndex);
206  setCut(cfg.etaMax, m_etaMax, cutIndex);
207  setCut(cfg.ptMin, m_ptMin, cutIndex);
208  setCut(cfg.ptMax, m_ptMax, cutIndex);
209  setCut(cfg.loc0Min, m_d0Min, cutIndex);
210  setCut(cfg.loc0Max, m_d0Max, cutIndex);
211  setCut(cfg.loc1Min, m_z0Min, cutIndex);
212  setCut(cfg.loc1Max, m_z0Max, cutIndex);
213  setCut(cfg.minMeasurements, m_minMeasurements, cutIndex);
214  setCut(cfg.maxHoles, m_maxHoles, cutIndex);
215  setCut(cfg.maxOutliers, m_maxOutliers, cutIndex);
216  setCut(cfg.maxSharedHits, m_maxSharedHits, cutIndex);
217  setCut(cfg.maxChi2, m_maxChi2, cutIndex);
218  ++cutIndex;
219  }
220 
221  ATH_MSG_INFO(trackSelectorCfg);
222 
223  // initializer measurement selector and connect it to the delegates of the track finder optins
225 
226  detail::CKF_config ckfConfig{
227  std::move(extrapolator),
228  detail::CKF{std::move(propagator), logger().cloneWithSuffix("CKF")},
229  {},
230  Acts::TrackSelector{trackSelectorCfg}};
231 
232  m_trackFinder = std::make_unique<CKF_pimpl>(std::move(ckfConfig));
233 
234  trackFinder().ckfExtensions.updater.connect<&ActsTrk::detail::FitterHelperFunctions::gainMatrixUpdate<detail::RecoTrackStateContainer>>();
235  initStatTables();
236 
237  return StatusCode::SUCCESS;
238  }
239 
240  // === finalize ============================================================
241 
243  {
244  printStatTables();
245  return StatusCode::SUCCESS;
246  }
247 
248  // === execute =============================================================
249 
250  StatusCode TrackFindingAlg::execute(const EventContext &ctx) const
251  {
252  ATH_MSG_DEBUG("Executing " << name() << " ... ");
253 
254  auto timer = Monitored::Timer<std::chrono::milliseconds>("TIME_execute");
255  auto mon_nTracks = Monitored::Scalar<int>("nTracks");
256  auto mon = Monitored::Group(m_monTool, timer, mon_nTracks);
257 
258  // ================================================== //
259  // ===================== INPUTS ===================== //
260  // ================================================== //
261 
262  // SEED TRIPLETS
263  std::vector<const ActsTrk::SeedContainer *> seedContainers;
264  std::size_t total_seeds = 0;
265  ATH_CHECK(getContainersFromKeys(ctx, m_seedContainerKeys, seedContainers, total_seeds));
266 
267  // MEASUREMENTS
268  std::vector<const xAOD::UncalibratedMeasurementContainer *> uncalibratedMeasurementContainers;
269  std::size_t total_measurements = 0;
270  ATH_CHECK(getContainersFromKeys(ctx, m_uncalibratedMeasurementContainerKeys, uncalibratedMeasurementContainers, total_measurements));
271 
273  detectorElementToGeometryIdMap{m_detectorElementToGeometryIdMapKey, ctx};
274  ATH_CHECK(detectorElementToGeometryIdMap.isValid());
275 
276  // map detector element status to volume ids
278  volumeIdToDetectorElementCollMap(m_volumeIdToDetectorElementCollMapKey,ctx);
279  ATH_CHECK(volumeIdToDetectorElementCollMap.isValid());
280  std::vector< const InDet::SiDetectorElementStatus *> det_el_status_arr;
281  const std::vector<const InDetDD::SiDetectorElementCollection*> &det_el_collections =volumeIdToDetectorElementCollMap->collections();
282  det_el_status_arr.resize( det_el_collections.size(), nullptr);
283  for (const SG::ReadHandleKey<InDet::SiDetectorElementStatus> &det_el_status_key : m_detElStatus) {
284  SG::ReadHandle<InDet::SiDetectorElementStatus> det_el_status(det_el_status_key,ctx);
285  ATH_CHECK( det_el_status.isValid());
286  const std::vector<const InDetDD::SiDetectorElementCollection*>::const_iterator
287  det_el_col_iter = std::find(det_el_collections.begin(),
288  det_el_collections.end(),
289  &det_el_status->getDetectorElements());
290  det_el_status_arr.at(det_el_col_iter - det_el_collections.begin()) = det_el_status.cptr();
291  }
292 
293  detail::TrackFindingMeasurements measurements(uncalibratedMeasurementContainers.size() /* number of measurement containers*/);
294  std::size_t measurementIndexContainersSize = (m_skipDuplicateSeeds || m_countSharedHits || m_trackStatePrinter.isSet()) ? uncalibratedMeasurementContainers.size() : 0ul;
295  detail::MeasurementIndex measurementIndex(measurementIndexContainersSize);
296  detail::SharedHitCounter sharedHits;
297 
298  for (std::size_t icontainer = 0; icontainer < uncalibratedMeasurementContainers.size(); ++icontainer) {
299  ATH_MSG_DEBUG("Create " << uncalibratedMeasurementContainers[icontainer]->size() << " source links from measurements in " << m_uncalibratedMeasurementContainerKeys[icontainer].key());
300  measurements.addMeasurements(icontainer,
301  *uncalibratedMeasurementContainers[icontainer],
302  **detectorElementToGeometryIdMap);
303  if (measurementIndexContainersSize > 0ul)
304  measurementIndex.addMeasurements(*uncalibratedMeasurementContainers[icontainer]);
305  }
306 
307  ATH_MSG_DEBUG("measurement index size = " << measurementIndex.size());
308 
309  ATH_CHECK( propagateDetectorElementStatusToMeasurements(*(volumeIdToDetectorElementCollMap.cptr()), det_el_status_arr, measurements) );
310 
311  if (m_trackStatePrinter.isSet()) {
312  m_trackStatePrinter->printMeasurements(ctx, uncalibratedMeasurementContainers, **detectorElementToGeometryIdMap, measurements.measurementOffsets());
313  }
314 
315  detail::DuplicateSeedDetector duplicateSeedDetector(total_seeds, m_skipDuplicateSeeds);
316  for (std::size_t icontainer = 0; icontainer < seedContainers.size(); ++icontainer)
317  {
318  duplicateSeedDetector.addSeeds(icontainer, *seedContainers[icontainer], measurementIndex);
319  }
320 
321  // ================================================== //
322  // ===================== CONDS ====================== //
323  // ================================================== //
324 
325  std::vector<const InDetDD::SiDetectorElementCollection*> detElementsCollections;
326  std::size_t total_detElems = 0;
327  ATH_CHECK(getContainersFromKeys(ctx, m_detEleCollKeys, detElementsCollections, total_detElems));
328 
329  // ================================================== //
330  // ===================== COMPUTATION ================ //
331  // ================================================== //
332  ActsTrk::MutableTrackContainer tracksContainer;
333  EventStats event_stat;
334  event_stat.resize(m_stat.size());
335 
336  // Perform the track finding for all initial parameters.
337  for (std::size_t icontainer = 0; icontainer < seedContainers.size(); ++icontainer)
338  {
339  ATH_CHECK(findTracks(ctx,
340  **detectorElementToGeometryIdMap,
341  measurements,
342  measurementIndex,
343  sharedHits,
344  duplicateSeedDetector,
345  *seedContainers.at(icontainer),
346  *detElementsCollections.at(icontainer),
347  tracksContainer,
348  icontainer,
349  icontainer < m_seedLabels.size() ? m_seedLabels[icontainer].c_str() : m_seedContainerKeys[icontainer].key().c_str(),
350  event_stat));
351  }
352 
353  ATH_MSG_DEBUG(" \\__ Created " << tracksContainer.size() << " tracks");
354 
355  mon_nTracks = tracksContainer.size();
356 
357  copyStats(event_stat);
358 
359  std::unique_ptr<ActsTrk::TrackContainer> constTracksContainer = m_tracksBackendHandlesHelper.moveToConst(std::move(tracksContainer),
360  m_trackingGeometryTool->getGeometryContext(ctx).context(), ctx);
361  // ================================================== //
362  // ===================== OUTPUTS ==================== //
363  // ================================================== //
364  auto trackContainerHandle = SG::makeHandle(m_trackContainerKey, ctx);
365  ATH_MSG_DEBUG(" \\__ Tracks Container `" << m_trackContainerKey.key() << "` created ...");
366 
367  ATH_CHECK(trackContainerHandle.record(std::move(constTracksContainer)));
368  if (!trackContainerHandle.isValid())
369  {
370  ATH_MSG_FATAL("Failed to write TrackContainer with key " << m_trackContainerKey.key());
371  return StatusCode::FAILURE;
372  }
373 
374  return StatusCode::SUCCESS;
375  }
376 
378  const auto& bottom_sp = seed.sp().front();
379 
380  const double r = bottom_sp->radius();
381  const double z = std::abs(bottom_sp->z());
382 
383  const double rBoundary = m_useTopSpRZboundary.value()[0];
384  const double zBoundary = m_useTopSpRZboundary.value()[1];
385 
386  return r > rBoundary || z > zBoundary;
387  }
388 
389  std::unique_ptr<ActsTrk::IMeasurementSelector> TrackFindingAlg::setMeasurementSelector(
390  const detail::TrackFindingMeasurements &measurements,
391  TrackFinderOptions &options) const {
392  ATH_MSG_DEBUG(name() << "::" << __FUNCTION__);
393 
394  std::unique_ptr<ActsTrk::IMeasurementSelector> measurementSelector = ActsTrk::detail::getMeasurementSelector(
395  m_pixelCalibTool.isEnabled() ? &(*m_pixelCalibTool) : nullptr,
396  measurements.measurementRanges(),
399  m_numMeasurementsCutOff.value());
400 
401  measurementSelector->connect(&options.extensions.createTrackStates);
402 
403  return measurementSelector;
404  }
405 
406  // === findTracks ==========================================================
407 
408  StatusCode
409  TrackFindingAlg::findTracks(const EventContext &ctx,
410  const ActsTrk::DetectorElementToActsGeometryIdMap &detectorElementToGeoId,
411  const detail::TrackFindingMeasurements &measurements,
412  const detail::MeasurementIndex &measurementIndex,
413  detail::SharedHitCounter &sharedHits,
414  detail::DuplicateSeedDetector &duplicateSeedDetector,
415  const ActsTrk::SeedContainer &seeds,
416  const InDetDD::SiDetectorElementCollection& detElements,
417  ActsTrk::MutableTrackContainer &tracksContainer,
418  std::size_t typeIndex,
419  const char *seedType,
420  EventStats &event_stat) const
421  {
422  ATH_MSG_DEBUG(name() << "::" << __FUNCTION__);
423 
424  // Construct a perigee surface as the target surface
425  auto pSurface = Acts::Surface::makeShared<Acts::PerigeeSurface>(Acts::Vector3::Zero());
426 
427  DetectorContextHolder detContext {
428  .geometry = m_trackingGeometryTool->getGeometryContext(ctx).context(),
429  .magField = m_extrapolationTool->getMagneticFieldContext(ctx),
430  // CalibrationContext converter not implemented yet.
431  .calib = Acts::CalibrationContext()
432  };
433 
434  auto [options, secondOptions, measurementSelector] = getDefaultOptions(detContext, measurements, pSurface.get());
435 
436  // ActsTrk::MutableTrackContainer tracksContainerTemp;
437  Acts::VectorTrackContainer trackBackend;
438  Acts::VectorMultiTrajectory trackStateBackend;
439  detail::RecoTrackContainer tracksContainerTemp(trackBackend, trackStateBackend);
440 
441  if (m_addPixelStripCounts) {
442  addPixelStripCounts(tracksContainerTemp);
443  }
444 
445  std::size_t category_i = 0;
446  const auto &trackSelectorCfg = trackFinder().trackSelector.config();
447  auto stopBranchProxy = [&](const detail::RecoTrackContainer::TrackProxy &track,
448  const detail::RecoTrackContainer::TrackStateProxy &trackState) -> BranchStopperResult {
449  return stopBranch(track, trackState, trackSelectorCfg, detContext.geometry, measurementIndex, typeIndex, event_stat[category_i]);
450  };
451  options.extensions.branchStopper.connect(stopBranchProxy);
452 
453  Acts::PropagatorOptions<detail::Stepper::Options, detail::Navigator::Options,
454  Acts::ActorList<Acts::MaterialInteractor>>
455  extrapolationOptions(detContext.geometry, detContext.magField);
456 
457  Acts::TrackExtrapolationStrategy extrapolationStrategy =
459 
460  // Perform the track finding for all initial parameters
461  ATH_MSG_DEBUG("Invoke track finding with " << seeds.size() << ' ' << seedType << " seeds.");
462 
463  std::size_t nPrinted = 0;
464  auto printSeed = [&](unsigned int iseed, const Acts::BoundTrackParameters &seedParameters, bool isKF = false)
465  {
466  if (!m_trackStatePrinter.isSet())
467  return;
468  if (!nPrinted++)
469  {
470  ATH_MSG_INFO("CKF results for " << seeds.size() << ' ' << seedType << " seeds:");
471  }
472  m_trackStatePrinter->printSeed(detContext.geometry, *seeds[iseed], seedParameters, measurementIndex, iseed, isKF);
473  };
474 
475  // Loop over the track finding results for all initial parameters
476  for (unsigned int iseed = 0; iseed < seeds.size(); ++iseed)
477  {
478  const ActsTrk::Seed& seed = *seeds[iseed];
479 
480  category_i = typeIndex * (m_statEtaBins.size() + 1);
481  tracksContainerTemp.clear();
482 
483  const bool reverseSearch = m_autoReverseSearch && shouldReverseSearch(seed);
484  const bool refitSeeds = typeIndex < m_refitSeeds.size() && m_refitSeeds[typeIndex];
485  const bool useTopSp = reverseSearch && !refitSeeds;
486 
487  auto getSeedCategory = [this, useTopSp](std::size_t typeIndex, const ActsTrk::Seed& seed) -> std::size_t {
488  const xAOD::SpacePoint* sp = useTopSp ? seed.sp().back() : seed.sp().front();
490  double etaSeed = std::atanh(pos[2] / pos.norm());
491  return getStatCategory(typeIndex, etaSeed);
492  };
493 
494  const bool isDupSeed = duplicateSeedDetector.isDuplicate(typeIndex, iseed);
495  if (isDupSeed) {
496  ATH_MSG_DEBUG("skip " << seedType << " seed " << iseed << " - already found");
497  category_i = getSeedCategory(typeIndex, seed);
498  ++event_stat[category_i][kNTotalSeeds];
499  ++event_stat[category_i][kNDuplicateSeeds];
500  if (!m_trackStatePrinter.isSet()) continue; // delay continue to estimate track parms for TrackStatePrinter?
501  }
502 
503  options.propagatorPlainOptions.direction = reverseSearch ? Acts::Direction::Backward() : Acts::Direction::Forward();
504  secondOptions.propagatorPlainOptions.direction = options.propagatorPlainOptions.direction.invert();
505  options.targetSurface = reverseSearch ? pSurface.get() : nullptr;
506  secondOptions.targetSurface = reverseSearch ? nullptr : pSurface.get();
507  // TODO since the second pass is strictly an extension we should have a separate branch stopper which never drops and always extrapolates to the target surface
508 
509  // Estimate Track Parameters
510  auto retrieveSurfaceFunction =
511  [this, &detElements] (const ActsTrk::Seed& seed, bool useTopSp) -> const Acts::Surface& {
512  const xAOD::SpacePoint* sp = useTopSp ? seed.sp().back() : seed.sp().front();
513  const InDetDD::SiDetectorElement* element = detElements.getDetectorElement(
514  useTopSp ? sp->elementIdList().back()
515  : sp->elementIdList().front());
516  const Trk::Surface& atlas_surface = element->surface();
517  return this->m_ATLASConverterTool->trkSurfaceToActsSurface(atlas_surface);
518  };
519 
520  std::optional<Acts::BoundTrackParameters> optTrackParams =
521  m_paramEstimationTool->estimateTrackParameters(
522  seed,
523  useTopSp,
524  detContext.geometry,
525  detContext.magField,
526  retrieveSurfaceFunction);
527 
528  if (!optTrackParams) {
529  ATH_MSG_DEBUG("Failed to estimate track parameters for seed " << iseed);
530  if (!isDupSeed) {
531  category_i = getSeedCategory(typeIndex, seed);
532  ++event_stat[category_i][kNTotalSeeds];
533  ++event_stat[category_i][kNNoEstimatedParams];
534  }
535  continue;
536  }
537 
538  Acts::BoundTrackParameters *initialParameters = &(*optTrackParams);
539  printSeed(iseed, *initialParameters);
540  if (isDupSeed) continue; // skip now if not done before
541 
542  double etaInitial = -std::log(std::tan(0.5 * initialParameters->theta()));
543  category_i = getStatCategory(typeIndex, etaInitial);
544  ++event_stat[category_i][kNTotalSeeds]; // also updated for duplicate seeds
545  ++event_stat[category_i][kNUsedSeeds];
546 
547  std::unique_ptr<Acts::BoundTrackParameters> refitSeedParameters;
548  if (refitSeeds) {
549  refitSeedParameters = doRefit(ctx, seed, *initialParameters, detContext, detectorElementToGeoId, reverseSearch);
550  if (refitSeedParameters.get() == nullptr) {
551  ++event_stat[category_i][kNRejectedRefinedSeeds];
552  continue;
553  }
554  if (refitSeedParameters.get() != initialParameters) {
555  initialParameters = refitSeedParameters.get();
556  printSeed(iseed, *initialParameters, true);
557  }
558  }
559 
560  // Get the Acts tracks, given this seed
561  // Result here contains a vector of TrackProxy objects
562 
563  auto result = trackFinder().ckf.findTracks(*initialParameters, options, tracksContainerTemp);
564 
565  // The result for this seed
566  if (not result.ok()) {
567  ATH_MSG_WARNING("Track finding failed for " << seedType << " seed " << iseed << " with error" << result.error());
568  continue;
569  }
570  auto &tracksForSeed = result.value();
571 
572  size_t ntracks = 0;
573 
574  // lambda to collect together all the things we do with a viable track.
575  auto addTrack = [&](detail::RecoTrackContainerProxy &track) {
576  // if the the perigeeSurface was not hit (in particular the case for the inside-out pass,
577  // the track has no reference surface and the extrapolation to the perigee has not been done
578  // yet.
579  if (!track.hasReferenceSurface()) {
580  auto extrapolationResult = Acts::extrapolateTrackToReferenceSurface(
581  track, *pSurface, trackFinder().extrapolator, extrapolationOptions,
582  extrapolationStrategy, logger());
583  if (!extrapolationResult.ok()) {
584  ATH_MSG_WARNING("Extrapolation for seed "
585  << iseed << " and " << track.index()
586  << " failed with error " << extrapolationResult.error()
587  << " dropping track candidate.");
588  return;
589  }
590  }
591 
592  Acts::trimTrack(track, true, true, true, true);
593  Acts::calculateTrackQuantities(track);
594  if (m_addPixelStripCounts) {
595  initPixelStripCounts(track);
596  for (const auto trackState : track.trackStatesReversed()) {
597  updatePixelStripCounts(track, trackState.typeFlags(), measurementType(trackState));
598  }
599  checkPixelStripCounts(track);
600  }
601 
602  ++ntracks;
603  ++event_stat[category_i][kNOutputTracks];
604 
605  auto selectPixelStripCountsFinal = [this](const detail::RecoTrackContainer::TrackProxy &track) {
606  if (!m_addPixelStripCounts) return true;
607  double eta = -std::log(std::tan(0.5 * track.theta()));
608  auto [enoughMeasurementsPS, tooManyHolesPS, tooManyOutliersPS] = selectPixelStripCounts(track, eta);
609  return enoughMeasurementsPS && !tooManyHolesPS && !tooManyOutliersPS;
610  };
611  if (trackFinder().trackSelector.isValidTrack(track) &&
612  selectPixelStripCountsFinal(track)) {
613 
614  // Fill the track infos into the duplicate seed detector
615  if (m_skipDuplicateSeeds) {
616  storeSeedInfo(tracksContainerTemp, track, duplicateSeedDetector, measurementIndex);
617  }
618 
619  // copy selected track into output tracksContainer
620  auto destProxy = tracksContainer.getTrack(tracksContainer.addTrack());
621  destProxy.copyFrom(track, true); // make sure we copy track states!
622 
623  if (m_countSharedHits) {
624  auto [nShared, nBadTrackMeasurements] = sharedHits.computeSharedHits(destProxy, tracksContainer, measurementIndex);
625  if (nBadTrackMeasurements > 0)
626  ATH_MSG_ERROR("computeSharedHits: " << nBadTrackMeasurements << " track measurements not found in input for " << seedType << " seed " << iseed << " track");
627  ATH_MSG_DEBUG("found " << destProxy.nSharedHits() << " shared hits in " << seedType << " seed " << iseed << " track");
628  event_stat[category_i][kNTotalSharedHits] += nShared;
629  }
630 
631  ++event_stat[category_i][kNSelectedTracks];
632 
633  if (m_trackStatePrinter.isSet()) {
634  m_trackStatePrinter->printTrack(detContext.geometry, tracksContainer, destProxy, measurementIndex);
635  }
636 
637  } else {
638  ATH_MSG_DEBUG("Track " << ntracks << " from " << seedType << " seed " << iseed << " failed track selection");
639  if (m_trackStatePrinter.isSet()) {
640  m_trackStatePrinter->printTrack(detContext.geometry, tracksContainerTemp, track, measurementIndex, true);
641  }
642  }
643  };
644 
645  std::size_t nfirst = 0;
646  for (TrkProxy &firstTrack : tracksForSeed) {
647  auto smoothingResult = Acts::smoothTrack(detContext.geometry, firstTrack, logger(), Acts::MbfSmoother());
648  if (!smoothingResult.ok()) {
649  ATH_MSG_DEBUG("Smoothing for seed "
650  << iseed << " and first track " << firstTrack.index()
651  << " failed with error " << smoothingResult.error());
652  continue;
653  }
654 
655  const std::size_t nsecond =
656  m_doTwoWay ? doTwoWayTrackFinding(addTrack, firstTrack, tracksContainerTemp, secondOptions, detContext.geometry, reverseSearch)
657  : 0;
658 
659  if (nsecond == 0) {
660  if (m_doTwoWay) {
661  ATH_MSG_DEBUG("No viable result from second track finding for " << seedType << " seed " << iseed << " track " << nfirst);
662  ++event_stat[category_i][kNoSecond];
663  }
664 
665  addTrack(firstTrack);
666  }
667  nfirst++;
668  }
669  if (ntracks == 0) {
670  ATH_MSG_DEBUG("Track finding found no track candidates for " << seedType << " seed " << iseed);
671  ++event_stat[category_i][kNoTrack];
672  } else if (ntracks >= 2) {
673  ++event_stat[category_i][kMultipleBranches];
674  }
675  if (m_trackStatePrinter.isSet())
676  std::cout << std::flush;
677  }
678 
679  ATH_MSG_DEBUG("Completed " << seedType << " track finding with " << computeStatSum(typeIndex, kNOutputTracks, event_stat) << " track candidates.");
680 
681  return StatusCode::SUCCESS;
682  }
683 
685  const DetectorContextHolder &detContext,
686  const detail::TrackFindingMeasurements &measurements,
687  const Acts::PerigeeSurface* pSurface) const {
688  Acts::PropagatorPlainOptions plainOptions{detContext.geometry, detContext.magField};
689  Acts::PropagatorPlainOptions plainSecondOptions{detContext.geometry, detContext.magField};
690 
691  plainOptions.maxSteps = m_maxPropagationStep;
692  plainOptions.direction = Acts::Direction::Forward();
693  plainOptions.endOfWorldVolumeIds = m_endOfWorldVolumeIds;
694  plainSecondOptions.maxSteps = m_maxPropagationStep;
695  plainSecondOptions.direction = plainOptions.direction.invert();
696 
697  // Set the CombinatorialKalmanFilter options
698  TrackFinderOptions options(detContext.geometry, detContext.magField, detContext.calib,
699  trackFinder().ckfExtensions, plainOptions, pSurface);
700 
701  std::unique_ptr<ActsTrk::IMeasurementSelector> measurementSelector = setMeasurementSelector(measurements, options);
702 
703  TrackFinderOptions secondOptions(detContext.geometry, detContext.magField, detContext.calib,
704  options.extensions, plainSecondOptions, pSurface);
705  secondOptions.targetSurface = pSurface;
706  secondOptions.skipPrePropagationUpdate = true;
707 
708  return {options, secondOptions, std::move(measurementSelector)};
709  };
710 
712  const detail::RecoTrackContainer::TrackProxy &track,
713  const detail::RecoTrackContainer::TrackStateProxy &trackState,
714  const Acts::TrackSelector::EtaBinnedConfig &trackSelectorCfg,
715  const Acts::GeometryContext &tgContext,
716  const detail::MeasurementIndex &measurementIndex,
717  const std::size_t typeIndex,
718  EventStats::value_type &event_stat_category_i) const {
719  if (m_addPixelStripCounts) {
720  updatePixelStripCounts(track, trackState.typeFlags(),
721  measurementType(trackState));
722  checkPixelStripCounts(track);
723  }
724 
725  if (m_trackStatePrinter.isSet()) {
726  m_trackStatePrinter->printTrackState(tgContext, trackState,
727  measurementIndex, true);
728  }
729 
730  if (!m_doBranchStopper) {
731  return BranchStopperResult::Continue;
732  }
733 
734  const auto &parameters = trackState.hasFiltered() ? trackState.filtered()
735  : trackState.predicted();
736  double eta = -std::log(std::tan(0.5 * parameters[Acts::eBoundTheta]));
737  const auto &cutSet = getCuts(eta);
738 
739  if (typeIndex < m_ptMinMeasurements.size() &&
740  !(track.nMeasurements() < m_ptMinMeasurements[typeIndex])) {
741  double pT = std::sin(parameters[Acts::eBoundTheta]) /
742  parameters[Acts::eBoundQOverP];
743  if (std::abs(pT) < cutSet.ptMin * m_branchStopperPtMinFactor) {
744  ++event_stat_category_i[kNStoppedTracksMinPt];
745  ATH_MSG_DEBUG("CkfBranchStopper: drop branch with q*pT="
746  << pT << " after " << track.nMeasurements()
747  << " measurements");
748  return BranchStopperResult::StopAndDrop;
749  }
750  }
751 
752  if (typeIndex < m_absEtaMaxMeasurements.size() &&
753  !(track.nMeasurements() < m_absEtaMaxMeasurements[typeIndex]) &&
754  !(std::abs(eta) < trackSelectorCfg.absEtaEdges.back() +
756  ++event_stat_category_i[kNStoppedTracksMaxEta];
757  ATH_MSG_DEBUG("CkfBranchStopper: drop branch with eta="
758  << eta << " after " << track.nMeasurements()
759  << " measurements");
760  return BranchStopperResult::StopAndDrop;
761  }
762 
763  bool enoughMeasurements = (track.nMeasurements() >= cutSet.minMeasurements);
764  bool tooManyHoles = (track.nHoles() > cutSet.maxHoles);
765  bool tooManyOutliers = (track.nOutliers() > cutSet.maxOutliers);
766 
767  if (m_addPixelStripCounts) {
768  auto [enoughMeasurementsPS, tooManyHolesPS, tooManyOutliersPS] =
769  selectPixelStripCounts(track, eta);
770  enoughMeasurements = enoughMeasurements && enoughMeasurementsPS;
771  tooManyHoles = tooManyHoles || tooManyHolesPS;
772  tooManyOutliers = tooManyOutliers || tooManyOutliersPS;
773  }
774 
775  if (!(tooManyHoles || tooManyOutliers)) {
776  return BranchStopperResult::Continue;
777  }
778 
779  if (!enoughMeasurements) {
780  ++event_stat_category_i[kNStoppedTracksMaxHoles];
781  }
782 
783  if (m_addPixelStripCounts) {
784  ATH_MSG_DEBUG("CkfBranchStopper: stop and "
785  << (enoughMeasurements ? "keep" : "drop")
786  << " branch with nHoles=" << track.nHoles() << " ("
787  << s_branchState.nPixelHoles(track) << " pixel+"
788  << s_branchState.nStripHoles(track)
789  << " strip), nOutliers=" << track.nOutliers() << " ("
790  << s_branchState.nPixelOutliers(track) << "+"
791  << s_branchState.nStripOutliers(track)
792  << "), nMeasurements=" << track.nMeasurements() << " ("
793  << s_branchState.nPixelHits(track) << "+"
794  << s_branchState.nStripHits(track) << ")");
795  } else {
796  ATH_MSG_DEBUG("CkfBranchStopper: stop and "
797  << (enoughMeasurements ? "keep" : "drop")
798  << " branch with nHoles=" << track.nHoles()
799  << ", nOutliers=" << track.nOutliers()
800  << ", nMeasurements=" << track.nMeasurements());
801  }
802 
803  return enoughMeasurements ? BranchStopperResult::StopAndKeep
804  : BranchStopperResult::StopAndDrop;
805  }
806 
808  std::function<void(detail::RecoTrackContainerProxy &)> addTrack,
809  TrkProxy &trackProxy,
810  detail::RecoTrackContainer &tracksContainerTemp,
812  Acts::GeometryContext &tgContext,
813  const bool reverseSearch) const {
814  std::size_t count = 0;
815 
816  std::optional<detail::RecoTrackStateContainerProxy> firstMeasurement;
817  for (auto st : trackProxy.trackStatesReversed()) {
818  bool isMeasurement = st.typeFlags().test(Acts::TrackStateFlag::MeasurementFlag);
819  bool isOutlier = st.typeFlags().test(Acts::TrackStateFlag::OutlierFlag);
820  // We are excluding non measurement states and outlier here. Those can
821  // decrease resolution because only the smoothing corrected the very
822  // first prediction as filtering is not possible.
823  if (isMeasurement && !isOutlier) {
824  firstMeasurement = st;
825  }
826  }
827 
828  if (!firstMeasurement.has_value()) {
829  return 0;
830  }
831 
832  Acts::BoundTrackParameters secondInitialParameters = trackProxy.createParametersFromState(detail::RecoConstTrackStateContainerProxy{*firstMeasurement});
833 
834  if (!secondInitialParameters.referenceSurface().insideBounds(secondInitialParameters.localPosition())) { // #3751
835  return 0;
836  }
837 
838  auto rootBranch = tracksContainerTemp.makeTrack();
839  rootBranch.copyFrom(trackProxy, false); // #3534
840  if (m_addPixelStripCounts) {
841  copyPixelStripCounts(rootBranch, trackProxy);
842  }
843  auto secondResult = trackFinder().ckf.findTracks(secondInitialParameters, options, tracksContainerTemp, rootBranch);
844 
845  if (not secondResult.ok()) {
846  return 0;
847  }
848 
849  // store the original previous state to restore it later
850  auto originalFirstMeasurementPrevious = firstMeasurement->previous();
851 
852  auto &secondTracksForSeed = secondResult.value();
853  for (auto &secondTrack : secondTracksForSeed) {
854  secondTrack.reverseTrackStates(true);
855 
856  firstMeasurement->previous() = secondTrack.outermostTrackState().index();
857  secondTrack.tipIndex() = trackProxy.tipIndex();
858 
859  if (reverseSearch) {
860  // smooth the full track
861  auto secondSmoothingResult = Acts::smoothTrack(tgContext, secondTrack, logger());
862  if (!secondSmoothingResult.ok()) {
863  continue;
864  }
865 
866  secondTrack.reverseTrackStates(true);
867  }
868 
869  addTrack(secondTrack);
870 
871  ++count;
872  }
873 
874  // restore the original previous state for the first track
875  firstMeasurement->previous() = originalFirstMeasurementPrevious;
876 
877  return count;
878  };
879 
880 
881  const Acts::TrackSelector::Config&
882  TrackFindingAlg::getCuts (double eta) const {
883  const auto &trackSelectorCfg = trackFinder().trackSelector.config();
884  // return the last bin for |eta|>=4 or nan
885  return (!(std::abs(eta) < trackSelectorCfg.absEtaEdges.back())) ? trackSelectorCfg.cutSets.back()
886  : (std::abs(eta) < trackSelectorCfg.absEtaEdges.front()) ? trackSelectorCfg.cutSets.front()
887  : trackSelectorCfg.getCuts(eta);
888  };
889 
890 
891  void
893  const detail::RecoTrackContainerProxy &track,
894  detail::DuplicateSeedDetector &duplicateSeedDetector,
895  const detail::MeasurementIndex &measurementIndex) const {
896 
897  const auto lastMeasurementIndex = track.tipIndex();
898  duplicateSeedDetector.newTrajectory();
899 
900  tracksContainer.trackStateContainer().visitBackwards(
901  lastMeasurementIndex,
902  [&duplicateSeedDetector,&measurementIndex](const detail::RecoTrackStateContainer::ConstTrackStateProxy &state) -> void
903  {
904  // Check there is a source link
905  if (not state.hasUncalibratedSourceLink())
906  return;
907 
908  // Fill the duplicate selector
909  auto sl = state.getUncalibratedSourceLink().template get<ATLASUncalibSourceLink>();
910  duplicateSeedDetector.addMeasurement(sl, measurementIndex);
911  }); // end visitBackwards
912  }
913 
915  TrackFindingAlg::measurementType (const detail::RecoTrackContainer::TrackStateProxy &trackState)
916  {
917  if (trackState.hasReferenceSurface()) {
918  if (const auto *actsDetElem = dynamic_cast<const ActsDetectorElement *>(trackState.referenceSurface().associatedDetectorElement())) {
919  if (const auto *detElem = dynamic_cast<const InDetDD::SiDetectorElement *>(actsDetElem->upstreamDetectorElement())) {
920  if (detElem->isPixel()) {
922  } else if (detElem->isSCT()) {
924  }
925  }
926  }
927  }
929  }
930 
931  void
933  {
934  tracksContainer.addColumn<unsigned int>("nPixelHits");
935  tracksContainer.addColumn<unsigned int>("nStripHits");
936  tracksContainer.addColumn<unsigned int>("nPixelHoles");
937  tracksContainer.addColumn<unsigned int>("nStripHoles");
938  tracksContainer.addColumn<unsigned int>("nPixelOutliers");
939  tracksContainer.addColumn<unsigned int>("nStripOutliers");
940  }
941 
942  void
943  TrackFindingAlg::initPixelStripCounts(const detail::RecoTrackContainer::TrackProxy &track)
944  {
945  s_branchState.nPixelHits(track) = 0;
946  s_branchState.nStripHits(track) = 0;
947  s_branchState.nPixelHoles(track) = 0;
948  s_branchState.nStripHoles(track) = 0;
949  s_branchState.nPixelOutliers(track) = 0;
950  s_branchState.nStripOutliers(track) = 0;
951  }
952 
953  void
954  TrackFindingAlg::updatePixelStripCounts(const detail::RecoTrackContainer::TrackProxy &track,
955  Acts::ConstTrackStateType typeFlags,
956  xAOD::UncalibMeasType detType)
957  {
959  if (typeFlags.test(Acts::TrackStateFlag::HoleFlag)) {
960  s_branchState.nPixelHoles(track)++;
961  } else if (typeFlags.test(Acts::TrackStateFlag::OutlierFlag)) {
962  s_branchState.nPixelOutliers(track)++;
963  } else if (typeFlags.test(Acts::TrackStateFlag::MeasurementFlag)) {
964  s_branchState.nPixelHits(track)++;
965  }
966  } else if (detType == xAOD::UncalibMeasType::StripClusterType) {
967  if (typeFlags.test(Acts::TrackStateFlag::HoleFlag)) {
968  s_branchState.nStripHoles(track)++;
969  } else if (typeFlags.test(Acts::TrackStateFlag::OutlierFlag)) {
970  s_branchState.nStripOutliers(track)++;
971  } else if (typeFlags.test(Acts::TrackStateFlag::MeasurementFlag)) {
972  s_branchState.nStripHits(track)++;
973  }
974  }
975  }
976 
977  void
978  TrackFindingAlg::copyPixelStripCounts(const detail::RecoTrackContainer::TrackProxy &track,
979  const detail::RecoTrackContainer::TrackProxy &other)
980  {
987  }
988 
989  void
990  TrackFindingAlg::checkPixelStripCounts(const detail::RecoTrackContainer::TrackProxy &track) const
991  {
992  // This check will fail if there are other types (HGTD, MS?) of hits, holes, or outliers.
993  // The check can be removed when it is no longer appropriate.
994  if (track.nMeasurements() != s_branchState.nPixelHits(track) + s_branchState.nStripHits(track))
995  ATH_MSG_WARNING("mismatched hit count: total (" << track.nMeasurements()
996  << ") != pixel (" << s_branchState.nPixelHits(track)
997  << ") + strip (" << s_branchState.nStripHits(track) << ")");
998  if (track.nHoles() < s_branchState.nPixelHoles(track) + s_branchState.nStripHoles(track)) // allow extra HGTD holes
999  ATH_MSG_WARNING("mismatched hole count: total (" << track.nHoles()
1000  << ") < pixel (" << s_branchState.nPixelHoles(track)
1001  << ") + strip (" << s_branchState.nStripHoles(track) << ")");
1002  if (track.nOutliers() != s_branchState.nPixelOutliers(track) + s_branchState.nStripOutliers(track))
1003  ATH_MSG_WARNING("mismatched outlier count: total (" << track.nOutliers()
1004  << ") != pixel (" << s_branchState.nPixelOutliers(track)
1005  << ") + strip (" << s_branchState.nStripOutliers(track) << ")");
1006  };
1007 
1008  std::array<bool, 3>
1009  TrackFindingAlg::selectPixelStripCounts(const detail::RecoTrackContainer::TrackProxy &track, double eta) const
1010  {
1011  bool enoughMeasurements = true, tooManyHoles = false, tooManyOutliers = false;
1012  const auto &trackSelectorCfg = trackFinder().trackSelector.config();
1013  std::size_t etaBin = (std::abs(eta) < trackSelectorCfg.absEtaEdges.front()) ? 0
1014  : (std::abs(eta) >= trackSelectorCfg.absEtaEdges.back()) ? trackSelectorCfg.absEtaEdges.size() - 1
1015  : trackSelectorCfg.binIndex(eta);
1016  auto cutMin = [etaBin](std::size_t val, const std::vector<std::size_t> &cutSet) {
1017  return !cutSet.empty() && (val < (etaBin < cutSet.size() ? cutSet[etaBin] : cutSet.back()));
1018  };
1019  auto cutMax = [etaBin](std::size_t val, const std::vector<std::size_t> &cutSet) {
1020  return !cutSet.empty() && (val > (etaBin < cutSet.size() ? cutSet[etaBin] : cutSet.back()));
1021  };
1022  enoughMeasurements = enoughMeasurements && !cutMin(s_branchState.nPixelHits(track), m_minPixelHits);
1023  enoughMeasurements = enoughMeasurements && !cutMin(s_branchState.nStripHits(track), m_minStripHits);
1024  tooManyHoles = tooManyHoles || cutMax(s_branchState.nPixelHoles(track), m_maxPixelHoles);
1025  tooManyHoles = tooManyHoles || cutMax(s_branchState.nStripHoles(track), m_maxStripHoles);
1026  tooManyOutliers = tooManyOutliers || cutMax(s_branchState.nPixelOutliers(track), m_maxPixelOutliers);
1027  tooManyOutliers = tooManyOutliers || cutMax(s_branchState.nStripOutliers(track), m_maxStripOutliers);
1028  return {enoughMeasurements, tooManyHoles, tooManyOutliers};
1029  }
1030 
1031  // === Statistics printout =================================================
1032 
1034  {
1035  if (!m_statEtaBins.empty())
1036  {
1037  m_useAbsEtaForStat = (m_statEtaBins[0] > 0.);
1038  float last_eta = m_statEtaBins[0];
1039  for (float eta : m_statEtaBins)
1040  {
1041  if (eta < last_eta)
1042  {
1043  ATH_MSG_FATAL("Eta bins for statistics counter not in ascending order.");
1044  }
1045  last_eta = eta;
1046  }
1047  }
1048  m_stat.resize(nSeedCollections() * seedCollectionStride());
1049  }
1050 
1051  // copy statistics
1052  void TrackFindingAlg::copyStats(const EventStats &event_stat) const
1053  {
1054  std::lock_guard<std::mutex> lock(m_mutex);
1055  std::size_t category_i = 0;
1056  for (const std::array<unsigned int, kNStat> &src_stat : event_stat)
1057  {
1058  std::array<std::size_t, kNStat> &dest_stat = m_stat[category_i++];
1059  for (std::size_t i = 0; i < src_stat.size(); ++i)
1060  {
1061  assert(i < dest_stat.size());
1062  dest_stat[i] += src_stat[i];
1063  }
1064  }
1065  }
1066 
1067  // print statistics
1069  {
1070  if (msgLvl(MSG::INFO))
1071  {
1072  std::vector<std::string> stat_labels =
1074  {
1075  std::make_pair(kNTotalSeeds, "Input seeds"),
1076  std::make_pair(kNoTrackParam, "No track parameters"),
1077  std::make_pair(kNUsedSeeds, "Used seeds"),
1078  std::make_pair(kNoTrack, "Cannot find track"),
1079  std::make_pair(kNDuplicateSeeds, "Duplicate seeds"),
1080  std::make_pair(kNNoEstimatedParams, "Initial param estimation failed"),
1081  std::make_pair(kNRejectedRefinedSeeds, "Rejected refined parameters"),
1082  std::make_pair(kNOutputTracks, "CKF tracks"),
1083  std::make_pair(kNSelectedTracks, "selected tracks"),
1084  std::make_pair(kNStoppedTracksMaxHoles, "Stopped tracks reaching max holes"),
1085  std::make_pair(kMultipleBranches, "Seeds with more than one branch"),
1086  std::make_pair(kNoSecond, "Tracks failing second CKF"),
1087  std::make_pair(kNStoppedTracksMinPt, "Stopped tracks below pT cut"),
1088  std::make_pair(kNStoppedTracksMaxEta, "Stopped tracks above max eta"),
1089  std::make_pair(kNTotalSharedHits, "Total shared hits")
1090  });
1091  assert(stat_labels.size() == kNStat);
1092  std::vector<std::string> categories;
1093  categories.reserve(m_seedLabels.size() + 1);
1094  categories.insert(categories.end(), m_seedLabels.begin(), m_seedLabels.end());
1095  categories.push_back("ALL");
1096 
1097  std::vector<std::string> eta_labels;
1098  eta_labels.reserve(m_statEtaBins.size() + 2);
1099  for (std::size_t eta_bin_i = 0; eta_bin_i < m_statEtaBins.size() + 2; ++eta_bin_i)
1100  {
1101  eta_labels.push_back(TableUtils::makeEtaBinLabel(m_statEtaBins, eta_bin_i, m_useAbsEtaForStat));
1102  }
1103 
1104  // vector used as 3D array stat[ eta_bin ][ stat_i ][ seed_type]
1105  // stat_i = [0, kNStat)
1106  // eta_bin = [0, m_statEtaBins.size()+2 ); eta_bin == m_statEtaBinsSize()+1 means sum of all etaBins
1107  // seed_type = [0, nSeedCollections()+1) seed_type == nSeedCollections() means sum of all seed collections
1108  std::vector<std::size_t> stat =
1109  TableUtils::createCounterArrayWithProjections<std::size_t>(nSeedCollections(),
1110  m_statEtaBins.size() + 1,
1111  m_stat);
1112 
1113  // the extra columns and rows for the projections are addeded internally:
1114  std::size_t stat_stride =
1116  m_statEtaBins.size() + 1,
1117  kNStat);
1118  std::size_t eta_stride =
1120  m_statEtaBins.size() + 1,
1121  kNStat);
1122  std::stringstream table_out;
1123 
1124  if (m_dumpAllStatEtaBins.value())
1125  {
1126  // dump for each counter a table with one row per eta bin
1127  std::size_t max_label_width = TableUtils::maxLabelWidth(stat_labels) + TableUtils::maxLabelWidth(eta_labels);
1128  for (std::size_t stat_i = 0; stat_i < kNStat; ++stat_i)
1129  {
1130  std::size_t dest_idx_offset = stat_i * stat_stride;
1131  table_out << makeTable(stat, dest_idx_offset, eta_stride,
1132  eta_labels,
1133  categories)
1134  .columnWidth(10)
1135  // only dump the footer for the last eta bin i.e. total
1136  .dumpHeader(stat_i == 0)
1137  .dumpFooter(stat_i + 1 == kNStat)
1138  .separateLastRow(true) // separate the sum of all eta bins
1139  .minLabelWidth(max_label_width)
1140  .labelPrefix(stat_labels.at(stat_i));
1141  }
1142  }
1143  else
1144  {
1145  // dump one table with one row per counter showing the total eta range
1146  for (std::size_t eta_bin_i = (m_dumpAllStatEtaBins.value() ? 0 : m_statEtaBins.size() + 1);
1147  eta_bin_i < m_statEtaBins.size() + 2;
1148  ++eta_bin_i)
1149  {
1150  std::size_t dest_idx_offset = eta_bin_i * eta_stride;
1151  table_out << makeTable(stat, dest_idx_offset, stat_stride,
1152  stat_labels,
1153  categories,
1154  eta_labels.at(eta_bin_i))
1155  .columnWidth(10)
1156  // only dump the footer for the last eta bin i.e. total
1157  .dumpFooter(!m_dumpAllStatEtaBins.value() || eta_bin_i == m_statEtaBins.size() + 1);
1158  }
1159  }
1160  ATH_MSG_INFO("statistics:\n"
1161  << table_out.str());
1162  table_out.str("");
1163 
1164  // define retios first element numerator, second element denominator
1165  // each element contains a vector of counter and a multiplier e.g. +- 1
1166  // ratios are computed as (sum_i stat[stat_i] * multiplier_i ) / (sum_j stat[stat_j] * multiplier_j )
1167  auto [ratio_labels, ratio_def] =
1169  std::vector<TableUtils::SummandDefinition>{
1173  // no track counted as used but want to include it as failed
1175  }, // failed seeds i.e. seeds which are not duplicates but did not produce a track
1176  std::vector<TableUtils::SummandDefinition>{TableUtils::defineSummand(kNTotalSeeds, 1)}),
1178  TableUtils::defineSimpleRatio("Rejected refined params / seeds", kNRejectedRefinedSeeds, kNTotalSeeds),
1180  TableUtils::defineSimpleRatio("selected tracks / used seeds", kNSelectedTracks, kNUsedSeeds),
1181  TableUtils::defineSimpleRatio("branched tracks / used seeds", kMultipleBranches, kNUsedSeeds),
1182  TableUtils::defineSimpleRatio("no 2nd CKF / CKF tracks", kNoSecond, kNOutputTracks),
1183  TableUtils::defineSimpleRatio("shared hits / CKF tracks", kNTotalSharedHits, kNOutputTracks)});
1184 
1185  std::vector<float> ratio = TableUtils::computeRatios(ratio_def,
1186  nSeedCollections() + 1,
1187  m_statEtaBins.size() + 2,
1188  stat);
1189 
1190  // the extra columns and rows for the projections are _not_ added internally
1191  std::size_t ratio_stride = TableUtils::ratioStride(nSeedCollections() + 1,
1192  m_statEtaBins.size() + 2,
1193  ratio_def);
1194  std::size_t ratio_eta_stride = TableUtils::subCategoryStride(nSeedCollections() + 1,
1195  m_statEtaBins.size() + 2,
1196  ratio_def);
1197 
1198  std::size_t max_label_width = TableUtils::maxLabelWidth(ratio_labels) + TableUtils::maxLabelWidth(eta_labels);
1199  if (m_dumpAllStatEtaBins.value())
1200  {
1201  // show for each ratio a table with one row per eta bin
1202  for (std::size_t ratio_i = 0; ratio_i < ratio_labels.size(); ++ratio_i)
1203  {
1204  table_out << makeTable(ratio,
1205  ratio_i * ratio_stride,
1206  ratio_eta_stride,
1207  eta_labels,
1208  categories)
1209  .columnWidth(10)
1210  // only dump the footer for the last eta bin i.e. total
1211  .dumpHeader(ratio_i == 0)
1212  .dumpFooter(ratio_i + 1 == ratio_labels.size())
1213  .separateLastRow(true) // separate the sum of las
1214  .minLabelWidth(max_label_width)
1215  .labelPrefix(ratio_labels.at(ratio_i));
1216  }
1217  }
1218  else
1219  {
1220  // dump one table with one row per ratio showing the total eta range
1221  table_out << makeTable(ratio,
1222  (m_statEtaBins.size() + 1) * ratio_eta_stride + 0 * ratio_stride,
1223  ratio_stride,
1224  ratio_labels,
1225  categories)
1226  .columnWidth(10)
1227  // only dump the footer for the last eta bin i.e. total
1228  .minLabelWidth(max_label_width)
1229  .dumpFooter(false);
1230 
1231  // also dump a table for final tracks over seeds (ratio_i==3) showing one row per eta bin
1232  eta_labels.erase(eta_labels.end() - 1); // drop last line of table which shows again all eta bins summed.
1233  constexpr std::size_t ratio_i = 3;
1234  table_out << makeTable(ratio,
1235  ratio_i * ratio_stride,
1236  ratio_eta_stride,
1237  eta_labels,
1238  categories)
1239  .columnWidth(10)
1240  .dumpHeader(false)
1241  // only dump the footer for the last eta bin i.e. total
1242  .dumpFooter(!m_dumpAllStatEtaBins.value() || ratio_i + 1 == ratio_labels.size())
1243  .separateLastRow(false)
1244  .minLabelWidth(max_label_width)
1245  .labelPrefix(ratio_labels.at(ratio_i));
1246  }
1247 
1248  ATH_MSG_INFO("Ratios:\n"
1249  << table_out.str());
1250  }
1251  }
1252 
1253  inline std::size_t TrackFindingAlg::getStatCategory(std::size_t seed_collection, float eta) const
1254  {
1255  std::vector<float>::const_iterator bin_iter = std::upper_bound(m_statEtaBins.begin(),
1256  m_statEtaBins.end(),
1257  m_useAbsEtaForStat ? std::abs(eta) : eta);
1258  std::size_t category_i = seed_collection * seedCollectionStride() + static_cast<std::size_t>(bin_iter - m_statEtaBins.begin());
1259  assert(category_i < m_stat.size());
1260  return category_i;
1261  }
1262 
1263  inline std::size_t TrackFindingAlg::computeStatSum(std::size_t seed_collection, EStat counter_i, const EventStats &stat) const
1264  {
1265  std::size_t out = 0u;
1266  for (std::size_t category_i = seed_collection * seedCollectionStride();
1267  category_i < (seed_collection + 1) * seedCollectionStride();
1268  ++category_i)
1269  {
1270  assert(category_i < stat.size());
1271  out += stat[category_i][counter_i];
1272  }
1273  return out;
1274  }
1275 
1276 
1278  std::vector<std::pair<float, float> > &chi2CutOffOutlier = m_measurementSelectorConfig.m_chi2CutOffOutlier;
1279  chi2CutOffOutlier .reserve( m_chi2CutOff.size() );
1280  if (!m_chi2OutlierCutOff.empty()) {
1281  if (m_chi2CutOff.size() != m_chi2OutlierCutOff.size()) {
1282  ATH_MSG_ERROR("Outlier chi2 cut off provided but number of elements does not agree with"
1283  " chi2 cut off for measurements which however is required: "
1284  << m_chi2CutOff.size() << " != " << m_chi2OutlierCutOff.size());
1285  return StatusCode::FAILURE;
1286  }
1287  }
1288  unsigned int idx=0;
1289  for (const auto &elm : m_chi2CutOff) {
1290  chi2CutOffOutlier.push_back( std::make_pair(static_cast<float>(elm),
1291  idx < m_chi2OutlierCutOff.size()
1292  ? static_cast<float>(m_chi2OutlierCutOff[idx])
1294  ++idx;
1295  }
1296  if (m_etaBins.size() > 2) {
1297  std::vector<float> &etaBinsf = m_measurementSelectorConfig.m_etaBins;
1298  etaBinsf.assign(m_etaBins.begin() + 1, m_etaBins.end() - 1);
1299  }
1300 
1301  return /*m_measurementSelector ?*/ StatusCode::SUCCESS /*: StatusCode::FAILURE*/;
1302  }
1303 
1305  const std::vector< const InDet::SiDetectorElementStatus *> &det_el_status_arr,
1306  detail::TrackFindingMeasurements &measurements) const {
1307  const Acts::TrackingGeometry *
1308  acts_tracking_geometry = m_trackingGeometryTool->trackingGeometry().get();
1309  ATH_CHECK(acts_tracking_geometry != nullptr);
1310 
1311  using Counter = struct { unsigned int n_volumes, n_volumes_with_status, n_missing_detector_elements, n_detector_elements, n_disabled_detector_elements;};
1312  Counter counter {0u,0u,0u,0u,0u};
1313  acts_tracking_geometry->visitVolumes([&counter,
1314  &volume_id_to_det_el_coll,
1315  &det_el_status_arr,
1316  &measurements,
1317  this](const Acts::TrackingVolume *volume_ptr) {
1318  ++counter.n_volumes;
1319  if (!volume_ptr) return;
1320 
1322  det_el_status = det_el_status_arr.at(volume_id_to_det_el_coll.collecionMap().at(volume_ptr->geometryId().volume()));
1323  if (det_el_status) {
1324  ++counter.n_volumes_with_status;
1325  volume_ptr->visitSurfaces([&counter, det_el_status, &measurements,this](const Acts::Surface *surface_ptr) {
1326  if (!surface_ptr) return;
1327  const Acts::Surface &surface = *surface_ptr;
1328  const Acts::DetectorElementBase*detector_element = surface.associatedDetectorElement();
1329  if (detector_element) {
1330  ++counter.n_detector_elements;
1331  const ActsDetectorElement *acts_detector_element = dynamic_cast<const ActsDetectorElement*>(detector_element);
1332  if (!det_el_status->isGood( acts_detector_element->identifyHash() )) {
1333  ActsTrk::detail::MeasurementRange old_range = measurements.markSurfaceInsensitive(surface_ptr->geometryId());
1334  if (!old_range.empty()) {
1335  auto geoid_to_string = [](const Acts::GeometryIdentifier &id) -> std::string {
1336  std::stringstream amsg;
1337  amsg << id;
1338  return amsg.str();
1339  };
1340  std::string a_msg ( geoid_to_string(surface_ptr->geometryId()));
1341  ATH_MSG_WARNING("Reject " << (old_range.elementEndIndex() - old_range.elementBeginIndex())
1342  << " measurements because surface " << a_msg);
1343  }
1344  ++counter.n_disabled_detector_elements;
1345  }
1346  }
1347  }, true /*only sensitive surfaces*/);
1348  }
1349  else {
1350  ++counter.n_missing_detector_elements;
1351  }
1352  });
1353  ATH_MSG_DEBUG("Volumes with detector element status " << counter.n_volumes_with_status << " / " << counter.n_volumes
1354  << " disabled detector elements " << counter.n_disabled_detector_elements
1355  << " / " << counter.n_detector_elements
1356  << " missing detector elements "
1357  << counter.n_missing_detector_elements);
1358  return StatusCode::SUCCESS;
1359  }
1360 } // namespace
beamspotman.r
def r
Definition: beamspotman.py:676
ActsTrk::TrackFindingAlg::m_maxPixelHoles
Gaudi::Property< std::vector< std::size_t > > m_maxPixelHoles
Definition: TrackFindingAlg.h:168
SCT_ClusterOnTrack.h
CalculateHighPtTerm.pT
pT
Definition: ICHEP2016/CalculateHighPtTerm.py:57
ActsTrk::TrackFindingAlg::m_hgtdCalibTool
ToolHandle< ActsTrk::IOnTrackCalibratorTool< detail::RecoTrackStateContainer > > m_hgtdCalibTool
Definition: TrackFindingAlg.h:102
ActsTrk::TrackFindingAlg::kNNoEstimatedParams
@ kNNoEstimatedParams
Definition: TrackFindingAlg.h:192
ActsTrk::detail::getMeasurementSelector
std::unique_ptr< ActsTrk::IMeasurementSelector > getMeasurementSelector(const ActsTrk::IOnBoundStateCalibratorTool *onTrackCalibratorTool, const ActsTrk::detail::MeasurementRangeList &measurementRanges, const std::vector< float > &etaBinsf, const std::vector< std::pair< float, float > > &chi2CutOffOutlier, const std::vector< size_t > &numMeasurementsCutOff)
Definition: AtlasMeasurementSelector.cxx:385
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
ActsTrk::TrackFindingAlg::MeasurementSelectorConfig::m_chi2CutOffOutlier
std::vector< std::pair< float, float > > m_chi2CutOffOutlier
Definition: TrackFindingAlg.h:181
ActsTrk::TrackFindingAlg::m_extrapolationTool
ToolHandle< IActsExtrapolationTool > m_extrapolationTool
Definition: TrackFindingAlg.h:92
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
ActsTrk::TrackFindingAlg::selectPixelStripCounts
std::array< bool, 3 > selectPixelStripCounts(const detail::RecoTrackContainer::TrackProxy &track, double eta) const
Definition: TrackFindingAlg.cxx:1009
ActsTrk::TrackFindingAlg::m_maxSharedHits
Gaudi::Property< std::vector< std::size_t > > m_maxSharedHits
Definition: TrackFindingAlg.h:162
ActsTrk::detail::MeasurementIndex::size
std::size_t size() const
ActsTrk::TrackFindingAlg::m_statEtaBins
Gaudi::Property< std::vector< float > > m_statEtaBins
Definition: TrackFindingAlg.h:174
ActsTrk::detail::DuplicateSeedDetector::addSeeds
void addSeeds(std::size_t typeIndex, const ActsTrk::SeedContainer &seeds, const MeasurementIndex &measurementIndex)
Definition: DuplicateSeedDetector.cxx:22
get_generator_info.result
result
Definition: get_generator_info.py:21
ActsTrk::TrackFindingAlg::kNStoppedTracksMaxEta
@ kNStoppedTracksMaxEta
Definition: TrackFindingAlg.h:200
TrackParameters.h
ActsTrk::IMeasurementSelector::connect
virtual void connect(std::any delegate_wrap) const =0
ActsTrk::TrackFindingAlg::m_trackingGeometryTool
ToolHandle< IActsTrackingGeometryTool > m_trackingGeometryTool
Definition: TrackFindingAlg.h:93
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:141
InDetDD::SiDetectorElementCollection
Definition: SiDetectorElementCollection.h:30
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
FullCPAlgorithmsTest_eljob.flush
flush
Definition: FullCPAlgorithmsTest_eljob.py:194
ActsTrk::detail::TrackFindingMeasurements
Definition: TrackFindingMeasurements.h:17
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
ActsTrk::DetectorElementToActsGeometryIdMap
Definition: DetectorElementToActsGeometryIdMap.h:31
ActsTrk::TrackFindingAlg::TrackFinderOptions
Acts::CombinatorialKalmanFilterOptions< detail::RecoTrackContainer > TrackFinderOptions
Definition: TrackFindingAlg.h:206
ActsGeometryContext.h
ActsTrk::ActsVolumeIdToDetectorElementCollectionMap::collecionMap
const std::array< unsigned char, 256 > & collecionMap() const
Definition: ActsVolumeIdToDetectorElementCollectionMap.h:36
ActsTrk::TrackFindingAlg::DetectorContextHolder::magField
Acts::MagneticFieldContext magField
Definition: TrackFindingAlg.h:210
ActsTrk::TrackFindingAlg::logger
const Acts::Logger & logger() const
Private access to the logger.
Definition: TrackFindingAlg.h:435
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
ActsTrk::detail::Navigator
Acts::Navigator Navigator
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:31
xAOD::UncalibMeasType::StripClusterType
@ StripClusterType
ActsTrk::TrackFindingAlg::m_absEtaMax
Gaudi::Property< double > m_absEtaMax
Definition: TrackFindingAlg.h:151
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
ActsTrk::TrackFindingAlg::DetectorContextHolder
Definition: TrackFindingAlg.h:208
ActsTrk::TrackFindingAlg::m_maxStripHoles
Gaudi::Property< std::vector< std::size_t > > m_maxStripHoles
Definition: TrackFindingAlg.h:169
ActsTrk::TrackFindingAlg::measurementType
static xAOD::UncalibMeasType measurementType(const detail::RecoTrackContainer::TrackStateProxy &trackState)
Definition: TrackFindingAlg.cxx:915
ActsTrk::ActsVolumeIdToDetectorElementCollectionMap::collections
const std::vector< const InDetDD::SiDetectorElementCollection * > & collections() const
Definition: ActsVolumeIdToDetectorElementCollectionMap.h:37
ActsTrk::TrackFindingAlg::m_detectorElementToGeometryIdMapKey
SG::ReadCondHandleKey< ActsTrk::DetectorElementToActsGeometryIdMap > m_detectorElementToGeometryIdMapKey
Definition: TrackFindingAlg.h:112
ActsTrk::detail::CKF_config::trackSelector
Acts::TrackSelector trackSelector
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:48
ActsTrk::detail::Extrapolator
Propagator Extrapolator
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:34
ActsTrk::TrackFindingAlg::TrackFindingAlg
TrackFindingAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TrackFindingAlg.cxx:58
ActsTrk::TrackFindingAlg::m_measurementSelectorConfig
struct ActsTrk::TrackFindingAlg::MeasurementSelectorConfig m_measurementSelectorConfig
ActsTrk::TrackFindingAlg::findTracks
StatusCode findTracks(const EventContext &ctx, const ActsTrk::DetectorElementToActsGeometryIdMap &detectorElementToGeoId, const detail::TrackFindingMeasurements &measurements, const detail::MeasurementIndex &measurementIndex, detail::SharedHitCounter &sharedHits, detail::DuplicateSeedDetector &duplicateSeedDetector, const ActsTrk::SeedContainer &seeds, const InDetDD::SiDetectorElementCollection &detElements, ActsTrk::MutableTrackContainer &tracksContainer, std::size_t seedCollectionIndex, const char *seedType, EventStats &event_stat) const
invoke track finding procedure
Definition: TrackFindingAlg.cxx:409
ActsTrk::TrackFindingAlg::BranchState::nPixelOutliers
static constexpr Acts::ProxyAccessor< unsigned int > nPixelOutliers
Definition: TrackFindingAlg.h:399
ActsTrk::TrackFindingAlg::m_paramEstimationTool
ToolHandle< ActsTrk::ITrackParamsEstimationTool > m_paramEstimationTool
Definition: TrackFindingAlg.h:96
ActsTrk::TrackFindingAlg::addPixelStripCounts
static void addPixelStripCounts(detail::RecoTrackContainer &tracksContainer)
Definition: TrackFindingAlg.cxx:932
ActsTrk::TrackFindingAlg::kNoTrack
@ kNoTrack
Definition: TrackFindingAlg.h:190
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
InDetDD::SolidStateDetectorElementBase::surface
Trk::Surface & surface()
Element Surface.
SG::ReadCondHandle::isValid
bool isValid()
Definition: ReadCondHandle.h:210
ATLASMagneticFieldWrapper.h
xAOD::SpacePoint_v1::ConstVectorMap
Eigen::Map< const Eigen::Matrix< float, 3, 1 > > ConstVectorMap
Definition: SpacePoint_v1.h:31
AthCommonMsg< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
ActsTrk::TrackFindingAlg::m_autoReverseSearch
Gaudi::Property< bool > m_autoReverseSearch
Definition: TrackFindingAlg.h:138
ActsTrk::TrackFindingAlg::m_phiMin
Gaudi::Property< std::vector< double > > m_phiMin
Definition: TrackFindingAlg.h:146
TableUtils::defineSimpleRatio
RatioDefinition defineSimpleRatio(T numerator, T denominator)
Definition: TableUtils.h:382
ActsTrk::TrackFindingAlg::initPixelStripCounts
static void initPixelStripCounts(const detail::RecoTrackContainer::TrackProxy &track)
Definition: TrackFindingAlg.cxx:943
ActsTrk::TrackFindingAlg::m_refitSeeds
Gaudi::Property< std::vector< bool > > m_refitSeeds
Definition: TrackFindingAlg.h:128
xAOD::SpacePoint_v1
Definition: SpacePoint_v1.h:29
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::detail::SharedHitCounter
Definition: SharedHitCounter.h:22
ActsTrk::TrackFindingAlg::m_branchStopperPtMinFactor
Gaudi::Property< double > m_branchStopperPtMinFactor
Definition: TrackFindingAlg.h:140
ActsTrk::TrackFindingAlg::BranchState::nStripHoles
static constexpr Acts::ProxyAccessor< unsigned int > nStripHoles
Definition: TrackFindingAlg.h:398
ActsTrk::detail::DuplicateSeedDetector::isDuplicate
bool isDuplicate(std::size_t typeIndex, index_t iseed)
ActsTrk::TrackFindingAlg::m_maxOutliers
Gaudi::Property< std::vector< std::size_t > > m_maxOutliers
Definition: TrackFindingAlg.h:161
ActsTrk::TrackFindingAlg::propagateDetectorElementStatusToMeasurements
StatusCode propagateDetectorElementStatusToMeasurements(const ActsTrk::ActsVolumeIdToDetectorElementCollectionMap &volume_id_to_det_el_coll, const std::vector< const InDet::SiDetectorElementStatus * > &det_el_status_arr, detail::TrackFindingMeasurements &measurements) const
Definition: TrackFindingAlg.cxx:1304
ActsTrk::TrackFindingAlg::kNOutputTracks
@ kNOutputTracks
Definition: TrackFindingAlg.h:193
ActsTrk::TrackFindingAlg::kNUsedSeeds
@ kNUsedSeeds
Definition: TrackFindingAlg.h:189
ActsTrk::TrackFindingAlg::m_useAbsEtaForStat
bool m_useAbsEtaForStat
Definition: TrackFindingAlg.h:430
ActsTrk::TrackFindingAlg::DetectorContextHolder::geometry
Acts::GeometryContext geometry
Definition: TrackFindingAlg.h:209
ActsTrk::detail::RecoTrackContainerProxy
RecoTrackContainer::TrackProxy RecoTrackContainerProxy
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:23
ActsTrk::TrackFindingAlg::BranchState::nStripOutliers
static constexpr Acts::ProxyAccessor< unsigned int > nStripOutliers
Definition: TrackFindingAlg.h:400
ActsTrk::TrackFindingAlg::kNoTrackParam
@ kNoTrackParam
Definition: TrackFindingAlg.h:188
ActsTrk::TrackFindingAlg::m_seedContainerKeys
SG::ReadHandleKeyArray< ActsTrk::SeedContainer > m_seedContainerKeys
Definition: TrackFindingAlg.h:107
ActsTrk::TrackFindingAlg::m_minPixelHits
Gaudi::Property< std::vector< std::size_t > > m_minPixelHits
Definition: TrackFindingAlg.h:166
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
SG::ReadHandleKey< InDet::SiDetectorElementStatus >
ActsTrk::detail::MeasurementIndex::addMeasurements
void addMeasurements(const xAOD::UncalibratedMeasurementContainer &clusterContainer)
ActsTrk::detail::MeasurementIndex
Definition: MeasurementIndex.h:16
SharedHitCounter.h
TrackFindingMeasurements.h
ActsTrk::detail::RecoTrackContainer
Acts::TrackContainer< Acts::VectorTrackContainer, Acts::VectorMultiTrajectory > RecoTrackContainer
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:22
ActsTrk::TrackFindingAlg::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: TrackFindingAlg.cxx:684
xAOD::SpacePoint_v1::globalPosition
ConstVectorMap globalPosition() const
Returns the global position of the pixel cluster.
ActsTrk::TrackFindingAlg::doRefit
std::unique_ptr< Acts::BoundTrackParameters > doRefit(const EventContext &ctx, const MeasurementSource &measurement, const Acts::BoundTrackParameters &initialParameters, const DetectorContextHolder &detContext, const ActsTrk::DetectorElementToActsGeometryIdMap &detectorElementToGeoId, const bool paramsAtOutermostSurface) const
Perform Kalman Filter fit and update given initialParameters.
ActsTrk::TrackFindingAlg::MeasurementSelectorConfig::m_etaBins
std::vector< float > m_etaBins
Definition: TrackFindingAlg.h:182
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
XMLtoHeader.count
count
Definition: XMLtoHeader.py:85
config
Definition: PhysicsAnalysis/AnalysisCommon/AssociationUtils/python/config.py:1
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_z0Min
Gaudi::Property< std::vector< double > > m_z0Min
Definition: TrackFindingAlg.h:156
ActsTrk::TrackFindingAlg::m_maxPropagationStep
Gaudi::Property< unsigned int > m_maxPropagationStep
Definition: TrackFindingAlg.h:126
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:302
ActsTrk::TrackFindingAlg::nSeedCollections
std::size_t nSeedCollections() const
Definition: TrackFindingAlg.h:419
ActsTrk::TrackFindingAlg::BranchState::nPixelHoles
static constexpr Acts::ProxyAccessor< unsigned int > nPixelHoles
Definition: TrackFindingAlg.h:397
xAOD::SpacePoint_v1::elementIdList
const std::vector< DetectorIDHashType > & elementIdList() const
Returns the IdentifierHash of the spacepoint (corresponds to the detector element IdentifierHash)
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:274
ActsTrk::TrackFindingAlg::m_uncalibratedMeasurementContainerKeys
SG::ReadHandleKeyArray< xAOD::UncalibratedMeasurementContainer > m_uncalibratedMeasurementContainerKeys
Definition: TrackFindingAlg.h:110
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:1052
ActsTrk::TrackFindingAlg::m_chi2OutlierCutOff
Gaudi::Property< std::vector< double > > m_chi2OutlierCutOff
Definition: TrackFindingAlg.h:132
ActsTrk::TrackFindingAlg::finalize
virtual StatusCode finalize() override
Definition: TrackFindingAlg.cxx:242
ActsTrk::TrackFindingAlg::printStatTables
void printStatTables() const
Definition: TrackFindingAlg.cxx:1068
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
ActsTrk::TrackFindingAlg::s_branchState
static constexpr BranchState s_branchState
Definition: TrackFindingAlg.h:402
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:1263
ActsTrk::TrackFindingAlg::kNDuplicateSeeds
@ kNDuplicateSeeds
Definition: TrackFindingAlg.h:191
ActsTrk::TrackFindingAlg::m_addPixelStripCounts
Gaudi::Property< bool > m_addPixelStripCounts
Definition: TrackFindingAlg.h:165
ActsTrk::TrackFindingAlg::m_seedLabels
Gaudi::Property< std::vector< std::string > > m_seedLabels
Definition: TrackFindingAlg.h:175
SCT_ClusterCollection.h
mergePhysValFiles.categories
categories
Definition: PhysicsAnalysis/JetTagging/JetTagValidation/JetTagDQA/scripts/mergePhysValFiles.py:18
xAOD::etaBin
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap etaBin
Definition: L2StandAloneMuon_v1.cxx:148
ActsTrk::TrackFindingAlg::m_countSharedHits
Gaudi::Property< bool > m_countSharedHits
Definition: TrackFindingAlg.h:142
xAOD::addTrack
@ addTrack
Definition: TrackingPrimitives.h:466
ActsTrk::TrackFindingAlg::DetectorContextHolder::calib
Acts::CalibrationContext calib
Definition: TrackFindingAlg.h:211
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:100
makeTable
TableUtils::StatTable< T > makeTable(const std::array< T, N > &counter, const std::array< std::string, N > &label)
Definition: TableUtils.h:521
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:288
lumiFormat.i
int i
Definition: lumiFormat.py:85
ActsTrk::TrackFindingAlg::m_d0Max
Gaudi::Property< std::vector< double > > m_d0Max
Definition: TrackFindingAlg.h:155
z
#define z
InDet::SiDetectorElementStatus
Definition: SiDetectorElementStatus.h:62
ActsTrk::TrackFindingAlg::shouldReverseSearch
bool shouldReverseSearch(const ActsTrk::Seed &seed) const
Definition: TrackFindingAlg.cxx:377
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_useTopSpRZboundary
Gaudi::Property< std::vector< double > > m_useTopSpRZboundary
Definition: TrackFindingAlg.h:139
ActsTrk::TrackFindingAlg::m_ptMin
Gaudi::Property< std::vector< double > > m_ptMin
Definition: TrackFindingAlg.h:152
ActsTrk::TrackFindingAlg::storeSeedInfo
void storeSeedInfo(const detail::RecoTrackContainer &tracksContainer, const detail::RecoTrackContainerProxy &track, detail::DuplicateSeedDetector &duplicateSeedDetector, const detail::MeasurementIndex &measurementIndex) const
Definition: TrackFindingAlg.cxx:892
ActsTrk::TrackFindingAlg::m_detEleCollKeys
SG::ReadCondHandleKeyArray< InDetDD::SiDetectorElementCollection > m_detEleCollKeys
Definition: TrackFindingAlg.h:108
ActsTrk::TrackFindingAlg::initializeMeasurementSelector
StatusCode initializeMeasurementSelector()
Definition: TrackFindingAlg.cxx:1277
plotBeamSpotVert.cuts
string cuts
Definition: plotBeamSpotVert.py:93
xAOD::Other
@ Other
ActsTrk::detail::DuplicateSeedDetector::addMeasurement
void addMeasurement(const ActsTrk::ATLASUncalibSourceLink &sl, const MeasurementIndex &measurementIndex)
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
ActsTrk::TrackFindingAlg::kNStoppedTracksMinPt
@ kNStoppedTracksMinPt
Definition: TrackFindingAlg.h:199
ActsTrk::Seed
Acts::Seed< xAOD::SpacePoint, 3ul > Seed
Definition: Seed.h:12
ActsTrk::TrackFindingAlg::m_absEtaMin
Gaudi::Property< double > m_absEtaMin
Definition: TrackFindingAlg.h:150
python.AtlRunQueryLib.options
options
Definition: AtlRunQueryLib.py:379
ActsDetectorElement
Definition: ActsDetectorElement.h:42
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
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::TrackFindingAlg::m_maxPixelOutliers
Gaudi::Property< std::vector< std::size_t > > m_maxPixelOutliers
Definition: TrackFindingAlg.h:170
ActsDetectorElement.h
PixelClusterCollection.h
ActsTrk::TrackFindingAlg::m_numMeasurementsCutOff
Gaudi::Property< std::vector< size_t > > m_numMeasurementsCutOff
Definition: TrackFindingAlg.h:133
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
ActsTrk::TrackFindingAlg::m_ATLASConverterTool
ToolHandle< ActsTrk::IActsToTrkConverterTool > m_ATLASConverterTool
Definition: TrackFindingAlg.h:95
beamspotman.stat
stat
Definition: beamspotman.py:266
ActsTrk::TrackFindingAlg::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: TrackFindingAlg.h:91
Monitored.h
Header file to be included by clients of the Monitored infrastructure.
ActsTrk::TrackFindingAlg::m_trackStatePrinter
ToolHandle< ActsTrk::TrackStatePrinterTool > m_trackStatePrinter
Definition: TrackFindingAlg.h:94
DataVector::clear
void clear()
Erase all the elements in the collection.
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
ActsTrk::TrackFindingAlg::kNRejectedRefinedSeeds
@ kNRejectedRefinedSeeds
Definition: TrackFindingAlg.h:194
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:15
ActsTrk::TrackFindingAlg::checkPixelStripCounts
void checkPixelStripCounts(const detail::RecoTrackContainer::TrackProxy &track) const
Definition: TrackFindingAlg.cxx:990
ActsTrk::TrackFindingAlg::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: TrackFindingAlg.cxx:711
InDet::SiDetectorElementStatus::isGood
bool isGood(IdentifierHash hash) const
Definition: SiDetectorElementStatus.h:97
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:240
RIO_OnTrack.h
checkNSWValTree.Options
Options
Definition: checkNSWValTree.py:15
ActsTrk::TrackFindingAlg::setMeasurementSelector
std::unique_ptr< ActsTrk::IMeasurementSelector > setMeasurementSelector(const detail::TrackFindingMeasurements &measurements, TrackFinderOptions &options) const
Setup and attach measurement selector to KF options.
Definition: TrackFindingAlg.cxx:389
AtlasMeasurementSelector.h
ActsTrk::TrackFindingAlg::kMultipleBranches
@ kMultipleBranches
Definition: TrackFindingAlg.h:197
ActsTrk::detail::DuplicateSeedDetector::newTrajectory
void newTrajectory()
ActsTrk::TrackFindingAlg::BranchState::nPixelHits
static constexpr Acts::ProxyAccessor< unsigned int > nPixelHits
Definition: TrackFindingAlg.h:395
InDet::SiDetectorElementStatus::getDetectorElements
const std::vector< InDetDD::SiDetectorElement * > & getDetectorElements() const
Definition: SiDetectorElementStatus.h:94
ActsTrk::TrackFindingAlg::m_z0Max
Gaudi::Property< std::vector< double > > m_z0Max
Definition: TrackFindingAlg.h:157
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
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::getContainersFromKeys
StatusCode getContainersFromKeys(const EventContext &ctx, HandleArrayKeyType &handleKeyArray, std::vector< const ContainerType * > &outputContainers, std::size_t &sum) const
Take the array of handle keys and for each key retrieve containers, then append them to the output ve...
ActsTrk::TrackFindingAlg::~TrackFindingAlg
virtual ~TrackFindingAlg()
ActsDetectorElement::identifyHash
IdentifierHash identifyHash() const
Identifier hash.
Definition: ActsDetectorElement.h:73
ActsTrk::TrackFindingAlg::m_chi2CutOff
Gaudi::Property< std::vector< double > > m_chi2CutOff
Definition: TrackFindingAlg.h:131
ActsTrk::detail::SharedHitCounter::computeSharedHits
auto computeSharedHits(typename track_container_t::TrackProxy &track, track_container_t &tracks, const MeasurementIndex &measurementIndex) -> ReturnSharedAndBad
ActsTrk::detail::Stepper
Acts::SympyStepper Stepper
Adapted from Acts Examples/Algorithms/TrackFinding/src/TrackFindingAlgorithmFunction....
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:30
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
ActsTrk::TrackFindingAlg::m_volumeIdToDetectorElementCollMapKey
SG::ReadCondHandleKey< ActsTrk::ActsVolumeIdToDetectorElementCollectionMap > m_volumeIdToDetectorElementCollMapKey
Definition: TrackFindingAlg.h:115
ActsTrk::TrackFindingAlg::copyPixelStripCounts
static void copyPixelStripCounts(const detail::RecoTrackContainer::TrackProxy &track, const detail::RecoTrackContainer::TrackProxy &other)
Definition: TrackFindingAlg.cxx:978
ActsTrk::TrackFindingAlg::m_doBranchStopper
Gaudi::Property< bool > m_doBranchStopper
Definition: TrackFindingAlg.h:136
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::TrackFindingAlg::m_maxStripOutliers
Gaudi::Property< std::vector< std::size_t > > m_maxStripOutliers
Definition: TrackFindingAlg.h:171
ActsTrk::TrackFindingAlg::m_skipDuplicateSeeds
Gaudi::Property< bool > m_skipDuplicateSeeds
Definition: TrackFindingAlg.h:127
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:1253
InDetDD::other
@ other
Definition: InDetDD_Defs.h:16
ActsTrk::TrackFindingAlg::BranchState::nStripHits
static constexpr Acts::ProxyAccessor< unsigned int > nStripHits
Definition: TrackFindingAlg.h:396
ActsTrk::TrackFindingAlg::m_minStripHits
Gaudi::Property< std::vector< std::size_t > > m_minStripHits
Definition: TrackFindingAlg.h:167
ActsTrk::TrackFindingAlg::doTwoWayTrackFinding
std::size_t doTwoWayTrackFinding(std::function< void(detail::RecoTrackContainerProxy &)> addTrack, TrkProxy &trackProxy, detail::RecoTrackContainer &tracksContainerTemp, const TrackFinderOptions &options, Acts::GeometryContext &tgContext, const bool reverseSearch) const
Perform two-way track finding.
Definition: TrackFindingAlg.cxx:807
ActsTrk::TrackFindingAlg::initStatTables
void initStatTables()
Definition: TrackFindingAlg.cxx:1033
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:250
TrackFindingAlg.h
ActsTrk::TrackFindingAlg::m_etaMin
Gaudi::Property< std::vector< double > > m_etaMin
Definition: TrackFindingAlg.h:148
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
ActsTrk::TrackFindingAlg::kNStat
@ kNStat
Definition: TrackFindingAlg.h:202
ActsTrk::TrackFindingAlg::m_minMeasurements
Gaudi::Property< std::vector< std::size_t > > m_minMeasurements
Definition: TrackFindingAlg.h:159
ActsTrk::detail::TrackFindingMeasurements::measurementOffsets
const std::vector< std::size_t > & measurementOffsets() const
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
ActsTrk::TrackFindingAlg::m_endOfWorldVolumeIds
Gaudi::Property< std::vector< std::uint32_t > > m_endOfWorldVolumeIds
Definition: TrackFindingAlg.h:178
ActsTrk::TrackFindingAlg::updatePixelStripCounts
static void updatePixelStripCounts(const detail::RecoTrackContainer::TrackProxy &track, Acts::ConstTrackStateType typeFlags, xAOD::UncalibMeasType detType)
Definition: TrackFindingAlg.cxx:954
DeMoScan.first
bool first
Definition: DeMoScan.py:536
ActsTrk::TrackFindingAlg::m_ptMinMeasurements
Gaudi::Property< std::vector< std::size_t > > m_ptMinMeasurements
Definition: TrackFindingAlg.h:134
plotBeamSpotMon.mon
mon
Definition: plotBeamSpotMon.py:67
ActsTrk::TrackFindingAlg::m_logger
std::unique_ptr< const Acts::Logger > m_logger
logging instance
Definition: TrackFindingAlg.h:441
ActsTrk::TrackFindingAlg::kNTotalSharedHits
@ kNTotalSharedHits
Definition: TrackFindingAlg.h:201
ActsTrk::TrackFindingAlg::getCuts
const Acts::TrackSelector::Config & getCuts(double eta) const
Retrieves track selector configuration for given eta value.
Definition: TrackFindingAlg.cxx:882
ActsTrk::TrackFindingAlg::m_tracksBackendHandlesHelper
ActsTrk::MutableTrackContainerHandlesHelper m_tracksBackendHandlesHelper
Definition: TrackFindingAlg.h:123
xAOD::UncalibMeasType
UncalibMeasType
Define the type of the uncalibrated measurement.
Definition: MeasurementDefs.h:25
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
ActsTrk::TrackFindingAlg::m_trackFinder
std::unique_ptr< CKF_pimpl > m_trackFinder
Definition: TrackFindingAlg.h:390
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:567
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:137
ActsTrk::TrackFindingAlg::TrkProxy
Acts::TrackProxy< Acts::VectorTrackContainer, Acts::VectorMultiTrajectory, Acts::detail::RefHolder, false > TrkProxy
Definition: TrackFindingAlg.h:316
ActsTrk::TrackFindingAlg::EventStats
std::vector< std::array< unsigned int, kNStat > > EventStats
Definition: TrackFindingAlg.h:205
ActsTrk::TrackFindingAlg::m_trackContainerKey
SG::WriteHandleKey< ActsTrk::TrackContainer > m_trackContainerKey
Definition: TrackFindingAlg.h:122
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
ActsTrk::TrackFindingAlg::kNTotalSeeds
@ kNTotalSeeds
Definition: TrackFindingAlg.h:187
ActsTrk::TrackFindingAlg::kNSelectedTracks
@ kNSelectedTracks
Definition: TrackFindingAlg.h:195
ActsTrk::TrackFindingAlg::kNoSecond
@ kNoSecond
Definition: TrackFindingAlg.h:198
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MuonDetectorBuilderTool.cxx:55
ActsTrk::TrackFindingAlg::m_absEtaMaxMeasurements
Gaudi::Property< std::vector< std::size_t > > m_absEtaMaxMeasurements
Definition: TrackFindingAlg.h:135
ActsTrk::TrackFindingAlg::m_etaBins
Gaudi::Property< std::vector< double > > m_etaBins
Definition: TrackFindingAlg.h:129
ActsTrk::TrackFindingAlg::m_detElStatus
SG::ReadHandleKeyArray< InDet::SiDetectorElementStatus > m_detElStatus
Definition: TrackFindingAlg.h:119
ActsTrk::TrackFindingAlg::m_maxChi2
Gaudi::Property< std::vector< double > > m_maxChi2
Definition: TrackFindingAlg.h:163
ActsTrk::TrackFindingAlg::seedCollectionStride
std::size_t seedCollectionStride() const
Definition: TrackFindingAlg.h:423
ActsTrk::detail::CKF
Acts::CombinatorialKalmanFilter< Propagator, RecoTrackContainer > CKF
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:33
TableUtils.h
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:153
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
test_pyathena.counter
counter
Definition: test_pyathena.py:15
ActsTrk::TrackFindingAlg::m_phiMax
Gaudi::Property< std::vector< double > > m_phiMax
Definition: TrackFindingAlg.h:147
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:75
ActsTrk::TrackFindingAlg::EStat
EStat
Definition: TrackFindingAlg.h:186
ActsTrk::MutableTrackContainer
Definition: TrackContainer.h:122
ActsTrk::TrackFindingAlg::m_dumpAllStatEtaBins
Gaudi::Property< bool > m_dumpAllStatEtaBins
Definition: TrackFindingAlg.h:176
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
InDetDD::SiDetectorElementCollection::getDetectorElement
const SiDetectorElement * getDetectorElement(const IdentifierHash &hash) const
Definition: SiDetectorElementCollection.cxx:15
TrackContainer.h
ActsTrk::TrackFindingAlg::m_etaMax
Gaudi::Property< std::vector< double > > m_etaMax
Definition: TrackFindingAlg.h:149
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:46
ActsTrk::ActsVolumeIdToDetectorElementCollectionMap
Definition: ActsVolumeIdToDetectorElementCollectionMap.h:13
ActsTrk::detail::DuplicateSeedDetector
Definition: DuplicateSeedDetector.h:21
HGTD_ClusterOnTrack.h
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration.
xAOD::UncalibMeasType::PixelClusterType
@ PixelClusterType
ActsTrk::TrackFindingAlg::kNStoppedTracksMaxHoles
@ kNStoppedTracksMaxHoles
Definition: TrackFindingAlg.h:196
ActsTrk::TrackFindingAlg::m_fitterTool
ToolHandle< ActsTrk::IFitterTool > m_fitterTool
Definition: TrackFindingAlg.h:97
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
ActsTrk::TrackFindingAlg::TrackFindingDefaultOptions
Definition: TrackFindingAlg.h:214
ActsTrk::TrackFindingAlg::m_pixelCalibTool
ToolHandle< ActsTrk::IOnTrackCalibratorTool< detail::RecoTrackStateContainer > > m_pixelCalibTool
Definition: TrackFindingAlg.h:98
ActsTrk::TrackFindingAlg::m_d0Min
Gaudi::Property< std::vector< double > > m_d0Min
Definition: TrackFindingAlg.h:154
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
SG::ReadCondHandle::cptr
const_pointer_type cptr()
Definition: ReadCondHandle.h:71
ActsTrk::TrackFindingAlg::m_maxHoles
Gaudi::Property< std::vector< std::size_t > > m_maxHoles
Definition: TrackFindingAlg.h:160
ActsTrk::TrackFindingAlg::BranchStopperResult
Acts::CombinatorialKalmanFilterBranchStopperResult BranchStopperResult
Definition: TrackFindingAlg.h:258