Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #ifndef TransverseImpactPointExtrapolator_h_
0002 #define TransverseImpactPointExtrapolator_h_
0003 
0004 #include "TrackingTools/GeomPropagators/interface/Propagator.h"
0005 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0006 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
0007 #include "DataFormats/GeometryCommonDetAlgo/interface/DeepCopyPointerByClone.h"
0008 #include "MagneticField/Engine/interface/MagneticField.h"
0009 
0010 class FreeTrajectoryState;
0011 class TrajectoryStateOnSurface;
0012 class Plane;
0013 template <class T>
0014 class ReferenceCountingPointer;
0015 
0016 /** Extrapolate to impact point with respect to vtx,
0017  * i.e. point of closest approach to vtx in 2D.
0018  * The surface of the returned TrajectoryStateOnSurface 
0019  * is chosen centred on vtx;
0020  * the axes of the local coordinate system (x_loc, y_loc, z_loc) are 
0021  * z_loc // trajectory direction in transverse plane at impact point;
0022  * x_loc normal to trajectory and along impact vector (impact point - vtx);
0023  * y_loc forms a right-handed system with the other axes.
0024  */
0025 
0026 class TransverseImpactPointExtrapolator {
0027 public:
0028   /// constructor with default geometrical propagator
0029   TransverseImpactPointExtrapolator();
0030 
0031   /// constructor with default geometrical propagator
0032   TransverseImpactPointExtrapolator(const MagneticField* field);
0033   /// constructor with user-supplied propagator
0034   TransverseImpactPointExtrapolator(const Propagator& u);
0035 
0036   /// extrapolation with default (=geometrical) propagator
0037   TrajectoryStateOnSurface extrapolate(const FreeTrajectoryState& fts, const GlobalPoint& vtx) const;
0038   /// as above, but from TrajectoryStateOnSurface
0039   TrajectoryStateOnSurface extrapolate(const TrajectoryStateOnSurface tsos, const GlobalPoint& vtx) const;
0040 
0041   /// extrapolation with user-supplied propagator
0042   TrajectoryStateOnSurface extrapolate(const FreeTrajectoryState& fts,
0043                                        const GlobalPoint& vtx,
0044                                        const Propagator& u) const;
0045   /// as above, but from TrajectoryStateOnSurface
0046   TrajectoryStateOnSurface extrapolate(const TrajectoryStateOnSurface tsos,
0047                                        const GlobalPoint& vtx,
0048                                        const Propagator& u) const;
0049 
0050 private:
0051   /// extrapolation of (multi) TSOS with (internal or user-supplied) propagator
0052   TrajectoryStateOnSurface doExtrapolation(const TrajectoryStateOnSurface tsos,
0053                                            const GlobalPoint& vtx,
0054                                            const Propagator& u) const;
0055   /// extrapolation of (single) FTS with (internal or user-supplied) propagator
0056   TrajectoryStateOnSurface doExtrapolation(const FreeTrajectoryState& fts,
0057                                            const GlobalPoint& vtx,
0058                                            const Propagator& u) const;
0059   /// computation of the TIP surface
0060   ReferenceCountingPointer<Plane> tipSurface(const GlobalPoint& position,
0061                                              const GlobalVector& momentum,
0062                                              const double& signedTransverseRadius,
0063                                              const GlobalPoint& vtx) const;
0064 
0065 private:
0066   DeepCopyPointerByClone<Propagator> thePropagator;
0067 };
0068 
0069 #endif