16#include "Acts/AmbiguityResolution/ScoreBasedAmbiguityResolution.hpp"
17#include "Acts/Definitions/Units.hpp"
18#include "Acts/EventData/VectorMultiTrajectory.hpp"
19#include "Acts/EventData/VectorTrackContainer.hpp"
20#include "ActsPlugins/Json/AmbiguityConfigJsonConverter.hpp"
21#include "Acts/Utilities/Logger.hpp"
35 Acts::ScoreBasedAmbiguityResolution::Config cfg;
36 Acts::ConfigPair configPair;
37 nlohmann::json json_file;
40 "ActsConfig/ActsAmbiguityConfig.json",
"DATAPATH");
42 std::ifstream
file(fileName.c_str());
43 if (!
file.is_open()) {
44 std::cerr <<
"Error opening file: " << fileName << std::endl;
50 Acts::from_json(json_file, configPair);
52 cfg.volumeMap = configPair.first;
53 cfg.detectorConfigs = configPair.second;
61 m_ambi = std::make_unique<Acts::ScoreBasedAmbiguityResolution>(
70 return StatusCode::SUCCESS;
74 ATH_MSG_INFO(
"Score-based Ambiguity Resolution statistics" << std::endl
76 std::array<std::string, kNStat>{
79 "Total shared hits"}).columnWidth(10));
80 return StatusCode::SUCCESS;
84 const EventContext &ctx)
const {
100 Acts::ScoreBasedAmbiguityResolution::Optionals<
101 typename decltype(updatedTracks)::ConstTrackProxy>
110 Optionals.scores.push_back(
116 std::vector<int> goodTracks =
m_ambi->solveAmbiguity(
119 ATH_MSG_DEBUG(
"Resolved to " << goodTracks.size() <<
" tracks from "
120 << updatedTracks.size());
125 Acts::VectorTrackContainer resolvedTrackBackend;
126 Acts::VectorMultiTrajectory resolvedTrackStateBackend;
129 resolvedTracksContainer.ensureDynamicColumns(updatedTracks);
134 std::size_t totalShared = 0;
135 for (
auto iTrack : goodTracks) {
136 auto destProxy = resolvedTracksContainer.getTrack(resolvedTracksContainer.addTrack());
137 destProxy.copyFrom(updatedTracks.getTrack(iTrack));
140 auto [nShared, nBadTrackMeasurements] = sharedHits.
computeSharedHitsDynamic(destProxy, resolvedTracksContainer, measurementIndex);
141 if (nBadTrackMeasurements > 0) {
142 ATH_MSG_ERROR(
"computeSharedHits: " << nBadTrackMeasurements <<
" track measurements not found in input track");
144 totalShared += nShared;
149 ATH_MSG_DEBUG(
"total number of shared hits = " << totalShared);
154 Acts::ConstVectorTrackContainer storableTrackBackend( std::move(resolvedTrackBackend) );
155 Acts::ConstVectorMultiTrajectory storableTrackStateBackend( std::move(resolvedTrackStateBackend) );
156 std::unique_ptr< ActsTrk::TrackContainer > storableTracksContainer = std::make_unique< ActsTrk::TrackContainer >( std::move(storableTrackBackend),
157 std::move(storableTrackStateBackend) );
159 if (resolvedTrackHandle.
record( std::move(storableTracksContainer)).isFailure()) {
161 return StatusCode::FAILURE;
164 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)
virtual StatusCode finalize() override
std::unique_ptr< Acts::ScoreBasedAmbiguityResolution > m_ambi
Gaudi::Property< double > m_minScore
Gaudi::Property< std::size_t > m_maxShared
SG::ReadHandleKey< ActsTrk::TrackContainer > m_tracksKey
Gaudi::Property< double > m_minScoreSharedTracks
virtual StatusCode initialize() override
Gaudi::Property< std::size_t > m_maxSharedTracksPerMeasurement
Gaudi::Property< bool > m_useAmbiguityScoring
SG::WriteHandleKey< ActsTrk::TrackContainer > m_resolvedTracksKey
virtual StatusCode execute(const EventContext &ctx) const override
ToolHandle< GenericMonitoringTool > m_monTool
Gaudi::Property< bool > m_countSharedHits
Gaudi::Property< std::size_t > m_minUnshared
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
static std::string find_file(const std::string &logical_file_name, const std::string &search_path)
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
void innermostPixelLayerHitsScore(const trackProxy_t &track, double &score)
Score modifier for tracks based on innermost pixel layer hits.
bool etaDependentCuts(const trackProxy_t &track)
Filter for tracks based on eta dependent cuts.
void nSCTPixelHitsScore(const trackProxy_t &track, double &score)
Score modifier for tracks based on number of SCT and pixel hits.
void doubleHolesScore(const trackProxy_t &track, double &score)
Filter for tracks based on double holes.
void ContribPixelLayersScore(const trackProxy_t &track, double &score)
Score modifier for tracks based on number of contributing pixel layers.
trackContainer_t addSummaryInformation(const ActsTrk::TrackContainer &trackContainer)
Adds summary information to the track container.
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...
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())