ATLAS Offline Software
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 
5 #include "src/TrackFindingAlg.h"
6 
7 // Athena
12 
13 // ACTS
14 #include "Acts/Geometry/TrackingGeometry.hpp"
15 #include "Acts/Geometry/GeometryIdentifier.hpp"
16 #include "Acts/Utilities/TrackHelpers.hpp"
17 #include "Acts/TrackFitting/MbfSmoother.hpp"
18 #include "Acts/Utilities/Logger.hpp"
19 #include "ActsInterop/Logger.h"
20 
21 // ActsTrk
29 
30 // STL
31 #include <Acts/Propagator/StandardAborters.hpp>
32 #include <sstream>
33 #include <functional>
34 #include <stdexcept>
35 #include <utility>
36 #include <algorithm>
37 #include <variant>
38 
39 namespace {
40  static std::size_t sourceLinkHash(const Acts::SourceLink& slink) {
41  const ActsTrk::ATLASUncalibSourceLink &atlasSourceLink = slink.get<ActsTrk::ATLASUncalibSourceLink>();
42  const xAOD::UncalibratedMeasurement &uncalibMeas = ActsTrk::getUncalibratedMeasurement(atlasSourceLink);
43  return uncalibMeas.identifier();
44  }
45 
46  static bool sourceLinkEquality(const Acts::SourceLink& a, const Acts::SourceLink& b) {
49  return uncalibMeas_a.identifier() == uncalibMeas_b.identifier();
50  }
51 
52  static std::optional<ActsTrk::detail::RecoTrackStateContainerProxy> getFirstMeasurementFromTrack(typename ActsTrk::detail::RecoTrackContainer::TrackProxy trackProxy) {
53  std::optional<ActsTrk::detail::RecoTrackStateContainerProxy> firstMeasurement {std::nullopt};
54  for (auto st : trackProxy.trackStatesReversed()) {
55  // We are excluding non measurement states and outlier here. Those can
56  // decrease resolution because only the smoothing corrected the very
57  // first prediction as filtering is not possible.
58  if (not st.typeFlags().test(Acts::TrackStateFlag::MeasurementFlag)) continue;
59  if (st.typeFlags().test(Acts::TrackStateFlag::OutlierFlag)) continue;
60  firstMeasurement = st;
61  }
62  return firstMeasurement;
63  }
64 
65 }
66 
67 
68 
69 namespace ActsTrk
70 {
72 
73  TrackFindingAlg::TrackFindingAlg(const std::string &name, ISvcLocator *pSvcLocator)
74  : TrackFindingBaseAlg(name, pSvcLocator) {}
75 
76  // === initialize ==========================================================
77 
79  {
80  ATH_MSG_INFO("Initializing " << name() << " ... ");
81 
93 
94  ATH_CHECK(m_paramEstimationTool.retrieve());
95  ATH_CHECK(m_seedContainerKeys.initialize());
96  ATH_CHECK(m_detEleCollKeys.initialize());
99  ATH_CHECK(m_detElStatus.initialize());
101 
102  m_storeDestinies = not m_seedDestiny.empty();
104 
105  if (m_seedContainerKeys.size() != m_detEleCollKeys.size())
106  {
107  ATH_MSG_FATAL("There are " << m_detEleCollKeys.size() << " DetectorElementsKeys, but " << m_seedContainerKeys.size() << " SeedContainerKeys");
108  return StatusCode::FAILURE;
109  }
110 
111  if (m_detEleCollKeys.size() != m_seedLabels.size())
112  {
113  ATH_MSG_FATAL("There are " << m_seedLabels.size() << " SeedLabels, but " << m_detEleCollKeys.size() << " DetectorElementsKeys");
114  return StatusCode::FAILURE;
115  }
116 
117  if (m_useTopSpRZboundary.size() != 2)
118  {
119  ATH_MSG_FATAL("useTopSpRZboundary must have 2 elements, but has " << m_useTopSpRZboundary.size());
120  return StatusCode::FAILURE;
121  }
122 
123  if (m_ambiStrategy == 1 /* END_OF_TF */) {
124  Acts::GreedyAmbiguityResolution::Config cfg;
125  cfg.maximumSharedHits = m_maximumSharedHits;
126  cfg.maximumIterations = m_maximumIterations;
127  cfg.nMeasurementsMin = m_nMeasurementsMin;
128 
129  m_ambi.emplace(std::move(cfg), makeActsAthenaLogger(this, "Acts"));
130  }
131 
132  if (m_storeDestinies) {
133  if (m_seedDestiny.size() != m_seedContainerKeys.size()) {
134  ATH_MSG_ERROR("There are " << m_seedDestiny.size() << " seed destiny collections, but " << m_seedContainerKeys.size() << " seed collections");
135  return StatusCode::FAILURE;
136  }
137  }
138 
139  return StatusCode::SUCCESS;
140  }
141 
142  // === finalize ============================================================
143 
146  return StatusCode::SUCCESS;
147  }
148 
149  // === execute =============================================================
150 
151  StatusCode TrackFindingAlg::execute(const EventContext &ctx) const
152  {
153  ATH_MSG_DEBUG("Executing " << name() << " ... ");
154 
155  auto timer = Monitored::Timer<std::chrono::milliseconds>("TIME_execute");
156  auto mon_nTracks = Monitored::Scalar<int>("nTracks");
157  auto mon = Monitored::Group(m_monTool, timer, mon_nTracks);
158 
159  // ================================================== //
160  // ===================== INPUTS ===================== //
161  // ================================================== //
162 
163  // SEED TRIPLETS
164  std::vector<const ActsTrk::SeedContainer *> seedContainers;
165  std::size_t total_seeds = 0;
166  ATH_CHECK(getContainersFromKeys(ctx, m_seedContainerKeys, seedContainers, total_seeds));
167 
168  // DESTINIES
169  std::vector< std::unique_ptr< std::vector<int> > > destinies {};
170  if (m_storeDestinies) {
171  destinies.reserve( seedContainers.size() );
172  for (std::size_t i(0); i<seedContainers.size(); ++i) {
173  destinies.push_back( std::make_unique< std::vector<int> >( seedContainers.at(i)->size(), DestinyType::UNKNOWN) );
174  }
175  }
176 
177  // MEASUREMENTS
178  std::vector<const xAOD::UncalibratedMeasurementContainer *> uncalibratedMeasurementContainers;
179  std::size_t total_measurements = 0;
180  ATH_CHECK(getContainersFromKeys(ctx, m_uncalibratedMeasurementContainerKeys, uncalibratedMeasurementContainers, total_measurements));
181 
182  // map detector element status to volume ids
184  volumeIdToDetectorElementCollMap(m_volumeIdToDetectorElementCollMapKey,ctx);
185  ATH_CHECK(volumeIdToDetectorElementCollMap.isValid());
186  std::vector< const InDet::SiDetectorElementStatus *> det_el_status_arr;
187  const std::vector<const InDetDD::SiDetectorElementCollection*> &det_el_collections =volumeIdToDetectorElementCollMap->collections();
188  det_el_status_arr.resize( det_el_collections.size(), nullptr);
189  for (const SG::ReadHandleKey<InDet::SiDetectorElementStatus> &det_el_status_key : m_detElStatus) {
190  SG::ReadHandle<InDet::SiDetectorElementStatus> det_el_status(det_el_status_key,ctx);
191  ATH_CHECK( det_el_status.isValid());
192  const std::vector<const InDetDD::SiDetectorElementCollection*>::const_iterator
193  det_el_col_iter = std::find(det_el_collections.begin(),
194  det_el_collections.end(),
195  &det_el_status->getDetectorElements());
196  det_el_status_arr.at(det_el_col_iter - det_el_collections.begin()) = det_el_status.cptr();
197  }
198 
199  detail::TrackFindingMeasurements measurements(uncalibratedMeasurementContainers.size() /* number of measurement containers*/);
200  std::size_t measurementIndexContainersSize = (m_skipDuplicateSeeds || m_countSharedHits || m_trackStatePrinter.isSet()) ? uncalibratedMeasurementContainers.size() : 0ul;
201  detail::MeasurementIndex measurementIndex(measurementIndexContainersSize);
202  detail::SharedHitCounter sharedHits;
203 
204  for (std::size_t icontainer = 0; icontainer < uncalibratedMeasurementContainers.size(); ++icontainer) {
205  ATH_MSG_DEBUG("Create " << uncalibratedMeasurementContainers[icontainer]->size() << " source links from measurements in " << m_uncalibratedMeasurementContainerKeys[icontainer].key());
206  measurements.addMeasurements(icontainer,
207  *uncalibratedMeasurementContainers[icontainer],
208  *m_trackingGeometryTool->surfaceIdMap());
209  if (measurementIndexContainersSize > 0ul)
210  measurementIndex.addMeasurements(*uncalibratedMeasurementContainers[icontainer]);
211  }
212 
213  ATH_MSG_DEBUG("measurement index size = " << measurementIndex.size());
214 
215  ATH_CHECK( propagateDetectorElementStatusToMeasurements(*(volumeIdToDetectorElementCollMap.cptr()), det_el_status_arr, measurements) );
216 
217  if (m_trackStatePrinter.isSet()) {
218  m_trackStatePrinter->printMeasurements(ctx, uncalibratedMeasurementContainers, measurements.measurementOffsets());
219  }
220 
221  detail::DuplicateSeedDetector duplicateSeedDetector(total_seeds,
222  m_seedMeasOffset.value(),
224  for (std::size_t icontainer = 0; icontainer < seedContainers.size(); ++icontainer)
225  {
226  duplicateSeedDetector.addSeeds(icontainer, *seedContainers[icontainer], measurementIndex,
227  m_paramEstimationTool->spacePointIndicesFun(),
228  [this,icontainer](const ActsTrk::Seed& seed) -> bool {
229  const bool reverseSearch = m_autoReverseSearch && shouldReverseSearch(seed);
230  const bool refitSeeds = icontainer < m_refitSeeds.size() && m_refitSeeds[icontainer];
231  const bool useTopSp = reverseSearch && !refitSeeds;
232  return useTopSp;
233  });
234  }
235 
236  // Get Beam pos and make pSurface
238  ATH_CHECK( beamSpotHandle.isValid() );
239  const InDet::BeamSpotData* beamSpotData = beamSpotHandle.cptr();
240 
241  // Beam Spot Position
242  Acts::Vector3 beamPos( beamSpotData->beamPos().x() * Acts::UnitConstants::mm,
243  beamSpotData->beamPos().y() * Acts::UnitConstants::mm,
244  0 );
245 
246  // Construct a perigee surface as the target surface
247  std::shared_ptr<Acts::PerigeeSurface> pSurface = Acts::Surface::makeShared<Acts::PerigeeSurface>(beamPos);
248 
249  // ================================================== //
250  // ===================== CONDS ====================== //
251  // ================================================== //
252 
253  std::vector<const InDetDD::SiDetectorElementCollection*> detElementsCollections;
254  std::size_t total_detElems = 0;
255  ATH_CHECK(getContainersFromKeys(ctx, m_detEleCollKeys, detElementsCollections, total_detElems));
256 
257  // ================================================== //
258  // ===================== COMPUTATION ================ //
259  // ================================================== //
260  Acts::VectorTrackContainer actsTrackBackend;
261  Acts::VectorMultiTrajectory actsTrackStateBackend;
262  {
263  std::lock_guard<std::mutex> lock( m_mutex );
264  actsTrackBackend.reserve(m_nTrackReserve);
265  actsTrackStateBackend.reserve(m_nTrackStateReserve);
266  }
267  detail::RecoTrackContainer actsTracksContainer(actsTrackBackend,
268  actsTrackStateBackend);
269 
270  if (m_addPixelStripCounts) {
271  addPixelStripCounts(actsTracksContainer);
272  }
273 
274  detail::ExpectedLayerPatternHelper::add(actsTracksContainer);
275 
276  EventStats event_stat;
277  event_stat.resize(m_stat.size());
278 
279  DetectorContextHolder detContext {
280  .geometry = m_trackingGeometryTool->getGeometryContext(ctx).context(),
281  .magField = m_extrapolationTool->getMagneticFieldContext(ctx),
282  // CalibrationContext converter not implemented yet.
283  .calib = getCalibrationContext(ctx)
284  };
285 
286  // Perform the track finding for all initial parameters.
287  for (std::size_t icontainer = 0; icontainer < seedContainers.size(); ++icontainer)
288  {
289  ATH_CHECK(findTracks(detContext,
290  measurements,
291  measurementIndex,
292  sharedHits,
293  duplicateSeedDetector,
294  *seedContainers.at(icontainer),
295  *detElementsCollections.at(icontainer),
296  actsTracksContainer,
297  icontainer,
298  icontainer < m_seedLabels.size() ? m_seedLabels[icontainer].c_str() : m_seedContainerKeys[icontainer].key().c_str(),
299  event_stat,
300  m_storeDestinies ? destinies.at(icontainer).get() : nullptr,
301  *pSurface.get()));
302  }
303 
304  ATH_MSG_DEBUG(" \\__ Created " << actsTracksContainer.size() << " tracks");
305 
306  mon_nTracks = actsTracksContainer.size();
307  copyStats(event_stat);
308 
309 
310  // ================================================== //
311  // ===================== OUTPUTS ==================== //
312  // ================================================== //
313 
314  // Save the seed destinies
315  if (m_storeDestinies) {
316  for (std::size_t i(0); i<destinies.size(); ++i) {
317  const SG::WriteHandleKey< std::vector<int> >& writeKey = m_seedDestiny.at(i);
318  // make the handle and record
319  SG::WriteHandle< std::vector<int> > destinyHandle = SG::makeHandle( writeKey, ctx );
320  ATH_CHECK( destinyHandle.record( std::move( destinies.at(i) ) ) );
321  }
322  }
323 
324  {
325  std::lock_guard<std::mutex> lock( m_mutex );
326  // update the reserve space
327  if (actsTrackBackend.size() > m_nTrackReserve) {
328  m_nTrackReserve = static_cast<std::size_t>( std::ceil(m_memorySafetyMargin * actsTrackBackend.size()) );
329  }
330  if (actsTrackStateBackend.size() > m_nTrackStateReserve) {
331  m_nTrackStateReserve = static_cast<std::size_t>( std::ceil(m_memorySafetyMargin * actsTrackStateBackend.size()) );
332  }
333  }
334 
335  // handle the ambiguity
336  // we potentially need to short list the track candidates and make some copies
337  if (not m_ambi) {
338  // no need to shortlist anything. just use the actsTracksContainer
339  ATH_MSG_DEBUG(" \\__ Created " << actsTracksContainer.size() << " resolved tracks");
341  std::move(actsTrackBackend),
342  std::move(actsTrackStateBackend) ) );
343  return StatusCode::SUCCESS;
344  }
345 
346  // we have asked for the ambi
347  // we start by shortlisting the container
348  Acts::VectorTrackContainer resolvedTrackBackend;
349  Acts::VectorMultiTrajectory resolvedTrackStateBackend;
350  resolvedTrackBackend.reserve( actsTrackBackend.size() );
351  resolvedTrackStateBackend.reserve( actsTrackStateBackend.size() );
352  detail::RecoTrackContainer resolvedTracksContainer(resolvedTrackBackend, resolvedTrackStateBackend);
353  detail::ExpectedLayerPatternHelper::add(resolvedTracksContainer);
354 
355  if (m_addPixelStripCounts) {
356  addPixelStripCounts(resolvedTracksContainer);
357  }
358 
359  // Start ambiguity resolution
361  m_ambi->computeInitialState(actsTracksContainer, state, &sourceLinkHash,
362  &sourceLinkEquality);
363  m_ambi->resolve(state);
364 
365  // Copy the resolved tracks into the output container
366  // We need a different sharedHits counter here because it saves the track index
367  // and since I ran the resolving the track indices changed.
368  detail::SharedHitCounter sharedHits_forFinalAmbi;
369 
370  // shotlist
371  for (auto iTrack : state.selectedTracks) {
372  auto destProxy = resolvedTracksContainer.makeTrack();
373  destProxy.copyFrom(actsTracksContainer.getTrack(state.trackTips.at(iTrack)));
374 
375  if (m_countSharedHits) {
376  auto [nShared, nBadTrackMeasurements] = sharedHits_forFinalAmbi.computeSharedHits(destProxy, resolvedTracksContainer, measurementIndex);
377  if (nBadTrackMeasurements > 0)
378  ATH_MSG_ERROR("computeSharedHits: " << nBadTrackMeasurements << " track measurements not found in input track");
379  }
380  } // loop on tracks
381 
382  ATH_MSG_DEBUG(" \\__ Created " << resolvedTracksContainer.size() << " resolved tracks");
383 
385  std::move(resolvedTrackBackend),
386  std::move(resolvedTrackStateBackend)) );
387 
388  return StatusCode::SUCCESS;
389  }
390 
392  Acts::VectorTrackContainer&& originalTrackBackend,
393  Acts::VectorMultiTrajectory&& originalTrackStateBackend) const
394  {
395  // convert to const
396  Acts::ConstVectorTrackContainer constTrackBackend( std::move(originalTrackBackend) );
397  Acts::ConstVectorMultiTrajectory constTrackStateBackend( std::move(originalTrackStateBackend) );
398  std::unique_ptr< ActsTrk::TrackContainer> constTracksContainer = std::make_unique< ActsTrk::TrackContainer >( std::move(constTrackBackend),
399  std::move(constTrackStateBackend) );
400 
402  ATH_MSG_DEBUG(" \\__ Tracks Container `" << m_trackContainerKey.key() << "` created ...");
403  ATH_CHECK(trackContainerHandle.record(std::move(constTracksContainer)));
404  return StatusCode::SUCCESS;
405  }
406 
408  const auto& bottom_sp = seed.sp().front();
409 
410  const double r = bottom_sp->radius();
411  const double z = std::abs(bottom_sp->z());
412 
413  const double rBoundary = m_useTopSpRZboundary.value()[0];
414  const double zBoundary = m_useTopSpRZboundary.value()[1];
415 
416  return r > rBoundary || z > zBoundary;
417  }
418 
419  // === findTracks ==========================================================
420 
421  StatusCode
423  const detail::TrackFindingMeasurements &measurements,
424  const detail::MeasurementIndex &measurementIndex,
425  detail::SharedHitCounter &sharedHits,
426  detail::DuplicateSeedDetector &duplicateSeedDetector,
427  const ActsTrk::SeedContainer &seeds,
428  const InDetDD::SiDetectorElementCollection& detElements,
429  detail::RecoTrackContainer &actsTracksContainer,
430  std::size_t typeIndex,
431  const char *seedType,
432  EventStats &event_stat,
433  std::vector<int>* destiny,
434  const Acts::PerigeeSurface& pSurface) const
435  {
436  ATH_MSG_DEBUG(name() << "::" << __FUNCTION__);
437 
438  auto [options, secondOptions, measurementSelector] = getDefaultOptions(detContext, measurements, &pSurface);
439 
440  // ActsTrk::MutableTrackContainer tracksContainerTemp;
441  Acts::VectorTrackContainer trackBackend;
442  Acts::VectorMultiTrajectory trackStateBackend;
443  detail::RecoTrackContainer tracksContainerTemp(trackBackend, trackStateBackend);
444 
445  if (m_addPixelStripCounts) {
446  addPixelStripCounts(tracksContainerTemp);
447  }
448 
449  detail::ExpectedLayerPatternHelper::add(tracksContainerTemp);
450 
451  std::size_t category_i = 0;
452  const auto &trackSelectorCfg = trackFinder().trackSelector.config();
453  auto stopBranchProxy = [&](const detail::RecoTrackContainer::TrackProxy &track,
454  const detail::RecoTrackContainer::TrackStateProxy &trackState) -> BranchStopperResult {
455  return stopBranch(track, trackState, trackSelectorCfg, detContext.geometry, measurementIndex, typeIndex, event_stat[category_i]);
456  };
457  options.extensions.branchStopper.connect(stopBranchProxy);
458 
459  Acts::PropagatorOptions<detail::Stepper::Options, detail::Navigator::Options,
460  Acts::ActorList<Acts::MaterialInteractor>>
461  extrapolationOptions(detContext.geometry, detContext.magField);
462 
463  Acts::TrackExtrapolationStrategy extrapolationStrategy =
465 
466  // Perform the track finding for all initial parameters
467  ATH_MSG_DEBUG("Invoke track finding with " << seeds.size() << ' ' << seedType << " seeds.");
468 
469 
470  std::size_t nPrinted = 0;
471 
472  // Function for Estimate Track Parameters
473  auto retrieveSurfaceFunction =
474  [this, &detElements] (const ActsTrk::Seed& seed, bool useTopSp) -> const Acts::Surface& {
475  const xAOD::SpacePoint* sp = useTopSp ? seed.sp().back() : seed.sp().front();
476  const InDetDD::SiDetectorElement* element = detElements.getDetectorElement(useTopSp ? sp->elementIdList().back()
477  : sp->elementIdList().front());
478  const Trk::Surface& atlas_surface = element->surface();
479  return m_ATLASConverterTool->trkSurfaceToActsSurface(atlas_surface);
480  };
481 
482 
483 
484  // Loop over the track finding results for all initial parameters
485  for (unsigned int iseed = 0; iseed < seeds.size(); ++iseed)
486  {
487  // Get the seed
488  const ActsTrk::Seed& seed = *seeds[iseed];
489 
490  category_i = typeIndex * (m_statEtaBins.size() + 1);
491  tracksContainerTemp.clear();
492 
493  const bool reverseSearch = m_autoReverseSearch && shouldReverseSearch(seed);
494  const bool refitSeeds = typeIndex < m_refitSeeds.size() && m_refitSeeds[typeIndex];
495  const bool useTopSp = reverseSearch && !refitSeeds;
496 
497  // Check if the seed is a duplicate seed
498  const bool isDupSeed = duplicateSeedDetector.isDuplicate(typeIndex, iseed);
499 
500  if (isDupSeed) {
501  ATH_MSG_DEBUG("skip " << seedType << " seed " << iseed << " - already found");
502  category_i = getSeedCategory(typeIndex, seed, useTopSp);
503  ++event_stat[category_i][kNTotalSeeds];
504  ++event_stat[category_i][kNDuplicateSeeds];
505  if (m_storeDestinies) destiny->at(iseed) = DestinyType::DUPLICATE;
506  if (!m_trackStatePrinter.isSet()) continue; // delay continue to estimate track parms for TrackStatePrinter?
507  }
508 
509  // Set the option accordingly - we change the direction and the target surface accordingly
510  options.propagatorPlainOptions.direction = reverseSearch ? Acts::Direction::Backward() : Acts::Direction::Forward();
511  secondOptions.propagatorPlainOptions.direction = options.propagatorPlainOptions.direction.invert();
512  options.targetSurface = reverseSearch ? &pSurface : nullptr;
513  secondOptions.targetSurface = reverseSearch ? nullptr : &pSurface;
514  // 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
515 
516  // Get first estimate of parameters from the seed
517  std::optional<Acts::BoundTrackParameters> optTrackParams =
518  m_paramEstimationTool->estimateTrackParameters(seed,
519  useTopSp,
520  detContext.geometry,
521  detContext.magField,
522  retrieveSurfaceFunction);
523 
524  if (!optTrackParams) {
525  ATH_MSG_DEBUG("Failed to estimate track parameters for seed " << iseed);
526  if (!isDupSeed) {
527  category_i = getSeedCategory(typeIndex, seed, useTopSp);
528  ++event_stat[category_i][kNTotalSeeds];
529  ++event_stat[category_i][kNNoEstimatedParams];
530  if (m_storeDestinies) destiny->at(iseed) = DestinyType::FAILURE;
531  }
532  continue;
533  }
534 
535  Acts::BoundTrackParameters *initialParameters = &(*optTrackParams);
536  printSeed(iseed, detContext, seeds, *initialParameters, measurementIndex, nPrinted, seedType);
537  if (isDupSeed) continue; // skip now if not done before
538 
539  double etaInitial = -std::log(std::tan(0.5 * initialParameters->theta()));
540  category_i = getStatCategory(typeIndex, etaInitial);
541  ++event_stat[category_i][kNTotalSeeds]; // also updated for duplicate seeds
542  ++event_stat[category_i][kNUsedSeeds];
543 
544  // Optional refit track parameters to get more refined value
545  std::unique_ptr<Acts::BoundTrackParameters> refitSeedParameters;
546  if (refitSeeds) {
547  refitSeedParameters = doRefit(seed, *initialParameters, detContext, reverseSearch);
548  if (refitSeedParameters.get() == nullptr) {
549  ++event_stat[category_i][kNRejectedRefinedSeeds];
550  if (m_storeDestinies) destiny->at(iseed) = DestinyType::FAILURE;
551  continue;
552  }
553  if (refitSeedParameters.get() != initialParameters) {
554  initialParameters = refitSeedParameters.get();
555  printSeed(iseed, detContext, seeds, *initialParameters, measurementIndex, nPrinted, seedType, true);
556  }
557  }
558 
559  // Get the Acts tracks, given this seed
560  // Result here contains a vector of TrackProxy objects
561  auto result = trackFinder().ckf.findTracks(*initialParameters, options, tracksContainerTemp);
562 
563  // The result for this seed
564  if (not result.ok()) {
565  ATH_MSG_WARNING("Track finding failed for " << seedType << " seed " << iseed << " with error" << result.error());
566  if (m_storeDestinies) destiny->at(iseed) = DestinyType::FAILURE;
567  continue;
568  }
569  auto &tracksForSeed = result.value();
570 
571 
572 
573  std::size_t ntracks = 0ul;
574 
575  // loop on the tracks we have just found from the seed
576  std::size_t nfirst = 0;
577  for (TrkProxy &firstTrack : tracksForSeed) {
578  // smoothing
579  auto smoothingResult = Acts::smoothTrack(detContext.geometry, firstTrack, logger(), Acts::MbfSmoother());
580  if (!smoothingResult.ok()) {
581  ATH_MSG_DEBUG("Smoothing for seed "
582  << iseed << " and first track " << firstTrack.index()
583  << " failed with error " << smoothingResult.error());
584  continue;
585  }
586 
587  // if no two way, just add the track and move on
588  if (not m_doTwoWay) {
589  // add the track to the collection
590  ATH_CHECK( addTrack(detContext,
591  firstTrack,
592  pSurface,
593  extrapolationStrategy,
594  sharedHits,
595  actsTracksContainer,
596  measurementIndex,
597  tracksContainerTemp,
598  duplicateSeedDetector,
599  destiny,
600  event_stat,
601  ntracks,
602  iseed,
603  category_i,
604  seedType) );
605  ++nfirst;
606  continue;
607  }
608 
609  // TWO WAY STARTS HERE
610  // We need the first measurement of the track
611  std::optional<detail::RecoTrackStateContainerProxy> firstMeas = getFirstMeasurementFromTrack(firstTrack);
612  // we are supposed to find a measurement
613  if (not firstMeas.has_value()) {
614  ATH_MSG_ERROR("Could not retrieve first measurement from track proxy. Is it ill-formed?");
615  return StatusCode::FAILURE;
616  }
617  detail::RecoTrackStateContainerProxy& firstMeasurement = firstMeas.value();
618 
619  // Get the tracks from the second track finding
620  std::vector<typename detail::RecoTrackContainer::TrackProxy> secondTracksForSeed =
621  doTwoWayTrackFinding(firstMeasurement,
622  firstTrack,
623  tracksContainerTemp,
624  secondOptions);
625 
626  if ( secondTracksForSeed.empty() ) {
627  ATH_MSG_DEBUG("No viable result from second track finding for " << seedType << " seed " << iseed << " track " << nfirst);
628  ++event_stat[category_i][kNoSecond];
629  ATH_CHECK( addTrack(detContext,
630  firstTrack,
631  pSurface,
632  extrapolationStrategy,
633  sharedHits,
634  actsTracksContainer,
635  measurementIndex,
636  tracksContainerTemp,
637  duplicateSeedDetector,
638  destiny,
639  event_stat,
640  ntracks,
641  iseed,
642  category_i,
643  seedType) );
644  }
645 
646  // need to add tracks here
647  // do the stiching
648  // store the original previous state to restore it later
649  auto originalFirstMeasurementPrevious = firstMeasurement.previous();
650  for (auto &secondTrack : secondTracksForSeed) {
651  secondTrack.reverseTrackStates(true);
652 
653  firstMeasurement.previous() = secondTrack.outermostTrackState().index();
654  secondTrack.tipIndex() = firstTrack.tipIndex();
655 
656  if (reverseSearch) {
657  // smooth the full track
658  auto secondSmoothingResult = Acts::smoothTrack(detContext.geometry,
659  secondTrack,
660  logger());
661  if ( not secondSmoothingResult.ok() ) {
662  continue;
663  }
664  secondTrack.reverseTrackStates(true);
665  }
666 
667  // Add track to collection
668  ATH_CHECK( addTrack(detContext,
669  secondTrack,
670  pSurface,
671  extrapolationStrategy,
672  sharedHits,
673  actsTracksContainer,
674  measurementIndex,
675  tracksContainerTemp,
676  duplicateSeedDetector,
677  destiny,
678  event_stat,
679  ntracks,
680  iseed,
681  category_i,
682  seedType) );
683  } // loop on tracks
684 
685  // finish the stiching
686  // restore the original previous state for the first track
687  firstMeasurement.previous() = originalFirstMeasurementPrevious;
688 
689  nfirst++;
690  } // loop on tracks from seed
691 
692  if (m_storeDestinies) {
693  if (ntracks == 0) {
694  destiny->at(iseed) = DestinyType::FAILURE;
695  } else {
696  destiny->at(iseed) = DestinyType::SUCCEED;
697  }
698  }
699 
700  if (ntracks == 0) {
701  ATH_MSG_DEBUG("Track finding found no track candidates for " << seedType << " seed " << iseed);
702  ++event_stat[category_i][kNoTrack];
703  } else if (ntracks >= 2) {
704  ++event_stat[category_i][kMultipleBranches];
705  }
706 
707  if (m_trackStatePrinter.isSet())
708  std::cout << std::flush;
709  } // loop on seeds
710 
711  ATH_MSG_DEBUG("Completed " << seedType << " track finding with " << computeStatSum(typeIndex, kNOutputTracks, event_stat) << " track candidates.");
712 
713  return StatusCode::SUCCESS;
714  }
715 
716  void
719  detail::DuplicateSeedDetector &duplicateSeedDetector,
720  const detail::MeasurementIndex &measurementIndex) const {
721 
722  const auto lastMeasurementIndex = track.tipIndex();
723  duplicateSeedDetector.newTrajectory();
724 
725  tracksContainer.trackStateContainer().visitBackwards(
726  lastMeasurementIndex,
727  [&duplicateSeedDetector,&measurementIndex](const detail::RecoTrackStateContainer::ConstTrackStateProxy &state) -> void
728  {
729  // Check there is a source link
730  if (not state.hasUncalibratedSourceLink())
731  return;
732 
733  // Fill the duplicate selector
734  auto sl = state.getUncalibratedSourceLink().template get<ATLASUncalibSourceLink>();
735  duplicateSeedDetector.addMeasurement(sl, measurementIndex);
736  }); // end visitBackwards
737  }
738 
740  const std::vector< const InDet::SiDetectorElementStatus *> &det_el_status_arr,
741  detail::TrackFindingMeasurements &measurements) const {
742  const Acts::TrackingGeometry *
743  acts_tracking_geometry = m_trackingGeometryTool->trackingGeometry().get();
744  ATH_CHECK(acts_tracking_geometry != nullptr);
745 
746  using Counter = struct { unsigned int n_volumes, n_volumes_with_status, n_missing_detector_elements, n_detector_elements, n_disabled_detector_elements;};
747  Counter counter {0u,0u,0u,0u,0u};
748  acts_tracking_geometry->visitVolumes([&counter,
749  &volume_id_to_det_el_coll,
750  &det_el_status_arr,
751  &measurements,
752  this](const Acts::TrackingVolume *volume_ptr) {
753  ++counter.n_volumes;
754  if (!volume_ptr) return;
755 
757  det_el_status = det_el_status_arr.at(volume_id_to_det_el_coll.collecionMap().at(volume_ptr->geometryId().volume()));
758  if (det_el_status) {
759  ++counter.n_volumes_with_status;
760  volume_ptr->visitSurfaces([&counter, det_el_status, &measurements,this](const Acts::Surface *surface_ptr) {
761  if (!surface_ptr) return;
762  const Acts::Surface &surface = *surface_ptr;
763  const Acts::DetectorElementBase*detector_element = surface.associatedDetectorElement();
764  if (detector_element) {
765  ++counter.n_detector_elements;
766  const ActsDetectorElement *acts_detector_element = dynamic_cast<const ActsDetectorElement*>(detector_element);
767  if (!det_el_status->isGood( acts_detector_element->identifyHash() )) {
768  ActsTrk::detail::MeasurementRange old_range = measurements.markSurfaceInsensitive(surface_ptr->geometryId());
769  if (!old_range.empty()) {
770  auto geoid_to_string = [](const Acts::GeometryIdentifier &id) -> std::string {
771  std::stringstream amsg;
772  amsg << id;
773  return amsg.str();
774  };
775  std::string a_msg ( geoid_to_string(surface_ptr->geometryId()));
776  ATH_MSG_WARNING("Reject " << (old_range.elementEndIndex() - old_range.elementBeginIndex())
777  << " measurements because surface " << a_msg);
778  }
779  ++counter.n_disabled_detector_elements;
780  }
781  }
782  }, true /*only sensitive surfaces*/);
783  }
784  else {
785  ++counter.n_missing_detector_elements;
786  }
787  });
788  ATH_MSG_DEBUG("Volumes with detector element status " << counter.n_volumes_with_status << " / " << counter.n_volumes
789  << " disabled detector elements " << counter.n_disabled_detector_elements
790  << " / " << counter.n_detector_elements
791  << " missing detector elements "
792  << counter.n_missing_detector_elements);
793  return StatusCode::SUCCESS;
794  }
795 
796  std::size_t TrackFindingAlg::getSeedCategory(std::size_t typeIndex,
797  const ActsTrk::Seed& seed,
798  bool useTopSp) const
799  {
800  const xAOD::SpacePoint* sp = useTopSp ? seed.sp().back() : seed.sp().front();
802  double etaSeed = std::atanh(pos[2] / pos.norm());
803  return getStatCategory(typeIndex, etaSeed);
804  }
805 
806  void TrackFindingAlg::printSeed(unsigned int iseed,
807  const DetectorContextHolder& detContext,
808  const ActsTrk::SeedContainer& seeds,
809  const Acts::BoundTrackParameters &seedParameters,
810  const detail::MeasurementIndex &measurementIndex,
811  std::size_t& nPrinted,
812  const char *seedType,
813  bool isKF) const
814  {
815  if (not m_trackStatePrinter.isSet()) return;
816 
817  if (nPrinted == 0) {
818  ATH_MSG_INFO("CKF results for " << seeds.size() << ' ' << seedType << " seeds:");
819  }
820  ++nPrinted;
821  m_trackStatePrinter->printSeed(detContext.geometry, *seeds[iseed], seedParameters, measurementIndex, iseed, isKF);
822  }
823 
824 namespace {
825 struct Collector {
826 
827  using result_type = TrackFindingAlg::ExpectedLayerPattern*;
828 
829  template <typename propagator_state_t, typename stepper_t,
830  typename navigator_t>
831  void act(propagator_state_t& state, const stepper_t& /*stepper*/,
832  const navigator_t& navigator, result_type& result,
833  const Acts::Logger& /*logger*/) const {
834  const auto* currentSurface = navigator.currentSurface(state.navigation);
835  if (currentSurface == nullptr) {
836  return;
837  }
838 
839  assert(result == nullptr && "Result type is nullptr");
840 
841  if (currentSurface->associatedDetectorElement() != nullptr) {
842  const auto* detElem = dynamic_cast<const ActsDetectorElement*>(currentSurface->associatedDetectorElement());
843  if(detElem != nullptr) {
845  }
846  }
847  };
848 };
849 }
850 
851 Acts::Result<void> TrackFindingAlg::extrapolateTrackToReferenceSurface(
852  const DetectorContextHolder& detContext,
854  const Acts::Surface &referenceSurface,
855  const detail::Extrapolator &propagator,
856  Acts::TrackExtrapolationStrategy strategy,
858 
859  Acts::PropagatorOptions<detail::Stepper::Options, detail::Navigator::Options,
860  Acts::ActorList<Acts::MaterialInteractor, Collector>>
861  options(detContext.geometry, detContext.magField);
862 
863  auto findResult = findTrackStateForExtrapolation(
864  options.geoContext, track, referenceSurface, strategy, logger());
865 
866  if (!findResult.ok()) {
867  ACTS_ERROR("failed to find track state for extrapolation");
868  return findResult.error();
869  }
870 
871  auto &[trackState, distance] = *findResult;
872 
873  options.direction = Acts::Direction::fromScalarZeroAsPositive(distance);
874 
875  Acts::BoundTrackParameters parameters = track.createParametersFromState(trackState);
876  ACTS_VERBOSE("extrapolating track to reference surface at distance "
877  << distance << " with direction " << options.direction
878  << " with starting parameters " << parameters);
879 
880  auto state = propagator.makeState<decltype(options), Acts::ForcedSurfaceReached>(referenceSurface, options);
881  ExpectedLayerPattern*& collectorResult = state.get<TrackFindingAlg::ExpectedLayerPattern*>();
882  collectorResult = &expectedLayerPattern;
883 
884  auto initRes = propagator.initialize(state, parameters);
885  if(!initRes.ok()) {
886  ACTS_ERROR("Failed to initialize propgation state: " << initRes.error().message());
887  return initRes.error();
888  }
889 
890 
891  auto propagateOnlyResult =
892  propagator.propagate(state);
893 
894  if (!propagateOnlyResult.ok()) {
895  ACTS_ERROR("failed to extrapolate track: " << propagateOnlyResult.error().message());
896  return propagateOnlyResult.error();
897  }
898 
899  auto propagateResult = propagator.makeResult(
900  std::move(state), propagateOnlyResult, referenceSurface, options);
901 
902  if (!propagateResult.ok()) {
903  ACTS_ERROR("failed to extrapolate track: " << propagateResult.error().message());
904  return propagateResult.error();
905  }
906 
907  track.setReferenceSurface(referenceSurface.getSharedPtr());
908  track.parameters() = propagateResult->endParameters.value().parameters();
909  track.covariance() =
910  propagateResult->endParameters.value().covariance().value();
911 
912  return Acts::Result<void>::success();
913  }
914 
917  const Acts::Surface& pSurface,
918  const Acts::TrackExtrapolationStrategy& extrapolationStrategy,
919  detail::SharedHitCounter &sharedHits,
920  detail::RecoTrackContainer &actsTracksContainer,
921  const detail::MeasurementIndex& measurementIndex,
922  const detail::RecoTrackContainer& tracksContainerTemp,
923  detail::DuplicateSeedDetector& duplicateSeedDetector,
924  std::vector<int>* destiny,
925  EventStats& event_stat,
926  std::size_t& ntracks,
927  std::size_t iseed,
928  std::size_t category_i,
929  const char *seedType) const
930  {
931 
932  std::array<unsigned int, 4> expectedLayerPattern;
933 
934  // if the the perigeeSurface was not hit (in particular the case for the inside-out pass,
935  // the track has no reference surface and the extrapolation to the perigee has not been done
936  // yet.
937  if (not track.hasReferenceSurface()) {
938  auto extrapolationResult =
939  extrapolateTrackToReferenceSurface(detContext, track,
940  pSurface,
941  trackFinder().extrapolator,
942  extrapolationStrategy,
944 
945  if (not extrapolationResult.ok()) {
946  ATH_MSG_WARNING("Extrapolation for seed "
947  << iseed << " and " << track.index()
948  << " failed with error " << extrapolationResult.error()
949  << " dropping track candidate.");
950  if (m_storeDestinies) destiny->at(iseed) = DestinyType::FAILURE;
951  return StatusCode::SUCCESS;
952  }
953  }
954 
955  // Before trimming, inspect encountered surfaces from all track states
956  for(const auto& ts : track.trackStatesReversed()) {
957  const auto& surface = ts.referenceSurface();
958  if(surface.associatedDetectorElement() != nullptr) {
959  const auto* detElem = dynamic_cast<const ActsDetectorElement*>(surface.associatedDetectorElement());
960  if(detElem != nullptr) {
962  }
963  }
964  }
965 
966  // Trim tracks
967  // - trimHoles
968  // - trimOutliers
969  // - trimMaterial
970  // - trimOtherNoneMeasurement
971  Acts::trimTrack(track, true, true, true, true);
972  Acts::calculateTrackQuantities(track);
973  if (m_addPixelStripCounts) {
974  initPixelStripCounts(track);
975  for (const auto trackState : track.trackStatesReversed()) {
976  updatePixelStripCounts(track, trackState.typeFlags(), measurementType(trackState));
977  }
978  checkPixelStripCounts(track);
979  }
980 
981  ++ntracks;
982  ++event_stat[category_i][kNOutputTracks];
983 
984  if ( not trackFinder().trackSelector.isValidTrack(track) or
985  not selectPixelStripCountsFinal(track)) {
986  ATH_MSG_DEBUG("Track " << ntracks << " from " << seedType << " seed " << iseed << " failed track selection");
987  if ( m_trackStatePrinter.isSet() ) {
988  m_trackStatePrinter->printTrack(detContext.geometry, tracksContainerTemp, track, measurementIndex, true);
989  }
990  return StatusCode::SUCCESS;
991  }
992 
993  // Fill the track infos into the duplicate seed detector
994  if (m_skipDuplicateSeeds) {
995  storeSeedInfo(tracksContainerTemp, track, duplicateSeedDetector, measurementIndex);
996  }
997 
998  auto actsDestProxy = actsTracksContainer.makeTrack();
999  actsDestProxy.copyFrom(track, true); // make sure we copy track states!
1000 
1002 
1003  if (not m_countSharedHits) {
1004  return StatusCode::SUCCESS;
1005  }
1006 
1007  auto [nShared, nBadTrackMeasurements] = sharedHits.computeSharedHits(actsDestProxy, actsTracksContainer, measurementIndex);
1008 
1009  if (nBadTrackMeasurements > 0) {
1010  ATH_MSG_ERROR("computeSharedHits: " << nBadTrackMeasurements << " track measurements not found in input for " << seedType << " seed " << iseed << " track");
1011  }
1012 
1013  ATH_MSG_DEBUG("found " << actsDestProxy.nSharedHits() << " shared hits in " << seedType << " seed " << iseed << " track");
1014 
1015  event_stat[category_i][kNTotalSharedHits] += nShared;
1016 
1017  if (m_ambiStrategy == 2) { // run the ambiguity during track selection
1018 
1019  if (actsDestProxy.nSharedHits() <= m_maximumSharedHits) {
1020  ++event_stat[category_i][kNSelectedTracks];
1021  }
1022  else { // track fails the shared hit selection
1023 
1024  ATH_MSG_DEBUG("found " << actsDestProxy.nSharedHits() << " shared hits in " << seedType << " seed " << iseed << " track");
1025  // Reset the original track shared hits by running coumputeSharedHits
1026  // with removeSharedHits flag to true
1027  // nSharedRemoved contains the total shared hits that will be removed
1028  auto [nSharedRemoved, nRemoveBadTrackMeasurements] = sharedHits.computeSharedHits(actsDestProxy, actsTracksContainer, measurementIndex, true);
1029 
1030  ATH_MSG_DEBUG("Removed " << nSharedRemoved << " shared hits in " << seedType << " seed " << iseed << " track and the matching track");
1031 
1032  if (nRemoveBadTrackMeasurements > 0) {
1033  ATH_MSG_ERROR("computeSharedHits with remove flag ON: " << nRemoveBadTrackMeasurements <<
1034  " track measurements not found in input for " << seedType << " seed " << iseed << " track");
1035  }
1036 
1037  if (actsDestProxy.nSharedHits() != 0) {
1038  ATH_MSG_ERROR("computeSharedHits with remove flag ON returned " <<
1039  actsDestProxy.nSharedHits()<< " while expecting 0 for" <<
1040  seedType << " seed " << iseed << " track");
1041  }
1042 
1043  // Remove the track from the container
1044  actsTracksContainer.removeTrack(actsDestProxy.index());
1045  ATH_MSG_DEBUG("Track " << ntracks << " from " << seedType << " seed " << iseed << " failed shared hit selection");
1046  }
1047  }
1048  else { // use ambi during selection
1049  ++event_stat[category_i][kNSelectedTracks];
1050 
1051  if (m_trackStatePrinter.isSet()) {
1052  m_trackStatePrinter->printTrack(detContext.geometry, actsTracksContainer, actsDestProxy, measurementIndex);
1053  }
1054  }
1055 
1056  return StatusCode::SUCCESS;
1057  }
1058 
1059 } // namespace
xAOD::strategy
strategy
Definition: L2CombinedMuon_v1.cxx:108
xAOD::UncalibratedMeasurement_v1::identifier
DetectorIdentType identifier() const
Returns the full Identifier of the measurement.
ActsTrk::detail::RecoTrackStateContainerProxy
RecoTrackStateContainer::TrackStateProxy RecoTrackStateContainerProxy
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:25
ActsTrk::TrackFindingBaseAlg::m_trackContainerKey
SG::WriteHandleKey< ActsTrk::TrackContainer > m_trackContainerKey
Definition: TrackFindingBaseAlg.h:97
python.StoreID.UNKNOWN
int UNKNOWN
Definition: StoreID.py:16
ActsTrk::TrackFindingAlg::m_maximumSharedHits
Gaudi::Property< unsigned int > m_maximumSharedHits
Definition: TrackFindingAlg.h:126
ActsTrk::TrackFindingBaseAlg::doTwoWayTrackFinding
std::vector< typename detail::RecoTrackContainer::TrackProxy > doTwoWayTrackFinding(const detail::RecoTrackStateContainerProxy &firstMeasurement, const TrkProxy &trackProxy, detail::RecoTrackContainer &tracksContainerTemp, const TrackFinderOptions &options) const
Perform two-way track finding.
Definition: TrackFindingBaseAlg.cxx:235
beamspotman.r
def r
Definition: beamspotman.py:674
ActsTrk::getCalibrationContext
Acts::CalibrationContext getCalibrationContext(const EventContext &ctx)
The Acts::Calibration context is piped through the Acts fitters to (re)calibrate the Acts::SourceLink...
Definition: CalibrationContext.h:15
SCT_ClusterOnTrack.h
ActsTrk::TrackFindingAlg::m_ambiStrategy
Gaudi::Property< std::size_t > m_ambiStrategy
Definition: TrackFindingAlg.h:131
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
ActsTrk::detail::MeasurementIndex::size
std::size_t size() const
ActsTrk::detail::DuplicateSeedDetector::addSeeds
void addSeeds(std::size_t typeIndex, const ActsTrk::SeedContainer &seeds, const MeasurementIndex &measurementIndex)
Definition: DuplicateSeedDetector.cxx:26
get_generator_info.result
result
Definition: get_generator_info.py:21
python.SystemOfUnits.mm
float mm
Definition: SystemOfUnits.py:98
ActsTrk::TrackFindingAlg::printSeed
void printSeed(unsigned int iseed, const DetectorContextHolder &detContext, const ActsTrk::SeedContainer &seeds, const Acts::BoundTrackParameters &seedParameters, const detail::MeasurementIndex &measurementIndex, std::size_t &nPrinted, const char *seedType, bool isKF=false) const
Definition: TrackFindingAlg.cxx:806
ActsTrk::TrackFindingBaseAlg::TrkProxy
Acts::TrackProxy< Acts::VectorTrackContainer, Acts::VectorMultiTrajectory, Acts::detail::RefHolder, false > TrkProxy
Definition: TrackFindingBaseAlg.h:242
InDetDD::SiDetectorElementCollection
Definition: SiDetectorElementCollection.h:27
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::TrackFindingAlg::getSeedCategory
std::size_t getSeedCategory(std::size_t typeIndex, const ActsTrk::Seed &seed, bool useTopSp) const
Definition: TrackFindingAlg.cxx:796
xAOD::SpacePoint_v1::elementIdList
const std::vector< DetectorIDHashType > & elementIdList() const
Returns the IdentifierHash of the spacepoint (corresponds to the detector element IdentifierHash)
Definition: SpacePoint_v1.cxx:14
ActsGeometryContext.h
ActsTrk::ActsVolumeIdToDetectorElementCollectionMap::collecionMap
const std::array< unsigned char, 256 > & collecionMap() const
Definition: ActsVolumeIdToDetectorElementCollectionMap.h:36
ActsTrk::TrackFindingAlg::m_seedMeasOffset
Gaudi::Property< unsigned int > m_seedMeasOffset
Definition: TrackFindingAlg.h:117
ActsTrk::TrackFindingAlg::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: TrackFindingAlg.h:113
ActsTrk::TrackFindingBaseAlg::kNoSecond
@ kNoSecond
Definition: TrackFindingBaseAlg.h:165
make_unique
std::unique_ptr< T > make_unique(Args &&... args)
Definition: SkimmingToolEXOT5.cxx:23
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
ActsTrk::TrackFindingBaseAlg::initialize
virtual StatusCode initialize() override
Definition: TrackFindingBaseAlg.cxx:26
ActsTrk::TrackFindingBaseAlg::finalize
virtual StatusCode finalize() override
Definition: TrackFindingBaseAlg.cxx:176
ActsTrk::ActsVolumeIdToDetectorElementCollectionMap::collections
const std::vector< const InDetDD::SiDetectorElementCollection * > & collections() const
Definition: ActsVolumeIdToDetectorElementCollectionMap.h:37
ActsTrk::detail::CKF_config::trackSelector
Acts::TrackSelector trackSelector
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:48
ActsTrk::TrackFindingBaseAlg::EventStats
std::vector< std::array< unsigned int, kNStat > > EventStats
Definition: TrackFindingBaseAlg.h:172
ActsTrk::detail::Extrapolator
Propagator Extrapolator
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:34
ActsTrk::TrackFindingAlg::TrackFindingAlg
TrackFindingAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TrackFindingAlg.cxx:73
ActsTrk::TrackFindingBaseAlg::getDefaultOptions
TrackFindingDefaultOptions getDefaultOptions(const DetectorContextHolder &detContext, const detail::TrackFindingMeasurements &measurements, const Acts::PerigeeSurface *pSurface) const
Get CKF options for first and second pass + pointer to MeasurementSelector.
Definition: TrackFindingBaseAlg.cxx:199
ActsTrk::TrackFindingBaseAlg::m_dumpAllStatEtaBins
Gaudi::Property< bool > m_dumpAllStatEtaBins
Definition: TrackFindingBaseAlg.h:150
xAOD::SpacePoint_v1::globalPosition
ConstVectorMap globalPosition() const
Returns the global position of the pixel cluster.
Definition: SpacePoint_v1.cxx:25
InDetDD::SolidStateDetectorElementBase::surface
Trk::Surface & surface()
Element Surface.
SG::ReadCondHandle::isValid
bool isValid()
Definition: ReadCondHandle.h:210
ActsTrk::TrackFindingBaseAlg::BranchStopperResult
Acts::CombinatorialKalmanFilterBranchStopperResult BranchStopperResult
Definition: TrackFindingBaseAlg.h:267
xAOD::SpacePoint_v1::ConstVectorMap
Eigen::Map< const Eigen::Matrix< float, 3, 1 > > ConstVectorMap
Definition: SpacePoint_v1.h:31
ActsTrk::TrackFindingAlg::m_autoReverseSearch
Gaudi::Property< bool > m_autoReverseSearch
Definition: TrackFindingAlg.h:120
ActsTrk::TrackFindingAlg::m_refitSeeds
Gaudi::Property< std::vector< bool > > m_refitSeeds
Definition: TrackFindingAlg.h:118
xAOD::SpacePoint_v1
Definition: SpacePoint_v1.h:29
ActsTrk::TrackFindingBaseAlg::computeStatSum
std::size_t computeStatSum(std::size_t seed_collection, EStat counter_i, const EventStats &stat) const
Definition: TrackFindingBaseAlg.cxx:727
ActsTrk::TrackFindingBaseAlg::DetectorContextHolder::magField
Acts::MagneticFieldContext magField
Definition: TrackFindingBaseAlg.h:63
ActsTrk::TrackFindingBaseAlg::kNUsedSeeds
@ kNUsedSeeds
Definition: TrackFindingBaseAlg.h:156
ActsTrk::detail::SharedHitCounter
Definition: SharedHitCounter.h:19
ActsTrk::detail::DuplicateSeedDetector::isDuplicate
bool isDuplicate(std::size_t typeIndex, index_t iseed)
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:739
python.RatesEmulationExample.lock
lock
Definition: RatesEmulationExample.py:148
ActsTrk::detail::RecoTrackContainerProxy
RecoTrackContainer::TrackProxy RecoTrackContainerProxy
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:23
ActsTrk::TrackFindingAlg::m_seedContainerKeys
SG::ReadHandleKeyArray< ActsTrk::SeedContainer > m_seedContainerKeys
Definition: TrackFindingAlg.h:100
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::TrackFindingBaseAlg::m_ATLASConverterTool
ToolHandle< ActsTrk::IActsToTrkConverterTool > m_ATLASConverterTool
Definition: TrackFindingBaseAlg.h:91
ActsTrk::detail::RecoTrackContainer
Acts::TrackContainer< Acts::VectorTrackContainer, Acts::VectorMultiTrajectory > RecoTrackContainer
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:22
ActsTrk::TrackFindingAlg::findTracks
StatusCode findTracks(const DetectorContextHolder &detContext, const detail::TrackFindingMeasurements &measurements, const detail::MeasurementIndex &measurementIndex, detail::SharedHitCounter &sharedHits, detail::DuplicateSeedDetector &duplicateSeedDetector, const ActsTrk::SeedContainer &seeds, const InDetDD::SiDetectorElementCollection &detElements, detail::RecoTrackContainer &actsTracksContainer, std::size_t seedCollectionIndex, const char *seedType, EventStats &event_stat, std::vector< int > *destiny, const Acts::PerigeeSurface &pSurface) const
invoke track finding procedure
Definition: TrackFindingAlg.cxx:422
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
ActsTrk::TrackFindingBaseAlg::trackFinder
CKF_pimpl & trackFinder()
Definition: TrackFindingBaseAlg.cxx:19
ActsTrk::TrackFindingBaseAlg::kMultipleBranches
@ kMultipleBranches
Definition: TrackFindingBaseAlg.h:164
python.utils.AtlRunQueryTimer.timer
def timer(name, disabled=False)
Definition: AtlRunQueryTimer.py:85
ActsTrk::TrackFindingBaseAlg::getStatCategory
std::size_t getStatCategory(std::size_t seed_collection, float eta) const
Definition: TrackFindingBaseAlg.cxx:718
ActsTrk::TrackFindingAlg::m_nMeasurementsMin
Gaudi::Property< unsigned int > m_nMeasurementsMin
Definition: TrackFindingAlg.h:130
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:103
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::finalize
virtual StatusCode finalize() override
Definition: TrackFindingAlg.cxx:144
ActsTrk::TrackFindingAlg::m_storeDestinies
bool m_storeDestinies
Definition: TrackFindingAlg.h:111
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
ActsTrk::TrackFindingBaseAlg::m_addPixelStripCounts
Gaudi::Property< bool > m_addPixelStripCounts
Definition: TrackFindingBaseAlg.h:137
CalibrationContext.h
ActsTrk::TrackFindingAlg::m_countSharedHits
Gaudi::Property< bool > m_countSharedHits
Definition: TrackFindingAlg.h:121
xAOD::addTrack
@ addTrack
Definition: TrackingPrimitives.h:466
xAOD::UncalibratedMeasurement_v1
Definition: UncalibratedMeasurement_v1.h:13
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ActsTrk::TrackFindingBaseAlg::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...
SG::WriteHandleKey
Property holding a SG store/key/clid from which a WriteHandle is made.
Definition: StoreGate/StoreGate/WriteHandleKey.h:40
ActsTrk::TrackFindingAlg::m_seedDestiny
SG::WriteHandleKeyArray< std::vector< int > > m_seedDestiny
Definition: TrackFindingAlg.h:112
lumiFormat.i
int i
Definition: lumiFormat.py:85
ActsTrk::TrackFindingBaseAlg::kNOutputTracks
@ kNOutputTracks
Definition: TrackFindingBaseAlg.h:160
z
#define z
InDet::SiDetectorElementStatus
Definition: SiDetectorElementStatus.h:62
ActsTrk::TrackFindingAlg::shouldReverseSearch
bool shouldReverseSearch(const ActsTrk::Seed &seed) const
Definition: TrackFindingAlg.cxx:407
ActsTrk::TrackFindingBaseAlg::doRefit
std::unique_ptr< Acts::BoundTrackParameters > doRefit(const MeasurementSource &measurement, const Acts::BoundTrackParameters &initialParameters, const DetectorContextHolder &detContext, const bool paramsAtOutermostSurface) const
Perform Kalman Filter fit and update given initialParameters.
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:119
ActsTrk::TrackFindingBaseAlg::m_seedLabels
Gaudi::Property< std::vector< std::string > > m_seedLabels
Definition: TrackFindingBaseAlg.h:149
ActsTrk::TrackFindingAlg::storeSeedInfo
void storeSeedInfo(const detail::RecoTrackContainer &tracksContainer, const detail::RecoTrackContainerProxy &track, detail::DuplicateSeedDetector &duplicateSeedDetector, const detail::MeasurementIndex &measurementIndex) const
Definition: TrackFindingAlg.cxx:717
ActsTrk::TrackFindingAlg::m_paramEstimationTool
ToolHandle< ActsTrk::ITrackParamsEstimationTool > m_paramEstimationTool
Definition: TrackFindingAlg.h:96
MuonR4::State
CalibratedSpacePoint::State State
Definition: SpacePointCalibrator.cxx:33
ActsTrk::TrackFindingAlg::m_detEleCollKeys
SG::ReadCondHandleKeyArray< InDetDD::SiDetectorElementCollection > m_detEleCollKeys
Definition: TrackFindingAlg.h:101
ActsTrk::TrackFindingBaseAlg::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: TrackFindingBaseAlg.h:87
ActsTrk::TrackFindingBaseAlg::DetectorContextHolder
Definition: TrackFindingBaseAlg.h:61
ActsTrk::detail::DuplicateSeedDetector::addMeasurement
void addMeasurement(const ActsTrk::ATLASUncalibSourceLink &sl, const MeasurementIndex &measurementIndex)
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
python.AtlRunQueryLib.options
options
Definition: AtlRunQueryLib.py:378
ActsDetectorElement
Definition: ActsDetectorElement.h:44
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
InDet::SiDetectorElementStatus::getDetectorElements
const InDetDD::SiDetectorElementCollection & getDetectorElements() const
Definition: SiDetectorElementStatus.h:94
ActsTrk::detail::CKF_config::ckf
CKF ckf
Definition: Tracking/Acts/ActsTrackReconstruction/src/detail/Definitions.h:44
detail::ul
unsigned long ul
Definition: PrimitiveHelpers.h:46
ActsDetectorElement.h
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
Monitored.h
Header file to be included by clients of the Monitored infrastructure.
ActsTrk::TrackFindingBaseAlg::DetectorContextHolder::geometry
Acts::GeometryContext geometry
Definition: TrackFindingBaseAlg.h:62
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::TrackFindingBaseAlg::addPixelStripCounts
static void addPixelStripCounts(detail::RecoTrackContainer &tracksContainer)
Definition: TrackFindingBaseAlg.cxx:379
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:232
ActsTrk::TrackFindingAlg::initialize
virtual StatusCode initialize() override
Definition: TrackFindingAlg.cxx:78
ActsTrk::detail::TrackFindingMeasurements::addMeasurements
void addMeasurements(std::size_t typeIndex, const xAOD::UncalibratedMeasurementContainer &clusterContainer, const DetectorElementToActsGeometryIdMap &detectorElementToGeoid)
Definition: TrackFindingMeasurements.cxx:15
InDet::BeamSpotData::beamPos
const Amg::Vector3D & beamPos() const noexcept
Definition: BeamSpotData.h:68
Collector
std::unique_ptr< ITrigJetHypoInfoCollector > Collector
Definition: FastReducer.h:22
InDet::SiDetectorElementStatus::isGood
bool isGood(IdentifierHash hash) const
Definition: SiDetectorElementStatus.h:97
ActsTrk::TrackFindingBaseAlg::kNNoEstimatedParams
@ kNNoEstimatedParams
Definition: TrackFindingBaseAlg.h:159
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
ActsTrk::TrackFindingBaseAlg::kNTotalSeeds
@ kNTotalSeeds
Definition: TrackFindingBaseAlg.h:154
RIO_OnTrack.h
checkNSWValTree.Options
Options
Definition: checkNSWValTree.py:14
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:76
ActsTrk::TrackFindingBaseAlg::m_extrapolationTool
ToolHandle< IActsExtrapolationTool > m_extrapolationTool
Definition: TrackFindingBaseAlg.h:88
ActsTrk::detail::DuplicateSeedDetector::newTrajectory
void newTrajectory()
ActsTrk::getUncalibratedMeasurement
const xAOD::UncalibratedMeasurement & getUncalibratedMeasurement(const ATLASUncalibSourceLink &source_link)
Definition: ATLASSourceLink.h:26
ActsTrk::TrackFindingBaseAlg::stopBranch
BranchStopperResult stopBranch(const detail::RecoTrackContainer::TrackProxy &track, const detail::RecoTrackContainer::TrackStateProxy &trackState, const Acts::TrackSelector::EtaBinnedConfig &trackSelectorCfg, const Acts::GeometryContext &tgContext, const detail::MeasurementIndex &measurementIndex, const std::size_t typeIndex, EventStats::value_type &event_stat_category_i) const
Branch stopper.
Definition: TrackFindingBaseAlg.cxx:279
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
WriteCaloSwCorrections.cfg
cfg
Definition: WriteCaloSwCorrections.py:23
ActsDetectorElement::identifyHash
IdentifierHash identifyHash() const
Identifier hash.
Definition: ActsDetectorElement.h:75
ActsTrk::ActsSeed
Definition: Seed.h:18
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:16
ActsTrk::TrackFindingAlg::m_maximumIterations
Gaudi::Property< unsigned int > m_maximumIterations
Definition: TrackFindingAlg.h:128
ActsTrk::TrackFindingAlg::m_volumeIdToDetectorElementCollMapKey
SG::ReadCondHandleKey< ActsTrk::ActsVolumeIdToDetectorElementCollectionMap > m_volumeIdToDetectorElementCollMapKey
Definition: TrackFindingAlg.h:105
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:73
ActsTrk::TrackFindingBaseAlg::CKF_pimpl
Definition: TrackFindingAlg.cxx:71
ActsTrk::TrackFindingBaseAlg::m_trackingGeometryTool
PublicToolHandle< ActsTrk::ITrackingGeometryTool > m_trackingGeometryTool
Definition: TrackFindingBaseAlg.h:89
ActsTrk::TrackFindingAlg::m_skipDuplicateSeeds
Gaudi::Property< bool > m_skipDuplicateSeeds
Definition: TrackFindingAlg.h:116
InDet::BeamSpotData
Definition: BeamSpotData.h:21
ActsTrk::detail::expectedLayerPattern
std::array< unsigned int, 4 > expectedLayerPattern(const EventContext &ctx, const IActsExtrapolationTool &extrapolator, const Acts::BoundTrackParameters &perigee_parameters, double pathLimit)
Extrapolate from the perigee outwards and gather information which detector layers should have hits.
Definition: ExpectedHitUtils.cxx:14
a
TList * a
Definition: liststreamerinfos.cxx:10
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
ActsTrk::TrackFindingAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: TrackFindingAlg.cxx:151
TrackFindingAlg.h
ActsTrk::TrackFindingBaseAlg::kNDuplicateSeeds
@ kNDuplicateSeeds
Definition: TrackFindingBaseAlg.h:158
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
ActsTrk::detail::TrackFindingMeasurements::measurementOffsets
const std::vector< std::size_t > & measurementOffsets() const
ActsTrk::TrackFindingBaseAlg::m_trackStatePrinter
ToolHandle< ActsTrk::TrackStatePrinterTool > m_trackStatePrinter
Definition: TrackFindingBaseAlg.h:90
ActsTrk::TrackFindingBaseAlg::copyStats
void copyStats(const EventStats &event_stat) const
Definition: TrackFindingBaseAlg.cxx:519
ActsTrk::detail::ExpectedLayerPatternHelper::add
static void add(track_container_t &trackContainer)
Definition: ExpectedHitUtils.h:35
DeMoScan.first
bool first
Definition: DeMoScan.py:534
plotBeamSpotMon.mon
mon
Definition: plotBeamSpotMon.py:66
ActsTrk::TrackFindingAlg::m_memorySafetyMargin
Gaudi::Property< float > m_memorySafetyMargin
Definition: TrackFindingAlg.h:191
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:567
ActsTrk::TrackFindingBaseAlg::m_statEtaBins
Gaudi::Property< std::vector< float > > m_statEtaBins
Definition: TrackFindingBaseAlg.h:148
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
ActsTrk::TrackFindingBaseAlg::kNoTrack
@ kNoTrack
Definition: TrackFindingBaseAlg.h:157
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MSTrackingVolumeBuilder.cxx:24
ActsTrk::TrackFindingAlg::storeTrackCollectionToStoreGate
StatusCode storeTrackCollectionToStoreGate(const EventContext &ctx, Acts::VectorTrackContainer &&originalTrackBackend, Acts::VectorMultiTrajectory &&originalTrackStateBackend) const
Definition: TrackFindingAlg.cxx:391
ActsTrk::TrackFindingAlg::m_detElStatus
SG::ReadHandleKeyArray< InDet::SiDetectorElementStatus > m_detElStatus
Definition: TrackFindingAlg.h:109
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
ActsTrk::TrackFindingAlg::addTrack
StatusCode addTrack(const DetectorContextHolder &detContext, detail::RecoTrackContainerProxy &track, const Acts::Surface &pSurface, const Acts::TrackExtrapolationStrategy &extrapolationStrategy, detail::SharedHitCounter &sharedHits, detail::RecoTrackContainer &actsTracksContainer, const detail::MeasurementIndex &measurementIndex, const detail::RecoTrackContainer &tracksContainerTemp, detail::DuplicateSeedDetector &duplicateSeedDetector, std::vector< int > *destiny, EventStats &event_stat, std::size_t &ntracks, std::size_t iseed, std::size_t category_i, const char *seedType) const
Definition: TrackFindingAlg.cxx:915
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
Logger.h
PixelClusterOnTrack.h
python.CaloScaleNoiseConfig.ts
ts
Definition: CaloScaleNoiseConfig.py:87
test_pyathena.counter
counter
Definition: test_pyathena.py:15
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:79
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
ActsTrk::TrackFindingBaseAlg
Definition: TrackFindingBaseAlg.h:44
ActsTrk::TrackFindingBaseAlg::logger
const Acts::Logger & logger() const
Private access to the logger.
Definition: TrackFindingBaseAlg.h:313
ExpectedHitUtils.h
ActsTrk::TrackFindingAlg::m_ambi
std::optional< Acts::GreedyAmbiguityResolution > m_ambi
Definition: TrackFindingAlg.h:140
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
ActsTrk::TrackFindingAlg::ExpectedLayerPattern
std::array< unsigned int, 4 > ExpectedLayerPattern
Definition: TrackFindingAlg.h:58
InDetDD::SiDetectorElementCollection::getDetectorElement
const SiDetectorElement * getDetectorElement(const IdentifierHash &hash) const
Definition: SiDetectorElementCollection.cxx:9
TrackContainer.h
Monitored::Timer
A monitored timer.
Definition: MonitoredTimer.h:32
python.iconfTool.gui.pad.logger
logger
Definition: pad.py:14
ActsTrk::ActsVolumeIdToDetectorElementCollectionMap
Definition: ActsVolumeIdToDetectorElementCollectionMap.h:13
ActsTrk::detail::DuplicateSeedDetector
Definition: DuplicateSeedDetector.h:21
ActsTrk::TrackFindingBaseAlg::m_doTwoWay
Gaudi::Property< bool > m_doTwoWay
Definition: TrackFindingBaseAlg.h:110
ActsTrk::detail::SharedHitCounter::computeSharedHits
auto computeSharedHits(typename track_container_t::TrackProxy &track, track_container_t &tracks, const MeasurementIndex &measurementIndex, bool removeSharedHits=false) -> ReturnSharedAndBad
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
SG::ReadCondHandle::cptr
const_pointer_type cptr()
Definition: ReadCondHandle.h:71
ActsTrk::TrackFindingBaseAlg::kNRejectedRefinedSeeds
@ kNRejectedRefinedSeeds
Definition: TrackFindingBaseAlg.h:161
ActsTrk::detail::addToExpectedLayerPattern
void addToExpectedLayerPattern(std::array< unsigned int, 4 > &pattern, const ActsDetectorElement &detElement)
Definition: ExpectedHitUtils.cxx:40