ATLAS Offline Software
Public Member Functions | List of all members
Trk::JacobianCurvilinearToLocal Class Reference

#include <JacobianCurvilinearToLocal.h>

Inheritance diagram for Trk::JacobianCurvilinearToLocal:
Collaboration diagram for Trk::JacobianCurvilinearToLocal:

Public Member Functions

 JacobianCurvilinearToLocal (const Trk::CurvilinearUVT &curvUVT, const Amg::Vector3D &locX, const Amg::Vector3D &locY, const Amg::Vector3D &locZ)
 Constructor for straight line track model. More...
 
 JacobianCurvilinearToLocal (const Amg::Vector3D &bfield, double qOp, double sinTheta, const CurvilinearUVT &curvUVT, const Amg::Vector3D &locX, const Amg::Vector3D &locY, const Amg::Vector3D &locZ)
 Constructor for helix track model. More...
 

Detailed Description

This class represents the jacobian for transforming from a curvilinear to a local frame

The curvilinear frame is defined as follows: Given a direction \( \vec t = \frac{\vec p }{|\vec p |} \) of a track at a specific point, the plane perpenticular to the track may be defined by two vectors \( (\vec u, \vec v) \), denoting \( \vec z \) as the global z-axis and defining: \( \vec{u} = \frac {\vec z \times \vec{t}}{|\vec z \times \vec{t}|} \) and
\( \vec{v} = \vec{t} \times \vec{u} \),
the unit vectors \( (\vec{curv_{i}}) = (\vec{u}, \vec{v}, \vec{t}) \) define at any point of the track a right-handed orthogonal coordinate system (the so-called curvilinear frame)
The local frame on a surface may be represented through two local vectors \( \vec{locX} \) and \( \vec{locY} \) within the plane and one perpenticular vector \( \vec{locZ} \) pointing along the surface's normal.

Detailed Description

