ATLAS Offline Software
Loading...
Searching...
No Matches
CombinedMuonTrackBuilder.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
6// CombinedMuonTrackBuilder
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
14#ifndef MUIDTRACKBUILDER_COMBINEDMUONTRACKBUILDER_H
15#define MUIDTRACKBUILDER_COMBINEDMUONTRACKBUILDER_H
16
17#include <atomic>
18
21#include "GaudiKernel/ServiceHandle.h"
22#include "GaudiKernel/ToolHandle.h"
47#include "TrkTrack/TrackInfo.h"
50class CaloEnergy;
51class MessageHelper;
52
53namespace Trk {
54 class PerigeeSurface;
56 class RecVertex;
58} // namespace Trk
59
60namespace Rec {
61
63 public:
64 CombinedMuonTrackBuilder(const std::string& type, const std::string& name, const IInterface* parent);
66
67 virtual StatusCode initialize() override;
68 virtual StatusCode finalize() override;
69
71 virtual std::unique_ptr<Trk::Track> combinedFit(const EventContext& ctx, const Trk::Track& indetTrack, const Trk::Track& extrapolatedTrack,
72 const Trk::Track& spectrometerTrack) const override;
73
77 virtual std::unique_ptr<Trk::Track> indetExtension(const EventContext& ctx,const Trk::Track& indetTrack, const Trk::MeasurementSet& spectrometerMeas,
78 std::unique_ptr<Trk::TrackParameters> innerParameters,
79 std::unique_ptr<Trk::TrackParameters> middleParameters,
80 std::unique_ptr<Trk::TrackParameters> outerParameters) const override;
81
84 virtual std::unique_ptr<Trk::Track> standaloneFit(const EventContext& ctx, const Trk::Track& spectrometerTrack,
85 const Amg::Vector3D& bs, const Trk::Vertex* vertex) const override;
86
89 virtual std::unique_ptr<Trk::Track> standaloneRefit(const EventContext& ctx, const Trk::Track& combinedTrack, const Amg::Vector3D& vec) const override;
90
91
92
93 private:
94 std::unique_ptr<Trk::Track> addIDMSerrors(const Trk::Track* track) const;
95
96 void appendSelectedTSOS(Trk::TrackStates& trackStateOnSurfaces,
99
100 const CaloEnergy* caloEnergyParameters(const Trk::Track* combinedTrack, const Trk::Track* muonTrack,
101 const Trk::TrackParameters*& combinedEnergyParameters,
102 const Trk::TrackParameters*& muonEnergyParameters) const;
103
104 std::unique_ptr<Trk::Track> createExtrapolatedTrack(
105 const EventContext& ctx, const Trk::Track& spectrometerTrack, const Trk::TrackParameters& parameters,
106 Trk::ParticleHypothesis particleHypothesis, Trk::RunOutlierRemoval runOutlier,
107 const std::vector<std::unique_ptr<const Trk::TrackStateOnSurface>>& trackStateOnSurfaces, const Trk::RecVertex* vertex,
108 const Trk::RecVertex* mbeamAxis, const Trk::PerigeeSurface* mperigeeSurface, const Trk::Perigee* seedParameter = nullptr) const;
109
110 std::unique_ptr<Trk::Track> createIndetTrack(const Trk::TrackInfo& info,
111 const Trk::TrackStates* tsos) const;
115 std::unique_ptr<Trk::Track> createMuonTrack(const EventContext& ctx, const Trk::Track& muonTrack,
116 const Trk::TrackParameters* parameters, std::unique_ptr<CaloEnergy> caloEnergy,
117 const Trk::TrackStates* tsos) const;
118
119 std::unique_ptr<Trk::TrackStateOnSurface> createPhiPseudoMeasurement(const EventContext& ctx, const Trk::Track& track) const;
120
121 std::vector<std::unique_ptr<const Trk::TrackStateOnSurface>> createSpectrometerTSOS(const EventContext& ctx, const Trk::Track& spectrometerTrack) const;
122
123 std::unique_ptr<Trk::TrackStateOnSurface> entrancePerigee(const EventContext& ctx, const Trk::TrackParameters* parameters) const;
124
125 std::unique_ptr<Trk::TrackParameters> extrapolatedParameters(const EventContext& ctx, bool& badlyDeterminedCurvature,
126 const Trk::Track& spectrometerTrack,
127 const Trk::RecVertex* mvertex,
128 const Trk::PerigeeSurface* mperigeeSurface) const;
129
130 void finalTrackBuild(const EventContext& ctx, std::unique_ptr<Trk::Track>& track) const;
131
132 void momentumUpdate(std::unique_ptr<Trk::TrackParameters>& parameters, double updatedP, bool directionUpdate = false,
133 double deltaPhi = 0., double deltaTheta = 0.) const;
134
135 // double normalizedChi2(const Trk::Track& track) const;
136 std::unique_ptr<Trk::Track> reallocateMaterial(const EventContext& ctx, const Trk::Track& spectrometerTrack) const;
137 void replaceCaloEnergy(const CaloEnergy* caloEnergy, Trk::Track* track) const;
138 void removeSpectrometerMaterial(std::unique_ptr<Trk::Track>& track) const;
139
140 static std::unique_ptr<Trk::PseudoMeasurementOnTrack> vertexOnTrack(const Trk::TrackParameters& parameters,
141 const Trk::RecVertex* vertex, const Trk::RecVertex* mbeamAxis);
142
143 void dumpCaloEloss(const Trk::Track* track, const std::string& txt) const;
144
145 // helpers, managers, tools
146 ToolHandle<Rec::IMuidCaloEnergy> m_caloEnergyParam{
147 this,
148 "CaloEnergyParam",
149 "",
150 };
151 ToolHandle<Muon::IMuonClusterOnTrackCreator> m_cscRotCreator{
152 this,
153 "CscRotCreator",
154 "",
155 };
156
157 ToolHandle<Muon::IMuonClusterOnTrackCreator> m_muClusterRotCreator{this, "MuonRotCreator", ""};
158
159 ToolHandle<Trk::IExtrapolator> m_extrapolator{
160 this,
161 "Extrapolator",
162 "Trk::Extrapolator/AtlasExtrapolator",
163 };
164 ToolHandle<Trk::IMaterialAllocator> m_materialAllocator{
165 this,
166 "MaterialAllocator",
167 "",
168 };
169 ToolHandle<Muon::IMdtDriftCircleOnTrackCreator> m_mdtRotCreator{
170 this,
171 "MdtRotCreator",
172 "",
173 };
174 ToolHandle<Muon::IMuonHoleRecoveryTool> m_muonHoleRecovery{
175 this,
176 "MuonHoleRecovery",
177 "",
178 };
179 ToolHandle<Trk::IPropagator> m_propagator{
180 this,
181 "Propagator",
182 "Trk::IntersectorWrapper/IntersectorWrapper",
183 };
184 ToolHandle<Trk::IPropagator> m_propagatorSL{
185 this,
186 "SLPropagator",
187 "Trk::StraightLinePropagator/MuonStraightLinePropagator",
188 };
189
192
193 PublicToolHandle<Muon::IMuonAlignmentUncertTool> m_alignUncertTool_theta{this, "AlignmentUncertToolTheta",
194 "Muon::MuonAlignmentUncertTool/MuonAlignmentUncertToolTheta" };
195 PublicToolHandle<Muon::IMuonAlignmentUncertTool> m_alignUncertTool_phi{this, "AlignmentUncertToolPhi",
196 "Muon::MuonAlignmentUncertTool/MuonAlignmentUncertToolPhi"};
197
198
199 ServiceHandle<Muon::IMuonEDMHelperSvc> m_edmHelperSvc{this, "edmHelper", "Muon::MuonEDMHelperSvc/MuonEDMHelperSvc",
200 "Handle to the service providing the IMuonEDMHelperSvc interface"};
201
202
203 // Read handle for conditions object to get the field cache
204
206 "Key of the TrackingGeometry conditions data."};
207
208
210
211
212 Gaudi::Property<bool> m_cleanCombined{this, "CleanCombined", true};
213 Gaudi::Property<bool> m_cleanStandalone{this, "CleanStandalone", true};
214
215 Gaudi::Property<bool> m_perigeeAtSpectrometerEntrance{this, "PerigeeAtSpectrometerEntrance", false};
216 Gaudi::Property<bool> m_reallocateMaterial{this, "ReallocateMaterial", true};
217
218
219 Gaudi::Property<double> m_largeImpact{this, "LargeImpact", 100. * Gaudi::Units::mm};
220
221 Gaudi::Property<double> m_largeMomentumChange{this, "LargeMomentumChange", 0.05};
222 Gaudi::Property<double> m_largeMomentumError{this, "LargeMomentumError", 0.15};
223 Gaudi::Property<double> m_largePhiError{this, "LargePhiError", 0.020};
224 Gaudi::Property<double> m_lineMomentum{this, "LineMomentum", 2. * Gaudi::Units::GeV};
225 Gaudi::Property<double> m_lowMomentum{this, "LowMomentum", 10. * Gaudi::Units::GeV};
226
227 Gaudi::Property<double> m_minEnergy{this, "MinEnergy", 0.3 * Gaudi::Units::GeV};
228 Gaudi::Property<double> m_numberSigmaFSR{this, "NumberSigmaFSR", 2.5};
229
230 Gaudi::Property<double> m_vertex2DSigmaRPhi{this, "Vertex2DSigmaRPhi", 100. * Gaudi::Units::mm};
231 Gaudi::Property<double> m_vertex2DSigmaZ{this, "Vertex2DSigmaZ", 100. * Gaudi::Units::meter};
232 Gaudi::Property<double> m_vertex3DSigmaRPhi{this, "Vertex3DSigmaRPhi", 6. * Gaudi::Units::mm};
233 Gaudi::Property<double> m_vertex3DSigmaZ{this, "Vertex3DSigmaZ", 60. * Gaudi::Units::mm};
234
235 bool m_redoRots{false};
236
237
238 // vertex region and phi modularity for pseudo-measurement constraints
239 std::unique_ptr<const Trk::RecVertex> m_beamAxis;
240 std::unique_ptr<const Trk::PerigeeSurface> m_perigeeSurface;
241
242 std::unique_ptr<const Trk::RecVertex> m_vertex;
243
244 // counters
245 mutable std::atomic_uint m_countAcceptedStandaloneFit{0};
246 mutable std::atomic_uint m_countBeamAxis{0};
247 mutable std::atomic_uint m_countDegradedStandaloneFit{0};
248 mutable std::atomic_uint m_countVertexRegion{0};
249
250
251 Gaudi::Property<bool> m_iterateCombinedTrackFit{this, "IterateCombinedTrackFit", false};
252 Gaudi::Property<bool> m_refineELossCombinedTrackFit{this, "RefineELossCombinedTrackFit", true};
253 Gaudi::Property<bool> m_refineELossStandAloneTrackFit{this, "RefineELossStandAloneTrackFit", true};
254 Gaudi::Property<bool> m_addElossID{this, "AddElossID", true};
255 Gaudi::Property<bool> m_addIDMSerrors{this, "AddIDMSerrors", true};
256 Gaudi::Property<bool> m_useRefitTrackError{this, "UseRefitTrackError", true};
257
258 const Trk::TrackingVolume* getVolume(const EventContext& ctx, const std::string&& vol_name) const;
259
262 std::vector<std::unique_ptr<const Trk::TrackStateOnSurface>> getCaloTSOSfromMatProvider(const Trk::TrackParameters& track_params,
263 const Trk::Track& me_track) const;
264
265 }; // end of class CombinedMuonTrackBuilder
266
267} // end of namespace Rec
268
269#endif // MUIDTRACKBUILDER_COMBINEDMUONTRACKBUILDER_H
Scalar deltaPhi(const MatrixBase< Derived > &vec) const
std::vector< size_t > vec
class extending the basic Trk::EnergyLoss to describe the measured or parameterised muon energy loss ...
Definition CaloEnergy.h:28
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
void removeSpectrometerMaterial(std::unique_ptr< Trk::Track > &track) const
virtual StatusCode finalize() override
ToolHandle< Trk::IMaterialAllocator > m_materialAllocator
std::unique_ptr< Trk::Track > createMuonTrack(const EventContext &ctx, const Trk::Track &muonTrack, const Trk::TrackParameters *parameters, std::unique_ptr< CaloEnergy > caloEnergy, const Trk::TrackStates *tsos) const
Summarizes the available information about the ID track, the deposited calorimeter energies and the t...
ToolHandle< Trk::IPropagator > m_propagator
ToolHandle< Muon::IMuonHoleRecoveryTool > m_muonHoleRecovery
static std::unique_ptr< Trk::PseudoMeasurementOnTrack > vertexOnTrack(const Trk::TrackParameters &parameters, const Trk::RecVertex *vertex, const Trk::RecVertex *mbeamAxis)
ToolHandle< Muon::IMuonClusterOnTrackCreator > m_cscRotCreator
ServiceHandle< Muon::IMuonEDMHelperSvc > m_edmHelperSvc
Gaudi::Property< double > m_lineMomentum
ToolHandle< Trk::IPropagator > m_propagatorSL
void appendSelectedTSOS(Trk::TrackStates &trackStateOnSurfaces, Trk::TrackStates::const_iterator begin, Trk::TrackStates::const_iterator end) const
Gaudi::Property< double > m_largeImpact
ToolHandle< Trk::IExtrapolator > m_extrapolator
virtual StatusCode initialize() override
PublicToolHandle< Muon::IMuonAlignmentUncertTool > m_alignUncertTool_theta
ToolHandles to retrieve the uncertainties for theta and phi for the scattering uncertainties.
virtual std::unique_ptr< Trk::Track > standaloneFit(const EventContext &ctx, const Trk::Track &spectrometerTrack, const Amg::Vector3D &bs, const Trk::Vertex *vertex) const override
ICombinedMuonTrackBuilder interface: propagate to perigee adding calo energy-loss and material to MS ...
Gaudi::Property< bool > m_useRefitTrackError
Gaudi::Property< bool > m_refineELossStandAloneTrackFit
Gaudi::Property< double > m_vertex3DSigmaZ
Gaudi::Property< bool > m_perigeeAtSpectrometerEntrance
std::unique_ptr< Trk::TrackStateOnSurface > createPhiPseudoMeasurement(const EventContext &ctx, const Trk::Track &track) const
Gaudi::Property< bool > m_reallocateMaterial
std::unique_ptr< Trk::TrackStateOnSurface > entrancePerigee(const EventContext &ctx, const Trk::TrackParameters *parameters) const
void replaceCaloEnergy(const CaloEnergy *caloEnergy, Trk::Track *track) const
std::vector< std::unique_ptr< const Trk::TrackStateOnSurface > > createSpectrometerTSOS(const EventContext &ctx, const Trk::Track &spectrometerTrack) const
virtual std::unique_ptr< Trk::Track > combinedFit(const EventContext &ctx, const Trk::Track &indetTrack, const Trk::Track &extrapolatedTrack, const Trk::Track &spectrometerTrack) const override
ICombinedMuonTrackBuilder interface: build and fit combined ID/Calo/MS track.
ToolHandle< Rec::IMuidCaloEnergy > m_caloEnergyParam
PublicToolHandle< Muon::IMuonAlignmentUncertTool > m_alignUncertTool_phi
std::unique_ptr< Trk::Track > createIndetTrack(const Trk::TrackInfo &info, const Trk::TrackStates *tsos) const
void dumpCaloEloss(const Trk::Track *track, const std::string &txt) const
const Trk::TrackingVolume * getVolume(const EventContext &ctx, const std::string &&vol_name) const
Gaudi::Property< bool > m_refineELossCombinedTrackFit
std::unique_ptr< Trk::Track > reallocateMaterial(const EventContext &ctx, const Trk::Track &spectrometerTrack) const
Gaudi::Property< bool > m_iterateCombinedTrackFit
Gaudi::Property< bool > m_cleanStandalone
const CaloEnergy * caloEnergyParameters(const Trk::Track *combinedTrack, const Trk::Track *muonTrack, const Trk::TrackParameters *&combinedEnergyParameters, const Trk::TrackParameters *&muonEnergyParameters) const
SG::ReadCondHandleKey< Trk::TrackingGeometry > m_trackingGeometryReadKey
std::unique_ptr< Trk::Track > addIDMSerrors(const Trk::Track *track) const
ToolHandle< Muon::IMdtDriftCircleOnTrackCreator > m_mdtRotCreator
std::vector< std::unique_ptr< const Trk::TrackStateOnSurface > > getCaloTSOSfromMatProvider(const Trk::TrackParameters &track_params, const Trk::Track &me_track) const
Helper method to retrieve the CaloTSO from the Material provider in a memory safe way.
std::unique_ptr< const Trk::RecVertex > m_beamAxis
Gaudi::Property< double > m_largeMomentumChange
std::unique_ptr< const Trk::RecVertex > m_vertex
Gaudi::Property< double > m_vertex2DSigmaZ
Gaudi::Property< double > m_largeMomentumError
std::unique_ptr< const Trk::PerigeeSurface > m_perigeeSurface
std::unique_ptr< Trk::Track > createExtrapolatedTrack(const EventContext &ctx, const Trk::Track &spectrometerTrack, const Trk::TrackParameters &parameters, Trk::ParticleHypothesis particleHypothesis, Trk::RunOutlierRemoval runOutlier, const std::vector< std::unique_ptr< const Trk::TrackStateOnSurface > > &trackStateOnSurfaces, const Trk::RecVertex *vertex, const Trk::RecVertex *mbeamAxis, const Trk::PerigeeSurface *mperigeeSurface, const Trk::Perigee *seedParameter=nullptr) const
Gaudi::Property< double > m_largePhiError
Trk::MagneticFieldProperties m_magFieldProperties
Gaudi::Property< double > m_lowMomentum
Gaudi::Property< double > m_vertex3DSigmaRPhi
virtual std::unique_ptr< Trk::Track > standaloneRefit(const EventContext &ctx, const Trk::Track &combinedTrack, const Amg::Vector3D &vec) const override
ICombinedMuonTrackBuilder interface: refit a track removing any indet measurements with optional addi...
virtual std::unique_ptr< Trk::Track > indetExtension(const EventContext &ctx, const Trk::Track &indetTrack, const Trk::MeasurementSet &spectrometerMeas, std::unique_ptr< Trk::TrackParameters > innerParameters, std::unique_ptr< Trk::TrackParameters > middleParameters, std::unique_ptr< Trk::TrackParameters > outerParameters) const override
ICombinedMuonTrackBuilder interface: build and fit indet track extended to include MS Measurement set...
void momentumUpdate(std::unique_ptr< Trk::TrackParameters > &parameters, double updatedP, bool directionUpdate=false, double deltaPhi=0., double deltaTheta=0.) const
void finalTrackBuild(const EventContext &ctx, std::unique_ptr< Trk::Track > &track) const
CombinedMuonTrackBuilder(const std::string &type, const std::string &name, const IInterface *parent)
Gaudi::Property< double > m_minEnergy
Gaudi::Property< double > m_numberSigmaFSR
std::unique_ptr< Trk::TrackParameters > extrapolatedParameters(const EventContext &ctx, bool &badlyDeterminedCurvature, const Trk::Track &spectrometerTrack, const Trk::RecVertex *mvertex, const Trk::PerigeeSurface *mperigeeSurface) const
Gaudi::Property< double > m_vertex2DSigmaRPhi
ToolHandle< Muon::IMuonClusterOnTrackCreator > m_muClusterRotCreator
Interface ID for ICombinedMuonTrackBuilder.
magnetic field properties to steer the behavior of the extrapolation
Class describing the Line to which the Perigee refers to.
Class to handle pseudo-measurements in fitters and on track objects.
Trk::RecVertex inherits from Trk::Vertex.
Definition RecVertex.h:44
Contains information about the 'fitter' of this track.
represents the track state (measurement, material, fit parameters and quality) at a surface.
Full Volume description used in Tracking, it inherits from Volume to get the geometrical structure,...
This class is a simplest representation of a vertex candidate.
Eigen::Matrix< double, 3, 1 > Vector3D
Gaudi Tools.
Ensure that the ATLAS eigen extensions are properly loaded.
std::vector< const MeasurementBase * > MeasurementSet
vector of fittable measurements
Definition FitterTypes.h:30
DataVector< const Trk::TrackStateOnSurface > TrackStates
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
bool RunOutlierRemoval
switch to toggle quality processing after fit
Definition FitterTypes.h:22
@ FullField
Field is set to be realistic, but within a given Volume.
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.
ParametersBase< TrackParametersDim, Charged > TrackParameters