CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
JacobianCartesianToLocal.cc
Go to the documentation of this file.
4 
6  const LocalTrajectoryParameters& localParameters)
7  : theJacobian() {
8  //LocalCoordinates 1 = (q/|p|, dx/dz, dy/dz, x, y)
9  //LocalCoordinates 2 = (x, y, z, px, py, pz)
10  //Transformation: q/|p| = q/sqrt(px*px + py*py + pz*pz)
11  // dx/dz = px/pz
12  // dy/dz = py/pz
13  // x = x
14  // y = y
15  LocalVector plocal = localParameters.momentum();
16  double px = plocal.x(), py = plocal.y(), pz = plocal.z();
17  double p = plocal.mag();
18  TrackCharge q = localParameters.charge();
19  // for neutrals: qbp is 1/p instead of q/p -
20  // equivalent to charge 1
21  if (q == 0)
22  q = 1;
23  //Jacobian theJacobian( (q/|p|, dx/dz, dy/dz, x, y) = f(x, y, z, px, py, pz) )
24  theJacobian(0, 3) = -q * px / (p * p * p);
25  theJacobian(0, 4) = -q * py / (p * p * p);
26  theJacobian(0, 5) = -q * pz / (p * p * p);
27  if (fabs(pz) > 0) {
28  theJacobian(1, 3) = 1. / pz;
29  theJacobian(1, 5) = -px / (pz * pz);
30  theJacobian(2, 4) = 1. / pz;
31  theJacobian(2, 5) = -py / (pz * pz);
32  }
33  theJacobian(3, 0) = 1.;
34  theJacobian(4, 1) = 1.;
35 
36  /*
37  LocalVector l1 = surface.toLocal(GlobalVector(1., 0., 0.));
38  LocalVector l2 = surface.toLocal(GlobalVector(0., 1., 0.));
39  LocalVector l3 = surface.toLocal(GlobalVector(0., 0., 1.));
40  AlgebraicMatrix33 Rsub;
41  Rsub(0,0) = l1.x(); Rsub(0,1) = l2.x(); Rsub(0,2) = l3.x();
42  Rsub(1,0) = l1.y(); Rsub(1,1) = l2.y(); Rsub(1,2) = l3.y();
43  Rsub(2,0) = l1.z(); Rsub(2,1) = l2.z(); Rsub(2,2) = l3.z();
44  */
45 
46  AlgebraicMatrix33 Rsub;
47  // need to be copied anhhow to go from float to double...
48  Surface::RotationType const& rot = surface.rotation();
49  Rsub(0, 0) = rot.xx();
50  Rsub(0, 1) = rot.xy();
51  Rsub(0, 2) = rot.xz();
52  Rsub(1, 0) = rot.yx();
53  Rsub(1, 1) = rot.yy();
54  Rsub(1, 2) = rot.yz();
55  Rsub(2, 0) = rot.zx();
56  Rsub(2, 1) = rot.zy();
57  Rsub(2, 2) = rot.zz();
58 
60  R.Place_at(Rsub, 0, 0);
61  R.Place_at(Rsub, 3, 3);
63  //dbg::dbg_trace(1,"Ca2L", localParameters.vector(),l1,l2,l3,theJacobian);
64 }
T xx() const
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepStd< double, 3, 3 > > AlgebraicMatrix33
JacobianCartesianToLocal(const Surface &surface, const LocalTrajectoryParameters &localParameters)
T y() const
Definition: PV3DBase.h:60
T yx() const
T zx() const
T xy() const
int TrackCharge
Definition: TrackCharge.h:4
T zz() const
T mag() const
Definition: PV3DBase.h:64
T z() const
Definition: PV3DBase.h:61
T zy() const
LocalVector momentum() const
Momentum vector in the local frame.
T yy() const
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepStd< double, 6, 6 > > AlgebraicMatrix66
TrackCharge charge() const
Charge (-1, 0 or 1)
T xz() const
const RotationType & rotation() const
T x() const
Definition: PV3DBase.h:59
T yz() const