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.
TriangleBoundsoperator= (const TriangleBounds &recbo)=default
 Assignment Operator.
 TriangleBounds (TriangleBounds &&tribo) noexcept=default
 Move constructor.
TriangleBoundsoperator= (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 TriangleBoundsclone () 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_tm_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}
@ 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: