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, double *, double *, double *,
24 double *, double *, double *);
25
26class VKTrack;
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
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
virtual bool checkTarget(double *RefEnd, const IVKalState &istate) const =0
virtual ~basePropagator()
~vkalPropagator()=default
static bool checkTarget(double *RefEnd)
static void Propagate(long int TrkID, long int Charge, double *ParOld, double *CovOld, double *RefStart, double *RefEnd, double *ParNew, double *CovNew, VKalVrtControlBase *FitControl=0)
Ensure that the ATLAS eigen extensions are properly loaded.
void(* addrPropagator)(long int, long int, double *, double *, double *, double *, double *, double *)
Definition Propagator.h:23