The non-zero elements of the jacobian for the transformation between the curvilinear representation \( (u, v, \phi', \theta', q/p') \) and the local representations of the track parameters \( (locX, locY, \phi, \theta, q/p) \) can then be expressed as:

for the straight line case:

\( \frac{\partial locX}{\partial u} = \frac{\vec{locY} \cdot \vec{v}}{\vec{locZ} \cdot \vec{t}} \)
\( \frac{\partial locX}{\partial v} = - \frac{\vec{locY} \cdot \vec{u}}{\vec{locZ} \cdot \vec{t}} \)
\( \frac{\partial locY}{\partial u} = - \frac{\vec{locX} \cdot \vec{v}}{\vec{locZ} \cdot \vec{t}} \)
\( \frac{\partial locY}{\partial v} = \frac{\vec{locX} \cdot \vec{u}}{\vec{locZ} \cdot \vec{t}} \)
\( \frac{\partial \phi}{\partial \phi'} = 1 \)
\( \frac{\partial \theta}{\partial \theta'} = 1 \)
\( \frac{\partial (q/p)}{\partial (q/p)'} = 1 \)

and additionally for the helix case:

\( \frac{\partial\phi}{\partial u} = \frac{\alpha\cdot Q}{\sin\theta} \cdot (\vec{u}\cdot\vec{n})\frac{\vec{u}\cdot\vec{locZ}}{\vec{locZ} \cdot \vec{t}} \)
\( \frac{\partial\phi{\partial v} = \frac{\alpha\cdot Q}{\sin\theta} \cdot (\vec{u}\cdot\vec{n})\frac{\vec{v}\cdot\vec{locZ}}{\vec{locZ} \cdot \vec{t}} \)
\( \frac{\partial\theta}{\partial u} = -\alpha\cdot Q \cot (\vec{v}\cdot\vec{n})\frac{\vec{u}\cdot\vec{locZ}}{\vec{locZ} \cdot \vec{t}} \)
\( \frac{\partial\theta}{\partial v} = -\alpha\cdot Q \cot (\vec{v}\cdot\vec{n})\frac{\vec{v}\cdot\vec{locZ}}{\vec{locZ} \cdot \vec{t}}\)

Author
Andre.nosp@m.as.S.nosp@m.alzbu.nosp@m.rger.nosp@m.@cern.nosp@m..ch

Definition at line 74 of file JacobianCurvilinearToLocal.h.

Constructor & Destructor Documentation

◆ JacobianCurvilinearToLocal() [1/2]

Trk::JacobianCurvilinearToLocal::JacobianCurvilinearToLocal ( const Trk::CurvilinearUVT curvUVT,
const Amg::Vector3D locX,
const Amg::Vector3D locY,
const Amg::Vector3D locZ 
)

Constructor for straight line track model.

Calculates the Jacobian for straight line track model.

Definition at line 24 of file JacobianCurvilinearToLocal.cxx.

28  :
29  AmgMatrix(5,5)()
30 {
31  //initialize to zero
32  this->setIdentity();
33 
34  double locZdotCurvT = locZ.dot(curvUVT.curvT());
35  (*this)(0,0) = curvUVT.curvV().dot(locY)/locZdotCurvT; // d(locX)/d(u)
36  (*this)(0,1) = - curvUVT.curvU().dot(locY)/locZdotCurvT; // d(locX)/d(v)
37  (*this)(1,0) = - curvUVT.curvV().dot(locX)/locZdotCurvT; // d(locY)/d(u)
38  (*this)(1,1) = curvUVT.curvU().dot(locX)/locZdotCurvT; // d(locY)/d(v)
39 
40 }

◆ JacobianCurvilinearToLocal() [2/2]

Trk::JacobianCurvilinearToLocal::JacobianCurvilinearToLocal ( const Amg::Vector3D bfield,
double  qOp,
double  sinTheta,
const CurvilinearUVT curvUVT,
const Amg::Vector3D locX,
const Amg::Vector3D locY,
const Amg::Vector3D locZ 
)

Constructor for helix track model.

Calculates the Jacobian for helical track model.

Definition at line 45 of file JacobianCurvilinearToLocal.cxx.

53  : AmgMatrix(5, 5)()
54 {
55  this->setIdentity();
56 
57  // prepare the dot products
58  double oneOverZt = 1./locZ.dot(curvUVT.curvT()); // 1./locZ * t
59  double ux = curvUVT.curvU().dot(locX); // u * locX
60  double uy = curvUVT.curvU().dot(locY); // u * locY
61  double uz = curvUVT.curvU().dot(locZ); // u * locZ
62  double vx = curvUVT.curvV().dot(locX); // v * locX
63  double vy = curvUVT.curvV().dot(locY); // v * locY
64  double vz = curvUVT.curvV().dot(locZ); // v * locZ
65  // specific for the helix
66  const Amg::Vector3D& h = bfield.normalized();
67  Amg::Vector3D n(h.cross(curvUVT.curvT())); // direction normal to track and magnetic field direction
68  double alpha = n.mag(); // | h x t | projection of track normal to magnetic field direction
69  n /= alpha; // normalization
70  double B = bfield.mag();
71 
72  // -> Psi and pathlength related variables
73  double Q = - B * Gaudi::Units::c_light * qOp;
74  double alphaQ = alpha*Q;
75 
76  double un = curvUVT.curvU().dot(n);
77  double vn = curvUVT.curvV().dot(n);
78  // fill the components
79  (*this)(0,0) = vy*oneOverZt; // d(locX)/d(u)
80  (*this)(0,1) = - uy*oneOverZt; // d(locX)/d(v)
81  (*this)(1,0) = - vx*oneOverZt; // d(locY)/d(u)
82  (*this)(1,1) = ux*oneOverZt; // d(locY)/d(v)
83  (*this)(2,0) = - alphaQ/sinTheta*un*uz*oneOverZt; // d(phi)/d(u)
84  (*this)(2,1) = - alphaQ/sinTheta*un*vz*oneOverZt; // d(phi)/d(v)
85  (*this)(3,0) = alphaQ*vn*uz*oneOverZt; // d(theta)/d(v)
86  (*this)(3,1) = alphaQ*vn*vz*oneOverZt; // d(theta)/d(v)
87 
88 }

The documentation for this class was generated from the following files:
Trk::AmgMatrix
AmgMatrix(3, 3) NeutralParticleParameterCalculator
Definition: NeutralParticleParameterCalculator.cxx:233
Trk::locX
@ locX
Definition: ParamDefs.h:37
Trk::locY
@ locY
local cartesian
Definition: ParamDefs.h:38
Trk::CurvilinearUVT::curvT
const Amg::Vector3D & curvT() const
Trk::locZ
@ locZ
local cylindrical
Definition: ParamDefs.h:42
Trk::CurvilinearUVT::curvU
const Amg::Vector3D & curvU() const
Access methods.
beamspotman.n
n
Definition: beamspotman.py:731
dqt_zlumi_alleff_HIST.B
B
Definition: dqt_zlumi_alleff_HIST.py:110
python.PhysicalConstants.c_light
float c_light
Definition: PhysicalConstants.py:63
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
h
Trk::CurvilinearUVT::curvV
const Amg::Vector3D & curvV() const