ATLAS Offline Software
Loading...
Searching...
No Matches
Trk::TriangleBounds Class Referencefinal

Bounds for a triangular, planar surface. More...

#include <TriangleBounds.h>

Inheritance diagram for Trk::TriangleBounds:
Collaboration diagram for Trk::TriangleBounds:

Public Types

enum  BoundValues {
  bv_x1 = 0 , bv_y1 = 1 , bv_x2 = 2 , bv_y2 = 3 ,
  bv_x3 = 4 , bv_y3 = 5 , bv_length = 6
}
 for readability More...
enum  BoundsType {
  Cone = 0 , Cylinder = 1 , Diamond = 2 , Disc = 3 ,
  Ellipse = 5 , Rectangle = 6 , RotatedTrapezoid = 7 , Trapezoid = 8 ,
  Triangle = 9 , DiscTrapezoidal = 10 , Annulus = 11 , Other = 12
}
 This enumerator simplifies the persistency, by saving a dynamic_cast to happen. More...

Public Member Functions

 TriangleBounds ()
 Default Constructor - needed for persistency.
 TriangleBounds (const TriangleBounds &tribo)=default
 Copy constructor.
TriangleBounds & operator= (const TriangleBounds &recbo)=default
 Assignment Operator.
 TriangleBounds (TriangleBounds &&tribo) noexcept=default
 Move constructor.
TriangleBounds & operator= (TriangleBounds &&recbo) noexcept=default
 Move Assignment Operator.
virtual ~TriangleBounds ()=default
 Destructor.
 TriangleBounds (const std::vector< std::pair< float, float > > &)
 Constructor with coordinates of vertices - floats.
 TriangleBounds (const std::vector< std::pair< double, double > > &)
 Constructor with coordinates of vertices - double.
 TriangleBounds (const Amg::Vector2D &p1, const Amg::Vector2D &p2, const Amg::Vector2D &p3)
 Constructor from three 2 Vectors.
virtual bool operator== (const SurfaceBounds &sbo) const override
 Equality operator.
virtual TriangleBounds * clone () const override
 Virtual constructor.
virtual BoundsType type () const override final
 Return the type of the bounds for persistency.
virtual bool inside (const Amg::Vector2D &locpo, double tol1=0., double tol2=0.) const override final
 This method checks if the provided local coordinates are inside the surface bounds.
virtual bool inside (const Amg::Vector2D &locpo, const BoundaryCheck &bchk) const override final
virtual bool insideLoc1 (const Amg::Vector2D &locpo, double tol1=0.) const override final
 This method checks inside bounds in loc1.
virtual bool insideLoc2 (const Amg::Vector2D &locpo, double tol2=0.) const override final
 This method checks inside bounds in loc2.
virtual double minDistance (const Amg::Vector2D &pos) const override final
 Minimal distance to boundary ( > 0 if outside and <=0 if inside).
std::vector< std::pair< TDD_real_t, TDD_real_t > > vertices () const
 This method returns the coordinates of vertices.
virtual double r () const override final
 This method returns the maximal extension on the local plane, i.e.
virtual MsgStream & dump (MsgStream &sl) const override
 Output Method for MsgStream.
virtual std::ostream & dump (std::ostream &sl) const override
 Output Method for std::ostream.
virtual bool operator!= (const SurfaceBounds &sb) const
 Non-Equality operator.

Protected Member Functions

void swap (double &b1, double &b2)
 Swap method to be called from DiscBounds or TrapezoidalBounds.
virtual void initCache ()
 virtual initCache method for object persistency

Private Attributes

std::vector< TDD_real_t > m_boundValues

Detailed Description

Bounds for a triangular, planar surface.

Author
sarka.nosp@m..tod.nosp@m.orova.nosp@m.@cer.nosp@m.n.ch

Definition at line 38 of file TriangleBounds.h.

Member Enumeration Documentation

◆ BoundsType

This enumerator simplifies the persistency, by saving a dynamic_cast to happen.

Other is reserved for the GeometrySurfaces implementation.

Enumerator
Cone 
Cylinder 
Diamond 
Disc 
Ellipse 
Rectangle 
RotatedTrapezoid 
Trapezoid 
Triangle 
DiscTrapezoidal 
Annulus 
Other 

Definition at line 58 of file SurfaceBounds.h.

◆ BoundValues

for readability

Enumerator
bv_x1 
bv_y1 
bv_x2 
bv_y2 
bv_x3 
bv_y3 
bv_length 

Definition at line 43 of file TriangleBounds.h.

Constructor & Destructor Documentation

◆ TriangleBounds() [1/6]

