CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
StraightLinePlaneCrossing.cc
Go to the documentation of this file.
2 
5 
6 //
7 // Propagation status and path length to intersection
8 //
9 std::pair<bool, double> StraightLinePlaneCrossing::pathLength(const Plane& plane) const {
10  //
11  // calculate path length
12  //
13  PositionType planePosition(plane.position());
14  DirectionType planeNormal(plane.normalVector());
15  auto pz = planeNormal.dot(theP0);
16  auto dS = -planeNormal.dot(theX0 - planePosition) / pz;
17  // check direction
18  auto opposite2Track = ((thePropDir == alongMomentum) & (dS < 0.f)) |
19  ((thePropDir == oppositeToMomentum) & (dS > 0.f)) | edm::isNotFinite(dS);
20  //
21  // Return result
22  //
23  return std::pair<bool, double>(!opposite2Track, dS);
24 }
25 
26 std::pair<bool, StraightLinePlaneCrossing::PositionType> StraightLinePlaneCrossing::position(const Plane& plane) const {
27  auto crossed = pathLength(plane);
28  if (crossed.first)
29  return std::pair<bool, PositionType>(true, position(crossed.second));
30  else
31  return std::pair<bool, PositionType>(false, PositionType());
32 }
const PropagationDirection thePropDir
constexpr bool isNotFinite(T x)
Definition: isFinite.h:9
Basic3DVector< float > PositionType
GlobalVector normalVector() const
Definition: Plane.h:41
Definition: Plane.h:16
PositionType position(float s) const
std::pair< bool, double > pathLength(const Plane &plane) const
const PositionType & position() const
T dot(const Basic3DVector &rh) const
Scalar product, or &quot;dot&quot; product, with a vector of same type.