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(
78 const Trk::Track& track) const = 0;
79
81 Track* refitTrack(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 Trk::Track* track,
86 Trk::PRDtoTrackMap& prdToTrackMap,
87 Counter& stat) const = 0;
88
89 // refit ROTs
90 virtual Trk::Track* refitRots(const Trk::Track* track, Counter& stat) const;
91
92 // generic normal fit
93 virtual std::unique_ptr<Trk::Track> fit(
94 const Track& track, bool flag, Trk::ParticleHypothesis hypo) const = 0;
95
96 void addTrack(const EventContext& ctx,
97 Trk::Track* in_track, const bool fitted,
98 TrackScoreMap& trackScoreTrackMap,
99 std::vector<std::unique_ptr<const Trk::Track> >& trackDustbin,
100 Counter& stat, int parentTrackId) const;
101
102 const TrackParameters* getTrackParameters(const Trk::Track* track) const;
103
110
111 // special pointer type for the ClusterSplitProbabilityContainerPtr to allow
112 // to use a single "pointer" for ClusterSplitProbabilityContainer which need
113 // to be deleted and those owned by storegate
117
126 createAndRecordClusterSplitProbContainer(const EventContext& ctx) const;
127
128 // variables accessible to derived classes
129 std::vector<float> m_etaBounds;
130 mutable std::mutex m_statMutex;
137 ToolHandle<ITrackScoringTool> m_scoringTool{this, "ScoringTool", "",
138 "track scoring tool"};
139
141 PublicToolHandle<Trk::ITrkObserverTool> m_observerTool{
142 this, "ObserverTool", "", "track observer within ambiguity solver"};
143 ToolHandle<Trk::IExtendedTrackSummaryTool> m_trackSummaryTool{
144 this, "TrackSummaryTool", "InDetTrackSummaryToolNoHoleSearch"};
145
146 private:
147 // the handles should not be used directly instead the methods
148 // initializeClusterSplitProbContainer and
149 // createAndRecordClusterSplitProbContainer should be used.
151 m_clusterSplitProbContainerIn{this, "InputClusterSplitProbabilityName",
152 "", ""};
154 m_clusterSplitProbContainerOut{this, "OutputClusterSplitProbabilityName",
155 "", ""};
156
157 protected:
161 float m_pTminBrem{1000.};
163 // for track refit
167 bool m_forceRefit{true};
168
171 int m_matEffects{3}; // pion
173};
174} // namespace Trk
175#endif
176
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
StatusCode initializeClusterSplitProbContainer()
Initialize read and write handles for ClusterSplitProbabilityContainers.
Trk::ParticleHypothesis m_particleHypothesis
virtual Trk::Track * refitPrds(const Trk::Track *track, Trk::PRDtoTrackMap &prdToTrackMap, Counter &stat) const =0
Track * refitTrack(const Trk::Track *track, Trk::PRDtoTrackMap &prdToTrackMap, Counter &stat, int trackId, int subtrackId) const
refit track
virtual std::unique_ptr< Trk::Track > fit(const Track &track, bool flag, Trk::ParticleHypothesis hypo) const =0
ToolHandle< ITrackScoringTool > m_scoringTool
Scoring tool This tool is used to 'score' the tracks, i.e.
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
virtual std::unique_ptr< Trk::Track > doBremRefit(const Trk::Track &track) const =0
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
virtual Trk::Track * refitRots(const Trk::Track *track, Counter &stat) const
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