15 : theX0(point.
x()), theY0(point.
y()), theZ0(point.
z()), theRho(curvature), thePropDir(propDir) {
19 double px = direction.
x();
20 double py = direction.
y();
21 double pz = direction.
z();
22 double pt2 = px * px + py * py;
23 double p2 = pt2 + pz * pz;
24 double pI = 1. /
sqrt(p2);
25 double ptI = 1. /
sqrt(pt2);
41 double nPx = normalToPlane.
x();
42 double nPy = normalToPlane.
y();
43 double nPz = normalToPlane.
z();
58 double deq1 = ceq2 * ceq2;
59 double deq2 = ceq1 * ceq3;
64 double deq = deq1 + 2 * deq2;
66 return std::pair<bool, double>(
false, 0);
67 double ceq = ceq2 + std::copysign(
std::sqrt(deq), ceq2);
68 dS1 = (ceq / ceq1) * theSinThetaI;
69 dS2 = -2. * (ceq3 / ceq) * theSinThetaI;
74 double ceq = (ceq2 / ceq1) * theSinThetaI;
75 double deq = deq2 / deq1;
76 deq *= (1 - 0.5 * deq);
78 dS2 = ceq * (2 + deq);
84 dS1 = dS2 = -(ceq3 / ceq2) * theSinThetaI;
134 const double dS2)
const {
143 double s1(propSign * dS1);
144 double s2(propSign * dS2);
149 if ((s1 < 0) & (s2 >= 0)) {
152 path = propSign * s2;
153 }
else if (s1 >= 0) {
156 path = propSign * s1;
161 return std::pair<bool, double>(valid,
path);
HelixArbitraryPlaneCrossing2Order(const PositionType &point, const DirectionType &direction, const float curvature, const PropagationDirection propDir=alongMomentum)
T y() const
Cartesian y coordinate.
T x() const
Cartesian x coordinate.
DirectionTypeDouble directionInDouble(double s) const
constexpr bool isNotFinite(T x)
GlobalVector normalVector() const
Global3DPoint GlobalPoint
float localZ(const GlobalPoint &gp) const
DirectionType direction(double s) const override
double smallestPathLength(const double firstPathLength, const double secondPathLength) const
T curvature(T InversePt, const MagneticField &field)
Basic3DVector< double > PositionTypeDouble
T z() const
Cartesian z coordinate.
void swap(edm::DataFrameContainer &lhs, edm::DataFrameContainer &rhs)
Abs< T >::type abs(const T &t)
PositionTypeDouble positionInDouble(double s) const
uint16_t const *__restrict__ x
std::pair< bool, double > solutionByDirection(const double dS1, const double dS2) const
Basic3DVector< float > PositionType
the helix is passed to the constructor and does not appear in the interface
Basic3DVector< float > DirectionType
PositionType position(double s) const override
Basic3DVector< double > DirectionTypeDouble
const PropagationDirection thePropDir
std::pair< bool, double > pathLength(const Plane &) override
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point