PandaRoot
PndFtsTrackFinder::PndFtsMath Namespace Reference

Functions

float LineValue (const Line &line, const float arg) noexcept
 
float CircleValue (const Circle &circle, const float arg) noexcept
 
Line PointsToLine (float abscissa1, float ordinate1, float abscissa2, float ordinate2) noexcept
 
Line PointsToLine (const Point2D &point1, const Point2D &point2) noexcept
 
Line XZStrawsToLine (const PndFtsStraw &straw1, const PndFtsStraw &straw2) noexcept
 
Line XZPointsToLine (const XZPoint &point1, const XZPoint &point2) noexcept
 
Line YZPointsToLine (const YZVirtualHit &point1, const YZVirtualHit &point2) noexcept
 
float PointLineDistance (const Point2D &point, const Line &line) noexcept
 
float StrawXZLineDistance (const PndFtsStraw &straw, const Line &line) noexcept
 
float LineYZPointDistance (const YZVirtualHit &point, const Line &line) noexcept
 
XZPoint TangencyPoint (const float r, const XZPoint &s, const XZPoint &p, const float sign) noexcept
 
Circle LineStrawCircle (const Line &xzLine, const float zTangency, const PndFtsStraw &straw, const float isochrone=0.) noexcept
 
float StrawCircleDistance (const PndFtsStraw &straw, const Circle &circle) noexcept
 
float XZCircleXCoord (const Circle &circle, const float zCoord) noexcept
 

Function Documentation

◆ CircleValue()

float PndFtsTrackFinder::PndFtsMath::CircleValue ( const Circle circle,
const float  arg 
)
inlinenoexcept

Definition at line 19 of file PndFtsMath.h.

References sqrt().

20 {
21  const float val = std::sqrt(circle.fRadius * circle.fRadius - arg * arg);
22  return circle.fOrigin.fX > 0 ? circle.fOrigin.fX - val : circle.fOrigin.fX + val;
23 }
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28

◆ LineStrawCircle()

Circle PndFtsTrackFinder::PndFtsMath::LineStrawCircle ( const Line xzLine,
const float  zTangency,
const PndFtsStraw straw,
const float  isochrone = 0. 
)
inlinenoexcept

Definition at line 85 of file PndFtsMath.h.

References f, PndFtsTrackFinder::Line::fSlope, PndFtsTrackFinder::PndFtsStraw::fX, PndFtsTrackFinder::PndFtsStraw::fZ, LineValue(), PointsToLine(), and sqrt().

86 {
87  // INFO Constructs circle tangent to straw and xz_line in point with Z = z_tangency
88  const float xTangency = LineValue(xzLine, zTangency);
89 
90  const Line tanOriLine{-1 / xzLine.fSlope, xTangency + zTangency / xzLine.fSlope};
91  const Line tanStrawLine = PointsToLine(zTangency, xTangency, straw.fZ, straw.fX + isochrone);
92 
93  const XZPoint tanStrawMid{0.5f * (xTangency + straw.fX + isochrone), 0.5f * (zTangency + straw.fZ)};
94 
95  const Line midOriLine{-1 / tanStrawLine.fSlope, tanStrawMid.fX + tanStrawMid.fZ / tanStrawLine.fSlope};
96 
97  const float originZ = (midOriLine.fIntercept - tanOriLine.fIntercept) / (tanOriLine.fSlope - midOriLine.fSlope);
98  const float originX = LineValue(midOriLine, originZ);
99 
100  const XZPoint origin{originX, originZ};
101  const float radius = std::sqrt(std::pow(zTangency - origin.fZ, 2.f) + std::pow(xTangency - origin.fX, 2.f));
102 
103  return {radius, origin};
104 }
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28
Line PointsToLine(const Point2D &point1, const Point2D &point2) noexcept
Definition: PndFtsMath.h:33
float LineValue(const Line &line, const float arg) noexcept
Definition: PndFtsMath.h:14
float f
Definition: P4_F32vec4.h:20

◆ LineValue()

float PndFtsTrackFinder::PndFtsMath::LineValue ( const Line line,
const float  arg 
)
inlinenoexcept

Definition at line 14 of file PndFtsMath.h.

Referenced by LineStrawCircle().

15 {
16  return arg * line.fSlope + line.fIntercept;
17 }

◆ LineYZPointDistance()

float PndFtsTrackFinder::PndFtsMath::LineYZPointDistance ( const YZVirtualHit point,
const Line line 
)
inlinenoexcept

Definition at line 69 of file PndFtsMath.h.

References fabs(), and sqrt().

70 {
71  // INFO y = slope * z + intercept
72  return std::fabs(point.fY - line.fSlope * point.fZ - line.fIntercept) / std::sqrt(line.fSlope * line.fSlope + 1);
73 }
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:46

◆ PointLineDistance()

float PndFtsTrackFinder::PndFtsMath::PointLineDistance ( const Point2D point,
const Line line 
)
inlinenoexcept

Definition at line 57 of file PndFtsMath.h.

References fabs(), and sqrt().

58 {
59  // INFO y = slope * z + intercept
60  return std::fabs(point.fOrdinate - line.fSlope * point.fAbscissa - line.fIntercept) / std::sqrt(line.fSlope * line.fSlope + 1);
61 }
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:46

◆ PointsToLine() [1/2]

Line PndFtsTrackFinder::PndFtsMath::PointsToLine ( float  abscissa1,
float  ordinate1,
float  abscissa2,
float  ordinate2 
)
inlinenoexcept

