Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:31:26

0001 #ifndef AnalyticalCurvilinearJacobian_H
0002 #define AnalyticalCurvilinearJacobian_H
0003 
0004 #include "DataFormats/Math/interface/AlgebraicROOTObjects.h"
0005 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0006 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
0007 
0008 /** \class AnalyticalCurvilinearJacobian 
0009  * Creating Jacobian of transformation within the curvilinear frame.
0010  * The basic functionality of this class is to provide the (analytical) Jacobian matrix
0011  * of the transformation within the curvilinear frame from the state defined
0012  * by globalParameters to the state defined by x and p. This Jacobian can then be used
0013  * to yield the corresponding error propagation. The current implementation
0014  * is based on the original derivations by W. Wittek. However, due to the implicit float
0015  * precision, two terms ((4,1) and (5,1)) have been modified in order to make the 
0016  * calculations more stable in a numerical sense.
0017  */
0018 
0019 class GlobalTrajectoryParameters;
0020 
0021 class AnalyticalCurvilinearJacobian {
0022 public:
0023   /// default constructor (for tests)
0024   AnalyticalCurvilinearJacobian() : theJacobian(ROOT::Math::SMatrixNoInit()) {}
0025 
0026   /// get Field at starting state (internally)
0027   AnalyticalCurvilinearJacobian(const GlobalTrajectoryParameters& globalParameters,
0028                                 const GlobalPoint& x,
0029                                 const GlobalVector& p,
0030                                 const double& s);
0031   /// new: give Field as a parameter
0032   AnalyticalCurvilinearJacobian(const GlobalTrajectoryParameters& globalParameters,
0033                                 const GlobalPoint& x,
0034                                 const GlobalVector& p,
0035                                 const GlobalVector& theFieldInInverseGeV,
0036                                 const double& s);
0037 
0038 public:
0039   /// result for non-vanishing curvature
0040   void computeFullJacobian(
0041       const GlobalTrajectoryParameters&, const GlobalPoint&, const GlobalVector&, const GlobalVector&, const double& s);
0042   /// result for non-vanishing curvature and "small" step
0043   void computeInfinitesimalJacobian(
0044       const GlobalTrajectoryParameters&, const GlobalPoint&, const GlobalVector&, const GlobalVector&, const double& s);
0045   /// straight line approximation
0046   void computeStraightLineJacobian(const GlobalTrajectoryParameters&,
0047                                    const GlobalPoint&,
0048                                    const GlobalVector&,
0049                                    const double& s);
0050 
0051   const AlgebraicMatrix55& jacobian() const { return theJacobian; }
0052 
0053 private:
0054   AlgebraicMatrix55 theJacobian;
0055 };
0056 
0057 #endif