ATLAS Offline Software
Navigator.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // Navigator.cxx, (c) ATLAS Detector Software
8 
9 // Trk inlcudes
10 #include "TrkExTools/Navigator.h"
19 #include "TrkSurfaces/Surface.h"
27 #include "TrkTrack/Track.h"
28 // Data Model
30 // Amg
33 
34 #include <exception>
35 namespace{
36 const Trk::MagneticFieldProperties s_zeroMagneticField(Trk::NoField);
37 }
38 
39 // constructor
40 Trk::Navigator::Navigator(const std::string &t, const std::string &n, const IInterface *p) :
41  AthAlgTool(t, n, p),
42  m_trackingGeometryName("AtlasTrackingGeometry"),
43  m_insideVolumeTolerance(1. * Gaudi::Units::mm),
44  m_isOnSurfaceTolerance(0.005 * Gaudi::Units::mm),
45  m_useStraightLineApproximation(false),
46  m_searchWithDistance(true),
47  m_fastField(false)
48  {
49  declareInterface<INavigator>(this);
50  // steering of algorithms
51  declareProperty("InsideVolumeTolerance", m_insideVolumeTolerance);
52  declareProperty("IsOnSurfaceTolerance", m_isOnSurfaceTolerance);
53  declareProperty("UseStraightLineApproximation", m_useStraightLineApproximation);
54  // closest parameter search with new Surface::distance method
55  declareProperty("SearchWithDistanceToSurface", m_searchWithDistance);
56  // Magnetic field properties
57  declareProperty("MagneticFieldProperties", m_fastField);
58  }
59 
60 
61 // initialize
64  //We can use conditions when the key is not empty
65  m_useConditions=!m_trackingGeometryReadKey.key().empty();
66  // get the TrackingGeometry
67  if (!m_useConditions) {
68  if (m_trackingGeometrySvc.retrieve().isSuccess()) {
69  ATH_MSG_DEBUG("Successfully retrieved " << m_trackingGeometrySvc);
70  m_trackingGeometryName = m_trackingGeometrySvc->trackingGeometryName();
71  } else {
72  ATH_MSG_WARNING("Couldn't retrieve " << m_trackingGeometrySvc << ". ");
73  ATH_MSG_WARNING(" -> Trying to retrieve default '"
74  << m_trackingGeometryName << "' from DetectorStore.");
75  }
76  }
77 
78  ATH_CHECK(m_trackingGeometryReadKey.initialize(m_useConditions));
79 
80  m_fieldProperties = m_fastField
83 
84  return StatusCode::SUCCESS;
85 }
86 
88 Trk::Navigator::volume(const EventContext& ctx, const Amg::Vector3D& gp) const
89 {
90  return (trackingGeometry(ctx)->lowestTrackingVolume(gp));
91 }
92 
94 Trk::Navigator::highestVolume(const EventContext& ctx) const
95 {
96  return (trackingGeometry(ctx)->highestTrackingVolume());
97 }
98 
100 Trk::Navigator::nextBoundarySurface(const EventContext& ctx,
101  const Trk::IPropagator& prop,
102  const Trk::TrackParameters& parms,
103  Trk::PropDirection dir) const
104 {
105  const Trk::TrackingVolume* trackingVolume = volume(ctx,parms.position());
106  if (trackingVolume) {
107  return (nextBoundarySurface(ctx,prop, parms, dir, *trackingVolume));
108  }
109  return nullptr;
110 }
111 
113 Trk::Navigator::nextBoundarySurface(const EventContext& ctx,
114  const Trk::IPropagator& prop,
115  const Trk::TrackParameters& parms,
117  const Trk::TrackingVolume& vol) const
118 {
119  // get the surface accessor
121  parms.position(), dir * parms.momentum().normalized());
122  // initialize the currentBoundary surface
123  const Trk::BoundarySurface<Trk::TrackingVolume>* currentBoundary = nullptr;
124  bool outsideVolume = surfAcc.inverseRetrieval();
125  // attempt counter
126  int tryBoundary = 0;
127 
128  // set the prop direction according to inverseRetrieval result
129  Trk::PropDirection searchDir = dir;
130  if (outsideVolume) {
131  searchDir =
133  }
134 
135  // debug version
136  ATH_MSG_VERBOSE("g [N] Starting parameters are :" << parms);
137 
138  // loop over the the boundary surfaces according to the accessor type
139  for (const Trk::ObjectAccessor::value_type& surface_id : surfAcc) {
140  ++tryBoundary;
141  // ----------------- output to screen if outputLevel() says so --------
142  ATH_MSG_VERBOSE(" [N] " << tryBoundary << ". try - BoundarySurface "
143  << surface_id << " of Volume: '"
144  << vol.volumeName() << "'.");
145  // get the boundary Surface according to the surfaceAccessor
146  currentBoundary = vol.boundarySurface(surface_id);
147  const Trk::Surface& currentSurface =
148  currentBoundary->surfaceRepresentation();
149 
150  // do either RungeKutta (always after first unsuccessful try) or straight
151  // line
152  auto trackPar =
153  (!m_useStraightLineApproximation || tryBoundary > 1)
154  ? prop.propagateParameters(
155  ctx, parms, currentSurface, searchDir, true, m_fieldProperties)
156  : prop.propagateParameters(
157  ctx, parms, currentSurface, searchDir, true, s_zeroMagneticField);
158 
159  if (trackPar) {
161  " [N] --> next BoundarySurface found with Parameters: " << *trackPar);
162  return currentBoundary;
163  }
164  }
165  return nullptr;
166 }
167 
169 Trk::Navigator::nextTrackingVolume(const EventContext& ctx,
170  const Trk::IPropagator& prop,
171  const Trk::TrackParameters& parms,
173  const Trk::TrackingVolume& vol) const
174 {
175 
176  bool first = false;
177  bool second = false;
178 
179  // ---------------------------------------------------
180  // get the object accessor from the Volume
182  parms.position(), dir * parms.momentum().normalized());
183  // the object accessor already solved the outside question
184  bool outsideVolume = surfAcc.inverseRetrieval();
185  // initialize the boundary pointer / tracking volume pointer
186  const Trk::BoundarySurface<Trk::TrackingVolume>* currentBoundary = nullptr;
187  const Trk::TrackingVolume* nextVolume = nullptr;
188 
189  // debug version
190  ATH_MSG_VERBOSE(" [N] Starting parameters are : " << parms);
191  ATH_MSG_VERBOSE(" [N] This corresponds to [r,z] = [ "
192  << parms.position().perp() << ", " << parms.position().z()
193  << "]");
194  ATH_MSG_VERBOSE(" [N] Boundary Surface accessor : " << surfAcc);
195 
196  // set the prop direction according to inverseRetrieval result
197  Trk::PropDirection searchDir = dir;
198  if (outsideVolume) {
199  ATH_MSG_VERBOSE(" [N] Parameters have been flagged as being outside !");
200  searchDir =
202  }
203 
204  // loop over boundary surfaces
205  int tryBoundary = 0;
206 
207  for (const Trk::ObjectAccessor::value_type& surface_id : surfAcc) {
208  ++tryBoundary;
209  // get the boundary surface associated to the surfaceAccessor
210  currentBoundary = vol.boundarySurface(surface_id);
211 
212  // ----------------- output to screen if outputLevel() says so --------
213  if (!currentBoundary) {
214  ATH_MSG_WARNING(" [N] " << tryBoundary << ". try - BoundarySurface "
215  << surface_id << " of Volume: '"
216  << vol.volumeName() << "' NOT FOUND.");
217  continue;
218  }
219  ATH_MSG_VERBOSE(" [N] " << tryBoundary << ". try - BoundarySurface "
220  << surface_id << " of Volume: '"
221  << vol.volumeName() << "'.");
222 
223 
224  const Trk::Surface& currentSurface =
225  currentBoundary->surfaceRepresentation();
226  // try the propagation
227  std::unique_ptr<Trk::TrackParameters> trackPar = nullptr;
228  // do either RungeKutta (always after first unsuccessful try) or straight
229  // line
230  if (!currentSurface.isOnSurface(parms.position(), true, 0., 0.)) {
231  trackPar =
232  (!m_useStraightLineApproximation || tryBoundary > 1)
233  ? prop.propagateParameters(
234  ctx, parms, currentSurface, searchDir, true, m_fieldProperties)
235  : prop.propagateParameters(
236  ctx, parms, currentSurface, searchDir, true, s_zeroMagneticField);
237  } else {
238  trackPar.reset(parms.clone()); //to be revisited
239  }
240  if (trackPar) {
241  // the next volume pointer
242  nextVolume = currentBoundary->attachedVolume(
243  trackPar->position(), trackPar->momentum().normalized(), dir);
244  return {nextVolume, std::move(trackPar),
245  Trk::BoundarySurfaceFace(surface_id)};
246  }
247 
248  // ---------------------------------------------------
249  if (!first && searchDir == Trk::alongMomentum) {
250  first = true;
251  } else if (!second && searchDir == Trk::alongMomentum) {
252  second = true;
253  } else if (searchDir == Trk::alongMomentum) {
254  } else if (!first && searchDir == Trk::oppositeMomentum) {
255  first = true;
256  } else if (!second && searchDir == Trk::oppositeMomentum) {
257  second = true;
258  } else if (searchDir == Trk::oppositeMomentum) {
259  }
260  // ---------------------------------------------------
261  }
262  // return what you have : no idea
263  return {nullptr, nullptr};
264 }
265 
266 bool
268  const Trk::TrackingVolume* vol,
270  const Trk::TrackingVolume*& nextVol,
271  double tol) const
272 {
273  bool isAtBoundary = false;
274  nextVol = nullptr;
275  if (!vol) {
276  return isAtBoundary;
277  }
278  const auto& bounds = vol->boundarySurfaces();
279  for (unsigned int ib = 0; ib < bounds.size(); ib++) {
280  const Trk::Surface &surf = bounds[ib]->surfaceRepresentation();
281  if (surf.isOnSurface(parms->position(), true, tol, tol)) {
282 
283  // sanity check to enforce the desired tolerance
285  dir * parms->momentum().unit());
286  if (distSol.currentDistance(false) < tol && distSol.numberOfSolutions() > 0) {
287  isAtBoundary = true;
288  const Trk::TrackingVolume* attachedVol =
289  (bounds[ib])
290  ->attachedVolume(parms->position(), parms->momentum(), dir);
291  if (!nextVol && attachedVol) {
292  nextVol = attachedVol;
293  }
294  // double good solution indicate tangential intersection : revert the attached volumes
295  if (distSol.numberOfSolutions() > 1 && std::abs(distSol.first()) < tol && std::abs(distSol.second()) < tol) {
296  if (!nextVol) {
297  ATH_MSG_WARNING("Tracking volume "
298  << (*vol)
299  << " has loose ends. because the navigation of "
300  << std::endl
301  << (*parms) << std::endl
302  << " failed. Please consult the experts or have a "
303  "look at ATLASRECTS-7147");
304  continue;
305  }
306  //surfing the beampipe seems to happen particularly often in a Trigger test.
307  //see https://its.cern.ch/jira/browse/ATR-24234
308  //in this case, I downgrade the 'warning' to 'verbose'
309  const bool surfingTheBeamPipe = (vol->geometrySignature() == Trk::BeamPipe) or (nextVol->geometrySignature() == Trk::BeamPipe);
310  if (not surfingTheBeamPipe) {
311  ATH_MSG_WARNING("navigator detects tangential intersection: switch of volumes reverted ");
312  } else {
313  ATH_MSG_VERBOSE("navigator detects particle entering and re-entering the beampipe");
314  }
315  if (nextVol and (not surfingTheBeamPipe)) {
316  ATH_MSG_WARNING(vol->volumeName() << "->" << nextVol->volumeName() << "->" << vol->volumeName());
317  }
318  isAtBoundary = false;
319  // revert attached volume
320  nextVol = vol;
321  }
322  }
323  }
324  }
325 
326  return isAtBoundary;
327 }
328 
331  const Trk::Surface& sf) const
332 {
333 
334  // search with dedicated algorithms for cylinder/sl/perigee
335  // surface
336  const Trk::TrackParameters *closestTrackParameters = nullptr;
337 
338  // policy change --- only measured parameters are taken
340  std::vector<const Trk::TrackParameters *> measuredParameters;
341  measuredParameters.reserve(trk.trackParameters()->size());
342  for (; it != trk.trackParameters()->end(); ++it) {
343  // dynamic cast the Measured ones
344  const Trk::TrackParameters *mtp = *it;
345  if (!mtp || !mtp->covariance()) {
346  continue;
347  }
348  measuredParameters.push_back(*it);
349  }
350 
351  // new policy --- take only measured parameters
352  if (measuredParameters.empty()) {
353  return nullptr;
354  }
355 
356  if (m_searchWithDistance) {
357  // loop over the track parameters and get the distance
358  std::vector<const Trk::TrackParameters *>::const_iterator tpIter = measuredParameters.begin();
359  std::vector<const Trk::TrackParameters *>::const_iterator tpIterEnd = measuredParameters.end();
360  // set a maximum distance
361  double closestDistance = 10e10;
362  const Trk::TrackParameters *currentClosestParameters = nullptr;
363 
364  for (; tpIter != tpIterEnd; ++tpIter) {
365  // forward-backward solution
366  Amg::Vector3D tpDirection = (*tpIter)->momentum().normalized();
367 
368  Trk::DistanceSolution currentDistance = sf.straightLineDistanceEstimate((*tpIter)->position(), tpDirection);
369  if (currentDistance.numberOfSolutions() > 0) {
370  // get the one/two solution(s)
371  double firstDistance = std::abs(currentDistance.first());
372  double secondDistance = currentDistance.numberOfSolutions() >
373  1 ? std::abs(currentDistance.second()) : firstDistance;
374  // now do the check
375  if (firstDistance < closestDistance || secondDistance < closestDistance) {
376  currentClosestParameters = (*tpIter);
377  closestDistance = firstDistance <= secondDistance ? firstDistance : secondDistance;
378  }
379  }
380  }
381 
382  // return what has shown to be closest
383  return currentClosestParameters;
384  }
385 
386  if (sf.type() == Trk::SurfaceType::Cylinder) {
387  Trk::TrkParametersComparisonFunction tParFinderCylinder(sf.bounds().r());
388  closestTrackParameters =
389  *(std::min_element(measuredParameters.begin(), measuredParameters.end(),
390  tParFinderCylinder));
391  return closestTrackParameters;
392  }
393 
394  if (sf.type() == Trk::SurfaceType::Line ||
395  sf.type() == Trk::SurfaceType::Perigee) {
397  sf.center(), sf.transform().rotation().col(2));
398  closestTrackParameters = *(std::min_element(
399  measuredParameters.begin(), measuredParameters.end(), tParFinderLine));
400  return closestTrackParameters;
401  }
402 
403  Trk::TrkParametersComparisonFunction tParFinderCenter(sf.center());
404  closestTrackParameters = *(std::min_element(measuredParameters.begin(), measuredParameters.end(), tParFinderCenter));
405 
406  return closestTrackParameters;
407 }
408 
410 Trk::Navigator::trackingGeometry(const EventContext& ctx) const
411 {
412  if (m_useConditions) {
413  SG::ReadCondHandle<TrackingGeometry> handle(m_trackingGeometryReadKey, ctx);
414  if (!handle.isValid()) {
415  throw std::runtime_error{
416  "Could not retrieve TrackingGeometry from Conditions Store."
417  };
418  }
419  return handle.cptr();
420  } else {
421  const TrackingGeometry* trackingGeometry = nullptr;
422  if (detStore()
423  ->retrieve(trackingGeometry, m_trackingGeometryName)
424  .isFailure()) {
425  throw std::runtime_error{
426  "Could not retrieve TrackingGeometry from Detector Store."
427  };
428  }
429  return trackingGeometry;
430  }
431 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
Trk::DistanceSolution::currentDistance
double currentDistance(bool signedDist=false) const
Current distance to surface (spatial), signed (along/opposite to surface normal) if input argument tr...
python.SystemOfUnits.second
int second
Definition: SystemOfUnits.py:120
Trk::Navigator::atVolumeBoundary
virtual bool atVolumeBoundary(const Trk::TrackParameters *parms, const Trk::TrackingVolume *vol, Trk::PropDirection dir, const Trk::TrackingVolume *&nextVol, double tol) const override final
INavigator method to resolve navigation at boundary.
Definition: Navigator.cxx:267
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
Trk::BoundarySurface
Definition: BoundarySurface.h:50
ObjectAccessor.h
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
StraightLineSurface.h
TrackParameters.h
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
Trk::MagneticFieldProperties
Definition: MagneticFieldProperties.h:31
PerigeeSurface.h
Surface.h
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
Trk::DistanceSolution
Definition: DistanceSolution.h:25
Trk::ObjectAccessor::inverseRetrieval
bool inverseRetrieval() const
Definition: ObjectAccessor.h:38
Trk::ParametersBase::position
const Amg::Vector3D & position() const
Access method for the position.
Trk::oppositeMomentum
@ oppositeMomentum
Definition: PropDirection.h:21
Trk::TrackingVolume::geometrySignature
GeometrySignature geometrySignature() const
return the Signature
Trk::DistanceSolution::numberOfSolutions
int numberOfSolutions() const
Number of intersection solutions.
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
Trk::Surface::straightLineDistanceEstimate
virtual DistanceSolution straightLineDistanceEstimate(const Amg::Vector3D &pos, const Amg::Vector3D &dir) const =0
fast straight line distance evaluation to Surface
Trk::TrackingVolume::boundarySurfaces
std::vector< SharedObject< BoundarySurface< TrackingVolume > > > & boundarySurfaces()
Method to return the BoundarySurfaces.
Definition: TrackingVolume.cxx:982
skel.it
it
Definition: skel.GENtoEVGEN.py:423
SG::ReadCondHandle::isValid
bool isValid()
Definition: ReadCondHandle.h:205
PlotCalibFromCool.ib
ib
Definition: PlotCalibFromCool.py:419
Trk::BoundarySurface::attachedVolume
virtual const Tvol * attachedVolume(const TrackParameters &parms, PropDirection dir) const =0
Get the next Volume depending on the TrackParameters and the requested direction.
IPropagator.h
Trk::alongMomentum
@ alongMomentum
Definition: PropDirection.h:20
Trk::Navigator::Navigator
Navigator(const std::string &, const std::string &, const IInterface *)
Constructor.
Definition: Navigator.cxx:40
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
Trk::DistanceSolution::first
double first() const
Distance to first intersection solution along direction.
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
Trk::BoundarySurfaceFace
BoundarySurfaceFace
Definition: BoundarySurfaceFace.h:31
Trk::Navigator::initialize
virtual StatusCode initialize() override
AlgTool initialize method.
Definition: Navigator.cxx:63
Trk::ObjectAccessor::value_type
int value_type
Definition: ObjectAccessor.h:17
Trk::BeamPipe
@ BeamPipe
Definition: GeometrySignature.h:27
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
Track.h
Trk::Navigator::m_insideVolumeTolerance
double m_insideVolumeTolerance
Tolerance for inside() method of Volumes.
Definition: Navigator.h:116
MagneticFieldProperties.h
Trk::FastField
@ FastField
call the fast field access method of the FieldSvc
Definition: MagneticFieldMode.h:20
GeoPrimitives.h
CylinderVolumeBounds.h
Trk::PropDirection
PropDirection
Definition: PropDirection.h:19
Trk::Surface::isOnSurface
virtual bool isOnSurface(const Amg::Vector3D &glopo, const BoundaryCheck &bchk=true, double tol1=0., double tol2=0.) const
This method returns true if the GlobalPosition is on the Surface for both, within or without check of...
Definition: Surface.cxx:123
Trk::BoundarySurface::surfaceRepresentation
virtual const Surface & surfaceRepresentation() const =0
The Surface Representation of this.
Trk::Navigator::highestVolume
virtual const TrackingVolume * highestVolume(const EventContext &ctx) const override final
INavigator interface method - forward hightes TrackingVolume.
Definition: Navigator.cxx:94
Trk::Navigator::nextBoundarySurface
virtual const BoundarySurface< TrackingVolume > * nextBoundarySurface(const EventContext &ctx, const IPropagator &prop, const TrackParameters &parms, PropDirection dir) const override final
INavigator interface methods - getting the next BoundarySurface not knowing the Volume.
Definition: Navigator.cxx:100
beamspotman.n
n
Definition: beamspotman.py:731
Trk::Navigator::nextTrackingVolume
virtual NavigationCell nextTrackingVolume(const EventContext &ctx, const IPropagator &prop, const TrackParameters &parms, PropDirection dir, const TrackingVolume &vol) const override final
INavigator interface method - getting the next Volume and the parameter for the next Navigation.
Definition: Navigator.cxx:169
Trk::IPropagator
Definition: IPropagator.h:55
Trk::TrackingGeometry
Definition: TrackingGeometry.h:67
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
Trk::TrackingVolume::boundarySurface
const BoundarySurface< TrackingVolume > * boundarySurface(const ObjectAccessor::value_type &oa) const
Get the BoundarySurface to the appointed Accessor state.
Definition: TrackingVolume.cxx:995
Trk::DistanceSolution::second
double second() const
Distance to second intersection solution along direction (for a cylinder surface)
CylinderSurface.h
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Trk::ParametersBase
Definition: ParametersBase.h:55
Trk::Volume::boundarySurfaceAccessor
ObjectAccessor boundarySurfaceAccessor(const Amg::Vector3D &gp, const Amg::Vector3D &mom, bool forceInside=false) const
Provide accessor for BoundarySurfaces.
Definition: Volume.cxx:100
Trk::FullField
@ FullField
Field is set to be realistic, but within a given Volume.
Definition: MagneticFieldMode.h:21
Trk::Navigator::m_isOnSurfaceTolerance
double m_isOnSurfaceTolerance
Tolerance for isOnSurface() method of BoundarySurfaces.
Definition: Navigator.h:118
beamspotman.dir
string dir
Definition: beamspotman.py:623
Trk::IPropagator::propagateParameters
virtual std::unique_ptr< TrackParameters > propagateParameters(const EventContext &ctx, const TrackParameters &parm, const Surface &sf, PropDirection dir, const BoundaryCheck &bcheck, const MagneticFieldProperties &mprop, ParticleHypothesis particle=pion, bool returnCurv=false, const TrackingVolume *tVol=nullptr) const =0
Main propagation method for parameters only.
Trk::Track::trackParameters
const DataVector< const TrackParameters > * trackParameters() const
Return a pointer to a vector of TrackParameters.
Definition: Tracking/TrkEvent/TrkTrack/src/Track.cxx:97
Athena::Units
Definition: Units.h:45
Trk::NoField
@ NoField
Field is set to 0., 0., 0.,.
Definition: MagneticFieldMode.h:18
EventPrimitives.h
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
Trk::TrackingVolume::volumeName
const std::string & volumeName() const
Returns the VolumeName - for debug reason, might be depreciated later.
Trk::SurfaceType::Perigee
@ Perigee
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Trk::Navigator::m_useStraightLineApproximation
bool m_useStraightLineApproximation
use the straight line approximation for the next boundary sf
Definition: Navigator.h:122
BoundarySurface.h
Trk::NavigationCell
useful struct for a single navigation cell
Definition: INavigator.h:38
Trk::ObjectAccessor
Definition: ObjectAccessor.h:15
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
DataVector.h
An STL vector of pointers that by default owns its pointed-to elements.
TrackingVolume.h
IGeometryBuilder.h
mapkey::sf
@ sf
Definition: TElectronEfficiencyCorrectionTool.cxx:38
Trk::Navigator::m_searchWithDistance
bool m_searchWithDistance
search with new distanceToSurface() method
Definition: Navigator.h:124
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
RungeKuttaUtils.h
DeMoScan.first
bool first
Definition: DeMoScan.py:534
Trk::SurfaceType::Cylinder
@ Cylinder
DiscSurface.h
Gaudi
=============================================================================
Definition: CaloGPUClusterAndCellDataMonitorOptions.h:273
TrackingGeometry.h
Trk::Navigator::m_fastField
bool m_fastField
Definition: Navigator.h:126
Trk::Navigator::closestParameters
virtual const TrackParameters * closestParameters(const Track &trk, const Surface &sf) const override final
INavigator interface method - getting the closest TrackParameters from a Track to a Surface.
Definition: Navigator.cxx:330
Trk::ComparisonFunction< TrackParameters >
AthAlgTool
Definition: AthAlgTool.h:26
Trk::SurfaceType::Line
@ Line
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:75
Trk::TrackingVolume
Definition: TrackingVolume.h:121
Trk::Navigator::trackingGeometry
virtual const TrackingGeometry * trackingGeometry(const EventContext &ctx) const override final
INavigator interface method - returns the TrackingGeometry used for navigation.
Definition: Navigator.cxx:410
Trk::Navigator::volume
virtual const TrackingVolume * volume(const EventContext &ctx, const Amg::Vector3D &gp) const override final
INavigator interface methods - global search for the Volume one is in.
Definition: Navigator.cxx:88
Trk::ParametersBase::clone
virtual ParametersBase< DIM, T > * clone() const override=0
clone method for polymorphic deep copy
Navigator.h
SG::ReadCondHandle::cptr
const_pointer_type cptr()
Definition: ReadCondHandle.h:67
TrkParametersComparisonFunction.h