CMS 3D CMS Logo

JacobianLocalToCurvilinear.cc

Go to the documentation of this file.
00001 #include "TrackingTools/AnalyticalJacobians/interface/JacobianLocalToCurvilinear.h"
00002 #include "DataFormats/GeometrySurface/interface/Surface.h"
00003 #include "TrackingTools/TrajectoryParametrization/interface/LocalTrajectoryParameters.h"
00004 #include "MagneticField/Engine/interface/MagneticField.h"
00005 
00006 JacobianLocalToCurvilinear::
00007 JacobianLocalToCurvilinear(const Surface& surface, 
00008                            const LocalTrajectoryParameters& localParameters,
00009                            const MagneticField& magField) : theJacobian() {
00010   
00011     // Origin: TRSDSC
00012   GlobalPoint  x = surface.toGlobal(localParameters.position());
00013   LocalVector tnl = localParameters.momentum().unit();
00014   GlobalVector dj = surface.toGlobal(LocalVector(1., 0., 0.));
00015   GlobalVector dk = surface.toGlobal(LocalVector(0., 1., 0.));
00016   GlobalVector tn = surface.toGlobal(tnl);
00017 
00018   GlobalVector p = surface.toGlobal(localParameters.momentum());
00019   GlobalVector pt(p.x(), p.y(), 0.);
00020   pt = pt.unit();
00021   //  GlobalVector di = tsos.surface().toGlobal(LocalVector(0., 0., 1.));
00022 
00023   // rotate coordinates because of wrong coordinate system in orca
00024   LocalVector tvw(tnl.z(), tnl.x(), tnl.y());
00025   double cosl = tn.perp(); if (cosl < 1.e-30) cosl = 1.e-30;
00026   double cosl1 = 1./cosl;
00027   GlobalVector un(-tn.y()*cosl1, tn.x()*cosl1, 0.);
00028   GlobalVector vn(-tn.z()*un.y(), tn.z()*un.x(), cosl);
00029   double uj = un.dot(dj);
00030   double uk = un.dot(dk);
00031   double vj = vn.dot(dj);
00032   double vk = vn.dot(dk);
00033   theJacobian(0,0) = 1.;
00034   theJacobian(1,1) = tvw.x()*vj;
00035   theJacobian(1,2) = tvw.x()*vk;
00036   theJacobian(2,1) = tvw.x()*uj*cosl1;
00037   theJacobian(2,2) = tvw.x()*uk*cosl1;
00038   theJacobian(3,3) = uj;
00039   theJacobian(3,4) = uk;
00040   theJacobian(4,3) = vj;
00041   theJacobian(4,4) = vk;
00042   // GlobalVector h = MagneticField::inInverseGeV(x);
00043   GlobalVector h  = magField.inTesla(x) * 2.99792458e-3;
00044   double q = -h.mag() * localParameters.signedInverseMomentum();
00045   double sinz =-un.dot(h.unit());
00046   double cosz = vn.dot(h.unit());
00047   theJacobian(1,3) = -q*tvw.y()*sinz;
00048   theJacobian(1,4) = -q*tvw.z()*sinz;
00049   theJacobian(2,3) = -q*tvw.y()*cosz*cosl1;
00050   theJacobian(2,4) = -q*tvw.z()*cosz*cosl1;
00051   // end of TRSDSC
00052 
00053   //dbg::dbg_trace(1,"Loc2Cu", localParameters.vector(),x,dj,dk,theJacobian);
00054 }
00055 const AlgebraicMatrix JacobianLocalToCurvilinear::jacobian_old() const{
00056   return asHepMatrix(theJacobian);
00057 }
00058 const AlgebraicMatrix55& JacobianLocalToCurvilinear::jacobian() const{
00059   return theJacobian;
00060 }

Generated on Tue Jun 9 17:48:15 2009 for CMSSW by  doxygen 1.5.4