Trk::TriangleBounds::TriangleBounds ( )

Default Constructor - needed for persistency.

Definition at line 19 of file TriangleBounds.cxx.

21{}
std::vector< TDD_real_t > m_boundValues

◆ TriangleBounds() [2/6]

Trk::TriangleBounds::TriangleBounds ( const TriangleBounds & tribo)
default

Copy constructor.

◆ TriangleBounds() [3/6]

Trk::TriangleBounds::TriangleBounds ( TriangleBounds && tribo)
defaultnoexcept

Move constructor.

◆ ~TriangleBounds()

virtual Trk::TriangleBounds::~TriangleBounds ( )
virtualdefault

Destructor.

◆ TriangleBounds() [4/6]

Trk::TriangleBounds::TriangleBounds ( const std::vector< std::pair< float, float > > & vertices)

Constructor with coordinates of vertices - floats.

Definition at line 24 of file TriangleBounds.cxx.

26{
27 size_t ib = 0;
28 for (const std::pair<float, float>& p : vertices) {
29 m_boundValues[2 * ib] = p.first;
30 m_boundValues[2 * ib + 1] = p.second;
31 if (ib == 2)
32 break;
33 ++ib;
34 }
35}
std::vector< std::pair< TDD_real_t, TDD_real_t > > vertices() const
This method returns the coordinates of vertices.

◆ TriangleBounds() [5/6]

ATH_FLATTEN Trk::TriangleBounds::TriangleBounds ( const std::vector< std::pair< double, double > > & vertices)

Constructor with coordinates of vertices - double.

Definition at line 40 of file TriangleBounds.cxx.

42{
43 size_t ib = 0;
44 for (const std::pair<double, double>& p : vertices) {
45 m_boundValues[2 * ib] = p.first;
46 m_boundValues[2 * ib + 1] = p.second;
47 if (ib == 2)
48 break;
49 ++ib;
50 }
51}

◆ TriangleBounds() [6/6]

Member Function Documentation

◆ clone()

virtual TriangleBounds * Trk::TriangleBounds::clone ( ) const
overridevirtual

Virtual constructor.

Implements Trk::SurfaceBounds.

◆ dump() [1/2]

MsgStream & Trk::TriangleBounds::dump ( MsgStream & sl) const
overridevirtual

Output Method for MsgStream.

Implements Trk::SurfaceBounds.

Definition at line 229 of file TriangleBounds.cxx.

230{
231 sl << std::setiosflags(std::ios::fixed);
232 sl << std::setprecision(7);
233 sl << "Trk::TriangleBounds: generating vertices (X, Y) " << '\n';
234 sl << "(" << m_boundValues[TriangleBounds::bv_x1] << " , " << m_boundValues[TriangleBounds::bv_y1] << ") " << '\n';
235 sl << "(" << m_boundValues[TriangleBounds::bv_x2] << " , " << m_boundValues[TriangleBounds::bv_y2] << ") " << '\n';
237 sl << std::setprecision(-1);
238 return sl;
239}

◆ dump() [2/2]

std::ostream & Trk::TriangleBounds::dump ( std::ostream & sl) const
overridevirtual

Output Method for std::ostream.

Implements Trk::SurfaceBounds.

Definition at line 242 of file TriangleBounds.cxx.

243{
244 sl << std::setiosflags(std::ios::fixed);
245 sl << std::setprecision(7);
246 sl << "Trk::TriangleBounds: generating vertices (X, Y)";
247 sl << "(" << m_boundValues[TriangleBounds::bv_x1] << " , " << m_boundValues[TriangleBounds::bv_y1] << ") " << '\n';
248 sl << "(" << m_boundValues[TriangleBounds::bv_x2] << " , " << m_boundValues[TriangleBounds::bv_y2] << ") " << '\n';
250 sl << std::setprecision(-1);
251 return sl;
252}

◆ initCache()

virtual void Trk::SurfaceBounds::initCache ( )
inlineprotectedvirtualinherited

virtual initCache method for object persistency

Reimplemented in Trk::ConeBounds, Trk::DiamondBounds, Trk::RotatedDiamondBounds, and Trk::RotatedTrapezoidBounds.

Definition at line 129 of file SurfaceBounds.h.

129{}

◆ inside() [1/2]

bool Trk::TriangleBounds::inside ( const Amg::Vector2D & locpo,
const BoundaryCheck & bchk ) const
finaloverridevirtual

Implements Trk::SurfaceBounds.

Definition at line 122 of file TriangleBounds.cxx.

