Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2021-02-14 14:31:32

0001 #ifndef AnalyticalImpactPointExtrapolator_h_
0002 #define AnalyticalImpactPointExtrapolator_h_
0003 
0004 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0005 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
0006 
0007 #include "DataFormats/GeometryCommonDetAlgo/interface/DeepCopyPointerByClone.h"
0008 #include "TrackingTools/GeomPropagators/interface/Propagator.h"
0009 
0010 class FreeTrajectoryState;
0011 class TrajectoryStateOnSurface;
0012 class IterativeHelixExtrapolatorToLine;
0013 class MagneticField;
0014 
0015 /** Extrapolate to impact point with respect to vtx, i.e. to the point 
0016  *  of closest approach to vtx in 3D. It is slightly faster than the 
0017  *  ImpactPointExtrapolator. The helix model is explicitely used in
0018  *  the determination of the target surface.
0019  *  This target surface is centered on vtx;
0020  *  the axes of the local coordinate system (x_loc, y_loc, z_loc) are 
0021  *  z_loc // trajectory direction 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 AnalyticalImpactPointExtrapolator {
0027 public:
0028   /// constructor with default geometrical propagator
0029   AnalyticalImpactPointExtrapolator(const MagneticField* field);
0030 
0031   /// constructor with alternative propagator
0032   AnalyticalImpactPointExtrapolator(const Propagator&, const MagneticField*);
0033 
0034   /// extrapolation from FreeTrajectoryState
0035   TrajectoryStateOnSurface extrapolate(const FreeTrajectoryState& fts, const GlobalPoint& vtx) const;
0036   /// as above, but from TrajectoryStateOnSurface
0037   TrajectoryStateOnSurface extrapolate(const TrajectoryStateOnSurface tsos, const GlobalPoint& vtx) const;
0038 
0039 private:
0040   /// extrapolation of (multi) TSOS
0041   TrajectoryStateOnSurface extrapolateFullState(const TrajectoryStateOnSurface tsos, const GlobalPoint& vertex) const;
0042   /// extrapolation of (single) FTS
0043   TrajectoryStateOnSurface extrapolateSingleState(const FreeTrajectoryState& fts, const GlobalPoint& vertex) const;
0044   /// the actual propagation to a new point & momentum vector
0045   bool propagateWithHelix(const IterativeHelixExtrapolatorToLine& extrapolator,
0046                           const GlobalPoint& vertex,
0047                           GlobalPoint& x,
0048                           GlobalVector& p,
0049                           double& s) const;
0050 
0051 private:
0052   DeepCopyPointerByClone<Propagator> thePropagator;
0053   const MagneticField* theField;
0054 };
0055 
0056 #endif