ATLAS Offline Software
Loading...
Searching...
No Matches
cfNewP.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
4
6#include <cmath>
7
8namespace Trk {
9
10void cfnewp(const long int ich, const double *parold, const double *ref,
11 double *s, double *parnew, double *per)
12{
13
14 double dphi, coth, hper, zper, zeps, r__, cs, xc, yc, sn, sipart, eps;
15
16/* ------------------------------------------------------------*/
17/* This routine propagates the trajectory parameters */
18/* w.r.t to a new reference point. */
19/* RETURNED POSITION IS NOT A POSITION OF CLOSEST APPROACH */
20/* BUT PERIGEE ASSUMIMG THAT REF IS */
21/* A CENTER OF COORDINATE SYSTEM */
22/* */
23/* INPUT: ICH Charge(-1,0,1) */
24/* PAROLD Initial parameters(EPS,H,THE,PHI,1./R) */
25/* REF Position of new reference point */
26/* OUTPUT: S Curved abcissa of new perigee */
27/* PARNEW Parameters evaluated at new perigee */
28/* PER Position of new perigee */
29/* Author: V.Kostyukhin */
30/* ------------------------------------------------------------*/
31 /* Parameter adjustments */
32 --per;
33 --parnew;
34 --ref;
35 --parold;
36
37 eps = parold[1];
38 sn = sin(parold[4]);
39 cs = cos(parold[4]);
40 coth = 1. / tan(parold[3]);
41 zeps = parold[2];
42
43/* Neutral track */
44 if ( ich == 0) {
45 hper = eps - ref[1] * sn + ref[2] * cs;
46 dphi = 0.;
47 (*s) = ref[1] * cs + ref[2] * sn;
48 zper = zeps + coth * (*s) - ref[3];
49 } else {
50 r__ = 1. / parold[5];
51 sipart = 1.;
52 if (r__ < 0.) sipart = -1.;
53/* -- Centre of the circle and perigee */
54 xc = (eps - r__) * sn - ref[1];
55 yc = -(eps - r__) * cs- ref[2];
56 hper = r__ - sipart * sqrt(xc*xc + yc*yc);
57/* -- Phi */
58 double tmp_prec= - eps - cs*ref[2] + sn*ref[1];
59 dphi = atan2(sipart * (ref[1]*cs + ref[2]*sn),
60 sipart * (r__ + tmp_prec) );
61 (*s) = r__*dphi;
62/* -- Z at VXOLD */
63 zper = zeps + coth * (*s) - ref[3];
64 }
65 parnew[1] = hper;
66 parnew[2] = zper;
67 parnew[3] = parold[3];
68 parnew[4] = parold[4] + dphi;
69
70/* check 2*pi period in phi */
71 while (parnew[4] > 6.2831853071794) parnew[4] -= 6.2831853071794;
72 while (parnew[4] <-6.2831853071794) parnew[4] += 6.2831853071794;
73
74
75
76 parnew[5] = parold[5];
77 per[1] = ref[1] + sin(parold[4] + dphi) * hper;
78 per[2] = ref[2] - cos(parold[4] + dphi) * hper;
79 per[3] = ref[3] + zper;
80}
81
82
83} /* End of VKalVrtCore namespace */
const std::regex ref(r_ef)
Ensure that the ATLAS eigen extensions are properly loaded.
void cfnewp(const long int ich, const double *parold, const double *ref, double *s, double *parnew, double *per)
Definition cfNewP.cxx:10