ATLAS Offline Software
Loading...
Searching...
No Matches
AmbiguityProcessorBase.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef AmbiguityProcessorBase_h
6#define AmbiguityProcessorBase_h
7
8#include "AmbiCounter.h"
10//
15//
17#include "GaudiKernel/ToolHandle.h"
18#include "TrackPtr.h"
21//
22#include <map> //multimap
23#include <memory> //unique_ptr
24#include <mutex> //mutex
25#include <vector>
26
27
28namespace Trk {
29// fwd declare
30class Track;
31class PRDtoTrackMap;
32
33// base class for SimpleAmbiguityProcessorTool and
34// DenseEnvironmentsAmbiguityProcessorTool
36 virtual public ITrackAmbiguityProcessorTool {
37 public:
59 using TrackScoreMap = std::multimap<TrackScore, TrackPtr>;
60
61 // default methods
62 AmbiguityProcessorBase(const std::string&, const std::string&,
63 const IInterface*);
64 virtual ~AmbiguityProcessorBase() = default;
65
66 protected:
67 // methods
68 // should try a Brem refit? based on track properties
69 bool shouldTryBremRecovery(const Trk::Track& track) const;
70
71 // should try a Brem refit? based on track properties and previously obtained
72 // track parameters
73 bool shouldTryBremRecovery(const Trk::Track& track,
74 const TrackParameters* pPar) const;
75
76 // do a brem refit; implemented in the derived classes
77 virtual std::unique_ptr<Trk::Track> doBremRefit(const EventContext& ctx,
78 const Trk::Track& track) const = 0;
79
81 Track* refitTrack(const EventContext& ctx, const Trk::Track* track, Trk::PRDtoTrackMap& prdToTrackMap,
82 Counter& stat, int trackId, int subtrackId) const;
83
84 // refit PRD
85 virtual Trk::Track* refitPrds(const EventContext& ctx,
86 const Trk::Track* track,
87 Trk::PRDtoTrackMap& prdToTrackMap,
88 Counter& stat) const = 0;
89
90 // refit ROTs
91 virtual Trk::Track* refitRots(const EventContext& ctx, const Trk::Track* track, Counter& stat) const;
92
93 // generic normal fit
94 virtual std::unique_ptr<Trk::Track> fit(const EventContext& ctx,
95 const Track& track, bool flag, Trk::ParticleHypothesis hypo) const = 0;
96
97 void addTrack(const EventContext& ctx,
98 Trk::Track* in_track, const bool fitted,
99 TrackScoreMap& trackScoreTrackMap,
100 std::vector<std::unique_ptr<const Trk::Track> >& trackDustbin,
101 Counter& stat, int parentTrackId) const;
102
103 const TrackParameters* getTrackParameters(const Trk::Track* track) const;
104
111
112 // special pointer type for the ClusterSplitProbabilityContainerPtr to allow
113 // to use a single "pointer" for ClusterSplitProbabilityContainer which need
114 // to be deleted and those owned by storegate
118
127 createAndRecordClusterSplitProbContainer(const EventContext& ctx) const;
128
129 // variables accessible to derived classes
130 std::vector<float> m_etaBounds;
131 mutable std::mutex m_statMutex;
138 ToolHandle<ITrackScoringTool> m_scoringTool{this, "ScoringTool", "",
139 "track scoring tool"};
140
142 PublicToolHandle<Trk::ITrkObserverTool> m_observerTool{
143 this, "ObserverTool", "", "track observer within ambiguity solver"};
144 ToolHandle<Trk::IExtendedTrackSummaryTool> m_trackSummaryTool{
145 this, "TrackSummaryTool", "InDetTrackSummaryToolNoHoleSearch"};
146
147 private:
148 // the handles should not be used directly instead the methods
149 // initializeClusterSplitProbContainer and
150 // createAndRecordClusterSplitProbContainer should be used.
152 m_clusterSplitProbContainerIn{this, "InputClusterSplitProbabilityName",
153 "", ""};
155 m_clusterSplitProbContainerOut{this, "OutputClusterSplitProbabilityName",
156 "", ""};
157
158 protected:
162 float m_pTminBrem{1000.};
164 // for track refit
168 bool m_forceRefit{true};
169
172 int m_matEffects{3}; // pion
174};
175} // namespace Trk
176#endif
177
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Property holding a SG store/key/clid from which a ReadHandle is made.
Property holding a SG store/key/clid from which a WriteHandle is made.
AmbiguityProcessorBase(const std::string &, const std::string &, const IInterface *)
AmbiguityProcessorBase::UniqueClusterSplitProbabilityContainerPtr createAndRecordClusterSplitProbContainer(const EventContext &ctx) const
Create a new cluster splitting probability container and (optionally) record it in storegate The new ...
AmbiCounter< CounterIndex > Counter
void addTrack(const EventContext &ctx, Trk::Track *in_track, const bool fitted, TrackScoreMap &trackScoreTrackMap, std::vector< std::unique_ptr< const Trk::Track > > &trackDustbin, Counter &stat, int parentTrackId) const
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trackSummaryTool
SG::WriteHandleKey< Trk::ClusterSplitProbabilityContainer > m_clusterSplitProbContainerOut
Track * refitTrack(const EventContext &ctx, const Trk::Track *track, Trk::PRDtoTrackMap &prdToTrackMap, Counter &stat, int trackId, int subtrackId) const
refit track
virtual std::unique_ptr< Trk::Track > doBremRefit(const EventContext &ctx, const Trk::Track &track) const =0
StatusCode initializeClusterSplitProbContainer()
Initialize read and write handles for ClusterSplitProbabilityContainers.
Trk::ParticleHypothesis m_particleHypothesis
virtual std::unique_ptr< Trk::Track > fit(const EventContext &ctx, const Track &track, bool flag, Trk::ParticleHypothesis hypo) const =0
virtual Trk::Track * refitRots(const EventContext &ctx, const Trk::Track *track, Counter &stat) const
ToolHandle< ITrackScoringTool > m_scoringTool
Scoring tool This tool is used to 'score' the tracks, i.e.
virtual Trk::Track * refitPrds(const EventContext &ctx, const Trk::Track *track, Trk::PRDtoTrackMap &prdToTrackMap, Counter &stat) const =0
int m_matEffects
read in as an integer and convert to particle hypothesis
bool m_tryBremFit
brem recovery mode with brem fit ?
std::vector< float > m_etaBounds
eta intervals for internal monitoring
bool m_forceRefit
by default tracks at input get refitted
std::unique_ptr< Trk::ClusterSplitProbabilityContainer, void(*)(Trk::ClusterSplitProbabilityContainer *)> UniqueClusterSplitProbabilityContainerPtr
const TrackParameters * getTrackParameters(const Trk::Track *track) const
std::multimap< TrackScore, TrackPtr > TrackScoreMap
SG::ReadHandleKey< Trk::ClusterSplitProbabilityContainer > m_clusterSplitProbContainerIn
bool shouldTryBremRecovery(const Trk::Track &track) const
PublicToolHandle< Trk::ITrkObserverTool > m_observerTool
Observer tool This tool is used to observe the tracks and their 'score'.
virtual ~AmbiguityProcessorBase()=default
Container to associate Cluster with cluster splitting probabilities.
Interface for resolving hit assoication ambiguities in a given track collection.
Ensure that the ATLAS eigen extensions are properly loaded.
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.
ParametersBase< TrackParametersDim, Charged > TrackParameters