ATLAS Offline Software
Loading...
Searching...
No Matches
AmbiguityProcessorBase.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 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(Trk::Track* in_track, const bool fitted,
97 TrackScoreMap& trackScoreTrackMap,
98 std::vector<std::unique_ptr<const Trk::Track> >& trackDustbin,
99 Counter& stat, int parentTrackId) const;
100
101 const TrackParameters* getTrackParameters(const Trk::Track* track) const;
102
109
110 // special pointer type for the ClusterSplitProbabilityContainerPtr to allow
111 // to use a single "pointer" for ClusterSplitProbabilityContainer which need
112 // to be deleted and those owned by storegate
116
125 createAndRecordClusterSplitProbContainer(const EventContext& ctx) const;
126
127 // variables accessible to derived classes
128 std::vector<float> m_etaBounds;
129 mutable std::mutex m_statMutex;
136 ToolHandle<ITrackScoringTool> m_scoringTool{this, "ScoringTool", "",
137 "track scoring tool"};
138
140 PublicToolHandle<Trk::ITrkObserverTool> m_observerTool{
141 this, "ObserverTool", "", "track observer within ambiguity solver"};
142 ToolHandle<Trk::IExtendedTrackSummaryTool> m_trackSummaryTool{
143 this, "TrackSummaryTool", "InDetTrackSummaryToolNoHoleSearch"};
144
145 private:
146 // the handles should not be used directly instead the methods
147 // initializeClusterSplitProbContainer and
148 // createAndRecordClusterSplitProbContainer should be used.
150 m_clusterSplitProbContainerIn{this, "InputClusterSplitProbabilityName",
151 "", ""};
153 m_clusterSplitProbContainerOut{this, "OutputClusterSplitProbabilityName",
154 "", ""};
155
156 protected:
160 float m_pTminBrem{1000.};
162 // for track refit
166 bool m_forceRefit{true};
167
170 int m_matEffects{3}; // pion
172};
173} // namespace Trk
174#endif
175
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
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trackSummaryTool
void addTrack(Trk::Track *in_track, const bool fitted, TrackScoreMap &trackScoreTrackMap, std::vector< std::unique_ptr< const Trk::Track > > &trackDustbin, Counter &stat, int parentTrackId) const
SG::WriteHandleKey< Trk::ClusterSplitProbabilityContainer > m_clusterSplitProbContainerOut
std::unique_ptr< Trk::ClusterSplitProbabilityContainer, void(*)(Trk::ClusterSplitProbabilityContainer *)> UniqueClusterSplitProbabilityContainerPtr
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
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