ATLAS Offline Software
Loading...
Searching...
No Matches
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"
35#include "TrkTrack/Track.h"
38namespace Muon {
39 class MuPatTrack;
40} // namespace Muon
41
42namespace 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;
56 typedef std::vector<MuPatSegment*>::iterator SegColIt;
58 using StSegCol_t = std::array<SegCol, MuonStationIndex::toInt(MuonStationIndex::StIndex::StIndexMax)>;
62 using SegColVec_t = std::vector<SegCol>;
63 typedef std::set<MuonStationIndex::ChIndex> ChSet;
64 typedef ChSet::iterator ChIt;
65 typedef ChSet::const_iterator ChCit;
66
67 typedef std::set<MuonStationIndex::StIndex> StSet;
68 typedef StSet::iterator StIt;
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
segment candidate object.
track candidate object.
Definition MuPatTrack.h:37
ToolHandle< MooTrackBuilder > m_mooBTool
std::vector< Trk::Track * > TrkCollVec
std::unique_ptr< TrackCollection > selectTracks(std::vector< std::unique_ptr< MuPatTrack > > &candidates, bool takeOwnership=true) const
std::vector< MuPatSegment * > SegCol
std::unique_ptr< const MuonTrackSteeringStrategy > decodeStrategy(const std::string &strategy) const
std::array< SegCol, MuonStationIndex::toInt(MuonStationIndex::ChIndex::ChIndexMax)> ChSegCol_t
Helper container to sort the segments by chamber index.
std::set< MuonStationIndex::ChIndex > ChSet
virtual ~MuonTrackSteering()=default
destructor
ChSet::const_iterator ChCit
std::unique_ptr< TrackCollection > find(const EventContext &ctx, const MuonSegmentCollection &coll) const override
find tracks starting from a MuonSegmentCollection
std::vector< MuPatSegment * >::iterator SegColIt
static bool decodeList(const std::string &input, std::vector< std::string > &list)
ToolHandle< Trk::ITrackAmbiguityProcessorTool > m_ambiTool
ToolHandle< MooCandidateMatchingTool > m_candidateMatchingTool
std::vector< MuPatTrack * > TrkVec
ToolHandle< Muon::MuonTrackSelectorTool > m_trackSelector
PublicToolHandle< MuonEDMPrinterTool > m_printer
void combineOverlapSegments(const EventContext &ctx, std::vector< MuPatSegment * > &ch1, std::vector< MuPatSegment * > &ch2, StSegCol_t &stationSegments, StSet &stationsWithSegments, GarbageContainer &trash_bin) const
bool extractSegments(const EventContext &ctx, const MuonSegmentCollection &coll, ChSegCol_t &chamberSegments, StSegCol_t &stationSegments, ChSet &chambersWithSegments, StSet &stationsWithSegments, GarbageContainer &trash_bin) const
virtual StatusCode initialize() override
initialize method, method taken from bass-class AlgTool
ToolHandle< IMuonTrackBuilder > m_trackBTool
std::array< int, 3 > m_segQCut
Required segment quality for seed, 2nd, and other segments.
ToolHandle< IMuonHoleRecoveryTool > m_muonHoleRecoverTool
StatusCode decodeStrategyVector(const std::vector< std::string > &strategy)
void refineTracks(const EventContext &ctx, std::vector< std::unique_ptr< MuPatTrack > > &candidates) const
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
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...
ServiceHandle< IMuonEDMHelperSvc > m_edmHelperSvc
ToolHandle< IMuonTrackRefiner > m_trackRefineTool
std::vector< std::unique_ptr< const MuonTrackSteeringStrategy > > m_strategies
ToolHandle< MuPatCandidateTool > m_candidateTool
MuonTrackSteering(const std::string &, const std::string &, const IInterface *)
default AlgTool constructor
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.
std::array< SegCol, MuonStationIndex::toInt(MuonStationIndex::StIndex::StIndexMax)> StSegCol_t
Helper container to sort the segments by station index.
std::vector< SegCol > SegColVec_t
std::unique_ptr< TrackCollection > findTracks(const EventContext &ctx, ChSegCol_t &chamberSegments, StSegCol_t &stationSegments) const
actual find method
std::vector< std::string > m_stringStrategies
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trackSummaryTool
StSet::const_iterator StCit
std::set< MuonStationIndex::StIndex > StSet
ToolHandle< IMuonSegmentFittingTool > m_segmentFitter
constexpr int toInt(const EnumType enumVal)
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
std::vector< const Muon::MuonSegment * > MuonSegmentCollection
std::vector< std::unique_ptr< MuPatSegment > > pat_garbage
void push_back(std::unique_ptr< MuPatSegment > seg)
std::vector< std::unique_ptr< MuonSegment > > seg_garbage
void push_back(std::unique_ptr< MuonSegment > seg)