ATLAS Offline Software
Loading...
Searching...
No Matches
ThreePointCircle Class Reference

#include <PRD_TruthTrajectorySelectorID.h>

Collaboration diagram for ThreePointCircle:

Public Member Functions

 ThreePointCircle (const std::vector< Amg::Vector3D > &vecPoints)
 The constructor from three points.
 ~ThreePointCircle ()
 Destructor.
const Amg::Vector2Dcenter () const
 center
const Amg::Translation3DframeTranslation () const
 Translation.
ThreePointCircleoperator= (const ThreePointCircle &)=delete
 ThreePointCircle (const ThreePointCircle &)=delete
double d0 () const
double z0 () const
double phi0 () const
double eta () const
double pT () const
double radius () const

Private Member Functions

void constructCircle (const Amg::Vector3D &, const Amg::Vector3D &, const Amg::Vector3D &)

Private Attributes

Amg::Translation3Dm_translation
double m_d0
double m_z0
double m_phi0
double m_eta
double m_pt
double m_radius {}
Amg::Vector2D m_center

Detailed Description

Definition at line 16 of file PRD_TruthTrajectorySelectorID.h.

Constructor & Destructor Documentation

◆ ThreePointCircle() [1/2]

ThreePointCircle::ThreePointCircle ( const std::vector< Amg::Vector3D > & vecPoints)

The constructor from three points.

Definition at line 42 of file PRD_TruthTrajectorySelectorID.cxx.

42 :
43 m_translation(nullptr), m_d0(0.), m_z0(0.), m_phi0(0.), m_eta(0.), m_pt(0.)
44{
45 if (posVec.size() <3)
46 std::cout << "[WARNING] not enough points" << std::endl;
47 else
48 constructCircle(posVec[0],posVec[1],posVec[2]);
49}
Amg::Translation3D * m_translation
void constructCircle(const Amg::Vector3D &, const Amg::Vector3D &, const Amg::Vector3D &)

◆ ~ThreePointCircle()

ThreePointCircle::~ThreePointCircle ( )

Destructor.

Definition at line 51 of file PRD_TruthTrajectorySelectorID.cxx.

52{
53 delete m_translation;
54}

◆ ThreePointCircle() [2/2]

ThreePointCircle::ThreePointCircle ( const ThreePointCircle & )
delete

Member Function Documentation

◆ center()

const Amg::Vector2D & ThreePointCircle::center ( ) const
inline

center

Definition at line 62 of file PRD_TruthTrajectorySelectorID.h.

62{ return m_center; }

◆ constructCircle()

void ThreePointCircle::constructCircle ( const Amg::Vector3D & p1,
const Amg::Vector3D & p2,
const Amg::Vector3D & p3 )
private

Definition at line 56 of file PRD_TruthTrajectorySelectorID.cxx.

