File indexing completed on 2024-04-06 12:31:28
0001 #ifndef IterativeHelixExtrapolatorToLine_h_
0002 #define IterativeHelixExtrapolatorToLine_h_
0003
0004 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h"
0005 #include "TrackingTools/GeomPropagators/interface/HelixLineExtrapolation.h"
0006 #include "TrackingTools/GeomPropagators/interface/HelixExtrapolatorToLine2Order.h"
0007 #include "FWCore/Utilities/interface/Visibility.h"
0008
0009
0010
0011
0012
0013 class IterativeHelixExtrapolatorToLine final : public HelixLineExtrapolation {
0014 public:
0015
0016
0017 IterativeHelixExtrapolatorToLine(const PositionType& point,
0018 const DirectionType& direction,
0019 const float curvature,
0020 const PropagationDirection propDir = anyDirection);
0021
0022 ~IterativeHelixExtrapolatorToLine() override {}
0023
0024
0025
0026
0027
0028 std::pair<bool, double> pathLength(const GlobalPoint& point) const override;
0029
0030
0031
0032
0033
0034 std::pair<bool, double> pathLength(const Line& line) const override;
0035
0036
0037
0038 PositionType position(double s) const override;
0039
0040
0041
0042 DirectionType direction(double s) const override;
0043
0044
0045
0046 PositionTypeDouble positionInDouble(double s) const;
0047
0048
0049
0050 DirectionTypeDouble directionInDouble(double s) const;
0051
0052 private:
0053
0054 template <class T>
0055 std::pair<bool, double> genericPathLength(const T& object) const dso_internal;
0056
0057 private:
0058 const double theX0, theY0, theZ0;
0059 double theCosPhi0, theSinPhi0;
0060 double theCosTheta, theSinTheta;
0061 const double theRho;
0062
0063 HelixExtrapolatorToLine2Order theQuadraticSolutionFromStart;
0064
0065 const PropagationDirection thePropDir;
0066
0067 mutable double theCachedS;
0068 mutable double theCachedDPhi;
0069 mutable double theCachedSDPhi;
0070 mutable double theCachedCDPhi;
0071 };
0072
0073 #endif