17#ifndef STEP_Propagator_H
18#define STEP_Propagator_H
22#include "GaudiKernel/ToolHandle.h"
45 class HepRandomEngine;
173 STEP_Propagator(
const std::string&,
const std::string&,
const IInterface*);
178 virtual StatusCode
initialize() override final;
181 virtual StatusCode
finalize() override final;
190 bool rC = false)
const override final;
194 const EventContext& ctx,
201 bool returnCurv = false,
206 const EventContext& ctx,
214 bool usePathLimit = false,
215 bool returnCurv = false,
221 const EventContext& ctx,
237 const EventContext& ctx,
248 bool usePathLimit = false,
249 bool returnCurv = false,
256 const EventContext& ctx,
265 bool returnCurv = false,
270 const EventContext& ctx,
277 bool returnCurv = false,
283 const EventContext& ctx,
291 bool returnCurv = false,
296 const EventContext& ctx,
306 const EventContext& ctx,
315 const EventContext& ctx,
334 ATH_MSG_ERROR(
"Call to non-implemented multiStatePropagate");
391 std::vector<const Trk::TrackStateOnSurface*>*
m_matstates{
nullptr };
393 std::vector<std::pair<std::unique_ptr<Trk::TrackParameters>,
int>>*
444 bool errorPropagation,
446 std::vector<DestSurf>& targetSurfaces,
450 std::vector<unsigned int>& solutions,
452 bool returnCurv =
false)
const;
458 bool errorPropagation,
459 std::vector<DestSurf>& sfs,
462 std::vector<unsigned int>& solutions,
464 double sumPath)
const;
480 double radDist)
const;
487 "Error tolerance. Low tolerance gives igh accuracy"};
489 "Switch material effects on or off"};
491 "Include B-field gradients in the error propagation"};
493 "Include dg/dlambda into the error propagation? Only relevant when energy loss is true."};
495 "Stop propagation below this momentum in MeV"};
497 "Add multiple scattering to the covariance matrix?"};
498 BooleanProperty
m_energyLoss{
this,
"EnergyLoss",
true,
"Include energy loss?"};
500 "Provide the extended EnergyLoss object with MopIonization etc."};
502 "Add energy loss fluctuations (straggling) to the covariance matrix?"};
503 BooleanProperty
m_MPV{
this,
"MostProbableEnergyLoss",
false,
504 "Use the most probable value of the energy loss, else use the mean energy loss."};
506 "Scale for adjusting the width of the energy loss fluctuations."};
508 "Scale for adjusting the multiple scattering contribution to the covariance matrix."};
510 "Maximum propagation length in mm."};
512 "Maximum number of allowed steps (to avoid infinite loops)."};
514 "maximal layer thickness for multiple scattering calculations"};
519 "flag for simulation mode"};
524 "Random number generator"};
528 "Name of the random number stream"};
533 "AtlasFieldCacheCondObj",
535 "Name of the Magnetic Field conditions object key"
539 CLHEP::HepRandomEngine*
getRandomEngine (
const EventContext& ctx)
const;
std::vector< FPGATrackSimHit > hitVector
A wrapper class for event-slot-local random engines.
Base Class for a navigation object (active) in the Calo realm.
for description of non-homogenous dense volumes
The BoundaryCheck class allows to steer the way surface boundaries are used for inside/outside checks...
Bounds for a cylindrical Surface.
This class describes energy loss material effects in the ATLAS tracking EDM.
Interface class IPropagators It inherits from IAlgTool.
virtual std::unique_ptr< NeutralParameters > propagate(const NeutralParameters ¶meters, const Surface &sf, PropDirection dir, const BoundaryCheck &bcheck, bool returnCurv=false) const =0
Main propagation method for NeutralParameters.
magnetic field properties to steer the behavior of the extrapolation
A common object to be contained by.
void smear(Cache &cache, double &phi, double &theta, const Trk::TrackParameters *parms, double radDist) const
ToolHandle< ITimedMatEffUpdator > m_simMatUpdator
secondary interactions (brem photon emission)
virtual std::unique_ptr< Trk::NeutralParameters > propagate(const Trk::NeutralParameters &, const Trk::Surface &, Trk::PropDirection, const Trk::BoundaryCheck &, bool rC=false) const override final
Main propagation method NeutralParameters.
void dumpMaterialEffects(Cache &cache, const Trk::CurvilinearParameters *trackParameters, double path) const
virtual std::optional< TrackSurfaceIntersection > intersectSurface(const EventContext &ctx, const Surface &surface, const TrackSurfaceIntersection &trackIntersection, const double qOverP, const MagneticFieldProperties &mft, ParticleHypothesis particle) const override final
Intersection and propagation:
virtual StatusCode finalize() override final
AlgTool finalize method.
BooleanProperty m_detailedEloss
virtual StatusCode initialize() override final
AlgTool initialize method.
STEP_Propagator(const std::string &, const std::string &, const IInterface *)
DoubleProperty m_tolerance
virtual std::unique_ptr< Trk::TrackParameters > propagateT(const EventContext &ctx, const Trk::TrackParameters &trackParameters, std::vector< Trk::DestSurf > &targetSurfaces, Trk::PropDirection propagationDirection, const MagneticFieldProperties &magneticFieldProperties, ParticleHypothesis particle, std::vector< unsigned int > &solutions, Trk::PathLimit &path, Trk::TimeLimit &time, bool returnCurv, const Trk::TrackingVolume *tVol, std::vector< Trk::HitInfo > *&hitVector) const override final
Propagate parameters and covariance with search of closest surface time included.
IntegerProperty m_maxSteps
BooleanProperty m_materialEffects
BooleanProperty m_simulation
StringProperty m_randomEngineName
virtual std::unique_ptr< Trk::TrackParameters > propagateParameters(const EventContext &ctx, const Trk::TrackParameters &trackParameters, const Trk::Surface &targetSurface, Trk::PropDirection propagationDirection, const Trk::BoundaryCheck &boundaryCheck, const MagneticFieldProperties &magneticFieldProperties, ParticleHypothesis particle, bool returnCurv=false, const Trk::TrackingVolume *tVol=nullptr) const override final
Propagate parameters only.
void setCacheFromProperties(Cache &cache) const
initialize cache with the variables we need to take from
BooleanProperty m_includeGgradient
virtual ~STEP_Propagator()
std::unique_ptr< Trk::TrackParameters > propagateRungeKutta(Cache &cache, bool errorPropagation, const Trk::TrackParameters &trackParameters, std::vector< DestSurf > &targetSurfaces, Trk::PropDirection propagationDirection, const MagneticFieldProperties &magneticFieldProperties, ParticleHypothesis particle, std::vector< unsigned int > &solutions, double &path, bool returnCurv=false) const
BooleanProperty m_multipleScattering
BooleanProperty m_straggling
CLHEP::HepRandomEngine * getRandomEngine(const EventContext &ctx) const
BooleanProperty m_includeBgradients
DoubleProperty m_momentumCutOff
void sampleBrem(Cache &cache, double mom) const
DoubleProperty m_scatteringScale
virtual Trk::MultiComponentState multiStatePropagate(const EventContext &, const MultiComponentState &, const Surface &, const MagneticFieldProperties &, const PropDirection, const BoundaryCheck &, const ParticleHypothesis) const override final
unimplemented multiStatePropagate
virtual std::optional< TrackSurfaceIntersection > intersect(const EventContext &ctx, const Trk::TrackParameters &trackParameters, const Trk::Surface &targetSurface, const Trk::MagneticFieldProperties &magneticFieldProperties, ParticleHypothesis particle, const Trk::TrackingVolume *tVol=nullptr) const override final
Propagate parameters and return path (Similar to propagateParameters.
ServiceHandle< IAthRNGSvc > m_rndGenSvc
Random Generator service.
DoubleProperty m_stragglingScale
void getFieldCacheObject(Cache &cache, const EventContext &ctx) const
virtual std::unique_ptr< Trk::TrackParameters > propagateM(const EventContext &ctx, const Trk::TrackParameters &trackParameters, std::vector< Trk::DestSurf > &targetSurfaces, Trk::PropDirection propagationDirection, const MagneticFieldProperties &magneticFieldProperties, ParticleHypothesis particle, std::vector< unsigned int > &solutions, std::vector< const Trk::TrackStateOnSurface * > *matstates, std::vector< std::pair< std::unique_ptr< Trk::TrackParameters >, int > > *intersections, double &path, bool usePathLimit=false, bool returnCurv=false, const Trk::TrackingVolume *tVol=nullptr, Trk::ExtrapolationCache *=nullptr) const override final
Propagate parameters and covariance with search of closest surface and material collection.
bool propagateWithJacobian(Cache &cache, bool errorPropagation, std::vector< DestSurf > &sfs, double *P, Trk::PropDirection propDir, std::vector< unsigned int > &solutions, double &path, double sumPath) const
ATHRNG::RNGWrapper * m_rngWrapper
Random engine.
BooleanProperty m_energyLoss
virtual void globalPositions(const EventContext &ctx, std::deque< Amg::Vector3D > &positionsList, const TrackParameters &trackParameters, const MagneticFieldProperties &magneticFieldProperties, const CylinderBounds &cylinderBounds, double maxStepSize, ParticleHypothesis particle, const Trk::TrackingVolume *tVol=0) const override final
Return a list of positions along the track.
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
represents a deflection of the track caused through multiple scattering in material.
Abstract Base Class for tracking surfaces.
represents the track state (measurement, material, fit parameters and quality) at a surface.
An intersection with a Surface is given by.
Full Volume description used in Tracking, it inherits from Volume to get the geometrical structure,...
This class represents the jacobian for transforming initial track parameters to new track parameters ...
Definition of ATLAS Math & Geometry primitives (Amg)
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
Ensure that the ATLAS eigen extensions are properly loaded.
PropDirection
PropDirection, enum for direction of the propagation.
std::vector< ComponentParameters > MultiComponentState
ParametersBase< NeutralParametersDim, Neutral > NeutralParameters
CurvilinearParametersT< TrackParametersDim, Charged, PlaneSurface > CurvilinearParameters
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.
std::pair< const Surface *, BoundaryCheck > DestSurf
typedef for input surfaces, boundary check
ParametersBase< TrackParametersDim, Charged > TrackParameters
Macro wrapping the nonstandard restrict keyword.
stuct to pass information to the heavy lifting calculation internal methods
double m_stragglingVariance
bool m_solenoid
Switch for turning off material effects temporarily.
const TrackingVolume * m_trackingVolume
std::vector< std::pair< std::unique_ptr< Trk::TrackParameters >, int > > * m_identifiedParameters
cache of intersections/hit info
std::vector< Trk::HitInfo > * m_hitVector
ParticleHypothesis m_particle
double m_bremSampleThreshold
std::vector< const Trk::TrackStateOnSurface * > * m_matstates
cache of intersections
double m_matdump_lastpath
MagField::AtlasFieldCache m_fieldCache
double m_bremEmitThreshold
int m_propagateWithPathLimit
Cache(const EventContext &ctx)
const Trk::BinnedMaterial * m_binMat
cache of TrackStateOnSurfaces
double m_combinedThickness
double m_particleMass
cache
std::vector< std::pair< int, std::pair< double, double > > > m_currentDist
bool m_multipleScattering
double m_inputThetaVariance
Trk::EnergyLoss m_combinedEloss
AmgSymMatrix(5) m_combinedCovariance
const EventContext & m_ctx
CLHEP::HepRandomEngine * m_randomEngine
const Material * m_material
cache for collecting the total X0 ans Elos
Trk::ExtrapolationCache * m_extrapolationCache