ATLAS Offline Software
Propagator.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 /* General track propagation implementation */
5 /* If external propagator is provided as */
6 /* either an object inherited from the basePropagator class*/
7 /* or a function addrPropagator - the vkalPropagator class */
8 /* will use it, otherwise the vkalPropagor uses simple */
9 /* propagatiob in constant magnetic field. */
10 /* */
11 /* Thread-safe implementation */
12 /*---------------------------------------------------------*/
13 #ifndef TRKVKALVRTCORE_PROPAGATOR_H
14 #define TRKVKALVRTCORE_PROPAGATOR_H
15 
16 namespace Trk {
17 
18 #define vkalUseRKMPropagator 0
19 
20 class VKalVrtControl;
21 class IVKalState;
22 
23 typedef void (*addrPropagator)(long int, long int, double *, double *, double *,
24  double *, double *, double *);
25 
26 class VKTrack;
27 class VKalVrtControlBase;
28 
29 //
30 // Base class for concrete implementation of propagator (e.g. Athena one) to be
31 // called by vkalPropagator
32 //
34  public:
36  virtual ~basePropagator();
37  //
38  // Propagator from RefStart point to RefEnd point
39  // ParOld[5] - track perigee parameters with respect to RefStart point
40  // ParNew[5] - track perigee parameters with respect to RefEnd point
41  virtual void Propagate(long int TrkID, long int Charge, double *ParOld,
42  double *CovOld, double *RefStart, double *RefEnd,
43  double *ParNew, double *CovNew,
44  IVKalState &istate) const = 0;
45  virtual bool checkTarget(double *RefEnd, const IVKalState &istate) const = 0;
46  //
47 };
48 
49 //
50 // Main propagator in VKalVrtCore package.
51 // Depending on VKalVrtControlBase object it either calls external propagator
52 // or uses default implementations
53 //
55  public:
57  ~vkalPropagator() = default;
58 
59  static void Propagate(long int TrkID, long int Charge, double *ParOld,
60  double *CovOld, double *RefStart, double *RefEnd,
61  double *ParNew, double *CovNew,
62  VKalVrtControlBase *FitControl = 0);
63  static bool checkTarget(double *RefEnd);
64  static void Propagate(VKTrack *trk, double *RefStart, double *RefEnd,
65  double *ParNew, double *CovNew,
66  VKalVrtControlBase *FitControl = 0);
67 };
68 
69 } // namespace Trk
70 #endif
Trk::basePropagator::Propagate
virtual void Propagate(long int TrkID, long int Charge, double *ParOld, double *CovOld, double *RefStart, double *RefEnd, double *ParNew, double *CovNew, IVKalState &istate) const =0
Trk::vkalPropagator::checkTarget
static bool checkTarget(double *RefEnd)
Definition: Propagator.cxx:108
Trk::basePropagator::checkTarget
virtual bool checkTarget(double *RefEnd, const IVKalState &istate) const =0
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
Trk::addrPropagator
void(* addrPropagator)(long int, long int, double *, double *, double *, double *, double *, double *)
Definition: Propagator.h:23
Trk::VKTrack
Definition: TrkVKalVrtCoreBase.h:64
Trk::basePropagator::basePropagator
basePropagator()
Trk::vkalPropagator::Propagate
static void Propagate(long int TrkID, long int Charge, double *ParOld, double *CovOld, double *RefStart, double *RefEnd, double *ParNew, double *CovNew, VKalVrtControlBase *FitControl=0)
Definition: Propagator.cxx:127
Trk::basePropagator
Definition: Propagator.h:33
Trk::basePropagator::~basePropagator
virtual ~basePropagator()
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::vkalPropagator::~vkalPropagator
~vkalPropagator()=default
Trk::vkalPropagator
Definition: Propagator.h:54
Trk::IVKalState
Definition: IVKalState.h:21
Trk::VKalVrtControlBase
Definition: TrkVKalVrtCore.h:26
Trk::vkalPropagator::vkalPropagator
vkalPropagator()