CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
JacobianCartesianToLocal.cc
Go to the documentation of this file.
4 
6  const LocalTrajectoryParameters& localParameters) : theJacobian() {
7 
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 ) q = 1;
22  //Jacobian theJacobian( (q/|p|, dx/dz, dy/dz, x, y) = f(x, y, z, px, py, pz) )
23  theJacobian(0,3) = -q*px/(p*p*p); theJacobian(0,4) = -q*py/(p*p*p); theJacobian(0,5) = -q*pz/(p*p*p);
24  if(fabs(pz) > 0){
25  theJacobian(1,3) = 1./pz; theJacobian(1,5) = -px/(pz*pz);
26  theJacobian(2,4) = 1./pz; theJacobian(2,5) = -py/(pz*pz);
27  }
28  theJacobian(3,0) = 1.;
29  theJacobian(4,1) = 1.;
30 
31  /*
32  LocalVector l1 = surface.toLocal(GlobalVector(1., 0., 0.));
33  LocalVector l2 = surface.toLocal(GlobalVector(0., 1., 0.));
34  LocalVector l3 = surface.toLocal(GlobalVector(0., 0., 1.));
35  AlgebraicMatrix33 Rsub;
36  Rsub(0,0) = l1.x(); Rsub(0,1) = l2.x(); Rsub(0,2) = l3.x();
37  Rsub(1,0) = l1.y(); Rsub(1,1) = l2.y(); Rsub(1,2) = l3.y();
38  Rsub(2,0) = l1.z(); Rsub(2,1) = l2.z(); Rsub(2,2) = l3.z();
39  */
40 
41  AlgebraicMatrix33 Rsub;
42  // need to be copied anhhow to go from float to double...
43  Surface::RotationType const & rot = surface.rotation();
44  Rsub(0,0) = rot.xx(); Rsub(0,1) = rot.xy(); Rsub(0,2) = rot.xz();
45  Rsub(1,0) = rot.yx(); Rsub(1,1) = rot.yy(); Rsub(1,2) = rot.yz();
46  Rsub(2,0) = rot.zx(); Rsub(2,1) = rot.zy(); Rsub(2,2) = rot.zz();
47 
48 
49 
51  R.Place_at(Rsub,0,0);
52  R.Place_at(Rsub,3,3);
54  //dbg::dbg_trace(1,"Ca2L", localParameters.vector(),l1,l2,l3,theJacobian);
55 }
57  return asHepMatrix(theJacobian);
58 }
60  return theJacobian;
61 }
T xx() const
CLHEP::HepMatrix asHepMatrix(const ROOT::Math::SMatrix< double, N1, N2, typename ROOT::Math::MatRepStd< double, N1, N2 > > &rm)
Definition: Migration.h:49
ROOT::Math::SMatrix< double, 5, 6, ROOT::Math::MatRepStd< double, 5, 6 > > AlgebraicMatrix56
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepStd< double, 6, 6 > > AlgebraicMatrix66
JacobianCartesianToLocal(const Surface &surface, const LocalTrajectoryParameters &localParameters)
T y() const
Definition: PV3DBase.h:57
T yx() const
const AlgebraicMatrix jacobian_old() const
T zx() const
T xy() const
int TrackCharge
Definition: TrackCharge.h:4
T zz() const
T mag() const
Definition: PV3DBase.h:61
CLHEP::HepMatrix AlgebraicMatrix
T z() const
Definition: PV3DBase.h:58
T zy() const
LocalVector momentum() const
Momentum vector in the local frame.
T yy() const
const AlgebraicMatrix56 & jacobian() const
TrackCharge charge() const
Charge (-1, 0 or 1)
T xz() const
const RotationType & rotation() const
T x() const
Definition: PV3DBase.h:56
T yz() const
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepStd< double, 3, 3 > > AlgebraicMatrix33