58 {
59
60 // get the (x/y) coordinates of all points
61 double translationX = m_translation ? -(m_translation->translation()).x() : 0.;
62 double translationY = m_translation ? -(m_translation->translation()).y() : 0.;
63
64 double bx = p1.x()+translationX;
65 double by = p1.y()+translationY;
66 double cx = p2.x()+translationX;
67 double cy = p2.y()+translationY;
68 double dx = p3.x()+translationX;
69 double dy = p3.y()+translationY;
70
71 double temp = cx*cx+cy*cy;
72
73 // prepare the matrix for the linear equation
74 double bc = (bx*bx + by*by - temp)/2.0;
75 double cd = (temp - dx*dx - dy*dy)/2.0;
76 double det = (bx-cx)*(cy-dy)-(cx-dx)*(by-cy);
77 //if (std::abs(det) < 1.0e-6) {
78 //std::cout << "[WARNING] Determinant is close to 0 " << std::endl;
79 //}
80
81 // invert the determinant
82 det = 1./det;
83
84 // x / y coordinate of the center
85 double cRx= (bc*(cy-dy)-cd*(by-cy))*det;
86 double cRy = ((bx-cx)*cd-(cx-dx)*bc)*det;
87
88 // get the center, radius and momentum
89 m_center = Amg::Vector2D(cRx,cRy);
90 m_radius = sqrt((cRx-bx)*(cRx-bx)+(cRy-by)*(cRy-by));
91 m_pt = m_radius*(0.3*2.);
92
93 // transverse parameters
94 m_d0 = std::sqrt(cRx*cRx+cRy*cRy)-m_radius;
95
96 // longitudinal parameters
97 double theta = 1./3*(p1.theta() + p2.theta() + p3.theta());
98 double r1 = p1.perp();
99 double z1 = p1.z();
100 double deltaz = r1/tan(theta);
101 m_z0 = z1 - deltaz;
102 // eta
103 m_eta = 1./3*(p1.eta() + p2.eta() + p3.eta());
104
105 // get the point of closest approach
106 Amg::Vector2D poca = -m_d0*m_center.unit();
107
108 // find the closest measurement
109 Amg::Vector2D closestMeasurement = p1.perp() < p2.perp() ?
110 Amg::Vector2D(p1.x(),p1.y()) : Amg::Vector2D(p2.x(),p2.y());
111 if (p3.perp() < p1.perp()) closestMeasurement = Amg::Vector2D(p3.x(),p3.y());
112
113 // phi0 is the most difficult one, two solution possible
114 Amg::Vector2D directionOne(-cRy,cRx);
115 Amg::Vector2D directionTwo(cRy,-cRx);
116
117 // build difference vector closest measurement, poca
118 Amg::Vector2D toFirstMeas(closestMeasurement-poca);
119
120 // check with scalar product
121 m_phi0 = directionOne.dot(toFirstMeas) > 0. ? directionOne.phi() : directionTwo.phi();
122
123 // now sign d0
124 Amg::Vector3D pocaDir(poca.x(),poca.y(),0.);
125 Amg::Vector3D momDir(std::cos(m_phi0),std::sin(m_phi0),0.);
126 double signD0 = pocaDir.cross(momDir).z() > 0. ? 1. : -1.;
127 m_d0 = signD0 * std::abs(m_d0);
128
129 // update the center for the translation
130 m_center += Amg::Vector2D(translationX,translationY);
131
132}
Scalar theta() const
theta method
#define y
#define x
Eigen::Matrix< double, 2, 1 > Vector2D
Eigen::Matrix< double, 3, 1 > Vector3D

◆ d0()

double ThreePointCircle::d0 ( ) const
inline

Definition at line 55 of file PRD_TruthTrajectorySelectorID.h.

55{ return m_d0; }

◆ eta()

double ThreePointCircle::eta ( ) const
inline

Definition at line 58 of file PRD_TruthTrajectorySelectorID.h.

58{ return m_eta; }

◆ frameTranslation()

const Amg::Translation3D * ThreePointCircle::frameTranslation ( ) const
inline

Translation.

Definition at line 64 of file PRD_TruthTrajectorySelectorID.h.

64{ return m_translation; }

◆ operator=()

ThreePointCircle & ThreePointCircle::operator= ( const ThreePointCircle & )
delete

◆ phi0()

double ThreePointCircle::phi0 ( ) const
inline

Definition at line 57 of file PRD_TruthTrajectorySelectorID.h.

57{ return m_phi0; }

◆ pT()

double ThreePointCircle::pT ( ) const
inline

Definition at line 59 of file PRD_TruthTrajectorySelectorID.h.

59{ return m_pt; }

◆ radius()

double ThreePointCircle::radius ( ) const
inline

Definition at line 60 of file PRD_TruthTrajectorySelectorID.h.

60{ return m_radius; }

◆ z0()

double ThreePointCircle::z0 ( ) const
inline

Definition at line 56 of file PRD_TruthTrajectorySelectorID.h.

56{ return m_z0; }

Member Data Documentation

◆ m_center

Amg::Vector2D ThreePointCircle::m_center
private

Definition at line 51 of file PRD_TruthTrajectorySelectorID.h.

◆ m_d0

double ThreePointCircle::m_d0
private

Definition at line 49 of file PRD_TruthTrajectorySelectorID.h.

◆ m_eta

double ThreePointCircle::m_eta
private

Definition at line 49 of file PRD_TruthTrajectorySelectorID.h.

◆ m_phi0

double ThreePointCircle::m_phi0
private

Definition at line 49 of file PRD_TruthTrajectorySelectorID.h.

◆ m_pt

double ThreePointCircle::m_pt
private

Definition at line 49 of file PRD_TruthTrajectorySelectorID.h.

◆ m_radius

double ThreePointCircle::m_radius {}
private

Definition at line 50 of file PRD_TruthTrajectorySelectorID.h.

50{};

◆ m_translation

Amg::Translation3D* ThreePointCircle::m_translation
private

Definition at line 47 of file PRD_TruthTrajectorySelectorID.h.

◆ m_z0

double ThreePointCircle::m_z0
private

Definition at line 49 of file PRD_TruthTrajectorySelectorID.h.


The documentation for this class was generated from the following files: