Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #ifndef AnalyticalTrajectoryExtrapolatorToLine_h_
0002 #define AnalyticalTrajectoryExtrapolatorToLine_h_
0003 
0004 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0005 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
0006 #include "DataFormats/GeometryCommonDetAlgo/interface/DeepCopyPointerByClone.h"
0007 #include "TrackingTools/GeomPropagators/interface/Propagator.h"
0008 
0009 #include "FWCore/Utilities/interface/Visibility.h"
0010 
0011 class FreeTrajectoryState;
0012 class TrajectoryStateOnSurface;
0013 class Line;
0014 class IterativeHelixExtrapolatorToLine;
0015 class MagneticField;
0016 
0017 /** Extrapolate to the closest approach w.r.t. a line. This class is 
0018  *  faster than the TrajectoryExtrapolatorToLine. The helix model is 
0019  *  explicitely used in the determination of the target surface.
0020  *  This target surface is centered on the point of closest approach
0021  *  on the line.
0022  *  The axes of the local coordinate system (x_loc, y_loc, z_loc) are 
0023  *  z_loc // trajectory direction at point of closest approach;
0024  *  x_loc normal to trajectory and along impact vector (line->helix);
0025  *  y_loc forms a right-handed system with the other axes.
0026  */
0027 
0028 class AnalyticalTrajectoryExtrapolatorToLine {
0029 public:
0030   /// constructor with default geometrical propagator
0031   AnalyticalTrajectoryExtrapolatorToLine(const MagneticField* field);
0032 
0033   /// constructor with alternative propagator
0034   AnalyticalTrajectoryExtrapolatorToLine(const Propagator&);
0035 
0036   /// extrapolation from FreeTrajectoryState
0037   TrajectoryStateOnSurface extrapolate(const FreeTrajectoryState& fts, const Line& L) const;
0038 
0039   /// extrapolation from TrajectoryStateOnSurface
0040   TrajectoryStateOnSurface extrapolate(const TrajectoryStateOnSurface tsos, const Line& L) const;
0041 
0042 private:
0043   /// extrapolation of (multi) TSOS
0044   TrajectoryStateOnSurface extrapolateFullState(const TrajectoryStateOnSurface tsos,
0045                                                 const Line& line) const dso_internal;
0046   /// extrapolation of (single) FTS
0047   TrajectoryStateOnSurface extrapolateSingleState(const FreeTrajectoryState& fts, const Line& line) const dso_internal;
0048   /// the actual propagation to a new point & momentum vector
0049   bool propagateWithHelix(const IterativeHelixExtrapolatorToLine& extrapolator,
0050                           const Line& line,
0051                           GlobalPoint& x,
0052                           GlobalVector& p,
0053                           double& s) const dso_internal;
0054 
0055 private:
0056   DeepCopyPointerByClone<Propagator> thePropagator;
0057 };
0058 
0059 #endif