ATLAS Offline Software
Loading...
Searching...
No Matches
Extrapolator.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// Extrapolator.h, (c) ATLAS Detector software
8
9#ifndef TRKEXTOOLS_EXTRAPOLATOR_H
10#define TRKEXTOOLS_EXTRAPOLATOR_H
11
12#include "LocalExtrapolatorCache.h" //for Trk::Cache
13#include "ExtrUniquePtrHolder.h"
14
16#include "TrkExInterfaces/IMaterialEffectsUpdator.h" // in tool handle array
17#include "TrkExInterfaces/INavigator.h" //in tool handle
18#include "TrkExInterfaces/IPropagator.h" //in tool handle
19// Trk
24#include "TrkParameters/TrackParameters.h" //template parameter in typedef
25#include "TrkSurfaces/BoundaryCheck.h" //template parameter in typedef
26// Amg
27#include "EventPrimitives/EventPrimitives.h" //Amg::Vector etc
28// xAOD
29#include "xAODTracking/NeutralParticle.h" //typedef
30#include "xAODTracking/TrackParticle.h" //typedef
31// Gaudi/StoreGate
34#include "GaudiKernel/ToolHandle.h"
35#include <Gaudi/Accumulators.h>
36// STL
37#include <cstring>
38#include <map>
39#include <memory>
40#include <utility>
41#include <vector>
42
43class MsgStream;
44class EventContext;
45
46namespace Trk {
47class Track;
48class Surface;
49class Layer;
50class Volume;
59class TrackingVolume;
60
61
62using TrackParametersUVector = std::vector<std::unique_ptr<Trk::TrackParameters>>;
63using DestSurf = std::pair<const Surface*, BoundaryCheck>;
64
110
111class Extrapolator final
112 : public AthCheckedComponent<AthAlgTool>
113 , virtual public IExtrapolator
114{
115public:
116
118 Extrapolator(const std::string&, const std::string&, const IInterface*);
121
123 virtual StatusCode initialize() override;
125 virtual StatusCode finalize() override;
126
131 virtual std::unique_ptr<TrackParameters> extrapolateDirectly(
132 const EventContext& ctx,
133 const TrackParameters& parm,
134 const Surface& sf,
136 const BoundaryCheck& bcheck = true,
137 ParticleHypothesis particle = pion) const override final;
138
141 virtual std::unique_ptr<NeutralParameters> extrapolate(
142 const NeutralParameters& parameters,
143 const Surface& sf,
145 const BoundaryCheck& bcheck = true) const override final;
146
150 const EventContext& ctx,
152 const Surface& sf,
154 const BoundaryCheck& bcheck = true,
155 ParticleHypothesis particle = pion,
156 MaterialUpdateMode matupmode = addNoise,
157 Trk::ExtrapolationCache* cache = nullptr) const override final;
158
164 const EventContext& ctx,
166 const Surface& sf,
168 const BoundaryCheck& bcheck = true,
169 ParticleHypothesis particle = pion) const override final;
170
175 const EventContext& ctx,
176 const Track& trk,
177 const Surface& sf,
179 const BoundaryCheck& bcheck = true,
180 ParticleHypothesis particle = pion,
181 MaterialUpdateMode matupmode = addNoise,
182 Trk::ExtrapolationCache* cache = nullptr) const override final;
183
190 const EventContext& ctx,
193 const BoundaryCheck& bcheck = true,
194 ParticleHypothesis particle = pion,
195 const Volume* boundaryVol = nullptr) const override final;
196
202 const EventContext& ctx,
203 const TrackParameters& parameters,
204 const Surface& sf,
205 PropDirection dir,
206 const BoundaryCheck& bcheck,
207 ParticleHypothesis particle = pion,
208 Trk::ExtrapolationCache* cache = nullptr) const override final;
209
219 const EventContext& ctx,
221 Trk::PropDirection dir,
222 Trk::ParticleHypothesis particle,
223 int destination = 3) const override final;
224
227 const EventContext& ctx,
229 PropDirection dir,
230 const BoundaryCheck& bcheck,
231 std::vector<const Trk::TrackStateOnSurface*>& material,
232 ParticleHypothesis particle = pion,
233 MaterialUpdateMode matupmode = addNoise) const override final;
234
237 const EventContext& ctx,
241 ParticleHypothesis particle = pion) const override final;
242
244 virtual const TrackingGeometry* trackingGeometry() const override final;
245
246private:
247
253 const EventContext& ctx,
254 Cache& cache,
255 const IPropagator& prop,
257 const Surface& sf,
259 const BoundaryCheck& bcheck = true,
260 ParticleHypothesis particle = pion,
261 MaterialUpdateMode matupmode = addNoise) const;
262
269 const EventContext& ctx,
270 const IPropagator& prop,
272 const Surface& sf,
274 const BoundaryCheck& bcheck = true,
275 ParticleHypothesis particle = pion) const;
276
285 const EventContext& ctx,
286 Cache& cache,
287 const IPropagator& prop,
290 const TrackingVolume& tvol,
291 PropDirection dir,
292 ParticleHypothesis particle = pion,
293 MaterialUpdateMode matupmode = addNoise) const;
294
298 const EventContext& ctx,
299 Cache& cache,
301 const Surface& sf,
303 const BoundaryCheck& bcheck = true,
304 ParticleHypothesis particle = pion,
305 MaterialUpdateMode matupmode = addNoise,
306 Trk::ExtrapolationCache* extrapolationCache = nullptr) const;
307
311 const EventContext& ctx,
312 const IPropagator& prop,
314 const Surface& sf,
316 const BoundaryCheck& bcheck = true,
317 ParticleHypothesis particle = pion) const;
318
322 const EventContext& ctx,
323 Cache& cache,
324 const IPropagator& prop,
327 const BoundaryCheck& bcheck = true,
328 ParticleHypothesis particle = pion,
329 const Volume* boundaryVol = nullptr) const;
330
335 const EventContext& ctx,
336 const IPropagator& prop,
338 PropDirection dir,
339 const BoundaryCheck& bcheck,
340 ParticleHypothesis particle = pion,
341 MaterialUpdateMode matupmode = addNoise) const;
342
347 const EventContext& ctx,
348 const IPropagator& prop,
350 PropDirection dir,
351 const BoundaryCheck& bcheck,
352 std::vector<const Trk::TrackStateOnSurface*>& material,
353 ParticleHypothesis particle = pion,
354 MaterialUpdateMode matupmode = addNoise) const;
355
359 const EventContext& ctx,
360 const IPropagator& prop,
364 ParticleHypothesis particle = pion) const;
365
381 Cache& cache,
382 const IPropagator& prop,
384 const Surface& sf,
385 const Layer* associatedLayer,
386 const TrackingVolume& tvol,
388 const BoundaryCheck& bcheck = true,
389 ParticleHypothesis particle = pion,
390 MaterialUpdateMode matupmode = addNoise) const;
391
396 Cache& cache,
397 bool toBoundary,
398 const IPropagator& prop,
400 const Layer* associatedLayer,
401 const TrackingVolume& tvol,
403 const BoundaryCheck& bcheck = true,
404 ParticleHypothesis particle = pion,
405 MaterialUpdateMode matupmode = addNoise) const;
406
409 const EventContext& ctx,
410 Cache& cache,
411 const IPropagator& prop,
413 const Surface& sf,
414 const TrackingVolume& tvol,
416 const BoundaryCheck& bcheck = true,
417 ParticleHypothesis particle = pion,
418 MaterialUpdateMode matupmode = addNoise) const;
419
421 const EventContext& ctx,
422 Cache& cache,
423 const IPropagator& prop,
425 const Trk::Surface* destSurf,
427 PropDirection dir,
428 const BoundaryCheck& bcheck,
429 ParticleHypothesis particle = pion,
430 MaterialUpdateMode matupmode = addNoise) const;
431
433 const EventContext& ctx,
434 Cache& cache,
435 const IPropagator& prop,
437 const Trk::Surface* destSurf,
439 PropDirection dir,
440 ParticleHypothesis particle = pion) const;
441
443 const EventContext& ctx,
444 Cache& cache,
446 double pathLim,
447 Trk::PropDirection dir,
448 Trk::ParticleHypothesis particle,
449 const Trk::TrackingVolume* destVol,
451
466 const EventContext& ctx,
467 Cache& cache,
468 const IPropagator& prop,
470 const Layer* associatedLayer,
471 const TrackingVolume& tvol,
473 const BoundaryCheck& bcheck = true,
474 ParticleHypothesis particle = pion,
475 MaterialUpdateMode matupmode = addNoise) const;
476
480 const EventContext& ctx,
481 Cache& cache,
482 const IPropagator& prop,
484 const TrackingVolume& tvol,
485 const Layer* nextLayer,
486 const Layer* destinationLayer,
487 Trk::CacheOwnedPtr<Trk::TrackParameters> navParameters,
489 const BoundaryCheck& bcheck = true,
490 ParticleHypothesis particle = pion,
491 MaterialUpdateMode matupmode = addNoise) const;
492
496 const EventContext& ctx,
497 Cache& cache,
498 const IPropagator& prop,
500 const Surface& sf,
501 const Layer& lay,
502 const TrackingVolume& tvol,
503 const Layer* startLayer,
505 const BoundaryCheck& bcheck = true,
506 ParticleHypothesis particle = pion,
507 MaterialUpdateMode matupmode = addNoise) const;
508
514 const EventContext& ctx,
515 Cache& cache,
516 const IPropagator& prop,
518 const Layer& lay,
519 const TrackingVolume& tvol,
521 const BoundaryCheck& bcheck = true,
522 ParticleHypothesis particle = pion,
523 MaterialUpdateMode matupmode = addNoise,
524 bool perpendicularCheck = true) const;
525
527 void overlapSearch(const EventContext& ctx,
528 Cache& cache,
529 const IPropagator& prop,
531 Trk::CacheOwnedPtr<Trk::TrackParameters> parsOnLayer,
532 const Layer& lay,
533 const TrackingVolume& tvol,
535 const BoundaryCheck& bcheck = true,
536 ParticleHypothesis particle = pion,
537 bool startingLayer = false) const;
538
546 const EventContext& ctx,
547 Cache& cache,
548 const Trk::IPropagator& prop,
550 const Trk::Surface& destSurface,
551 Trk::PropDirection dir,
552 ParticleHypothesis particle,
553 Trk::CacheOwnedPtr<Trk::TrackParameters>& referenceParameters,
554 const Trk::Layer*& associatedLayer,
555 const Trk::TrackingVolume*& associatedVolume,
556 const Trk::TrackingVolume*& destinationVolume) const;
557
562 bool radialDirectionCheck(const EventContext& ctx,
563 const IPropagator& prop,
564 const TrackParameters& startParm,
565 const TrackParameters& parsOnLayer,
566 const TrackingVolume& tvol,
568 ParticleHypothesis particle = pion) const;
569
572
575
577 std::string positionOutput(const Amg::Vector3D& pos) const;
578
580 void addMaterialEffectsOnTrack(const EventContext& ctx,
581 Cache& cache,
582 const Trk::IPropagator& prop,
584 const Trk::Layer& lay,
586 Trk::PropDirection propDir,
588
589
590
593 // unsigned int geoIDToDetOrder(Trk::GeometrySignature geoid) const;
594
595 // --------------- Used Tools ----------------------------- //
597 ToolHandleArray<IPropagator> m_propagators{ this, "Propagators", {} };
599 ToolHandle<IPropagator> m_stepPropagator{
600 this,
601 "STEP_Propagator",
602 "Trk::STEP_Propagator/AtlasSTEP_Propagator"
603 };
604
605 ToolHandle<INavigator> m_navigator{ this,
606 "Navigator",
607 "Trk::Navigator/AtlasNavigator" };
608
609 ToolHandleArray<IMaterialEffectsUpdator> m_updaters{
610 this,
611 "MaterialEffectsUpdators",
612 {}
613 };
614
615 ToolHandle<IMultipleScatteringUpdator> m_msupdater{
616 this,
617 "MultipleScatteringUpdater",
618 "Trk::MultipleScatteringUpdator/AtlasMultipleScatteringUpdator"
619 };
620
621 ToolHandle<IEnergyLossUpdator> m_elossupdater{ this,
622 "EnergyLossUpdater",
623 "Trk::EnergyLossUpdator/AtlasEnergyLossUpdator" };
624
625 // ---------------- For Extrapolation handling ------------ //
626
628 std::vector<const IPropagator*> m_subPropagators;
630 std::vector<const IMaterialEffectsUpdator*> m_subupdaters;
631
632 // ---------------- For Extrapolator configuration ------------ //
633
634 StringArrayProperty m_propNames{this, "SubPropagators", {},
635 "configuration of subPropagators"};
636 StringArrayProperty m_updatNames{this, "SubMEUpdators", {},
637 "configuration of subupdaters"};
638
639 // --------------- General steering & Navigation -------------- //
640
641 BooleanProperty m_includeMaterialEffects{this, "ApplyMaterialEffects", true,
642 "boolean to switch on/off material effects"};
644 {this, "StopWithNavigationBreak", false,
645 "return 0 if navigation breaks - for validation reasons"};
646 BooleanProperty m_stopWithUpdateZero{this, "StopWithUpdateKill", false,
647 "return 0 if update kills the trajectory"};
648 BooleanProperty m_skipInitialLayerUpdate{this, "SkipInitialPostUpdate", false,
649 "skip the initial post-Update at the layer [Fatras conversion mode]"};
650 BooleanProperty m_resolveActive{this, "ResolveMuonStation", false};
651 BooleanProperty m_resolveMultilayers{this, "ResolveMultilayers", true};
653 //if we have no valid subpropagatos it will be set to an INVALID value
655 UnsignedIntegerProperty m_initialLayerAttempts
656 {this, "InitialLayerAttempts", 3,
657 "allowed layer intersection attempts at the start of a volume"};
658 UnsignedIntegerProperty m_successiveLayerAttempts
659 {this, "SuccessiveLayerAttempts", 1,
660 "layer intersection attemps after one layer has been hit sucessfully"};
661 UnsignedIntegerProperty m_maxMethodSequence
662 {this, "MaximalMethodSequence", 2000};
663 DoubleProperty m_tolerance{this, "Tolerance", 0.002,
664 "surface & volume tolerance"};
665 // ------------------------------------------------------- //
666 BooleanProperty m_useMuonMatApprox{this, "UseMuonMatApproximation", false,
667 "use approximative MS inert material"};
669 {this, "UseDenseVolumeDescription", true,
670 "use dense volume description when available in ID/Calo"};
671 UnsignedIntegerProperty m_maxRecursion{this, "MaxRecursion", 1000};
672
673 static const unsigned int m_maxNavigSurf = 1000;
674 static const unsigned int m_maxNavigVol = 50;
675 BooleanProperty m_dumpCache{this, "DumpCache", false};
676 //------------ Magnetic field properties
677 BooleanProperty m_fastField{this, "MagneticFieldProperties", false};
679 //------------Reference surface --------------
680 std::unique_ptr<Surface> m_referenceSurface = nullptr;
681 //-------------------------- SCREEN output steering -------------------------------------------//
682 BooleanProperty m_printRzOutput{this, "positionOutput", true};
683 //------------------------- VALIDATION SECTION ------------------------------------------//
684 // flags
686 {this, "NavigationStatisticsOutput", false,
687 "steer the output for the navigation statistics"};
689 {this, "DetailedNavigationOutput", false,
690 "steer the output for the navigation break details"};
691
692 // extrapolation counters
693 mutable Gaudi::Accumulators::Counter<> m_extrapolateCalls{};
694 mutable Gaudi::Accumulators::Counter<> m_extrapolateBlindlyCalls{};
695 mutable Gaudi::Accumulators::Counter<> m_extrapolateDirectlyCalls{};
696 mutable Gaudi::Accumulators::Counter<> m_extrapolateStepwiseCalls{};
697
698 mutable Gaudi::Accumulators::Counter<> m_startThroughAssociation{};
699 mutable Gaudi::Accumulators::Counter<> m_startThroughRecall{};
700 mutable Gaudi::Accumulators::Counter<> m_startThroughGlobalSearch{};
701 mutable Gaudi::Accumulators::Counter<> m_destinationThroughAssociation{};
702 mutable Gaudi::Accumulators::Counter<> m_destinationThroughRecall{};
703 mutable Gaudi::Accumulators::Counter<> m_destinationThroughGlobalSearch{};
704 mutable Gaudi::Accumulators::Counter<> m_layerSwitched{};
705
706 // navigation counters
707 mutable Gaudi::Accumulators::Counter<> m_navigationBreakLoop{};
708 mutable Gaudi::Accumulators::Counter<> m_navigationBreakOscillation{};
709 mutable Gaudi::Accumulators::Counter<> m_navigationBreakNoVolume{};
710 mutable Gaudi::Accumulators::Counter<> m_navigationBreakDistIncrease{};
711 mutable Gaudi::Accumulators::Counter<> m_navigationBreakVolumeSignature{};
712 mutable Gaudi::Accumulators::Counter<> m_overlapSurfaceHit{};
713
715};
716
717} // end of namespace
719
720#endif // TRKEXTOOLS_TRKEXTRAPOLATOR_H
721
Eigen::Matrix< double, 3, 1 > Vector3D
Mixin class to perform additional checks on a component.
Base Class for a navigation object (active) in the Calo realm.
The BoundaryCheck class allows to steer the way surface boundaries are used for inside/outside checks...
Base Class for a navigation object (active/passive) in the Tracking realm.
BooleanProperty m_stopWithUpdateZero
std::pair< std::unique_ptr< TrackParameters >, const Layer * > extrapolateToNextActiveLayerImpl(const EventContext &ctx, const IPropagator &prop, const TrackParameters &parm, PropDirection dir, const BoundaryCheck &bcheck, ParticleHypothesis particle=pion, MaterialUpdateMode matupmode=addNoise) const
Actual heavy lifting implementation for extrapolateToNextActiveLayer.
virtual std::unique_ptr< NeutralParameters > extrapolate(const NeutralParameters &parameters, const Surface &sf, PropDirection dir=anyDirection, const BoundaryCheck &bcheck=true) const override final
Main extrapolation Interface starting from neutral parameters and aiming at surface.
virtual std::unique_ptr< TrackParameters > extrapolateDirectly(const EventContext &ctx, const TrackParameters &parm, const Surface &sf, PropDirection dir=anyDirection, const BoundaryCheck &bcheck=true, ParticleHypothesis particle=pion) const override final
Extrapolate directly: Forwards directly the call to the configured "Global" propagator.
BooleanProperty m_dumpCache
ToolHandle< IEnergyLossUpdator > m_elossupdater
ToolHandleArray< IPropagator > m_propagators
Private method for conversion of the synchronized geometry signature to the natural subdetector order...
UnsignedIntegerProperty m_successiveLayerAttempts
void extrapolateToVolumeBoundary(const EventContext &ctx, Cache &cache, const IPropagator &prop, Trk::CacheOwnedPtr< Trk::TrackParameters > parm, const Layer *associatedLayer, const TrackingVolume &tvol, PropDirection dir=anyDirection, const BoundaryCheck &bcheck=true, ParticleHypothesis particle=pion, MaterialUpdateMode matupmode=addNoise) const
Private method for extrapolation in intermediate volume to boundary surface.
std::string positionOutput(const Amg::Vector3D &pos) const
For the output - global position.
Trk::CacheOwnedPtr< Trk::TrackParameters > extrapolateToNextMaterialLayer(const EventContext &ctx, Cache &cache, const IPropagator &prop, Trk::CacheOwnedPtr< Trk::TrackParameters > parm, const Trk::Surface *destSurf, const Trk::TrackingVolume *vol, PropDirection dir, const BoundaryCheck &bcheck, ParticleHypothesis particle=pion, MaterialUpdateMode matupmode=addNoise) const
BooleanProperty m_stopWithNavigationBreak
Gaudi::Accumulators::Counter m_navigationBreakOscillation
number of navigation breaks due to oscillation
Trk::CacheOwnedPtr< Trk::TrackParameters > extrapolateWithinDetachedVolumes(const EventContext &ctx, Cache &cache, const IPropagator &prop, Trk::CacheOwnedPtr< Trk::TrackParameters > parm, const Surface &sf, const TrackingVolume &tvol, PropDirection dir=anyDirection, const BoundaryCheck &bcheck=true, ParticleHypothesis particle=pion, MaterialUpdateMode matupmode=addNoise) const
C) call from extrapolateInsideVolume.
std::vector< std::pair< std::unique_ptr< Trk::TrackParameters >, int > > identifiedParameters_t
Trk::CacheOwnedPtr< Trk::TrackParameters > extrapolateInAlignableTV(const EventContext &ctx, Cache &cache, const IPropagator &prop, Trk::CacheOwnedPtr< Trk::TrackParameters > parm, const Trk::Surface *destSurf, const Trk::AlignableTrackingVolume *vol, PropDirection dir, ParticleHypothesis particle=pion) const
void overlapSearch(const EventContext &ctx, Cache &cache, const IPropagator &prop, Trk::CacheOwnedPtr< Trk::TrackParameters > parm, Trk::CacheOwnedPtr< Trk::TrackParameters > parsOnLayer, const Layer &lay, const TrackingVolume &tvol, PropDirection dir=anyDirection, const BoundaryCheck &bcheck=true, ParticleHypothesis particle=pion, bool startingLayer=false) const
Private to search for overlap surfaces.
std::unique_ptr< TrackParameters > extrapolateDirectlyImpl(const EventContext &ctx, const IPropagator &prop, const TrackParameters &parm, const Surface &sf, PropDirection dir=anyDirection, const BoundaryCheck &bcheck=true, ParticleHypothesis particle=pion) const
Actual heavy lifting implementation for extrapolateDirectly.
UnsignedIntegerProperty m_initialLayerAttempts
Trk::TrackParametersUVector extrapolateBlindlyImpl(const EventContext &ctx, Cache &cache, const IPropagator &prop, Trk::CacheOwnedPtr< Trk::TrackParameters > parm, PropDirection dir=anyDirection, const BoundaryCheck &bcheck=true, ParticleHypothesis particle=pion, const Volume *boundaryVol=nullptr) const
Actual heavy lifting implementation for extrapolateBlindly.
Gaudi::Accumulators::Counter m_destinationThroughGlobalSearch
navigation intialization
BooleanProperty m_navigationBreakDetails
BooleanProperty m_resolveActive
Gaudi::Accumulators::Counter m_navigationBreakNoVolume
number of navigation breaks due no Volume found
Gaudi::Accumulators::Counter m_navigationBreakDistIncrease
number of navigation breaks due to distance increase
BooleanProperty m_skipInitialLayerUpdate
std::pair< Trk::CacheOwnedPtr< Trk::TrackParameters >, bool > extrapolateToIntermediateLayer(const EventContext &ctx, Cache &cache, const IPropagator &prop, Trk::CacheOwnedPtr< Trk::TrackParameters > parm, const Layer &lay, const TrackingVolume &tvol, PropDirection dir=anyDirection, const BoundaryCheck &bcheck=true, ParticleHypothesis particle=pion, MaterialUpdateMode matupmode=addNoise, bool perpendicularCheck=true) const
Private to extrapolate to the destination layer + surface, special treatment for exit layer.
ToolHandle< IMultipleScatteringUpdator > m_msupdater
Array of EnergyLoss updaters.
Trk::CacheOwnedPtr< Trk::TrackParameters > extrapolateToVolumeWithPathLimit(const EventContext &ctx, Cache &cache, Trk::CacheOwnedPtr< Trk::TrackParameters > parm, double pathLim, Trk::PropDirection dir, Trk::ParticleHypothesis particle, const Trk::TrackingVolume *destVol, MaterialUpdateMode matupmod=addNoise) const
Trk::CacheOwnedPtr< Trk::TrackParameters > extrapolateFromLayerToLayer(const EventContext &ctx, Cache &cache, const IPropagator &prop, Trk::CacheOwnedPtr< Trk::TrackParameters > parm, const TrackingVolume &tvol, const Layer *nextLayer, const Layer *destinationLayer, Trk::CacheOwnedPtr< Trk::TrackParameters > navParameters, PropDirection dir=anyDirection, const BoundaryCheck &bcheck=true, ParticleHypothesis particle=pion, MaterialUpdateMode matupmode=addNoise) const
Private method to step from one to the last layer and stop at last layer (before 0) or before destina...
std::vector< const IMaterialEffectsUpdator * > m_subupdaters
static const unsigned int m_maxNavigVol
virtual std::unique_ptr< std::vector< std::pair< std::unique_ptr< Trk::TrackParameters >, int > > > collectIntersections(const EventContext &ctx, const Trk::TrackParameters &parm, Trk::PropDirection dir, Trk::ParticleHypothesis particle, int destination=3) const override final
Extrapolation method collecting intersections with subdetector boundaries and active volumes/layers.
virtual StatusCode finalize() override
AlgTool finalize method.
virtual std::unique_ptr< TrackParameters > extrapolateToVolume(const EventContext &ctx, const TrackParameters &parm, const Trk::TrackingVolume &vol, PropDirection dir=anyDirection, ParticleHypothesis particle=pion) const override final
Extrapolation to volume :
Gaudi::Accumulators::Counter m_extrapolateStepwiseCalls
number of calls: extrapolateStepwise() method
std::vector< const IPropagator * > m_subPropagators
< Propagators to chose from (steered by signature)
virtual std::vector< const TrackStateOnSurface * > * extrapolateM(const EventContext &ctx, const TrackParameters &parameters, const Surface &sf, PropDirection dir, const BoundaryCheck &bcheck, ParticleHypothesis particle=pion, Trk::ExtrapolationCache *cache=nullptr) const override final
Extrapolate to a destination surface, while collecting all the material layers in between.
virtual TrackParametersUVector extrapolateBlindly(const EventContext &ctx, const TrackParameters &parm, PropDirection dir=anyDirection, const BoundaryCheck &bcheck=true, ParticleHypothesis particle=pion, const Volume *boundaryVol=nullptr) const override final
extrapolateBlindly like step-wise extrapolation, but without a destination surface.
TrackParametersUVector extrapolateStepwiseImpl(const EventContext &ctx, const IPropagator &prop, const TrackParameters &parm, const Surface &sf, PropDirection dir=anyDirection, const BoundaryCheck &bcheck=true, ParticleHypothesis particle=pion) const
DoubleProperty m_tolerance
BooleanProperty m_resolveMultilayers
number of sub valid propagators in the m_subPropagators array
unsigned int m_numOfValidPropagators
Gaudi::Accumulators::Counter m_extrapolateBlindlyCalls
number of calls: extrapolateBlindly() method
virtual const TrackingGeometry * trackingGeometry() const override final
Return the TrackingGeometry used by the Extrapolator (forward information from Navigator)
Gaudi::Accumulators::Counter m_overlapSurfaceHit
number of OverlapSurfaces found
virtual std::unique_ptr< TrackParameters > extrapolateTrack(const EventContext &ctx, const Track &trk, const Surface &sf, PropDirection dir=anyDirection, const BoundaryCheck &bcheck=true, ParticleHypothesis particle=pion, MaterialUpdateMode matupmode=addNoise, Trk::ExtrapolationCache *cache=nullptr) const override final
Main extrapolation interface starting from a Trk::Track and aiming at Surface.
ToolHandleArray< IMaterialEffectsUpdator > m_updaters
Array of MultipleScattering updaters.
BooleanProperty m_printRzOutput
Trk::CacheOwnedPtr< Trk::TrackParameters > extrapolateInsideVolume(const EventContext &ctx, Cache &cache, const IPropagator &prop, Trk::CacheOwnedPtr< Trk::TrackParameters > parm, const Surface &sf, const Layer *associatedLayer, const TrackingVolume &tvol, PropDirection dir=anyDirection, const BoundaryCheck &bcheck=true, ParticleHypothesis particle=pion, MaterialUpdateMode matupmode=addNoise) const
Private method for extrapolation in final volume to destination surface.
Trk::CacheOwnedPtr< Trk::TrackParameters > extrapolateToDestinationLayer(const EventContext &ctx, Cache &cache, const IPropagator &prop, Trk::CacheOwnedPtr< Trk::TrackParameters > parm, const Surface &sf, const Layer &lay, const TrackingVolume &tvol, const Layer *startLayer, PropDirection dir=anyDirection, const BoundaryCheck &bcheck=true, ParticleHypothesis particle=pion, MaterialUpdateMode matupmode=addNoise) const
Private to extrapolate to the destination layer + surface.
std::pair< std::unique_ptr< TrackParameters >, const Layer * > extrapolateToNextActiveLayerMImpl(const EventContext &ctx, const IPropagator &prop, const TrackParameters &parm, PropDirection dir, const BoundaryCheck &bcheck, std::vector< const Trk::TrackStateOnSurface * > &material, ParticleHypothesis particle=pion, MaterialUpdateMode matupmode=addNoise) const
Actual heavy lifting implementation for extrapolateToNextActiveLayerM.
std::unique_ptr< TrackParameters > extrapolateToVolumeImpl(const EventContext &ctx, const IPropagator &prop, const TrackParameters &parm, const Trk::TrackingVolume &vol, PropDirection dir=anyDirection, ParticleHypothesis particle=pion) const
Actual heavy lifting implementation for extrapolateToVolume.
StringArrayProperty m_propNames
Gaudi::Accumulators::Counter m_extrapolateCalls
number of calls: extrapolate() method
Gaudi::Accumulators::Counter m_layerSwitched
number of layers that have been switched
Extrapolator(const std::string &, const std::string &, const IInterface *)
Constructor.
~Extrapolator()
Destructor.
static const unsigned int m_maxNavigSurf
BooleanProperty m_navigationStatistics
Trk::CacheOwnedPtr< Trk::TrackParameters > extrapolateImpl(const EventContext &ctx, Cache &cache, const IPropagator &prop, Trk::CacheOwnedPtr< Trk::TrackParameters > parm, const Surface &sf, PropDirection dir=anyDirection, const BoundaryCheck &bcheck=true, ParticleHypothesis particle=pion, MaterialUpdateMode matupmode=addNoise) const
Actual heavy lifting implementation for extrapolate.
virtual StatusCode initialize() override
AlgTool initailize method.
Gaudi::Accumulators::Counter m_startThroughGlobalSearch
navigation intialization
ToolHandle< IPropagator > m_stepPropagator
Navigator for TrackingGeometry and magnetic fiels acces.
Gaudi::Accumulators::Counter m_navigationBreakLoop
number of navigation breaks due to loop
UnsignedIntegerProperty m_maxMethodSequence
bool radialDirectionCheck(const EventContext &ctx, const IPropagator &prop, const TrackParameters &startParm, const TrackParameters &parsOnLayer, const TrackingVolume &tvol, PropDirection dir=anyDirection, ParticleHypothesis particle=pion) const
Check for punchThrough in case of radial (perpendicular) direction change, returns true if the radial...
Trk::MagneticFieldProperties m_fieldProperties
Gaudi::Accumulators::Counter m_startThroughRecall
navigation intialization
BooleanProperty m_fastField
Gaudi::Accumulators::Counter m_destinationThroughAssociation
navigation intialization
BooleanProperty m_useMuonMatApprox
PropDirection initializeNavigation(const EventContext &ctx, Cache &cache, const Trk::IPropagator &prop, Trk::CacheOwnedPtr< Trk::TrackParameters > startPars, const Trk::Surface &destSurface, Trk::PropDirection dir, ParticleHypothesis particle, Trk::CacheOwnedPtr< Trk::TrackParameters > &referenceParameters, const Trk::Layer *&associatedLayer, const Trk::TrackingVolume *&associatedVolume, const Trk::TrackingVolume *&destinationVolume) const
Private method for Initial Extrapolation setup -> overwrites the given pointers for the start and des...
ToolHandle< INavigator > m_navigator
Array of Material updatersc.
Trk::CacheOwnedPtr< Trk::TrackParameters > insideVolumeStaticLayers(const EventContext &ctx, Cache &cache, bool toBoundary, const IPropagator &prop, Trk::CacheOwnedPtr< Trk::TrackParameters > parm, const Layer *associatedLayer, const TrackingVolume &tvol, PropDirection dir=anyDirection, const BoundaryCheck &bcheck=true, ParticleHypothesis particle=pion, MaterialUpdateMode matupmode=addNoise) const
A) call from extrapolateInsideVolume or toBoundary, if it is to boundary, the return parameters are t...
const IPropagator * subPropagator(const TrackingVolume &tvol) const
Access the subPropagator to the given volume.
BooleanProperty m_useDenseVolumeDescription
Gaudi::Accumulators::Counter m_startThroughAssociation
navigation intialization
std::unique_ptr< Surface > m_referenceSurface
UnsignedIntegerProperty m_maxRecursion
Gaudi::Accumulators::Counter m_destinationThroughRecall
navigation intialization
Dbg::PropStat m_propStat ATLAS_THREAD_SAFE
Gaudi::Accumulators::Counter m_navigationBreakVolumeSignature
number of navigation breaks due to distance increase
const IMaterialEffectsUpdator * subMaterialEffectsUpdator(const TrackingVolume &tvol) const
Access the subPropagator to the given volume.
Gaudi::Accumulators::Counter m_extrapolateDirectlyCalls
number of calls: extrapolateDirectly() method
BooleanProperty m_includeMaterialEffects
virtual TrackParametersUVector extrapolateStepwise(const EventContext &ctx, const TrackParameters &parm, const Surface &sf, PropDirection dir=anyDirection, const BoundaryCheck &bcheck=true, ParticleHypothesis particle=pion) const override final
Extrapolation method where a step-wise navigation to the destination surface is performed.
virtual std::pair< std::unique_ptr< TrackParameters >, const Layer * > extrapolateToNextActiveLayerM(const EventContext &ctx, const TrackParameters &parm, PropDirection dir, const BoundaryCheck &bcheck, std::vector< const Trk::TrackStateOnSurface * > &material, ParticleHypothesis particle=pion, MaterialUpdateMode matupmode=addNoise) const override final
Extrapolation to the next active layer with material collection.
void addMaterialEffectsOnTrack(const EventContext &ctx, Cache &cache, const Trk::IPropagator &prop, Trk::CacheOwnedPtr< Trk::TrackParameters > parm, const Trk::Layer &lay, const Trk::TrackingVolume &vol, Trk::PropDirection propDir, Trk::ParticleHypothesis) const
helper method for MaterialEffectsOnTrack to be added
StringArrayProperty m_updatNames
Interface class IDynamicLayerCreator It inherits from IAlgTool.
Interface class IEnergyLossUpdator.
Interface class for the extrapolation AlgTool, it inherits from IAlgTool Detailed information about p...
Interface class for the updater AlgTool, it inherits from IAlgTool.
Interface class IMultipleScatteringUpdator.
Interface class IPropagators It inherits from IAlgTool.
Definition IPropagator.h:55
Base Class for a Detector Layer in the Tracking realm.
Definition Layer.h:72
magnetic field properties to steer the behavior of the extrapolation
represents the full description of deflection and e-loss of a track in material.
Abstract Base Class for tracking surfaces.
represents the track state (measurement, material, fit parameters and quality) at a surface.
The TrackingGeometry class is the owner of the constructed TrackingVolumes.
Full Volume description used in Tracking, it inherits from Volume to get the geometrical structure,...
Base class for all volumes inside the tracking realm, it defines the interface for inherited Volume c...
Definition Volume.h:36
STL class.
STL class.
Definition of ATLAS Math & Geometry primitives (Amg)
Ensure that the ATLAS eigen extensions are properly loaded.
PropDirection
PropDirection, enum for direction of the propagation.
@ anyDirection
ParametersBase< NeutralParametersDim, Neutral > NeutralParameters
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.
MaterialUpdateMode
This is a steering enum to force the material update it can be: (1) addNoise (-1) removeNoise Second ...
std::vector< std::unique_ptr< Trk::TrackParameters > > TrackParametersUVector
std::pair< const Surface *, BoundaryCheck > DestSurf
typedef for input surfaces, boundary check
Definition IPropagator.h:45
ParametersBase< TrackParametersDim, Charged > TrackParameters
T * CacheOwnedPtr
STL namespace.
#define private