ATLAS Offline Software
Loading...
Searching...
No Matches
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
16namespace Trk {
17
18#define vkalUseRKMPropagator 0
19
20class VKalVrtControl;
21class IVKalState;
22
23typedef void (*addrPropagator)(long int, long int,
24 const double *, // ParOld
25 const double *, // CovOld
26 const double *, // RefStart
27 const double *, // RefEnd
28 double *, // ParNew
29 double *); // CovNew
30
31class VKTrack;
33
34//
35// Base class for concrete implementation of propagator (e.g. Athena one) to be
36// called by vkalPropagator
37//
39 public:
41 virtual ~basePropagator();
42 //
43 // Propagator from RefStart point to RefEnd point
44 // ParOld[5] - track perigee parameters with respect to RefStart point
45 // ParNew[5] - track perigee parameters with respect to RefEnd point
46 virtual void Propagate(long int TrkID, long int Charge, const double *ParOld,
47 const double *CovOld, const double *RefStart, const double *RefEnd,
48 double *ParNew, double *CovNew,
49 IVKalState &istate) const = 0;
50 virtual bool checkTarget(double *RefEnd, const IVKalState &istate) const = 0;
51 //
52};
53
54//
55// Main propagator in VKalVrtCore package.
56// Depending on VKalVrtControlBase object it either calls external propagator
57// or uses default implementations
58//
60 public:
62 ~vkalPropagator() = default;
63
64 static void Propagate(long int TrkID, long int Charge, const double *ParOld,
65 const double *CovOld, const double *RefOld, double *RefNew,
66 double *ParNew, double *CovNew,
67 VKalVrtControlBase *FitControl = 0);
68 static bool checkTarget(const double *RefEnd);
69 static void Propagate(VKTrack *trk, const double *RefStart, const double *RefEnd,
70 double *ParNew, double *CovNew,
71 VKalVrtControlBase *FitControl = 0);
72};
73
74} // namespace Trk
75#endif
virtual void Propagate(long int TrkID, long int Charge, const double *ParOld, const double *CovOld, const double *RefStart, const double *RefEnd, double *ParNew, double *CovNew, IVKalState &istate) const =0
virtual bool checkTarget(double *RefEnd, const IVKalState &istate) const =0
virtual ~basePropagator()
~vkalPropagator()=default
static void Propagate(long int TrkID, long int Charge, const double *ParOld, const double *CovOld, const double *RefOld, double *RefNew, double *ParNew, double *CovNew, VKalVrtControlBase *FitControl=0)
static bool checkTarget(const double *RefEnd)
Ensure that the ATLAS eigen extensions are properly loaded.
void(* addrPropagator)(long int, long int, const double *, const double *, const double *, const double *, double *, double *)
Definition Propagator.h:23