ATLAS Offline Software
Loading...
Searching...
No Matches
MooTrackBuilder.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 MUON_MOOTRACKBUILDER_H
6#define MUON_MOOTRACKBUILDER_H
7
9#include "GaudiKernel/ServiceHandle.h"
10#include "GaudiKernel/ToolHandle.h"
11
12// Tools & interfaces
28
29// For magneticfield
33
34// Tracking EDM
38#include "TrkTrack/Track.h"
40
41// Local
43#include "MooTrackFitter.h"
44#include "MuPatCandidateTool.h"
45
46// Misc
47#include <vector>
48
49class MsgStream;
50
51namespace Trk {
52 class Track;
53 class PrepRawData;
55} // namespace Trk
56
57namespace Muon {
58 class MuonSegment;
60 class MuPatTrack;
61 class MuPatSegment;
62} // namespace Muon
63
64namespace Muon {
65
83
84
85 public:
87 MooTrackBuilder(const std::string&, const std::string&, const IInterface*);
88
90 ~MooTrackBuilder() = default;
91
93 virtual StatusCode initialize() override;
94
96 virtual StatusCode finalize() override;
97
99 static const InterfaceID& interfaceID() {
100 static const InterfaceID IID_MooTrackBuilder("Muon::MooTrackBuilder", 1, 0);
101 return IID_MooTrackBuilder;
102 }
103
108 virtual std::unique_ptr<Trk::Track> refit(const EventContext& ctx, Trk::Track& track) const override;
109 private:
116 std::unique_ptr<Trk::Track> combine(const EventContext& ctx, const MuPatCandidateBase& firstEntry, const MuPatCandidateBase& secondEntry,
117 const PrepVec& patternPhiHits) const;
118
120 public:
127 std::unique_ptr<MuonSegment> combineToSegment(const EventContext& ctx, const MuPatCandidateBase& firstEntry, const MuPatCandidateBase& secondEntry,
128 const PrepVec& patternPhiHits) const;
129
136 virtual std::unique_ptr<MuonSegment> combineToSegment(const EventContext& ctx, const MuonSegment& seg1, const MuonSegment& seg2,
137 const PrepVec& patternPhiHits) const override;
138
145 virtual std::unique_ptr<Trk::Track> combine(const EventContext& ctx, const MuonSegment& seg1, const MuonSegment& seg2,
146 const PrepVec& patternPhiHits) const override;
147
154 virtual std::unique_ptr<Trk::Track> combine(const EventContext& ctx, const Trk::Track& track, const MuonSegment& seg,
155 const PrepVec& patternPhiHits) const override;
156
162 private:
163 std::vector<std::unique_ptr<Trk::Track> > combineWithSegmentFinding(const EventContext& ctx, const Trk::Track& track, const MuonSegment& seg,
164 const PrepVec& patternPhiHits) const;
165
171 std::vector<std::unique_ptr<Trk::Track> > combineWithSegmentFinding(const EventContext& ctx, const MuPatTrack& candidate,
172 const MuPatSegment& segInfo, const PrepVec& patternPhiHits) const;
173
180 std::vector<std::unique_ptr<Trk::Track> > combineWithSegmentFinding(const EventContext& ctx, const MuPatTrack& candidate, const Trk::TrackParameters& pars,
181 const std::set<Identifier>& chIds, const PrepVec& patternPhiHits) const;
188 std::vector<std::unique_ptr<Trk::Track> > combineWithSegmentFinding(const EventContext& ctx, const Trk::Track& track, const Trk::TrackParameters& pars,
189 const std::set<Identifier>& chIds,
190 const PrepVec& patternPhiHits) const;
191 public:
198 virtual std::unique_ptr<Trk::TrackParameters> findClosestParameters(const Trk::Track& track, const Amg::Vector3D& pos) const override;
199
205 virtual std::unique_ptr<Trk::TrackParameters> getClosestParameters(const Trk::Track& track, const Trk::Surface& surf) const override;
206
212 std::unique_ptr<Trk::TrackParameters> getClosestParameters(const MuPatCandidateBase& candidate, const Trk::Surface& surf) const;
213
215 virtual std::unique_ptr<Trk::Track> recalibrateHitsOnTrack(const EventContext& ctx, const Trk::Track& track, bool doMdts,
216 bool doCompetingClusters) const override;
217
218 private:
222 std::pair<std::unique_ptr<Trk::Track>, std::unique_ptr<Trk::Track> > splitTrack(const EventContext& ctx, const Trk::Track& track) const;
223
225 bool isSplitTrack(const EventContext& ctx, const Trk::Track& track1, const Trk::Track& track2) const;
226
228 TrackCollection* mergeSplitTracks(const EventContext& ctx, const TrackCollection& tracks) const;
229
237 public:
238 virtual std::vector<std::unique_ptr<MuPatTrack> > find(const EventContext& ctx, MuPatCandidateBase& candidate, const std::vector<MuPatSegment*>& segments) const override;
239
244 virtual void refine(const EventContext& ctx, MuPatTrack& track) const override;
245
246 private:
247 void removeDuplicateWithReference(std::unique_ptr<Trk::SegmentCollection>& segments,
248 std::vector<const MuonSegment*>& referenceSegments) const;
249
253 std::vector<std::unique_ptr<const Trk::TrackStateOnSurface>>& states) const;
254
255 ToolHandle<MooTrackFitter> m_fitter{this, "Fitter", "Muon::MooTrackFitter/MooTrackFitter", "Tool to fit segments to tracks"};
256 ToolHandle<MooTrackFitter> m_slFitter{this, "SLFitter", "Muon::MooTrackFitter/MooSLTrackFitter", "Tool to fit segments to tracks"};
257 ToolHandle<MuPatCandidateTool> m_candidateHandler{this, "CandidateTool",
258 "Muon::MuPatCandidateTool/MuPatCandidateTool"};
259 ToolHandle<MooCandidateMatchingTool> m_candidateMatchingTool{this, "CandidateMatchingTool",
260 "Muon::MooCandidateMatchingTool/MooCandidateMatchingTool"};
261 ToolHandle<IMuonTrackToSegmentTool> m_trackToSegmentTool{this, "TrackToSegmentTool",
262 "Muon::MuonTrackToSegmentTool/MuonTrackToSegmentTool"};
263 ServiceHandle<IMuonEDMHelperSvc> m_edmHelperSvc{this, "edmHelper", "Muon::MuonEDMHelperSvc/MuonEDMHelperSvc",
264 "Handle to the service providing the IMuonEDMHelperSvc interface"};
265 PublicToolHandle<MuonEDMPrinterTool> m_printer{this, "Printer",
266 "Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"};
267 ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc{this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};
268 ToolHandle<IMuonSeededSegmentFinder> m_seededSegmentFinder{this, "SeededSegmentFinder",
269 "Muon::MuonSeededSegmentFinder/MuonSeededSegmentFinder"};
270 ToolHandle<IMdtDriftCircleOnTrackCreator> m_mdtRotCreator{this, "MdtRotCreator",
271 "Muon::MdtDriftCircleOnTrackCreator/MdtDriftCircleOnTrackCreator"};
272 ToolHandle<IMuonCompetingClustersOnTrackCreator> m_compRotCreator{
273 this, "CompetingClustersCreator", "Muon::TriggerChamberClusterOnTrackCreator/TriggerChamberClusterOnTrackCreator"};
274 ToolHandle<Trk::IPropagator> m_propagator{this, "Propagator", "Trk::STEP_Propagator/MuonPropagator"};
275 ToolHandle<Trk::IResidualPullCalculator> m_pullCalculator{this, "PullCalculator",
276 "Trk::ResidualPullCalculator/ResidualPullCalculator"};
277 ToolHandle<IMuonHoleRecoveryTool> m_muonChamberHoleRecoverTool{
278 this, "ChamberHoleRecoveryTool",
279 "Muon::MuonChamberHoleRecoveryTool/MuonChamberHoleRecoveryTool"}; //<! tool to add holes on track
280 ToolHandle<IMuonTrackExtrapolationTool> m_trackExtrapolationTool{
281 this, "Extrapolator", "Muon::MuonTrackExtrapolationTool/MuonTrackExtrapolationTool"}; //<! track extrapolation tool
282
283 ToolHandle<IMuonErrorOptimisationTool> m_errorOptimisationTool{this, "ErrorOptimisationTool", ""};
284 ToolHandle<Trk::IExtendedTrackSummaryTool> m_trackSummaryTool{this, "TrackSummaryTool", "MuonTrackSummaryTool"};
285 // Read handle for conditions object to get the field cache
287 "Name of the Magnetic Field conditions object key"};
289
290 Gaudi::Property<bool> m_doTimeOutChecks{this, "UseTimeOutGuard", true};
291 Gaudi::Property<bool> m_useExclusionList{this, "UseExclusionList",
292 true};
293 Gaudi::Property<bool> m_useTrackingHistory{this, "UseTrackingHistory",
294 true};
295 Gaudi::Property<bool> m_recalibrateMDTHits{this, "RecalibrateMDTHitsOnTrack", true};
296 mutable std::atomic_uint m_ncalls{0};
297 mutable std::atomic_uint m_nTimedOut{0};
298 };
299
300} // namespace Muon
301
302#endif
DataVector< Trk::Track > TrackCollection
This typedef represents a collection of Trk::Track objects.
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
The IMuonSegmentMaker is a pure virtual interface for tools to find tracks starting from MuonSegmentC...
std::vector< const Trk::PrepRawData * > PrepVec
The IMuonTrackBuilder is a pure virtual interface for tools extending muon track candidates with segm...
The IMuonTrackRefiner is a pure virtual interface for tools which refine the hit content of a given t...
virtual std::unique_ptr< Trk::TrackParameters > getClosestParameters(const Trk::Track &track, const Trk::Surface &surf) const override
find closest TrackParameters to the surface.
ToolHandle< MuPatCandidateTool > m_candidateHandler
candidate handler
ToolHandle< IMuonCompetingClustersOnTrackCreator > m_compRotCreator
void removeDuplicateWithReference(std::unique_ptr< Trk::SegmentCollection > &segments, std::vector< const MuonSegment * > &referenceSegments) const
ToolHandle< Trk::IPropagator > m_propagator
bool isSplitTrack(const EventContext &ctx, const Trk::Track &track1, const Trk::Track &track2) const
identify whether two track are split
Trk::MagneticFieldProperties m_magFieldProperties
magnetic field properties
virtual std::vector< std::unique_ptr< MuPatTrack > > find(const EventContext &ctx, MuPatCandidateBase &candidate, const std::vector< MuPatSegment * > &segments) const override
interface for tools to find track in the muon system starting from a vector of segments
ToolHandle< IMuonSeededSegmentFinder > m_seededSegmentFinder
Gaudi::Property< bool > m_recalibrateMDTHits
ToolHandle< IMdtDriftCircleOnTrackCreator > m_mdtRotCreator
PublicToolHandle< MuonEDMPrinterTool > m_printer
tool to print out EDM objects;
Gaudi::Property< bool > m_useTrackingHistory
use history of the track finding up to now to avoid creating duplicates
ServiceHandle< IMuonEDMHelperSvc > m_edmHelperSvc
std::atomic_uint m_ncalls
virtual std::unique_ptr< Trk::TrackParameters > findClosestParameters(const Trk::Track &track, const Amg::Vector3D &pos) const override
find closest TrackParameters to the position.
ToolHandle< MooTrackFitter > m_fitter
virtual void refine(const EventContext &ctx, MuPatTrack &track) const override
interface for tools which refine the hit content of a given track
Gaudi::Property< bool > m_useExclusionList
use exclusion list (bit faster at the price of missing chambers)
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
MooTrackBuilder(const std::string &, const std::string &, const IInterface *)
default AlgTool constructor
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trackSummaryTool
std::atomic_uint m_nTimedOut
ToolHandle< IMuonHoleRecoveryTool > m_muonChamberHoleRecoverTool
ToolHandle< MooCandidateMatchingTool > m_candidateMatchingTool
ToolHandle< MooTrackFitter > m_slFitter
std::vector< std::unique_ptr< Trk::Track > > combineWithSegmentFinding(const EventContext &ctx, const Trk::Track &track, const MuonSegment &seg, const PrepVec &patternPhiHits) const
find tracks by redoing the segment finding in the chamber of the segment
std::unique_ptr< MuonSegment > combineToSegment(const EventContext &ctx, const MuPatCandidateBase &firstEntry, const MuPatCandidateBase &secondEntry, const PrepVec &patternPhiHits) const
Methos is used externally by MuonTrackSteering.cxx:233. Should be revised to put it into an interface...
ToolHandle< IMuonErrorOptimisationTool > m_errorOptimisationTool
virtual StatusCode initialize() override
initialize method, method taken from bass-class AlgTool
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
TrackCollection * mergeSplitTracks(const EventContext &ctx, const TrackCollection &tracks) const
look for split tracks in collection and merge them
std::pair< std::unique_ptr< Trk::Track >, std::unique_ptr< Trk::Track > > splitTrack(const EventContext &ctx, const Trk::Track &track) const
split given track if it crosses the calorimeter volume, code assumes that the track was already extra...
ToolHandle< IMuonTrackToSegmentTool > m_trackToSegmentTool
virtual std::unique_ptr< Trk::Track > recalibrateHitsOnTrack(const EventContext &ctx, const Trk::Track &track, bool doMdts, bool doCompetingClusters) const override
recalibrate hits on track
ToolHandle< IMuonTrackExtrapolationTool > m_trackExtrapolationTool
virtual std::unique_ptr< Trk::Track > refit(const EventContext &ctx, Trk::Track &track) const override
refit track
static const InterfaceID & interfaceID()
access to tool interface
Gaudi::Property< bool > m_doTimeOutChecks
on/off time out check
Trk::TrackStates::const_iterator insertClustersWithCompetingRotCreation(const EventContext &ctx, Trk::TrackStates::const_iterator tsit, Trk::TrackStates::const_iterator tsit_end, std::vector< std::unique_ptr< const Trk::TrackStateOnSurface > > &states) const
~MooTrackBuilder()=default
destructor
ToolHandle< Trk::IResidualPullCalculator > m_pullCalculator
virtual StatusCode finalize() override
finialize method, method taken from bass-class AlgTool
std::unique_ptr< Trk::Track > combine(const EventContext &ctx, const MuPatCandidateBase &firstEntry, const MuPatCandidateBase &secondEntry, const PrepVec &patternPhiHits) const
combine two MCTBCandidateEntries
track candidate entry object.
segment candidate object.
track candidate object.
Definition MuPatTrack.h:37
This is the common class for 3D segments used in the muon spectrometer.
Interface for condensing Trk::Track properties and associated hits to a (non-fittable) foot print,...
magnetic field properties to steer the behavior of the extrapolation
Abstract Base Class for tracking surfaces.
Eigen::Matrix< double, 3, 1 > Vector3D
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
Ensure that the ATLAS eigen extensions are properly loaded.
@ FullField
Field is set to be realistic, but within a given Volume.
ParametersBase< TrackParametersDim, Charged > TrackParameters