11#include "Acts/Definitions/Units.hpp"
13#include "Acts/AmbiguityResolution/GreedyAmbiguityResolution.hpp"
14#include "Acts/EventData/MultiTrajectoryHelpers.hpp"
15#include "Acts/EventData/VectorMultiTrajectory.hpp"
16#include "Acts/EventData/VectorTrackContainer.hpp"
17#include "Acts/Utilities/Logger.hpp"
33 Acts::GreedyAmbiguityResolution::Config cfg;
46 return StatusCode::SUCCESS;
50 ATH_MSG_INFO(
"Ambiguity Resolution statistics" << std::endl
52 std::array<std::string, kNStat>{
55 "Total shared hits"}).columnWidth(10));
56 return StatusCode::SUCCESS;
68 Acts::GreedyAmbiguityResolution::State state;
75 ATH_MSG_DEBUG(
"Resolved to " << state.selectedTracks.size() <<
" tracks from "
76 << trackContainer->size());
81 Acts::VectorTrackContainer resolvedTrackBackend;
82 Acts::VectorMultiTrajectory resolvedTrackStateBackend;
86 resolvedTracksContainer.ensureDynamicColumns(*trackContainer);
91 std::size_t totalShared = 0;
95 for (
auto iTrack : state.selectedTracks) {
96 auto destProxy = resolvedTracksContainer.getTrack(resolvedTracksContainer.addTrack());
97 destProxy.copyFrom(trackContainer->getTrack(state.trackTips.at(iTrack)));
100 auto [nShared, nBadTrackMeasurements] = sharedHits.
computeSharedHitsDynamic(destProxy, resolvedTracksContainer, measurementIndex);
101 if (nBadTrackMeasurements > 0)
102 ATH_MSG_ERROR(
"computeSharedHits: " << nBadTrackMeasurements <<
" track measurements not found in input track");
103 totalShared += nShared;
108 ATH_MSG_DEBUG(
"total number of shared hits = " << totalShared);
113 Acts::ConstVectorTrackContainer storableTrackBackend( std::move(resolvedTrackBackend) );
114 Acts::ConstVectorMultiTrajectory storableTrackStateBackend( std::move(resolvedTrackStateBackend) );
115 std::unique_ptr< ActsTrk::TrackContainer > storableTracksContainer = std::make_unique< ActsTrk::TrackContainer >( std::move(storableTrackBackend),
116 std::move(storableTrackStateBackend) );
118 ATH_CHECK(resolvedTrackHandle.
record( std::move(storableTracksContainer)));
120 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
Header file to be included by clients of the Monitored infrastructure.
TableUtils::StatTable< T > makeTable(const std::array< T, N > &counter, const std::array< std::string, N > &label)
std::unique_ptr< const Acts::Logger > makeActsAthenaLogger(IMessageSvc *svc, const std::string &name, int level, std::optional< std::string > parent_name)
ToolHandle< GenericMonitoringTool > m_monTool
Gaudi::Property< unsigned int > m_maximumSharedHits
virtual StatusCode finalize() override
std::unique_ptr< Acts::GreedyAmbiguityResolution > m_ambi
SG::ReadHandleKey< ActsTrk::TrackContainer > m_tracksKey
SG::WriteHandleKey< ActsTrk::TrackContainer > m_resolvedTracksKey
Gaudi::Property< bool > m_countSharedHits
virtual StatusCode initialize() override
Gaudi::Property< unsigned int > m_maximumIterations
Gaudi::Property< unsigned int > m_nMeasurementsMin
virtual StatusCode execute(const EventContext &ctx) const override
auto computeSharedHitsDynamic(typename track_container_t::TrackProxy &track, track_container_t &tracks, MeasurementIndex &measurementIndex, bool removeSharedHits=false) -> ReturnSharedAndBad
Group of local monitoring quantities and retain correlation when filling histograms
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
bool sourceLinkEquality(const Acts::SourceLink &a, const Acts::SourceLink &b)
Returns whether two source links are equal.
std::size_t sourceLinkHash(const Acts::SourceLink &sl)
Calculates the source link hash which is evaluated to be the identifier of the underlying sourcelink.
Acts::TrackContainer< Acts::VectorTrackContainer, Acts::VectorMultiTrajectory > RecoTrackContainer
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.