Definition at line 25 of file PndFtsMath.h.

Referenced by LineStrawCircle(), PointsToLine(), XZPointsToLine(), XZStrawsToLine(), and YZPointsToLine().

26 {
27  // INFO ordinate = slope * abscissa + intercept // no need to handle zero denominator case
28  const float slope = (ordinate1 - ordinate2) / (abscissa1 - abscissa2);
29  const float intercept = ordinate1 - abscissa1 * slope;
30  return {slope, intercept};
31 }

◆ PointsToLine() [2/2]

Line PndFtsTrackFinder::PndFtsMath::PointsToLine ( const Point2D point1,
const Point2D point2 
)
inlinenoexcept

Definition at line 33 of file PndFtsMath.h.

References PointsToLine().

34 {
35  // INFO ordinate = slope * abscissa + intercept // no need to handle zero denominator case
36  return PointsToLine(point1.fAbscissa, point1.fOrdinate, point2.fAbscissa, point2.fOrdinate);
37 }
Line PointsToLine(const Point2D &point1, const Point2D &point2) noexcept
Definition: PndFtsMath.h:33

◆ StrawCircleDistance()

float PndFtsTrackFinder::PndFtsMath::StrawCircleDistance ( const PndFtsStraw straw,
const Circle circle 
)
inlinenoexcept

Definition at line 106 of file PndFtsMath.h.

References sqrt().

107 {
108  const float strawOriDistSq = std::pow(straw.fX - circle.fOrigin.fX, 2.f) + std::pow(straw.fZ - circle.fOrigin.fZ, 2.f);
109  const float strawOriDist = std::sqrt(strawOriDistSq);
110 
111  return std::abs(circle.fRadius - strawOriDist);
112 }
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28

◆ StrawXZLineDistance()

float PndFtsTrackFinder::PndFtsMath::StrawXZLineDistance ( const PndFtsStraw straw,
const Line line 
)
inlinenoexcept

Definition at line 63 of file PndFtsMath.h.

References fabs(), and sqrt().

64 {
65  // INFO x = slope * z + intercept
66  return std::fabs(straw.fX - line.fSlope * straw.fZ - line.fIntercept) / std::sqrt(line.fSlope * line.fSlope + 1);
67 }
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:46

◆ TangencyPoint()

XZPoint PndFtsTrackFinder::PndFtsMath::TangencyPoint ( const float  r,
const XZPoint s,
const XZPoint p,
const float  sign 
)
inlinenoexcept

Definition at line 75 of file PndFtsMath.h.

References sign(), and sqrt().

76 {
77  // INFO based on https://mathworld.wolfram.com/CircleTangentLine.html
78  const float distSq = (p.fZ - s.fZ) * (p.fZ - s.fZ) + (p.fX - s.fX) * (p.fX - s.fX);
79  const float distMinusRsq = std::sqrt(distSq - r * r);
80  const float x = s.fX + r * (r * (p.fX - s.fX) - sign * (p.fZ - s.fZ) * distMinusRsq) / distSq;
81  const float z = s.fZ + r * (r * (p.fZ - s.fZ) + sign * (p.fX - s.fX) * distMinusRsq) / distSq;
82  return {x, z};
83 }
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28
int sign(T val)
Definition: PndCADef.h:49

◆ XZCircleXCoord()

float PndFtsTrackFinder::PndFtsMath::XZCircleXCoord ( const Circle circle,
const float  zCoord 
)
inlinenoexcept

Definition at line 114 of file PndFtsMath.h.

References sqrt().

115 {
116  const double radiusSq = std::pow(circle.fRadius, 2);
117  const double zDistSq = std::pow(zCoord - circle.fOrigin.fZ, 2);
118  return static_cast<float>(std::sqrt(std::abs(radiusSq - zDistSq)));
119 }
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28

◆ XZPointsToLine()

Line PndFtsTrackFinder::PndFtsMath::XZPointsToLine ( const XZPoint point1,
const XZPoint point2 
)
inlinenoexcept

Definition at line 45 of file PndFtsMath.h.

References PointsToLine().

46 {
47  // INFO x = slope * z + intercept // no need to handle zero denominator case
48  return PointsToLine(point1.fZ, point1.fX, point2.fZ, point2.fX);
49 }
Line PointsToLine(const Point2D &point1, const Point2D &point2) noexcept
Definition: PndFtsMath.h:33

◆ XZStrawsToLine()

Line PndFtsTrackFinder::PndFtsMath::XZStrawsToLine ( const PndFtsStraw straw1,
const PndFtsStraw straw2 
)
inlinenoexcept

Definition at line 39 of file PndFtsMath.h.

References PointsToLine().

40 {
41  // INFO x = slope * z + intercept // no need to handle zero denominator case
42  return PointsToLine(straw1.fZ, straw1.fX, straw2.fZ, straw2.fX);
43 }
Line PointsToLine(const Point2D &point1, const Point2D &point2) noexcept
Definition: PndFtsMath.h:33

◆ YZPointsToLine()

Line PndFtsTrackFinder::PndFtsMath::YZPointsToLine ( const YZVirtualHit point1,
const YZVirtualHit point2 
)
inlinenoexcept

Definition at line 51 of file PndFtsMath.h.

References PointsToLine().

52 {
53  // INFO y = slope * z + intercept // no need to handle zero denominator case
54  return PointsToLine(point1.fZ, point1.fY, point2.fZ, point2.fY);
55 }
Line PointsToLine(const Point2D &point1, const Point2D &point2) noexcept
Definition: PndFtsMath.h:33