ATLAS Offline Software
Loading...
Searching...
No Matches
CombinedMuonTrackFitter.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
6// CombinedMuonTrackFitter
7// AlgTool gathering material effects along a combined muon track, in
8// particular the TSOS'es representing the calorimeter energy deposit and
9// Coulomb scattering.
10// The resulting track is fitted at the IP
11//
13#ifndef MUIDTRACKBUILDER_COMBINEDMUONTRACKFITTER_H
14#define MUIDTRACKBUILDER_COMBINEDMUONTRACKFITTER_H
15
16#include <atomic>
17
19#include "GaudiKernel/ServiceHandle.h"
20#include "GaudiKernel/ToolHandle.h"
36#include "TrkTrack/TrackInfo.h"
39
40
41namespace Rec {
42
43 class CombinedMuonTrackFitter : public extends<AthAlgTool, ICombinedMuonTrackFitter> {
44 public:
45 using base_class::base_class;
47
48 virtual StatusCode initialize() override;
49 virtual StatusCode finalize() override;
50
51 /*refit a track */
52 virtual std::unique_ptr<Trk::Track> fit(const EventContext& ctx, const Trk::Track& track, const Trk::RunOutlierRemoval runOutlier,
53 const Trk::ParticleHypothesis particleHypothesis) const override;
54 protected:
57 std::unique_ptr<Trk::Track> fit(const EventContext& ctx, const Trk::MeasurementSet& measurementSet,
58 const Trk::TrackParameters& perigeeStartValue, const Trk::RunOutlierRemoval runOutlier,
59 const Trk::ParticleHypothesis particleHypothesis) const;
60
63 std::unique_ptr<Trk::Track> fit(const EventContext& ctx, const Trk::Track& indetTrack, Trk::Track& extrapolatedTrack,
64 const Trk::RunOutlierRemoval runOutlier,
65 const Trk::ParticleHypothesis particleHypothesis) const;
66
67 double normalizedChi2(const Trk::Track& track) const;
68
69
70 bool checkTrack(std::string_view txt, const Trk::Track* newTrack) const;
71
72
73 unsigned int countAEOTs(const Trk::Track& track, const std::string& txt) const;
74
75 bool loadMagneticField(const EventContext& ctx, MagField::AtlasFieldCache& field_cache) const;
76
77 private:
78
79 bool optimizeErrors(const EventContext& ctx, Trk::Track& track) const;
80
81 // helpers, managers, tools
82 ToolHandle<Muon::IMuonTrackCleaner> m_cleaner{
83 this,
84 "Cleaner",
85 "Muon::MuonTrackCleaner/MuidTrackCleaner",
86 };
87 ToolHandle<Trk::ITrackFitter> m_fitter{
88 this,
89 "Fitter",
90 "Trk::iPatFitter/iPatFitter",
91 }; // curved track fitter
92 ToolHandle<Trk::ITrackFitter> m_fitterSL{
93 this,
94 "SLFitter",
95 "Trk::iPatFitter/iPatSLFitter",
96 }; // straight line fitter
97
98 protected:
99 ToolHandle<Rec::IMuidCaloTrackStateOnSurface> m_caloTSOS{
100 this,
101 "CaloTSOS",
102 "",
103 };
104 ToolHandle<Muon::IMuonErrorOptimisationTool> m_muonErrorOptimizer{
105 this,
106 "MuonErrorOptimizer",
107 "",
108 };
109 PublicToolHandle<Muon::MuonEDMPrinterTool> m_printer{
110 this,
111 "Printer",
112 "Muon::MuonEDMPrinterTool/MuonEDMPrinterTool",
113 };
114 ToolHandle<Rec::IMuonTrackQuery> m_trackQuery{
115 this,
116 "TrackQuery",
117 "Rec::MuonTrackQuery/MuonTrackQuery",
118 };
119 ToolHandle<Trk::ITrackSummaryTool> m_trackSummary{
120 this,
121 "TrackSummaryTool",
122 "Trk::TrackSummaryTool/MuidTrackSummaryTool",
123 };
124 ToolHandle<Trk::ITrkMaterialProviderTool> m_materialUpdator{
125 this,
126 "CaloMaterialProvider",
127 "",
128 };
129 ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc{this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};
130
131 private:
132 // // Read handle for conditions object to get the field cache
134 "Name of the Magnetic Field conditions object key"};
135
136 ServiceHandle<Trk::ITrackingVolumesSvc> m_trackingVolumesSvc{this, "TrackingVolumesSvc", "Trk::TrackingVolumesSvc/TrackingVolumesSvc"};
137
138
139 Gaudi::Property<bool> m_allowCleanerVeto{this, "AllowCleanerVeto", true};
140 Gaudi::Property<unsigned> m_maxWarnings{this, "MaxNumberOfWarnings", 10,
141 "Maximum number of permitted WARNING messages per message type."};
142
143 protected:
144 Gaudi::Property<double> m_badFitChi2{this, "BadFitChi2", 2.5};
145
146 Gaudi::Property<double> m_zECToroid{this, "zECToroid", 10. * Gaudi::Units::meter};
147 Gaudi::Property<bool> m_updateWithCaloTG{this, "UpdateWithCaloTG", false};
148 Gaudi::Property<bool> m_useCaloTG{this, "UseCaloTG", false};
149
150 // // constants
151 std::unique_ptr<const Trk::Volume> m_indetVolume{nullptr};
152 std::unique_ptr<const Trk::Volume> m_calorimeterVolume{nullptr};
153
154 // // count warnings
155 std::unique_ptr<MessageHelper> m_messageHelper{std::make_unique<MessageHelper>(*this, 50)};
156
157 private:
158 mutable std::atomic_uint m_countCombinedCleanerVeto{0};
159 mutable std::atomic_uint m_countExtensionCleanerVeto{0};
160 mutable std::atomic_uint m_countStandaloneCleanerVeto{0};
161 }; // end of class CombinedMuonTrackFitter
162
163} // end of namespace Rec
164
165#endif // MUIDTRACKBUILDER_COMBINEDMUONTRACKBUILDER_H
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
ToolHandle< Muon::IMuonErrorOptimisationTool > m_muonErrorOptimizer
bool optimizeErrors(const EventContext &ctx, Trk::Track &track) const
ToolHandle< Trk::ITrkMaterialProviderTool > m_materialUpdator
Gaudi::Property< unsigned > m_maxWarnings
Gaudi::Property< double > m_badFitChi2
Gaudi::Property< double > m_zECToroid
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
virtual StatusCode initialize() override
std::unique_ptr< MessageHelper > m_messageHelper
ServiceHandle< Trk::ITrackingVolumesSvc > m_trackingVolumesSvc
ToolHandle< Trk::ITrackSummaryTool > m_trackSummary
ToolHandle< Muon::IMuonTrackCleaner > m_cleaner
ToolHandle< Trk::ITrackFitter > m_fitterSL
ToolHandle< Rec::IMuidCaloTrackStateOnSurface > m_caloTSOS
virtual std::unique_ptr< Trk::Track > fit(const EventContext &ctx, const Trk::Track &track, const Trk::RunOutlierRemoval runOutlier, const Trk::ParticleHypothesis particleHypothesis) const override
double normalizedChi2(const Trk::Track &track) const
unsigned int countAEOTs(const Trk::Track &track, const std::string &txt) const
std::unique_ptr< const Trk::Volume > m_calorimeterVolume
bool checkTrack(std::string_view txt, const Trk::Track *newTrack) const
ToolHandle< Trk::ITrackFitter > m_fitter
virtual StatusCode finalize() override
bool loadMagneticField(const EventContext &ctx, MagField::AtlasFieldCache &field_cache) const
PublicToolHandle< Muon::MuonEDMPrinterTool > m_printer
Gaudi::Property< bool > m_updateWithCaloTG
std::unique_ptr< const Trk::Volume > m_indetVolume
Gaudi::Property< bool > m_allowCleanerVeto
ToolHandle< Rec::IMuonTrackQuery > m_trackQuery
Gaudi Tools.
std::vector< const MeasurementBase * > MeasurementSet
vector of fittable measurements
Definition FitterTypes.h:30
bool RunOutlierRemoval
switch to toggle quality processing after fit
Definition FitterTypes.h:22
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.
ParametersBase< TrackParametersDim, Charged > TrackParameters