124{
125 if (bchk.bcType == 0)
127 locpo, bchk.toleranceLoc1, bchk.toleranceLoc2);
128
129 // a fast FALSE
130 double fabsR = std::sqrt(locpo[Trk::locX] * locpo[Trk::locX] +
131 locpo[Trk::locY] * locpo[Trk::locY]);
132 double max_ell = bchk.lCovariance(0, 0) > bchk.lCovariance(1, 1)
133 ? bchk.lCovariance(0, 0)
134 : bchk.lCovariance(1, 1);
135 double limit = bchk.nSigmas * std::sqrt(max_ell);
136 double r_max = TriangleBounds::r();
137 if (fabsR > (r_max + limit))
138 return false;
139
140 // compute KDOP and axes for surface polygon
141 std::vector<KDOP> elementKDOP(3);
142 std::vector<Amg::Vector2D> elementP(3);
143 float theta =
144 (bchk.lCovariance(1, 0) != 0 &&
145 (bchk.lCovariance(1, 1) - bchk.lCovariance(0, 0)) != 0)
146 ? .5 * bchk.FastArcTan(2 * bchk.lCovariance(1, 0) /
147 (bchk.lCovariance(1, 1) - bchk.lCovariance(0, 0)))
148 : 0.;
149 sincosCache scResult = bchk.FastSinCos(theta);
150 AmgMatrix(2, 2) rotMatrix;
151 rotMatrix << scResult.cosC, scResult.sinC, -scResult.sinC, scResult.cosC;
152 AmgMatrix(2, 2) normal;
153 // cppcheck-suppress constStatement
154 normal << 0, -1, 1, 0;
155 // ellipse is always at (0,0), surface is moved to ellipse position and then
156 // rotated
157 Amg::Vector2D p;
160 elementP[0] = (rotMatrix * (p - locpo));
163 elementP[1] = (rotMatrix * (p - locpo));
166 elementP[2] = (rotMatrix * (p - locpo));
167 std::vector<Amg::Vector2D> axis = { normal * (elementP[1] - elementP[0]),
168 normal * (elementP[2] - elementP[1]),
169 normal * (elementP[2] - elementP[0]) };
170 bchk.ComputeKDOP(elementP, axis, elementKDOP);
171 // compute KDOP for error ellipse
172 std::vector<KDOP> errelipseKDOP(3);
173 bchk.ComputeKDOP(bchk.EllipseToPoly(3), axis, errelipseKDOP);
174 // check if KDOPs overlap and return result
175 return bchk.TestKDOPKDOP(elementKDOP, errelipseKDOP);
176}
#define AmgMatrix(rows, cols)
TriangleBounds()
Default Constructor - needed for persistency.
virtual double r() const override final
This method returns the maximal extension on the local plane, i.e.
virtual bool inside(const Amg::Vector2D &locpo, double tol1=0., double tol2=0.) const override final
This method checks if the provided local coordinates are inside the surface bounds.
@ locY
local cartesian
Definition ParamDefs.h:38
@ locX
Definition ParamDefs.h:37
@ theta
Definition ParamDefs.h:66

◆ inside() [2/2]

bool Trk::TriangleBounds::inside ( const Amg::Vector2D & locpo,
double tol1 = 0.,
double tol2 = 0. ) const
finaloverridevirtual

This method checks if the provided local coordinates are inside the surface bounds.

Implements Trk::SurfaceBounds.

Definition at line 76 of file TriangleBounds.cxx.

