ATLAS Offline Software
Loading...
Searching...
No Matches
MuonCreatorTool.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 MUONCOMBINEDBASETOOLS_MUONCREATORTOOL_H
6#define MUONCOMBINEDBASETOOLS_MUONCREATORTOOL_H
7
12#include "GaudiKernel/ServiceHandle.h"
13#include "GaudiKernel/ToolHandle.h"
34#include "TrkSegment/Segment.h"
42#include "xAODMuon/Muon.h"
46#include "xAODMuon/SlowMuon.h"
51
52namespace MuonCombined {
53 class StacoTag;
54 class CombinedFitTag;
55 class MuGirlTag;
56 class MuGirlLowBetaTag;
57 class SegmentTag;
58 class CaloTag;
59
60 class MuonCreatorTool : public AthAlgTool, virtual public IMuonCreatorTool {
61 public:
62 using InDetCandidateTagsMap = std::vector<InDetCandidateTags>;
63
64 MuonCreatorTool(const std::string& type, const std::string& name, const IInterface* parent);
65 ~MuonCreatorTool() = default;
66
67 virtual StatusCode initialize() override final;
68
70 virtual void create(const EventContext& ctx, const MuonCandidateCollection* muonCandidates,
71 const std::vector<const InDetCandidateToTagMap*>& tagMaps, OutputData& outputData) const override final;
72
74 virtual xAOD::Muon* create(const EventContext& ctx, const MuonCandidate& candidate, OutputData& outputData) const override final;
75
77 virtual xAOD::Muon* create(const EventContext& ctx, InDetCandidateTags& candidate, OutputData& outputData) const override final;
78
79 private:
80 void create(const EventContext& ctx, const MuonCandidateCollection* muonCandidates,
81 const std::vector<const InDetCandidateToTagMap*>& tagMaps, OutputData& outputData, bool select_comissioning) const;
82
84 void decorateDummyValues(const EventContext& ctx, xAOD::Muon& muon, OutputData& outputData) const;
85
86 void addStatisticalCombination(const EventContext& ctx, xAOD::Muon& muon, const InDetCandidate* candidate, const StacoTag* tag,
87 OutputData& outputData) const;
88
89 void addCombinedFit(const EventContext& ctx, xAOD::Muon& muon, const CombinedFitTag* tag, OutputData& outputData) const;
90
91 void addMuGirl(const EventContext& ctx, xAOD::Muon& muon, const MuGirlTag* tag, OutputData& outputData) const;
92
93 void addMuGirlLowBeta(const EventContext& ctx, xAOD::Muon& muon, const MuGirlLowBetaTag* tag, xAOD::SlowMuon* slowMuon,
94 OutputData& outputData) const;
95
96 void addSegmentTag(const EventContext& ctx, xAOD::Muon& muon, const SegmentTag* tag, OutputData& outputData) const;
97 void addCaloTag(xAOD::Muon& muon, const CaloTag* tag) const;
98
105 void addMuonCandidate(const EventContext& ctx, const MuonCandidate& candidate, xAOD::Muon& muon, OutputData& outputData,
107
112 xAOD::TrackParticleContainer& trackParticleContainer,
113 TrackCollection* trackCollection = 0) const;
114
115 ElementLink<xAOD::MuonSegmentContainer> createMuonSegmentElementLink(const EventContext& ctx, const Muon::MuonSegment* segLink,
116 const OutputData& outData) const;
117
118 private:
119 void resolveOverlaps(const EventContext& ctx, const MuonCandidateCollection* muonCandidates,
120 const std::vector<const InDetCandidateToTagMap*>& tagMaps, InDetCandidateTagsMap& resolvedInDetCandidates,
121 std::vector<const MuonCombined::MuonCandidate*>& resolvedMuonCandidates,
122 bool select_comissioning = false) const;
123
124 void selectStaus(InDetCandidateTagsMap& resolvedInDetCandidates, const std::vector<const InDetCandidateToTagMap*>& tagMaps) const;
125
126 std::unique_ptr<Trk::Track> createDummyTrack(const EventContext& ctx, const std::vector<const Muon::MuonSegment*>& segments,
127 const Trk::Track& indetTrack) const;
129
130 bool dressMuon(xAOD::Muon& muon) const;
131
132 void addEnergyLossToMuon(xAOD::Muon& muon) const;
133
134 void fillEnergyLossFromTrack(xAOD::Muon& muon, const std::vector<const Trk::TrackStateOnSurface*>* tsosVector) const;
135
136 void setP4(xAOD::Muon& muon, const xAOD::TrackParticle& tp) const;
137
138 void collectCells(const EventContext& ctx, xAOD::Muon& muon, xAOD::CaloClusterContainer* clusterContainer,
139 const Trk::CaloExtension* inputCaloExt = nullptr) const;
140
141 ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc{this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};
142 ServiceHandle<Muon::IMuonEDMHelperSvc> m_edmHelperSvc{this, "edmHelper", "Muon::MuonEDMHelperSvc/MuonEDMHelperSvc",
143 "Handle to the service providing the IMuonEDMHelperSvc interface"};
144
145 PublicToolHandle<Muon::MuonEDMPrinterTool> m_printer{this, "Printer", "Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"};
146 ToolHandle<Rec::IMuonPrintingTool> m_muonPrinter{this, "MuonPrinter", "Rec::MuonPrintingTool/MuonPrintingTool"};
147
148 ToolHandle<Trk::IParticleCaloExtensionTool> m_caloExtTool{this, "ParticleCaloExtensionTool",
149 "Trk::ParticleCaloExtensionTool/ParticleCaloExtensionTool"};
150 ToolHandle<Trk::ITrackParticleCreatorTool> m_particleCreator{this, "TrackParticleCreator",
151 "Trk::TrackParticleCreatorTool/MuonCombinedTrackParticleCreator"};
152 ToolHandle<Trk::ITrackAmbiguityProcessorTool> m_ambiguityProcessor{this, "AmbiguityProcessor", ""};
153 ToolHandle<Trk::IPropagator> m_propagator{this, "Propagator", "Trk::RungeKuttaPropagator/AtlasRungeKuttaPropagator"};
154 ToolHandle<xAOD::IMuonDressingTool> m_muonDressingTool{this, "MuonDressingTool", "MuonCombined::MuonDressingTool/MuonDressingTool"};
155 ToolHandle<Rec::IMuonMomentumBalanceSignificance> m_momentumBalanceTool{this, "MomentumBalanceTool",
156 "Rec::MuonMomentumBalanceSignificanceTool/"
157 "MuonMomentumBalanceSignificanceTool"};
158 ToolHandle<Rec::IMuonScatteringAngleSignificance> m_scatteringAngleTool{this, "ScatteringAngleTool",
159 "Rec::MuonScatteringAngleSignificanceTool/"
160 "MuonScatteringAngleSignificanceTool"};
161 ToolHandle<CP::IMuonSelectionTool> m_selectorTool{this, "MuonSelectionTool", "CP::MuonSelectionTool/MuonSelectionTool"};
162
163 ToolHandle<Rec::IMuonMeanMDTdADCFiller> m_meanMDTdADCTool{this, "MeanMDTdADCTool",
164 "Rec::MuonMeanMDTdADCFillerTool/MuonMeanMDTdADCFillerTool"};
165 ToolHandle<Trk::ITrkMaterialProviderTool> m_caloMaterialProvider{this, "CaloMaterialProvider",
166 "Trk::TrkMaterialProviderTool/TrkMaterialProviderTool"};
167
168 ToolHandle<Rec::IMuonTrackQuery> m_trackQuery{this, "TrackQuery", "Rec::MuonTrackQuery/MuonTrackQuery"};
169 ToolHandle<Trk::IExtendedTrackSummaryTool> m_trackSummaryTool{this, "TrackSummaryTool", "MuonTrackSummaryTool"};
170
172
173 SG::ReadHandleKey<CaloCellContainer> m_cellContainerName{this, "CaloCellContainer", "AllCalo", "calo cells"};
174 SG::ReadCondHandleKey<CaloNoise> m_caloNoiseKey{this, "CaloNoise", "", "CaloNoise object to use, or blank."};
175
176 Gaudi::Property<bool> m_buildStauContainer{this, "BuildStauContainer", false, "flag to decide whether to build stau or not"};
177 Gaudi::Property<bool> m_addMDTExtrasMuGirlLowBeta{this, "AddMDTExtrasMuGirlLowBeta", false};
178 Gaudi::Property<bool> m_fillEnergyLossFromTrack{this, "FillEnergyLossFromTrack", true,
179 "Decide whether to try to extract the calo energy loss from tracks "};
180
181 Gaudi::Property<bool> m_fillExtraELossInfo{this, "FillExtraELossInfo", true,
182 "Can enabled this for debugging - will add extra information not for "
183 "production"};
184 Gaudi::Property<bool> m_printSummary{this, "PrintSummary", false, "flag to print muon edm"};
185 Gaudi::Property<bool> m_useUpdatedExtrapolatedTrack{this, "UseUpdatedExtrapolatedTrack", true,
186 "configure whether to use the updated extrapolated track for a combined "
187 "fit or not"};
188 Gaudi::Property<bool> m_segLowBeta{this, "AssociateSegmentsToLowBetaMuons", false, "associate segments to MuGirlLowBeta muons"};
189 Gaudi::Property<bool> m_useCaloCells{this, "UseCaloCells", true};
190 Gaudi::Property<bool> m_doSA{this, "MakeSAMuons", false};
194 Gaudi::Property<bool> m_requireIDTracks{this, "RequireIDTrack", false};
195
196 Gaudi::Property<float> m_sigmaCaloNoiseCut{this, "SigmaCaloNoiseCut", 3.4};
197
198 Gaudi::Property< std::vector<std::string> > m_copyFloatSummaryKeys
199 {this,"CopyFloatSummaryKeys",{"TRTTrackOccupancy","eProbabilityComb","eProbabilityHT","pixeldEdx","TRTdEdx","eProbabilityNN"},
200 "List of float aux element names to copy over from ID track particle summaries."};
201 Gaudi::Property< std::vector<std::string> > m_copyCharSummaryKeys
202 {this,"CopyUInt8SummaryKeys",
203 {"numberOfUsedHitsdEdx","numberOfIBLOverflowsdEdx","TRTdEdxUsedHits",
204 "expectInnermostPixelLayerHit", "expectNextToInnermostPixelLayerHit",
205 "numberOfPixelOutliers", "numberOfInnermostPixelLayerOutliers", "numberOfNextToInnermostPixelLayerOutliers", "numberOfSCTOutliers"},
206 "List of uint8_t aux element names to copy over from ID track particle summaries."};
207
208 Gaudi::Property<bool> m_requireMSOEforSA{this, "RequireMSOEforSA", true,
209 "Flag to accept muons with SA track only but not MSOE. Interesting for BSM?"};
210
211 Gaudi::Property<bool> m_requireCaloDepositForSA{this, "RequireCaloForSA", true,
212 "Flag to discard SA muons that have no calorimeter loss associated."};
213 std::vector< std::unique_ptr<SG::AuxElement::Accessor<float> > > m_copyFloatSummaryAccessors;
214 std::vector< std::unique_ptr<SG::AuxElement::Accessor<uint8_t> > > m_copyCharSummaryAccessors;
215
216 SG::ReadCondHandleKey<CaloDetDescrManager> m_caloMgrKey{this, "CaloDetDescrManager", "CaloDetDescrManager"};
217
218
219
220 };
221
222} // namespace MuonCombined
223
224#endif
Definition of CaloDetDescrManager.
DataVector< MuonCombined::MuonCandidate > MuonCandidateCollection
This typedef represents a collection of MuonCandidate objects.
Property holding a SG store/key/clid from which a ReadHandle is made.
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:
TagBase implementation for a calo tag.
Definition CaloTag.h:17
TagBase implementation for a combined fit.
interface for tools building combined muons from ID and Muon candidates
std::pair< const InDetCandidate *, std::vector< const TagBase * > > InDetCandidateTags
TagBase implementation for a combined fit.
TagBase implementation for a combined fit.
Definition MuGirlTag.h:23
void setP4(xAOD::Muon &muon, const xAOD::TrackParticle &tp) const
ToolHandle< Trk::ITrackParticleCreatorTool > m_particleCreator
void addCaloTag(xAOD::Muon &muon, const CaloTag *tag) const
void addSegmentTag(const EventContext &ctx, xAOD::Muon &muon, const SegmentTag *tag, OutputData &outputData) const
ToolHandle< Trk::IParticleCaloExtensionTool > m_caloExtTool
ToolHandle< Trk::ITrackAmbiguityProcessorTool > m_ambiguityProcessor
void fillEnergyLossFromTrack(xAOD::Muon &muon, const std::vector< const Trk::TrackStateOnSurface * > *tsosVector) const
std::vector< std::unique_ptr< SG::AuxElement::Accessor< float > > > m_copyFloatSummaryAccessors
PublicToolHandle< Muon::MuonEDMPrinterTool > m_printer
Gaudi::Property< bool > m_useCaloCells
ToolHandle< Rec::IMuonScatteringAngleSignificance > m_scatteringAngleTool
virtual void create(const EventContext &ctx, const MuonCandidateCollection *muonCandidates, const std::vector< const InDetCandidateToTagMap * > &tagMaps, OutputData &outputData) const override final
IMuonCreatorTool interface: build muons from ID and MS candidates.
SG::ReadHandleKey< CaloCellContainer > m_cellContainerName
ToolHandle< xAOD::IMuonDressingTool > m_muonDressingTool
SG::ReadCondHandleKey< CaloDetDescrManager > m_caloMgrKey
Gaudi::Property< bool > m_fillExtraELossInfo
std::vector< InDetCandidateTags > InDetCandidateTagsMap
void addMuonCandidate(const EventContext &ctx, const MuonCandidate &candidate, xAOD::Muon &muon, OutputData &outputData, const ElementLink< TrackCollection > &meLink=ElementLink< TrackCollection >()) const
add muon candidate info to a muon, if an updateExtrapolatedTrack is provided, the routine takes owner...
void addMuGirlLowBeta(const EventContext &ctx, xAOD::Muon &muon, const MuGirlLowBetaTag *tag, xAOD::SlowMuon *slowMuon, OutputData &outputData) const
ToolHandle< Trk::IPropagator > m_propagator
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
bool dressMuon(xAOD::Muon &muon) const
void resolveOverlaps(const EventContext &ctx, const MuonCandidateCollection *muonCandidates, const std::vector< const InDetCandidateToTagMap * > &tagMaps, InDetCandidateTagsMap &resolvedInDetCandidates, std::vector< const MuonCombined::MuonCandidate * > &resolvedMuonCandidates, bool select_comissioning=false) const
Gaudi::Property< float > m_sigmaCaloNoiseCut
ToolHandle< Rec::IMuonPrintingTool > m_muonPrinter
Gaudi::Property< std::vector< std::string > > m_copyCharSummaryKeys
void setMuonHitCounts(xAOD::Muon &muon) const
ToolHandle< CP::IMuonSelectionTool > m_selectorTool
ToolHandle< Rec::IMuonMomentumBalanceSignificance > m_momentumBalanceTool
ElementLink< xAOD::TrackParticleContainer > createTrackParticleElementLink(const ElementLink< TrackCollection > &trackLink, xAOD::TrackParticleContainer &trackParticleContainer, TrackCollection *trackCollection=0) const
function creates an element link to a track particle from the track and the TrackParticle collection.
ToolHandle< Trk::ITrkMaterialProviderTool > m_caloMaterialProvider
void addEnergyLossToMuon(xAOD::Muon &muon) const
std::vector< std::unique_ptr< SG::AuxElement::Accessor< uint8_t > > > m_copyCharSummaryAccessors
ElementLink< xAOD::MuonSegmentContainer > createMuonSegmentElementLink(const EventContext &ctx, const Muon::MuonSegment *segLink, const OutputData &outData) const
void addCombinedFit(const EventContext &ctx, xAOD::Muon &muon, const CombinedFitTag *tag, OutputData &outputData) const
Gaudi::Property< std::vector< std::string > > m_copyFloatSummaryKeys
void selectStaus(InDetCandidateTagsMap &resolvedInDetCandidates, const std::vector< const InDetCandidateToTagMap * > &tagMaps) const
void collectCells(const EventContext &ctx, xAOD::Muon &muon, xAOD::CaloClusterContainer *clusterContainer, const Trk::CaloExtension *inputCaloExt=nullptr) const
Gaudi::Property< bool > m_fillEnergyLossFromTrack
virtual StatusCode initialize() override final
Gaudi::Property< bool > m_segLowBeta
ServiceHandle< Muon::IMuonEDMHelperSvc > m_edmHelperSvc
Gaudi::Property< bool > m_addMDTExtrasMuGirlLowBeta
Gaudi::Property< bool > m_printSummary
MuonCreatorTool(const std::string &type, const std::string &name, const IInterface *parent)
ToolHandle< Rec::IMuonMeanMDTdADCFiller > m_meanMDTdADCTool
Gaudi::Property< bool > m_requireCaloDepositForSA
Gaudi::Property< bool > m_requireMSOEforSA
SG::ReadCondHandleKey< CaloNoise > m_caloNoiseKey
Gaudi::Property< bool > m_buildStauContainer
Rec::CaloCellCollector m_cellCollector
std::unique_ptr< Trk::Track > createDummyTrack(const EventContext &ctx, const std::vector< const Muon::MuonSegment * > &segments, const Trk::Track &indetTrack) const
Gaudi::Property< bool > m_useUpdatedExtrapolatedTrack
void decorateDummyValues(const EventContext &ctx, xAOD::Muon &muon, OutputData &outputData) const
De^corated a bunch of dummy values to the muon to ensure data consistency in the xAOD.
void addMuGirl(const EventContext &ctx, xAOD::Muon &muon, const MuGirlTag *tag, OutputData &outputData) const
Gaudi::Property< bool > m_doSA
Gaudi::Property< bool > m_requireIDTracks
In case of running the muon reconstruction with LRT tracks this property removes the overlap of muons...
void addStatisticalCombination(const EventContext &ctx, xAOD::Muon &muon, const InDetCandidate *candidate, const StacoTag *tag, OutputData &outputData) const
ToolHandle< Rec::IMuonTrackQuery > m_trackQuery
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trackSummaryTool
TagBase implementation for a segment tagger.
Definition SegmentTag.h:14
TagBase implementation for a combined fit.
Definition StacoTag.h:22
This is the common class for 3D segments used in the muon spectrometer.
Property holding a SG store/key/clid from which a ReadHandle is made.
STL class.
The MuonTagToSegMap is an auxillary construct that links the MuonSegments associated with a combined ...
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
Ensure that the ATLAS eigen extensions are properly loaded.
STL namespace.
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
#define private