ATLAS Offline Software
MuonTrackSteering.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef MUONTRACKSTEERING_H
6 #define MUONTRACKSTEERING_H
7 
8 #include <mutex>
9 #include <set>
10 #include <utility>
11 
12 
14 #include "GaudiKernel/ServiceHandle.h"
15 #include "GaudiKernel/StatEntity.h"
16 #include "GaudiKernel/ToolHandle.h"
17 #include "Identifier/Identifier.h"
19 #include "MooTrackBuilder.h"
20 #include "MuPatCandidateTool.h"
30 #include "MuonTrackSelectorTool.h"
35 #include "TrkTrack/Track.h"
38 namespace Muon {
39  class MuPatTrack;
40 } // namespace Muon
41 
42 namespace Muon {
43 
44  typedef std::vector<const Muon::MuonSegment*> MuonSegmentCollection;
45 
51  class MuonTrackSteering : public extends <AthAlgTool , IMuonTrackFinder> {
52  public:
53  typedef std::vector<MuPatTrack*> TrkVec;
54  typedef std::vector<Trk::Track*> TrkCollVec;
55  typedef std::vector<MuPatSegment*> SegCol;
62  using SegColVec_t = std::vector<SegCol>;
63  typedef std::set<MuonStationIndex::ChIndex> ChSet;
65  typedef ChSet::const_iterator ChCit;
66 
67  typedef std::set<MuonStationIndex::StIndex> StSet;
69  typedef StSet::const_iterator StCit;
70 
71  public:
73  MuonTrackSteering(const std::string&, const std::string&, const IInterface*);
74 
76  virtual ~MuonTrackSteering() = default;
77 
79  virtual StatusCode initialize() override;
80 
85  std::unique_ptr<TrackCollection> find(const EventContext& ctx, const MuonSegmentCollection& coll) const override;
86 
87  private:
89  void push_back(std::unique_ptr<MuonSegment> seg) {seg_garbage.push_back(std::move(seg));}
90  void push_back(std::unique_ptr<MuPatSegment> seg) {pat_garbage.push_back(std::move(seg));}
91  void reserve(size_t N) {
92  pat_garbage.reserve(N);
93  seg_garbage.reserve(N);
94  }
95  std::vector<std::unique_ptr<MuPatSegment>> pat_garbage{};
96  std::vector<std::unique_ptr<MuonSegment>> seg_garbage{};
97  };
98  std::unique_ptr<TrackCollection> selectTracks(std::vector<std::unique_ptr<MuPatTrack>>& candidates, bool takeOwnership = true) const;
99 
101  std::unique_ptr<TrackCollection> findTracks(const EventContext& ctx, ChSegCol_t& chamberSegments, StSegCol_t& stationSegments) const;
102  bool extractSegments(const EventContext& ctx, const MuonSegmentCollection& coll, ChSegCol_t& chamberSegments, StSegCol_t& stationSegments,
103  ChSet& chambersWithSegments, StSet& stationsWithSegments, GarbageContainer& trash_bin) const;
104 
105  StatusCode decodeStrategyVector(const std::vector<std::string>& strategy);
106  std::unique_ptr<const MuonTrackSteeringStrategy> decodeStrategy(const std::string& strategy) const;
107  static bool decodeList(const std::string& input, std::vector<std::string>& list) ;
108 
109  std::vector<std::unique_ptr<MuPatTrack>> extendWithLayer(const EventContext& ctx, MuPatTrack& candidate, const SegColVec_t& segcol, unsigned int nextlayer,
110  const unsigned int endlayer, int cutLevel = 0) const;
116  std::vector<std::unique_ptr<MuPatTrack>> findTrackFromSeed(const EventContext& ctx, MuPatSegment& seedSeg, const MuonTrackSteeringStrategy& strat,
117  const unsigned int layer, const SegColVec_t& segs) const;
118 
119  void refineTracks(const EventContext& ctx, std::vector<std::unique_ptr<MuPatTrack>>& candidates) const;
120 
126  void solveAmbiguities(std::vector<std::unique_ptr<MuPatTrack>>& tracks, const MuonTrackSteeringStrategy* strat = nullptr) const;
127 
128  void combineOverlapSegments(const EventContext& ctx, std::vector<MuPatSegment*>& ch1, std::vector<MuPatSegment*>& ch2, StSegCol_t& stationSegments,
129  StSet& stationsWithSegments, GarbageContainer& trash_bin) const;
130 
131  private:
132  ServiceHandle<IMuonEDMHelperSvc> m_edmHelperSvc{this, "edmHelper", "Muon::MuonEDMHelperSvc/MuonEDMHelperSvc",
133  "Handle to the service providing the IMuonEDMHelperSvc interface"};
134  PublicToolHandle<MuonEDMPrinterTool> m_printer{this, "MuonPrinterTool", "Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"};
135  ToolHandle<MuPatCandidateTool> m_candidateTool{this, "MuPatCandidateTool", "Muon::MuPatCandidateTool/MuPatCandidateTool"};
136  ToolHandle<IMuonTrackBuilder> m_trackBTool{this, "TrackBuilderTool", "Muon::MooTrackBuilder/MooMuonTrackBuilder"};
137  ToolHandle<Trk::ITrackAmbiguityProcessorTool> m_ambiTool{this, "AmbiguityTool",
138  "Trk::TrackSelectionProcessorTool/MuonAmbiProcessor"};
139  ToolHandle<MooTrackBuilder> m_mooBTool{this, "MooBuilderTool", "Muon::MooTrackBuilder/MooMuonTrackBuilder"};
140  ToolHandle<MooCandidateMatchingTool> m_candidateMatchingTool{this, "CandidateMatchingTool",
141  "Muon::MooCandidateMatchingTool/MooCandidateMatchingTool"};
142  ToolHandle<IMuonTrackRefiner> m_trackRefineTool{this, "TrackRefinementTool", "Muon::MooTrackBuilder/MooMuonTrackBuilder"};
143  ToolHandle<IMuonSegmentFittingTool> m_segmentFitter{this, "MuonSegmentFittingTool",
144  "Muon::MuonSegmentFittingTool/MuonSegmentFittingTool"};
145  ToolHandle<Muon::MuonTrackSelectorTool> m_trackSelector{this, "MuonTrackSelector",
146  "Muon::MuonTrackSelectorTool/MuonTrackSelectorTool"};
147  ToolHandle<IMuonHoleRecoveryTool> m_muonHoleRecoverTool{this, "HoleRecoveryTool",
148  "Muon::MuonChamberHoleRecoveryTool/MuonChamberHoleRecoveryTool"};
149  ToolHandle<Trk::IExtendedTrackSummaryTool> m_trackSummaryTool{this, "TrackSummaryTool", "MuonTrackSummaryTool"};
150 
151  std::vector<std::unique_ptr<const MuonTrackSteeringStrategy>> m_strategies;
152  std::vector<std::string> m_stringStrategies;
153 
154  std::array<int, 3> m_segQCut{};
161  };
162 
163 } // namespace Muon
164 
165 #endif
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
xAOD::strategy
strategy
Definition: L2CombinedMuon_v1.cxx:108
Muon::MuonTrackSteering::m_segQCut
std::array< int, 3 > m_segQCut
Required segment quality for seed, 2nd, and other segments.
Definition: MuonTrackSteering.h:154
Muon::MuonTrackSteering::ChCit
ChSet::const_iterator ChCit
Definition: MuonTrackSteering.h:65
Muon::MuonTrackSteering::GarbageContainer::push_back
void push_back(std::unique_ptr< MuonSegment > seg)
Definition: MuonTrackSteering.h:89
Muon::MuonTrackSteering::SegCol
std::vector< MuPatSegment * > SegCol
Definition: MuonTrackSteering.h:55
Muon::MuonTrackSteering::decodeList
static bool decodeList(const std::string &input, std::vector< std::string > &list)
Definition: MuonTrackSteering.cxx:806
TrackParameters.h
Muon::MuonTrackSteering::findTracks
std::unique_ptr< TrackCollection > findTracks(const EventContext &ctx, ChSegCol_t &chamberSegments, StSegCol_t &stationSegments) const
actual find method
Definition: MuonTrackSteering.cxx:313
MuPatCandidateTool.h
MuonTrackSummary.h
MuonEDMPrinterTool.h
Muon::MuonTrackSteering::refineTracks
void refineTracks(const EventContext &ctx, std::vector< std::unique_ptr< MuPatTrack >> &candidates) const
Definition: MuonTrackSteering.cxx:666
Muon::MuonTrackSteering::decodeStrategy
std::unique_ptr< const MuonTrackSteeringStrategy > decodeStrategy(const std::string &strategy) const
Definition: MuonTrackSteering.cxx:720
drawFromPickle.candidates
candidates
Definition: drawFromPickle.py:271
IMuonTrackBuilder.h
Muon::MuonTrackSteering::GarbageContainer::seg_garbage
std::vector< std::unique_ptr< MuonSegment > > seg_garbage
Definition: MuonTrackSteering.h:96
Muon::MuonTrackSteering::GarbageContainer::reserve
void reserve(size_t N)
Definition: MuonTrackSteering.h:91
Muon::MuonTrackSteering::m_printer
PublicToolHandle< MuonEDMPrinterTool > m_printer
Definition: MuonTrackSteering.h:134
Muon::MuonTrackSteering::MuonTrackSteering
MuonTrackSteering(const std::string &, const std::string &, const IInterface *)
default AlgTool constructor
Definition: MuonTrackSteering.cxx:50
JetTiledMap::N
@ N
Definition: TiledEtaPhiMap.h:44
Muon::MuonTrackSteering::m_useTightMatching
bool m_useTightMatching
Definition: MuonTrackSteering.h:158
Muon
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
Definition: TrackSystemController.h:45
Muon::MuonTrackSteering::~MuonTrackSteering
virtual ~MuonTrackSteering()=default
destructor
Muon::MuonStationIndex::ChIndex::ChIndexMax
@ ChIndexMax
Muon::MuonTrackSteering::extendWithLayer
std::vector< std::unique_ptr< MuPatTrack > > extendWithLayer(const EventContext &ctx, MuPatTrack &candidate, const SegColVec_t &segcol, unsigned int nextlayer, const unsigned int endlayer, int cutLevel=0) const
Definition: MuonTrackSteering.cxx:618
MuPatSegment.h
Muon::MuonTrackSteering::m_trackSummaryTool
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trackSummaryTool
Definition: MuonTrackSteering.h:149
Muon::MuonTrackSteering::m_outputSingleStationTracks
bool m_outputSingleStationTracks
Definition: MuonTrackSteering.h:155
ITrackAmbiguityProcessorTool.h
IMuonTrackFinder.h
Muon::MuonTrackSteering::combineOverlapSegments
void combineOverlapSegments(const EventContext &ctx, std::vector< MuPatSegment * > &ch1, std::vector< MuPatSegment * > &ch2, StSegCol_t &stationSegments, StSet &stationsWithSegments, GarbageContainer &trash_bin) const
Definition: MuonTrackSteering.cxx:161
Muon::MuonTrackSteering::m_combinedSLOverlaps
bool m_combinedSLOverlaps
Definition: MuonTrackSteering.h:156
Track.h
Muon::MuonTrackSteering::findTrackFromSeed
std::vector< std::unique_ptr< MuPatTrack > > findTrackFromSeed(const EventContext &ctx, MuPatSegment &seedSeg, const MuonTrackSteeringStrategy &strat, const unsigned int layer, const SegColVec_t &segs) const
Find tracks starting from a good segment.
Definition: MuonTrackSteering.cxx:540
IMuonSegmentFittingTool.h
Muon::MuonTrackSteering::SegColIt
std::vector< MuPatSegment * >::iterator SegColIt
Definition: MuonTrackSteering.h:56
Muon::MuonTrackSteering::ChIt
ChSet::iterator ChIt
Definition: MuonTrackSteering.h:64
Muon::MuonTrackSteering::StCit
StSet::const_iterator StCit
Definition: MuonTrackSteering.h:69
IMuonSegmentInOverlapResolvingTool.h
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Muon::MuonTrackSteering::TrkCollVec
std::vector< Trk::Track * > TrkCollVec
Definition: MuonTrackSteering.h:54
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
AthAlgTool.h
TrackCollection.h
Muon::MuonTrackSteering::m_trackSelector
ToolHandle< Muon::MuonTrackSelectorTool > m_trackSelector
Definition: MuonTrackSteering.h:145
Muon::MuonTrackSteering::StSet
std::set< MuonStationIndex::StIndex > StSet
Definition: MuonTrackSteering.h:67
Muon::MuonTrackSteering::m_strategies
std::vector< std::unique_ptr< const MuonTrackSteeringStrategy > > m_strategies
Definition: MuonTrackSteering.h:151
Muon::MuonTrackSteering::m_edmHelperSvc
ServiceHandle< IMuonEDMHelperSvc > m_edmHelperSvc
Definition: MuonTrackSteering.h:132
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
Muon::MuonTrackSteering::ChSet
std::set< MuonStationIndex::ChIndex > ChSet
Definition: MuonTrackSteering.h:63
Muon::MuonTrackSteering::m_segmentFitter
ToolHandle< IMuonSegmentFittingTool > m_segmentFitter
Definition: MuonTrackSteering.h:143
Muon::MuonTrackSteering
Implementation of an IMuonTrackFinder.
Definition: MuonTrackSteering.h:51
Muon::MuonTrackSteering::GarbageContainer
Definition: MuonTrackSteering.h:88
MooTrackBuilder.h
Muon::MuonTrackSteering::initialize
virtual StatusCode initialize() override
initialize method, method taken from bass-class AlgTool
Definition: MuonTrackSteering.cxx:64
Muon::MuonTrackSteering::m_trackRefineTool
ToolHandle< IMuonTrackRefiner > m_trackRefineTool
Definition: MuonTrackSteering.h:142
Muon::MuonTrackSteering::m_muonHoleRecoverTool
ToolHandle< IMuonHoleRecoveryTool > m_muonHoleRecoverTool
Definition: MuonTrackSteering.h:147
MuonTrackSelectorTool.h
lumiFormat.array
array
Definition: lumiFormat.py:91
IMuonEDMHelperSvc.h
Muon::MuonTrackSteering::decodeStrategyVector
StatusCode decodeStrategyVector(const std::vector< std::string > &strategy)
Definition: MuonTrackSteering.cxx:703
Muon::MuonTrackSteering::m_mooBTool
ToolHandle< MooTrackBuilder > m_mooBTool
Definition: MuonTrackSteering.h:139
Muon::MuonTrackSteering::m_candidateTool
ToolHandle< MuPatCandidateTool > m_candidateTool
Definition: MuonTrackSteering.h:135
Muon::MuonTrackSteering::selectTracks
std::unique_ptr< TrackCollection > selectTracks(std::vector< std::unique_ptr< MuPatTrack >> &candidates, bool takeOwnership=true) const
Definition: MuonTrackSteering.cxx:646
Muon::MuonTrackSteering::m_candidateMatchingTool
ToolHandle< MooCandidateMatchingTool > m_candidateMatchingTool
Definition: MuonTrackSteering.h:140
Muon::MuonTrackSteeringStrategy
Definition: MuonTrackSteeringStrategy.h:17
Muon::MuonTrackSteering::m_segThreshold
int m_segThreshold
Definition: MuonTrackSteering.h:160
Muon::MuonTrackSteering::solveAmbiguities
void solveAmbiguities(std::vector< std::unique_ptr< MuPatTrack >> &tracks, const MuonTrackSteeringStrategy *strat=nullptr) const
Resolve ambiguities among tracks for a single strategy This allows a strategy-specific ambiguity solv...
Definition: MuonTrackSteering.cxx:672
Muon::MuPatSegment
segment candidate object.
Definition: MuPatSegment.h:43
Muon::MuonTrackSteering::m_doSummary
bool m_doSummary
Definition: MuonTrackSteering.h:157
MuonTrackSteeringStrategy.h
Muon::MuonStationIndex::StIndex::StIndexMax
@ StIndexMax
Muon::MuonTrackSteering::m_onlyMDTSeeding
bool m_onlyMDTSeeding
Definition: MuonTrackSteering.h:159
Muon::MuonTrackSteering::GarbageContainer::push_back
void push_back(std::unique_ptr< MuPatSegment > seg)
Definition: MuonTrackSteering.h:90
IExtendedTrackSummaryTool.h
Muon::MuonTrackSteering::GarbageContainer::pat_garbage
std::vector< std::unique_ptr< MuPatSegment > > pat_garbage
Definition: MuonTrackSteering.h:95
Muon::MuPatTrack
track candidate object.
Definition: MuPatTrack.h:37
MooCandidateMatchingTool.h
Muon::MuonTrackSteering::find
std::unique_ptr< TrackCollection > find(const EventContext &ctx, const MuonSegmentCollection &coll) const override
find tracks starting from a MuonSegmentCollection
Definition: MuonTrackSteering.cxx:84
Muon::MuonTrackSteering::TrkVec
std::vector< MuPatTrack * > TrkVec
Definition: MuonTrackSteering.h:53
Muon::MuonTrackSteering::m_stringStrategies
std::vector< std::string > m_stringStrategies
Definition: MuonTrackSteering.h:152
Muon::MuonTrackSteering::extractSegments
bool extractSegments(const EventContext &ctx, const MuonSegmentCollection &coll, ChSegCol_t &chamberSegments, StSegCol_t &stationSegments, ChSet &chambersWithSegments, StSet &stationsWithSegments, GarbageContainer &trash_bin) const
Definition: MuonTrackSteering.cxx:102
Muon::MuonSegmentCollection
std::vector< const Muon::MuonSegment * > MuonSegmentCollection
Definition: MuonTrackSteering.h:44
IMuonHoleRecoveryTool.h
MuonStationIndex.h
Muon::MuonTrackSteering::m_trackBTool
ToolHandle< IMuonTrackBuilder > m_trackBTool
Definition: MuonTrackSteering.h:136
Muon::MuonTrackSteering::m_ambiTool
ToolHandle< Trk::ITrackAmbiguityProcessorTool > m_ambiTool
Definition: MuonTrackSteering.h:137
Muon::MuonTrackSteering::StIt
StSet::iterator StIt
Definition: MuonTrackSteering.h:68
Muon::MuonStationIndex::toInt
constexpr int toInt(const EnumType enumVal)
Definition: MuonStationIndex.h:61
Muon::MuonTrackSteering::SegColVec_t
std::vector< SegCol > SegColVec_t
Definition: MuonTrackSteering.h:62
Muon::MuonTrackSteering::ChSegCol_t
std::array< SegCol, MuonStationIndex::toInt(MuonStationIndex::ChIndex::ChIndexMax)> ChSegCol_t
Helper container to sort the segments by chamber index.
Definition: MuonTrackSteering.h:60
Muon::MuonTrackSteering::StSegCol_t
std::array< SegCol, MuonStationIndex::toInt(MuonStationIndex::StIndex::StIndexMax)> StSegCol_t
Helper container to sort the segments by station index.
Definition: MuonTrackSteering.h:58
ServiceHandle
Definition: ClusterMakerTool.h:37