79{
80 std::pair<double, double> locB(m_boundValues[TriangleBounds::bv_x2] -
84 std::pair<double, double> locT(
87 std::pair<double, double> locV(
90
91 // special case :: third vertex ?
92 if (locT.first * locT.first + locT.second * locT.second < tol1 * tol1)
93 return true;
94
95 // special case : lies on base ?
96 double db = locB.first * locV.second - locB.second * locV.first;
97 if (std::abs(db) < tol1) {
98 double a =
99 (locB.first != 0) ? -locV.first / locB.first : -locV.second / locB.second;
100 return a > -tol2 && a - 1. < tol2;
101 }
102
103 double dn = locB.first * locT.second - locB.second * locT.first;
104
105 if (std::abs(dn) > std::abs(tol1)) {
106 double t = (locB.first * locV.second - locB.second * locV.first) / dn;
107 if (t > 0.)
108 return false;
109
110 double a = (locB.first != 0.)
111 ? (t * locT.first - locV.first) / locB.first
112 : (t * locT.second - locV.second) / locB.second;
113 if (a < -tol2 || a - 1. > tol2)
114 return false;
115 } else {
116 return false;
117 }
118 return true;
119}
static Double_t a

◆ insideLoc1()

virtual bool Trk::TriangleBounds::insideLoc1 ( const Amg::Vector2D & locpo,
double tol1 = 0. ) const
finaloverridevirtual

This method checks inside bounds in loc1.

  • loc1/loc2 correspond to the natural coordinates of the surface

Implements Trk::SurfaceBounds.

◆ insideLoc2()

virtual bool Trk::TriangleBounds::insideLoc2 ( const Amg::Vector2D & locpo,
double tol2 = 0. ) const
finaloverridevirtual

This method checks inside bounds in loc2.

  • loc1/loc2 correspond to the natural coordinates of the surface

Implements Trk::SurfaceBounds.

◆ minDistance()

double Trk::TriangleBounds::minDistance ( const Amg::Vector2D & pos) const
finaloverridevirtual

Minimal distance to boundary ( > 0 if outside and <=0 if inside).

Implements Trk::SurfaceBounds.

Definition at line 179 of file TriangleBounds.cxx.

180{
181 const int Np = 3;
182
189
190 double dm = 1.e+20;
191 double Ao = 0.;
192 bool in = true;
193
194 for (int i = 0; i != Np; ++i) {
195
196 int j = (i == Np-1 ? 0 : i+1);
197
198 double x = X[i] - pos[0];
199 double y = Y[i] - pos[1];
200 double dx = X[j] - X[i];
201 double dy = Y[j] - Y[i];
202 double A = x * dy - y * dx;
203 double S = -(x * dx + y * dy);
204
205 if (S <= 0.) {
206 double d = x * x + y * y;
207 if (d < dm)
208 dm = d;
209 } else {
210 double a = dx * dx + dy * dy;
211 if (S <= a) {
212 double d = (A * A) / a;
213 if (d < dm)
214 dm = d;
215 }
216 }
217 if (i && in && Ao * A < 0.)
218 in = false;
219 Ao = A;
220 }
221 if (in){
222 return -sqrt(dm);
223 }
224 return sqrt(dm);
225}
float j(const xAOD::IParticle &, const xAOD::TrackMeasurementValidation &hit, const Eigen::Matrix3d &jab_inv)
@ x
Definition ParamDefs.h:55
@ y
Definition ParamDefs.h:56

◆ operator!=()

bool Trk::SurfaceBounds::operator!= ( const SurfaceBounds & sb) const
inlinevirtualinherited

Non-Equality operator.

Reimplemented in Trk::InvalidBounds.

Definition at line 141 of file SurfaceBounds.h.

142{
143 return !((*this) == sb);
144}

◆ operator=() [1/2]

TriangleBounds & Trk::TriangleBounds::operator= ( const TriangleBounds & recbo)
default

Assignment Operator.

◆ operator=() [2/2]

TriangleBounds & Trk::TriangleBounds::operator= ( TriangleBounds && recbo)
defaultnoexcept

Move Assignment Operator.

◆ operator==()

bool Trk::TriangleBounds::operator== ( const SurfaceBounds & sbo) const
overridevirtual

Equality operator.

Implements Trk::SurfaceBounds.

Definition at line 66 of file TriangleBounds.cxx.

67{
68 // check the type first not to compare apples with oranges
69 const Trk::TriangleBounds* tribo = dynamic_cast<const Trk::TriangleBounds*>(&sbo);
70 if (!tribo)
71 return false;
72 return (m_boundValues == tribo->m_boundValues);
73}

◆ r()

virtual double Trk::TriangleBounds::r ( ) const
finaloverridevirtual

This method returns the maximal extension on the local plane, i.e.

\(s\sqrt{h_{\phi}^2 + h_{\eta}^2}\)

Implements Trk::SurfaceBounds.

◆ swap()

void Trk::SurfaceBounds::swap ( double & b1,
double & b2 )
inlineprotectedinherited

Swap method to be called from DiscBounds or TrapezoidalBounds.

Definition at line 133 of file SurfaceBounds.h.

134{
135 double tmp = b1;
136 b1 = b2;
137 b2 = tmp;
138}

◆ type()

virtual BoundsType Trk::TriangleBounds::type ( ) const
inlinefinaloverridevirtual

Return the type of the bounds for persistency.

Implements Trk::SurfaceBounds.

Definition at line 88 of file TriangleBounds.h.

◆ vertices()

std::vector< std::pair< TDD_real_t, TDD_real_t > > Trk::TriangleBounds::vertices ( ) const

This method returns the coordinates of vertices.

Member Data Documentation

◆ m_boundValues

std::vector<TDD_real_t> Trk::TriangleBounds::m_boundValues
private

Definition at line 118 of file TriangleBounds.h.


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