34void PropagateSTD(
long int ,
long int Charge,
35 const double *ParOld,
const double *CovOld,
36 const double *RefStart,
const double *RefEnd,
37 double *ParNew,
double *CovNew,
39 double Way, closePoint[3], Goal[3];
40 Goal[0] = RefEnd[0] - RefStart[0];
41 Goal[1] = RefEnd[1] - RefStart[1];
42 Goal[2] = RefEnd[2] - RefStart[2];
43 cfnewp(Charge, ParOld, &Goal[0], &Way, ParNew, closePoint);
44 if (CovOld !=
nullptr)
45 cferpr(Charge, ParOld, &Goal[0], Way, CovOld, CovNew);
48 double vBx, vBy, vBz, vBzn;
53 double Corr = vBzn / vBz;
55 if (CovOld !=
nullptr) {
60 CovNew[14] *= Corr * Corr;
68void PropagateRKM(
long int Charge,
69 const double *ParOld,
const double *CovOld,
70 const double *RefStart,
const double *RefEnd,
71 double *ParNew,
double *CovNew,
74 double closePoint[3], Goal[3];
75 Goal[0] = RefEnd[0] - RefStart[0];
76 Goal[1] = RefEnd[1] - RefStart[1];
77 Goal[2] = RefEnd[2] - RefStart[2];
78 cfnewp(Charge, ParOld, &Goal[0], &Way, ParNew, closePoint);
79 if (CovOld !=
nullptr)
80 cferpr(Charge, ParOld, &Goal[0], Way, CovOld, CovNew);
83 cfnewpm(ParOld, RefStart, RefEnd, Way, ParNew, closePoint, CONTROL);
87 double vBx, vBy, vBz, vBzn;
92 double Corr = vBzn / vBz;
94 if (CovOld !=
nullptr) {
99 CovNew[14] *= Corr * Corr;
132 const double *CovOld,
const double *RefOld,
double *RefNew,
133 double *ParNew,
double *CovNew,
135 if (RefOld[0] == RefNew[0] && RefOld[1] == RefNew[1] &&
136 RefOld[2] == RefNew[2]) {
137 std::copy(ParOld, ParOld + 5, ParNew);
138 if (CovOld !=
nullptr) {
139 std::copy(CovOld, CovOld + 15, CovNew);
146 if (FitControl ==
nullptr ||
152 PropagateRKM(Charge, ParOld, CovOld, RefOld, RefNew, ParNew, CovNew,
155 PropagateSTD(TrkID, Charge, ParOld, CovOld, RefOld, RefNew, ParNew,
164 PropagateSTD(TrkID, Charge, ParOld, CovOld, RefOld, RefNew, ParNew,
168 RefNew, ParNew, CovNew,
170 if (ParNew[0] == 0. && ParNew[1] == 0. && ParNew[2] == 0. &&
171 ParNew[3] == 0. && ParNew[4] == 0.) {
172 PropagateRKM(Charge, ParOld, CovOld, RefOld, RefNew, ParNew, CovNew,
180 FitControl->
vk_funcProp(TrkID, Charge, ParOld, CovOld, RefOld, RefNew,
188 double *ParNew,
double *CovNew,
190 if (RefOld[0] == RefNew[0] && RefOld[1] == RefNew[1] &&
191 RefOld[2] == RefNew[2]) {
196 long int TrkID = trk->
Id;
197 long int Charge = trk->
Charge;
201 if (FitControl ==
nullptr ||
210 ParNew, CovNew, FitControl);
218 ParNew, CovNew, FitControl);
221 trk->
refCovar, RefOld, RefNew, ParNew,
223 if (ParNew[0] == 0. && ParNew[1] == 0. && ParNew[2] == 0. &&
224 ParNew[3] == 0. && ParNew[4] == 0.) {
226 ParNew, CovNew, FitControl);
234 RefNew, ParNew, CovNew);
#define vkalUseRKMPropagator
const basePropagator * vk_objProp
const addrPropagator vk_funcProp
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 ~basePropagator()
static void getMagFld(const double, const double, const double, double &, double &, double &, const VKalVrtControlBase *)
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 cferpr(const long int ich, const double *par, const double *ref, const double s0, const double *errold, double *errnew)
void cfnewpm(const double *par, const double *xyzStart, const double *xyzEnd, const double ustep, double *parn, double *closePoint, const VKalVrtControlBase *CONTROL)
void cfnewp(const long int ich, const double *parold, const double *ref, double *s, double *parnew, double *per)