ATLAS Offline Software
MuidCaloTrackStateOnSurface.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // MuidCaloTrackStateOnSurface
7 // AlgTool to allocate 3 scattering centres as TrackStateOnSurface objects
8 // to represent the Coulomb scattering and energy deposit between the InDet
9 // and MuonSpectrometer entrance.
10 //
11 // This tool retrieves the appropriate parametrized scattering centres and
12 // hybrid (measured + parametrized) energy deposit evaluation
13 // using the IMuidCaloMaterialParam and IMuidCaloEnergy interfaces
14 //
16 
17 //<<<<<< INCLUDES >>>>>>
18 
20 
21 #include <cmath>
22 #include <iomanip>
23 
25 #include "GaudiKernel/SystemOfUnits.h"
35 //<<<<<< CLASS STRUCTURE INITIALIZATION >>>>>>
36 
37 namespace Rec {
38 
39  MuidCaloTrackStateOnSurface::MuidCaloTrackStateOnSurface(const std::string& type, const std::string& name, const IInterface* parent) :
41  m_minCaloRadius(0.4 * Gaudi::Units::meter),
42  m_minRemainingEnergy(0.5 * Gaudi::Units::GeV),
43  m_paramPtCut(15.0 * Gaudi::Units::GeV) {
44  declareInterface<IMuidCaloTrackStateOnSurface>(this);
45  declareProperty("MinCaloRadius", m_minCaloRadius);
46  declareProperty("MinRemainingEnergy", m_minRemainingEnergy);
47  declareProperty("ParamPtCut", m_paramPtCut);
48  }
49 
50  //<<<<<< PUBLIC MEMBER FUNCTION DEFINITIONS >>>>>>
51 
53  ATH_MSG_DEBUG("Initializing CombinedMuonTrackStateOnSurface");
54 
55  // get the Tools
56  ATH_CHECK(m_caloEnergyDeposit.retrieve());
57  ATH_MSG_DEBUG("Retrieved tool " << m_caloEnergyDeposit);
58 
59  ATH_CHECK(m_caloEnergyParam.retrieve());
60  ATH_MSG_DEBUG("Retrieved tool " << m_caloEnergyParam);
61 
62  ATH_CHECK(m_caloMaterialParam.retrieve());
63  ATH_MSG_DEBUG("Retrieved tool " << m_caloMaterialParam);
64 
67 
68  ATH_CHECK(m_propagator.retrieve());
69  ATH_MSG_DEBUG("Retrieved tool " << m_propagator);
70 
71  return StatusCode::SUCCESS;
72  }
73 
75  ATH_MSG_INFO("finalized with " << m_count << " muons asking for calo association, out of which: " << endmsg << " "
76  << m_countInnerFailure << " failed to find the inner calo scattering plane," << endmsg << " "
77  << m_countOuterFailure << " failed to find the outer calo scattering plane," << endmsg
78  << " while another " << m_countCompleteFailure
79  << " completely failed to intersect the calorimeter." << endmsg << " "
80  << m_countArbitrarySolution << " with oscillation resolved by taking an arbitrary solution");
81 
82  return StatusCode::SUCCESS;
83  }
84 
85  std::vector<std::unique_ptr<const Trk::TrackStateOnSurface>> MuidCaloTrackStateOnSurface::caloTSOS(
86  const EventContext& ctx, const Trk::TrackParameters& parameters) const {
87  std::vector<std::unique_ptr<const Trk::TrackStateOnSurface>> caloTSOS;
88  caloTSOS.reserve(3);
89 
90  std::unique_ptr<Trk::TrackStateOnSurface> innerTS, middleTS, outerTS;
91  std::unique_ptr<const Trk::TrackParameters> inParams, midParams;
92  const Trk::TrackParameters* innerParams = nullptr;
93  const Trk::TrackParameters* middleParams = nullptr;
94  const Trk::TrackParameters* outerParams = nullptr;
95 
96  MagField::AtlasFieldCache fieldCache;
97  // Get field cache object
99  const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
100 
101  if (!fieldCondObj) {
102  ATH_MSG_ERROR("Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
103  return caloTSOS;
104  }
105  fieldCondObj->getInitializedCache(fieldCache);
106 
107  // track to calo surfaces - first decide in or outwards
108  bool trackOutwards = true;
109  if (dynamic_cast<const Trk::PerigeeSurface*>(&parameters.associatedSurface())) {
110  if (parameters.associatedSurface().center().perp() > 0.5 * Gaudi::Units::meter) trackOutwards = false;
111  } else if (std::abs(parameters.position().z()) > 4.0 * Gaudi::Units::meter ||
112  parameters.position().perp() > 1.2 * Gaudi::Units::meter) {
113  trackOutwards = false;
114  }
115 
116  if (trackOutwards) // forward tracking
117  {
118  innerTS = innerTSOS(ctx, parameters);
119  if (innerTS) {
120  innerParams = innerTS->trackParameters();
121  if (innerParams->momentum().dot(innerParams->position()) > 0.) {
122  midParams = getExtrapolatedParameters(ctx, *innerParams, SurfaceLayer::Middle);
123  middleParams = midParams.get();
124  } else {
125  ATH_MSG_VERBOSE(" quit as looper " << innerParams);
126  }
127  if (middleParams) {
128  // get calo energy deposit
129  middleTS = m_caloEnergyParam->trackStateOnSurface(ctx, *midParams, innerParams, outerParams);
130  if (!middleTS) { middleParams = nullptr; }
131  }
132 
133  if (middleParams) {
134  // apply energy deposit to give outgoing middleParams,
135  // note the iteration required to get optimum energy correction
136  std::unique_ptr<const Trk::TrackParameters> params;
137  for (int iterate = 0; iterate != 2; ++iterate) {
138  if (!middleTS) break;
139 
140  const Trk::MaterialEffectsOnTrack* meot =
141  dynamic_cast<const Trk::MaterialEffectsOnTrack*>(middleTS->materialEffectsOnTrack());
142  const double energyDeposit = meot ? meot->energyLoss()->deltaE() : 0.;
143  middleParams = middleTS->trackParameters();
144  Amg::Vector3D momentum = middleParams->momentum();
145  double correctedEnergy = innerParams->momentum().mag() - energyDeposit;
146 
147  // fail potential loopers
148  if (fieldCache.toroidOn() && correctedEnergy < m_minRemainingEnergy) {
149  middleTS.reset();
150  ATH_MSG_VERBOSE(" fail tracking outwards: momentum " << momentum.mag() / Gaudi::Units::GeV
151  << " energyDeposit " << energyDeposit / Gaudi::Units::GeV
152  << " correctedEnergy "
153  << correctedEnergy / Gaudi::Units::GeV << " (GeV units)");
154  break;
155  }
156  // toroid off: set floor for remaining energy
157  if (correctedEnergy < m_minRemainingEnergy) {
159  } else {
160  momentum *= correctedEnergy / momentum.mag();
161  }
162 
163  const Trk::CylinderSurface* cylinder =
164  dynamic_cast<const Trk::CylinderSurface*>(&middleParams->associatedSurface());
165  if (cylinder) {
166  params =
167  std::make_unique<Trk::AtaCylinder>(middleParams->position(), momentum, middleParams->charge(), *cylinder);
168  } else {
169  const Trk::DiscSurface* disc = dynamic_cast<const Trk::DiscSurface*>(&middleParams->associatedSurface());
170  if (disc) {
171  params = std::make_unique<Trk::AtaDisc>(middleParams->position(), momentum, middleParams->charge(), *disc);
172  } else {
173  ATH_MSG_WARNING(" caloTSOS: unexpected TrackParameters type ");
174  }
175  }
176 
177  // delete middle and outer,
178  // then recompute with parameters as for backwards tracking
179  if (!params) {
180  middleTS.reset();
181  } else if (params->momentum().perp() > m_paramPtCut) {
182  middleTS = m_caloEnergyDeposit->trackStateOnSurface(ctx, *params, innerParams, outerParams);
183  } else {
184  middleTS = m_caloEnergyParam->trackStateOnSurface(ctx, *params, innerParams, outerParams);
185  }
187  if (middleTS) { outerTS = outerTSOS(ctx, *params); }
188  }
189  if (!middleTS) { ATH_MSG_VERBOSE(" fail tracking outwards: no intersect at middle surface"); }
190  }
191  } else {
192  ATH_MSG_VERBOSE(" fail tracking ouwards: no intersect at inner surface");
193  }
194  } else // backward tracking
195  {
196  outerTS = outerTSOS(ctx, parameters);
197  if (outerTS) {
198  outerParams = outerTS->trackParameters();
199  midParams = getExtrapolatedParameters(ctx, *outerParams, SurfaceLayer::Middle);
200  middleParams = midParams.get();
201  if (middleParams) {
202  inParams = getExtrapolatedParameters(ctx, *midParams, SurfaceLayer::Inner);
203  innerParams = inParams.get();
204  if (inParams) {
205  // get calo energy deposit
206  if (middleParams->momentum().perp() > m_paramPtCut) {
207  middleTS = m_caloEnergyDeposit->trackStateOnSurface(ctx, *middleParams, inParams.get(), outerParams);
208  } else {
209  middleTS = m_caloEnergyParam->trackStateOnSurface(ctx, *middleParams, inParams.get(), outerParams);
210  }
211  // apply energy deposit
212  const Trk::MaterialEffectsOnTrack* meot =
213  middleTS ? dynamic_cast<const Trk::MaterialEffectsOnTrack*>(middleTS->materialEffectsOnTrack()) : nullptr;
214  const double energyDeposit = meot ? meot->energyLoss()->deltaE() : 0.;
215  Amg::Vector3D momentum = middleParams->momentum();
216  double correctedEnergy = momentum.mag() + energyDeposit;
217 
218  // fail potential loopers
219  if (correctedEnergy < 0.5 * Gaudi::Units::GeV) {
220  middleTS.reset();
221  ATH_MSG_VERBOSE(" fail tracking inwards: momentum " << momentum.mag() / Gaudi::Units::GeV << " energyDeposit "
223  << " correctedEnergy "
224  << correctedEnergy / Gaudi::Units::GeV << " (GeV units)");
225  } else {
226  momentum *= 1. + energyDeposit / momentum.mag();
227  std::unique_ptr<const Trk::TrackParameters> params;
228  const Trk::CylinderSurface* cylinder =
229  dynamic_cast<const Trk::CylinderSurface*>(&middleParams->associatedSurface());
230  std::optional<AmgSymMatrix(5)> cov =
231  middleParams->covariance() ? std::optional<AmgSymMatrix(5)>(*middleParams->covariance()) : std::nullopt;
232  if (cylinder) {
233  params = std::make_unique<Trk::AtaCylinder>(middleParams->position(), momentum, middleParams->charge(),
234  *cylinder, cov);
235  } else {
236  const Trk::DiscSurface* disc = dynamic_cast<const Trk::DiscSurface*>(&middleParams->associatedSurface());
237  if (disc) {
238  params = std::make_unique<Trk::AtaDisc>(middleParams->position(), momentum, middleParams->charge(),
239  *disc, cov);
240  } else {
241  ATH_MSG_WARNING(" caloTSOS: unexpected TrackParameters type ");
242  }
243  }
244  if (params && middleTS) { innerTS = innerTSOS(ctx, *params); }
245  }
246  } else {
247  ATH_MSG_VERBOSE(" fail tracking inwards: no intersect at inner surface");
248  }
249  } else {
250  ATH_MSG_VERBOSE(" fail tracking inwards: no intersect at middle surface");
251  }
252  }
253  }
254 
255  if (innerTS)
256  caloTSOS.push_back(std::move(innerTS));
257  else
259  if (middleTS) caloTSOS.push_back(std::move(middleTS));
260  if (outerTS)
261  caloTSOS.push_back(std::move(outerTS));
262  else
264 
265  // keep some statistics
266  ++m_count;
267 
268  if (caloTSOS.empty()) { ++m_countCompleteFailure; }
269  return caloTSOS;
270  }
271  std::unique_ptr<Trk::TrackStateOnSurface> MuidCaloTrackStateOnSurface::innerTSOS(const EventContext& ctx,
272  const Trk::TrackParameters& parameters) const {
273  std::unique_ptr<const Trk::TrackParameters> extrapolation = getExtrapolatedParameters(ctx, parameters, SurfaceLayer::Inner);
274  if (!extrapolation || extrapolation->position().perp() < m_minCaloRadius) {
275  ATH_MSG_DEBUG(" innerTSOS: extrapolation fails ");
276  return nullptr;
277  }
278  return m_caloMaterialParam->trackStateOnSurface(*extrapolation);
279  }
280  std::unique_ptr<Trk::TrackStateOnSurface> MuidCaloTrackStateOnSurface::outerTSOS(const EventContext& ctx,
281  const Trk::TrackParameters& parameters) const {
282  std::unique_ptr<const Trk::TrackParameters> extrapolation = getExtrapolatedParameters(ctx, parameters, SurfaceLayer::Outer);
283  if (!extrapolation || extrapolation->position().perp() < m_minCaloRadius) {
284  ATH_MSG_DEBUG(" outerTSOS: extrapolation fails ");
285  return nullptr;
286  }
287  return m_caloMaterialParam->trackStateOnSurface(*extrapolation);
288  }
289  std::unique_ptr<Trk::TrackStateOnSurface> MuidCaloTrackStateOnSurface::middleTSOS(const EventContext& ctx,
290  const Trk::TrackParameters& middleParams,
291  const Trk::TrackParameters* innerParams,
292  const Trk::TrackParameters* outerParams) const {
293  std::unique_ptr<const Trk::TrackParameters> extrapolation = getExtrapolatedParameters(ctx, middleParams, SurfaceLayer::Middle);
294 
295  if (!extrapolation || extrapolation->position().perp() < m_minCaloRadius) {
296  ATH_MSG_DEBUG(" middleTSOS: extrapolation fails ");
297  return nullptr;
298  }
299  std::unique_ptr<Trk::TrackStateOnSurface> TSOS;
300  if (extrapolation->momentum().perp() > m_paramPtCut) {
301  TSOS = m_caloEnergyDeposit->trackStateOnSurface(ctx, *extrapolation, innerParams, outerParams);
302  } else {
303  TSOS = m_caloEnergyParam->trackStateOnSurface(ctx, *extrapolation, innerParams, outerParams);
304  }
305  return TSOS;
306  }
307 
308  //<<<<<< PRIVATE MEMBER FUNCTION DEFINITIONS >>>>>>
309 
310  const Trk::Surface* MuidCaloTrackStateOnSurface::getCaloSurface(const double eta, const short layer) const {
311  if (layer == SurfaceLayer::Inner) return m_caloMaterialParam->innerSurface(eta);
312  if (layer == SurfaceLayer::Middle) return m_caloMaterialParam->middleSurface(eta);
313  if (layer == SurfaceLayer::Outer) return m_caloMaterialParam->outerSurface(eta);
314  ATH_MSG_WARNING("Invalid layer id given " << layer);
315  return nullptr;
316  }
317  std::unique_ptr<const Trk::TrackParameters> MuidCaloTrackStateOnSurface::getExtrapolatedParameters(
318  const EventContext& ctx, const Trk::TrackParameters& parameters, const short layer) const {
319  // will need to know whether forward or back tracking
320  Trk::PropDirection momentumDirection = Trk::alongMomentum;
321  Trk::PropDirection oppositeDirection = Trk::oppositeMomentum;
322  Trk::PropDirection propDirection = Trk::anyDirection;
323  const std::string surf_layer_str = layer == SurfaceLayer::Inner ? "Inner" : (layer == SurfaceLayer::Middle ? "Middle" : "Outer");
324  // initial surface at track eta -
325  // using position or direction according to distance from origin
326  double startingPhi = 0.;
327  const Trk::Surface* surface = nullptr;
329  startingPhi = parameters.momentum().phi();
330  surface = getCaloSurface(parameters.momentum().eta(), layer);
331  } else {
332  startingPhi = parameters.position().phi();
333  surface = getCaloSurface(parameters.position().eta(), layer);
334  if (parameters.momentum().dot(parameters.position()) < 0.) {
335  momentumDirection = Trk::oppositeMomentum;
336  oppositeDirection = Trk::alongMomentum;
337  }
338  }
339  if (!surface) return nullptr;
340 
341  // extrapolate to calo surface (take care to get correct cylinder intersect)
342  unsigned extrapolations = 0;
343  if (surface->type() == Trk::SurfaceType::Cylinder) {
344  if (parameters.position().perp() < surface->globalReferencePoint().perp()) {
345  propDirection = momentumDirection;
346  } else {
347  propDirection = oppositeDirection;
348  }
349  }
350  // tidy up ownership later
351  std::unique_ptr<const Trk::TrackParameters> extrapolation{
352  m_propagator->propagate(ctx, parameters, *surface, propDirection, false, m_magFieldProperties, Trk::nonInteracting)};
353  if (!extrapolation) return nullptr;
354 
355  // phi flip means track has crossed beam-axis (so quit)
356  double deltaPhi = xAOD::P4Helpers::deltaPhi(extrapolation->position().phi(), startingPhi);
357  if (std::abs(deltaPhi) > M_PI_2) { return nullptr; }
358 
359  // also quit wrong rz-direction in endcap
360  if (surface->type() != Trk::SurfaceType::Cylinder) {
361  double signRZ = (extrapolation->position().perp() - parameters.position().perp()) *
362  (extrapolation->position().z() - parameters.position().z());
363  if (signRZ * extrapolation->position().z() < 0.) {
364  ATH_MSG_VERBOSE(" wrong way in endcap ");
365  return nullptr;
366  }
367  }
368 
369  // iterate if extrapolated surface is different
370  bool restart = false;
371  const Trk::Surface* oldSurface = surface;
372  const Trk::Surface* extrapolatedSurface = getCaloSurface(extrapolation->position().eta(), layer);
376  std::unique_ptr<const Trk::Surface> reset_surface;
377  while (++extrapolations < 5 && extrapolatedSurface != oldSurface) {
378  // take care to get correct solution for cylinder when starting from inside
379  if (surface->type() == Trk::SurfaceType::Cylinder) {
380  if (extrapolation->position().perp() < surface->globalReferencePoint().perp()) {
381  propDirection = momentumDirection;
382  } else {
383  propDirection = oppositeDirection;
384  }
385  } else {
386  propDirection = Trk::anyDirection;
387  }
388  std::unique_ptr<const Trk::TrackParameters> oldParameters = std::move(extrapolation);
389  extrapolation = m_propagator->propagate(ctx, *oldParameters, *extrapolatedSurface, propDirection, false, m_magFieldProperties,
391  if (!extrapolation) {
392  // restart from input parameters (if not already done)
393  // trap no solution after restart
394  if ((*oldParameters) == parameters) {
395  ATH_MSG_VERBOSE(" innerParameters: extrap fails ");
396  return nullptr;
397  }
398  if (restart) {
399  ATH_MSG_DEBUG(surf_layer_str << " Parameters: oscillating => arbitrary solution chosen");
401  extrapolation = std::move(oldParameters);
402  reset_surface.reset(extrapolation->associatedSurface().clone());
403  extrapolatedSurface = reset_surface.get();
404  surface = extrapolatedSurface;
405  restart = false;
406  } else {
407  ATH_MSG_VERBOSE(surf_layer_str << " Parameters: restart extrap after " << extrapolations << " extrapolations");
408  restart = true;
409  extrapolations -= 2;
410  extrapolation = parameters.uniqueClone();
411  surface = oldSurface;
412  }
413  } else {
414  // update surface
415  ATH_MSG_DEBUG(surf_layer_str << " Parameters: Extrapolation succeeded go to next iteration");
416  oldSurface = surface;
417  surface = extrapolatedSurface;
418  extrapolatedSurface = getCaloSurface(extrapolation->position().eta(), layer);
419  }
420  }
421 
422  // final check for phi flip
423  deltaPhi = xAOD::P4Helpers::deltaPhi(extrapolation->position().phi(), startingPhi);
424  if (std::abs(deltaPhi) > M_PI_2) { return nullptr; }
425 
426  ATH_MSG_VERBOSE(surf_layer_str << " Parameters: success after " << extrapolations << " extrapolation step(s). "
427  << std::setiosflags(std::ios::fixed) << " Intersection at: r,phi,z " << std::setw(7)
428  << std::setprecision(1) << extrapolation->position().perp() << std::setw(7) << std::setprecision(3)
429  << extrapolation->position().phi() << std::setw(8) << std::setprecision(1)
430  << extrapolation->position().z() << " Direction: eta,phi " << std::setw(7) << std::setprecision(3)
431  << extrapolation->momentum().eta() << std::setw(7) << std::setprecision(3)
432  << extrapolation->momentum().phi());
433 
434  return extrapolation;
435  }
436 
438  // estimate eta,phi for the track intersect with the calo from the track direction when the
439  // parameters are expressed near the beam-line, further out it's better to use the track position
440  double parameterDistance = parameters.position().mag();
441  if (dynamic_cast<const Trk::PerigeeSurface*>(&parameters.associatedSurface()))
442  parameterDistance = parameters.associatedSurface().center().perp();
443 
444  return parameterDistance < 0.5 * Gaudi::Units::meter;
445  }
446 
447 } // namespace Rec
Trk::anyDirection
@ anyDirection
Definition: PropDirection.h:22
Rec::MuidCaloTrackStateOnSurface::m_caloEnergyDeposit
ToolHandle< Rec::IMuidCaloEnergy > m_caloEnergyDeposit
Definition: MuidCaloTrackStateOnSurface.h:85
Trk::TrackStateOnSurface::trackParameters
const TrackParameters * trackParameters() const
return ptr to trackparameters const overload
EnergyLoss.h
Rec::MuidCaloTrackStateOnSurface::m_countInnerFailure
std::atomic_int m_countInnerFailure
Definition: MuidCaloTrackStateOnSurface.h:121
GeV
#define GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:17
StraightLineSurface.h
TrackParameters.h
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
PerigeeSurface.h
Trk::ParametersBase::charge
double charge() const
Returns the charge.
AtlasFieldCacheCondObj
Definition: AtlasFieldCacheCondObj.h:19
Rec::MuidCaloTrackStateOnSurface::initialize
StatusCode initialize() override
Definition: MuidCaloTrackStateOnSurface.cxx:52
Trk::PerigeeSurface
Definition: PerigeeSurface.h:43
Trk::ParametersBase::position
const Amg::Vector3D & position() const
Access method for the position.
Trk::oppositeMomentum
@ oppositeMomentum
Definition: PropDirection.h:21
xAODP4Helpers.h
Trk::ParametersBase::associatedSurface
virtual const Surface & associatedSurface() const override=0
Access to the Surface associated to the Parameters.
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
xAOD::deltaPhi
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
Definition: L2StandAloneMuon_v1.cxx:160
Rec::MuidCaloTrackStateOnSurface::m_minCaloRadius
double m_minCaloRadius
Definition: MuidCaloTrackStateOnSurface.h:113
Rec::MuidCaloTrackStateOnSurface::m_countOuterFailure
std::atomic_int m_countOuterFailure
Definition: MuidCaloTrackStateOnSurface.h:122
MuidCaloTrackStateOnSurface.h
plotBeamSpotVxVal.cov
cov
Definition: plotBeamSpotVxVal.py:201
xAOD::P4Helpers::deltaPhi
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[
Definition: xAODP4Helpers.h:69
Rec::MuidCaloTrackStateOnSurface::getCaloSurface
const Trk::Surface * getCaloSurface(const double eta, const short layer) const
Definition: MuidCaloTrackStateOnSurface.cxx:310
Rec::MuidCaloTrackStateOnSurface::outerTSOS
std::unique_ptr< Trk::TrackStateOnSurface > outerTSOS(const EventContext &ctx, const Trk::TrackParameters &parameters) const override
Definition: MuidCaloTrackStateOnSurface.cxx:280
Trk::alongMomentum
@ alongMomentum
Definition: PropDirection.h:20
Trk::DiscSurface
Definition: DiscSurface.h:54
Trk::Surface::globalReferencePoint
virtual const Amg::Vector3D & globalReferencePoint() const
Returns a global reference point on the surface, for PlaneSurface, StraightLineSurface,...
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
MagField::AtlasFieldCache::toroidOn
bool toroidOn() const
Rec::MuidCaloTrackStateOnSurface::m_countArbitrarySolution
std::atomic_int m_countArbitrarySolution
Definition: MuidCaloTrackStateOnSurface.h:119
Rec::MuidCaloTrackStateOnSurface::m_count
std::atomic_int m_count
Definition: MuidCaloTrackStateOnSurface.h:118
AmgSymMatrix
#define AmgSymMatrix(dim)
Definition: EventPrimitives.h:50
Trk::energyDeposit
@ energyDeposit
Definition: MeasurementType.h:32
MagneticFieldProperties.h
MaterialEffectsOnTrack.h
GeoPrimitives.h
Trk::MaterialEffectsOnTrack
represents the full description of deflection and e-loss of a track in material.
Definition: MaterialEffectsOnTrack.h:40
Trk::PropDirection
PropDirection
Definition: PropDirection.h:19
python.SystemOfUnits.meter
int meter
Definition: SystemOfUnits.py:61
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ParticleGun_EoverP_Config.momentum
momentum
Definition: ParticleGun_EoverP_Config.py:63
Trk::TrackStateOnSurface::materialEffectsOnTrack
const MaterialEffectsBase * materialEffectsOnTrack() const
return material effects const overload
Rec
Name: MuonSpContainer.h Package : offline/Reconstruction/MuonIdentification/muonEvent.
Definition: FakeTrackBuilder.h:10
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Rec::MuidCaloTrackStateOnSurface::middleTSOS
std::unique_ptr< Trk::TrackStateOnSurface > middleTSOS(const EventContext &ctx, const Trk::TrackParameters &middleParameters, const Trk::TrackParameters *innerParameters, const Trk::TrackParameters *outerParameters) const override
IMuidCaloTrackStateOnSurface interface: to get the energy deposit TSOS representing the calorimeter.
Definition: MuidCaloTrackStateOnSurface.cxx:289
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
Trk::CylinderSurface
Definition: CylinderSurface.h:55
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
Trk::EnergyLoss::deltaE
double deltaE() const
returns the
test_pyathena.parent
parent
Definition: test_pyathena.py:15
Rec::MuidCaloTrackStateOnSurface::MuidCaloTrackStateOnSurface
MuidCaloTrackStateOnSurface(const std::string &type, const std::string &name, const IInterface *parent)
Definition: MuidCaloTrackStateOnSurface.cxx:39
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Rec::MuidCaloTrackStateOnSurface::caloTSOS
std::vector< std::unique_ptr< const Trk::TrackStateOnSurface > > caloTSOS(const EventContext &ctx, const Trk::TrackParameters &parameters) const override
IMuidCaloTrackStateOnSurface interface: to get the 3 scattering and energy deposit TSOS'es representi...
Definition: MuidCaloTrackStateOnSurface.cxx:85
Rec::MuidCaloTrackStateOnSurface::m_caloEnergyParam
ToolHandle< Rec::IMuidCaloEnergy > m_caloEnergyParam
Definition: MuidCaloTrackStateOnSurface.h:90
Trk::ParametersBase
Definition: ParametersBase.h:55
Rec::MuidCaloTrackStateOnSurface::useEtaPhiFromDirection
static bool useEtaPhiFromDirection(const Trk::TrackParameters &parameters)
Definition: MuidCaloTrackStateOnSurface.cxx:437
Rec::MuidCaloTrackStateOnSurface::m_fieldCacheCondObjInputKey
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
Definition: MuidCaloTrackStateOnSurface.h:109
Rec::MuidCaloTrackStateOnSurface::m_caloMaterialParam
ToolHandle< Rec::IMuidCaloMaterialParam > m_caloMaterialParam
Definition: MuidCaloTrackStateOnSurface.h:95
Athena::Units
Definition: Units.h:45
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
Trk::nonInteracting
@ nonInteracting
Definition: ParticleHypothesis.h:25
Rec::MuidCaloTrackStateOnSurface::finalize
StatusCode finalize() override
Definition: MuidCaloTrackStateOnSurface.cxx:74
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
Trk::MaterialEffectsOnTrack::energyLoss
const EnergyLoss * energyLoss() const
returns the energy loss object.
Rec::MuidCaloTrackStateOnSurface::m_propagator
ToolHandle< Trk::IPropagator > m_propagator
Definition: MuidCaloTrackStateOnSurface.h:100
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Rec::MuidCaloTrackStateOnSurface::innerTSOS
std::unique_ptr< Trk::TrackStateOnSurface > innerTSOS(const EventContext &ctx, const Trk::TrackParameters &parameters) const override
IMuidCaloTrackStateOnSurface interface: to get individually the scattering TSOS'es representing the c...
Definition: MuidCaloTrackStateOnSurface.cxx:271
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
Rec::MuidCaloTrackStateOnSurface::getExtrapolatedParameters
std::unique_ptr< const Trk::TrackParameters > getExtrapolatedParameters(const EventContext &ctx, const Trk::TrackParameters &parameters, const short layer) const
Definition: MuidCaloTrackStateOnSurface.cxx:317
MagField::AtlasFieldCache
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
Definition: AtlasFieldCache.h:43
Trk::SurfaceType::Cylinder
@ Cylinder
Gaudi
=============================================================================
Definition: CaloGPUClusterAndCellDataMonitorOptions.h:273
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
Rec::MuidCaloTrackStateOnSurface::m_paramPtCut
double m_paramPtCut
Definition: MuidCaloTrackStateOnSurface.h:115
Rec::MuidCaloTrackStateOnSurface::m_minRemainingEnergy
double m_minRemainingEnergy
Definition: MuidCaloTrackStateOnSurface.h:114
PrepareReferenceFile.iterate
def iterate(ROOT.TDirectory thisdir, ROOT.TDirectory targetdir, str prefix, typing.Pattern regex, bool excludeTrees)
Definition: PrepareReferenceFile.py:10
PowhegControl_ttFCNC_NLO.params
params
Definition: PowhegControl_ttFCNC_NLO.py:226
AthAlgTool
Definition: AthAlgTool.h:26
Rec::MuidCaloTrackStateOnSurface::m_magFieldProperties
Trk::MagneticFieldProperties m_magFieldProperties
Definition: MuidCaloTrackStateOnSurface.h:106
TrackSurfaceIntersection.h
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:75
Trk::Surface::type
constexpr virtual SurfaceType type() const =0
Returns the Surface type to avoid dynamic casts.
TrackStateOnSurface.h
Rec::MuidCaloTrackStateOnSurface::m_countCompleteFailure
std::atomic_int m_countCompleteFailure
Definition: MuidCaloTrackStateOnSurface.h:120