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  const float val = std::sqrt(circle.fRadius * circle.fRadius - (arg - circle.fOrigin.fZ) * (arg - circle.fOrigin.fZ));
23  return circle.fOrigin.fX > 0 ? circle.fOrigin.fX - val : circle.fOrigin.fX + val;
24 }
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 86 of file PndFtsMath.h.

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

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

References fabs(), and sqrt().

71 {
72  // INFO y = slope * z + intercept
73  return std::fabs(point.fY - line.fSlope * point.fZ - line.fIntercept) / std::sqrt(line.fSlope * line.fSlope + 1);
74 }
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 58 of file PndFtsMath.h.

References fabs(), and sqrt().

59 {
60  // INFO y = slope * z + intercept
61  return std::fabs(point.fOrdinate - line.fSlope * point.fAbscissa - line.fIntercept) / std::sqrt(line.fSlope * line.fSlope + 1);
62 }
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 26 of file PndFtsMath.h.

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

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

◆ PointsToLine() [2/2]

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

Definition at line 34 of file PndFtsMath.h.

References PointsToLine().

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

◆ StrawCircleDistance()

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

Definition at line 107 of file PndFtsMath.h.

References sqrt().

108 {
109  const float strawOriDistSq = std::pow(straw.fX - circle.fOrigin.fX, 2.f) + std::pow(straw.fZ - circle.fOrigin.fZ, 2.f);
110  const float strawOriDist = std::sqrt(strawOriDistSq);
111 
112  return std::abs(circle.fRadius - strawOriDist);
113 }
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 64 of file PndFtsMath.h.

References fabs(), and sqrt().

65 {
66  // INFO x = slope * z + intercept
67  return std::fabs(straw.fX - line.fSlope * straw.fZ - line.fIntercept) / std::sqrt(line.fSlope * line.fSlope + 1);
68 }
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 76 of file PndFtsMath.h.

References sign(), and sqrt().

77 {
78  // INFO based on https://mathworld.wolfram.com/CircleTangentLine.html
79  const float distSq = (p.fZ - s.fZ) * (p.fZ - s.fZ) + (p.fX - s.fX) * (p.fX - s.fX);
80  const float distMinusRsq = std::sqrt(distSq - r * r);
81  const float x = s.fX + r * (r * (p.fX - s.fX) - sign * (p.fZ - s.fZ) * distMinusRsq) / distSq;
82  const float z = s.fZ + r * (r * (p.fZ - s.fZ) + sign * (p.fX - s.fX) * distMinusRsq) / distSq;
83  return {x, z};
84 }
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 115 of file PndFtsMath.h.

References sqrt().

116 {
117  const double radiusSq = std::pow(circle.fRadius, 2);
118  const double zDistSq = std::pow(zCoord - circle.fOrigin.fZ, 2);
119  return static_cast<float>(std::sqrt(std::abs(radiusSq - zDistSq)));
120 }
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 46 of file PndFtsMath.h.

References PointsToLine().

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

◆ XZStrawsToLine()

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

Definition at line 40 of file PndFtsMath.h.

References PointsToLine().

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

◆ YZPointsToLine()

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

Definition at line 52 of file PndFtsMath.h.

References PointsToLine().

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