ATLAS Offline Software
Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
Trk::SimplePolygonBrepVolumeBounds Class Referencefinal

#include <SimplePolygonBrepVolumeBounds.h>

Inheritance diagram for Trk::SimplePolygonBrepVolumeBounds:
Collaboration diagram for Trk::SimplePolygonBrepVolumeBounds:

Public Member Functions

 SimplePolygonBrepVolumeBounds ()
 Default Constructor. More...
 
 SimplePolygonBrepVolumeBounds (std::vector< std::pair< float, float > > xyvtx, float hlengthz)
 Constructor - generic case (from float) More...
 
 SimplePolygonBrepVolumeBounds (std::vector< std::pair< double, double > > xyvtx, double hlengthz)
 Constructor - generic case (from double) More...
 
 SimplePolygonBrepVolumeBounds (const SimplePolygonBrepVolumeBounds &bobo)
 Copy Constructor. More...
 
virtual ~SimplePolygonBrepVolumeBounds ()
 Destructor. More...
 
SimplePolygonBrepVolumeBoundsoperator= (const SimplePolygonBrepVolumeBounds &bobo)
 Assignment operator. More...
 
SimplePolygonBrepVolumeBoundsclone () const override final
 Virtual constructor. More...
 
bool inside (const Amg::Vector3D &, double tol=0.) const override final
 This method checks if position in the 3D volume frame is inside the volume. More...
 
const std::vector< const Trk::Surface * > * decomposeToSurfaces (const Amg::Transform3D &transform) override final
 Method to decompose the Bounds into Surfaces. More...
 
ObjectAccessor boundarySurfaceAccessor (const Amg::Vector3D &gp, const Amg::Vector3D &dir, bool forceInside=false) const override final
 Provide accessor for BoundarySurfaces. More...
 
std::vector< std::pair< double, double > > xyVertices () const
 This method returns the set of xy generating vertices. More...
 
double halflengthZ () const
 This method returns the halflength in local z. More...
 
const Trk::VolumecombinedVolume () const
 This method returns the transcript into combined volume. More...
 
const Trk::Volumeenvelope () const
 This method returns the volume envelope. More...
 
MsgStream & dump (MsgStream &sl) const override
 Output Method for MsgStream. More...
 
std::ostream & dump (std::ostream &sl) const override
 Output Method for std::ostream. More...
 

Private Member Functions

void processSubVols ()
 
Trk::PlaneSurfacesideSurf (const Amg::Transform3D &, unsigned int, unsigned int) const
 
bool Left (std::pair< double, double > a, std::pair< double, double > b, std::pair< double, double > c) const
 
bool Intersect (std::pair< double, double > a, std::pair< double, double > b, std::pair< double, double > c, std::pair< double, double > d) const
 
bool InCone (int i, int j, const std::vector< std::pair< double, double > > &inputVertices) const
 
bool Diagonalie (int i, int j, const std::vector< std::pair< double, double > > &inputVertices) const
 
bool Diagonal (int i, int j, const std::vector< std::pair< double, double > > &inputVertices) const
 
std::vector< std::pair< double, double > > TriangulatePolygon (const std::vector< std::pair< double, double > > &Vertices) const
 
std::vector< std::pair< double, double > > TriangulatePolygonCheck (const std::vector< std::pair< double, double > > &Vertices)
 

Static Private Member Functions

static bool Xor (bool x, bool y)
 

Private Attributes

std::vector< std::pair< double, double > > m_xyVtx
 generating xy vertices More...
 
double m_halfX
 halflength in x - to define enclosing rectangle More...
 
double m_halfY
 halflength in y - to define enclosing rectangle More...
 
double m_halfZ
 halflength in z More...
 
int m_ordering
 -1 not set/ 1 anticlockwise / 0 clockwise More...
 
const Trk::Volumem_combinedVolume
 triangulated polygon More...
 
const Trk::Volumem_envelope
 simplified envelope More...
 
Trk::EightObjectsAccessor m_objectAccessor
 There's only one single object Acessor for the moment has to be implemented if Cuboids are used more widely. More...
 

Detailed Description

Bounds for the exact transcript of the GeoSimplePolygonBrep; volume defined by combination of symm.trapezoids

BoundarySurfaceFace [index]:

- negativeFaceXY     [0] : Trk::SubtractedPlaneSurface,
                           parallel to \f$ xy \f$ plane at negative \f$ z

\( - positiveFaceXY [1] : Trk::SubtractedPlaneSurface, parallel to \) xy \( plane at positive \) z

Definition at line 44 of file SimplePolygonBrepVolumeBounds.h.

Constructor & Destructor Documentation

◆ SimplePolygonBrepVolumeBounds() [1/4]

Trk::SimplePolygonBrepVolumeBounds::SimplePolygonBrepVolumeBounds ( )

Default Constructor.

Definition at line 28 of file SimplePolygonBrepVolumeBounds.cxx.

29  : VolumeBounds()
30  , m_halfX(0.)
31  , m_halfY(0.)
32  , m_halfZ(0.)
33  , m_ordering(-1)
34  , m_combinedVolume(nullptr)
35  , m_envelope(nullptr)
37 {
38  //@TODO an object created by the default constructor cannot be copied or
39  //assigned.
40 }

◆ SimplePolygonBrepVolumeBounds() [2/4]

Trk::SimplePolygonBrepVolumeBounds::SimplePolygonBrepVolumeBounds ( std::vector< std::pair< float, float > >  xyvtx,
float  hlengthz 
)

Constructor - generic case (from float)

◆ SimplePolygonBrepVolumeBounds() [3/4]

Trk::SimplePolygonBrepVolumeBounds::SimplePolygonBrepVolumeBounds ( std::vector< std::pair< double, double > >  xyvtx,
double  hlengthz 
)

Constructor - generic case (from double)

◆ SimplePolygonBrepVolumeBounds() [4/4]

Trk::SimplePolygonBrepVolumeBounds::SimplePolygonBrepVolumeBounds ( const SimplePolygonBrepVolumeBounds bobo)

Copy Constructor.

Definition at line 126 of file SimplePolygonBrepVolumeBounds.cxx.

128  : VolumeBounds()
129  , m_halfX(trabo.m_halfX)
130  , m_halfY(trabo.m_halfY)
131  , m_halfZ(trabo.m_halfZ)
132  , m_ordering(trabo.m_ordering)
133  , m_combinedVolume(trabo.m_combinedVolume->clone())
134  , m_envelope(trabo.m_envelope->clone())
135  , m_objectAccessor(trabo.m_objectAccessor)
136 {
137  m_xyVtx.resize(trabo.m_xyVtx.size());
138  for (unsigned int i = 0; i < m_xyVtx.size(); i++)
139  m_xyVtx[i] = trabo.m_xyVtx[i];
140 }

◆ ~SimplePolygonBrepVolumeBounds()

Trk::SimplePolygonBrepVolumeBounds::~SimplePolygonBrepVolumeBounds ( )
virtual

Destructor.

Definition at line 142 of file SimplePolygonBrepVolumeBounds.cxx.

143 {
144  delete m_combinedVolume;
145  delete m_envelope;
146 }

Member Function Documentation

◆ boundarySurfaceAccessor()

ObjectAccessor Trk::SimplePolygonBrepVolumeBounds::boundarySurfaceAccessor ( const Amg::Vector3D gp,
const Amg::Vector3D dir,
bool  forceInside = false 
) const
inlinefinaloverridevirtual

Provide accessor for BoundarySurfaces.

Implements Trk::VolumeBounds.

Definition at line 164 of file SimplePolygonBrepVolumeBounds.h.

165  {
167 }

◆ clone()

SimplePolygonBrepVolumeBounds * Trk::SimplePolygonBrepVolumeBounds::clone ( ) const
inlinefinaloverridevirtual

Virtual constructor.

Implements Trk::VolumeBounds.

Definition at line 142 of file SimplePolygonBrepVolumeBounds.h.

143  {
144  return new SimplePolygonBrepVolumeBounds(*this);
145 }

◆ combinedVolume()

const Trk::Volume * Trk::SimplePolygonBrepVolumeBounds::combinedVolume ( ) const
inline

This method returns the transcript into combined volume.

Definition at line 155 of file SimplePolygonBrepVolumeBounds.h.

156  {
157  return m_combinedVolume;
158 }

◆ decomposeToSurfaces()

const std::vector< const Trk::Surface * > * Trk::SimplePolygonBrepVolumeBounds::decomposeToSurfaces ( const Amg::Transform3D transform)
finaloverridevirtual

Method to decompose the Bounds into Surfaces.

Implements Trk::VolumeBounds.

Definition at line 170 of file SimplePolygonBrepVolumeBounds.cxx.

172 {
173  std::vector<const Trk::Surface*>* retsf =
174  new std::vector<const Trk::Surface*>;
175 
176  // face surfaces xy
177  // (1) - at negative local z
178  Trk::PlaneSurface xymPlane(
185  retsf->push_back(new Trk::SubtractedPlaneSurface(xymPlane, volExcl, true));
186  // (2) - at positive local z
187  Trk::PlaneSurface xyPlane(
191  volExcl = new Trk::VolumeExcluder(new Trk::Volume(
194  retsf->push_back(new Trk::SubtractedPlaneSurface(xyPlane, volExcl, true));
195  // loop over xy vertices
196  // (3)
197  for (unsigned int iv = 0; iv < m_xyVtx.size(); iv++) {
198  if (iv != m_xyVtx.size() - 1)
199  retsf->push_back(sideSurf(transform, iv, iv + 1));
200  else
201  retsf->push_back(sideSurf(transform, iv, 0));
202  }
203 
204  return retsf;
205 }

◆ Diagonal()

bool Trk::SimplePolygonBrepVolumeBounds::Diagonal ( int  i,
int  j,
const std::vector< std::pair< double, double > > &  inputVertices 
) const
private

Definition at line 417 of file SimplePolygonBrepVolumeBounds.cxx.

422 {
423  // std::cout<<"MW Diagonal "<<i<<" "<<j<<" "<<InCone(i,j, inputVertices)<<"
424  // "<<Diagonalie(i,j, inputVertices)<<std::endl;
425  return InCone(i, j, inputVertices) && Diagonalie(i, j, inputVertices);
426 }

◆ Diagonalie()

bool Trk::SimplePolygonBrepVolumeBounds::Diagonalie ( int  i,
int  j,
const std::vector< std::pair< double, double > > &  inputVertices 
) const
private

Definition at line 391 of file SimplePolygonBrepVolumeBounds.cxx.

395 {
396  // Returns TRUE iff (v_i, v_j) is a proper internal *or* external diagonal of
397  // this polygon, *ignoring edges incident to v_i and v_j*.
398 
399  /* For each edge (k,k+1) of P */
400  for (int k = 0; k < (int)inputVertices.size(); k++) {
401 
402  int kPlus1 = (k + 1) % inputVertices.size();
403 
404  /* Skip edges incident to i or j */
405  if ((k != i) && (kPlus1 != i) && (k != j) && (kPlus1 != j))
406  if (Intersect(
407  inputVertices[i],
408  inputVertices[j],
409  inputVertices[k],
410  inputVertices[kPlus1]))
411  return false;
412  }
413  return true;
414 }

◆ dump() [1/2]

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

Output Method for MsgStream.

Implements Trk::VolumeBounds.

Definition at line 293 of file SimplePolygonBrepVolumeBounds.cxx.

294 {
295  std::stringstream temp_sl;
296  temp_sl << std::setiosflags(std::ios::fixed);
297  temp_sl << std::setprecision(7);
298  temp_sl << "Trk::SimplePolygonBrepVolumeBounds: (halfZ, xy vertices) = ";
299  temp_sl << "( " << m_halfZ << ")";
300  for (const auto & xyVtx : m_xyVtx)
301  temp_sl << "(" << xyVtx.first << "," << xyVtx.second << ")";
302  sl << temp_sl.str();
303  return sl;
304 }

◆ dump() [2/2]

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

Output Method for std::ostream.

Implements Trk::VolumeBounds.

Definition at line 307 of file SimplePolygonBrepVolumeBounds.cxx.

308 {
309  std::stringstream temp_sl;
310  temp_sl << std::setiosflags(std::ios::fixed);
311  temp_sl << std::setprecision(7);
312  temp_sl << "Trk::SimplePolygonBrepVolumeBounds: (halfZ, xy vertices) = ";
313  temp_sl << "( " << m_halfZ << ")";
314  for (const auto & myVtx : m_xyVtx)
315  temp_sl << "(" << myVtx.first << "," << myVtx.second << ")";
316  sl << temp_sl.str();
317  return sl;
318 }

◆ envelope()

const Trk::Volume * Trk::SimplePolygonBrepVolumeBounds::envelope ( ) const
inline

This method returns the volume envelope.

Definition at line 160 of file SimplePolygonBrepVolumeBounds.h.

160  {
161  return m_envelope;
162 }

◆ halflengthZ()

double Trk::SimplePolygonBrepVolumeBounds::halflengthZ ( ) const
inline

This method returns the halflength in local z.

Definition at line 151 of file SimplePolygonBrepVolumeBounds.h.

151  {
152  return m_halfZ;
153 }

◆ InCone()

bool Trk::SimplePolygonBrepVolumeBounds::InCone ( int  i,
int  j,
const std::vector< std::pair< double, double > > &  inputVertices 
) const
private

Definition at line 367 of file SimplePolygonBrepVolumeBounds.cxx.

373 {
374  int iPlus1 = (i + 1) % inputVertices.size();
375  int iMinus1 = (i + inputVertices.size() - 1) % inputVertices.size();
376 
377  /* If P[i] is a convex vertex [ i+1 left or on (i-1,i) ]. */
378  if (Left(inputVertices[iMinus1], inputVertices[i], inputVertices[iPlus1]))
379  return Left(inputVertices[i], inputVertices[j], inputVertices[iMinus1]) &&
380  Left(inputVertices[j], inputVertices[i], inputVertices[iPlus1]);
381 
382  /* Assume (i-1,i,i+1) not collinear. */
383  /* else v_i is reflex. */
384  else
385  return !(
386  Left(inputVertices[i], inputVertices[j], inputVertices[iPlus1]) &&
387  Left(inputVertices[j], inputVertices[i], inputVertices[iMinus1]));
388 }

◆ inside()

bool Trk::SimplePolygonBrepVolumeBounds::inside ( const Amg::Vector3D pos,
double  tol = 0. 
) const
finaloverridevirtual

This method checks if position in the 3D volume frame is inside the volume.

Implements Trk::VolumeBounds.

Definition at line 255 of file SimplePolygonBrepVolumeBounds.cxx.

257 {
258  return (m_combinedVolume->inside(pos, tol));
259 }

◆ Intersect()

bool Trk::SimplePolygonBrepVolumeBounds::Intersect ( std::pair< double, double >  a,
std::pair< double, double >  b,
std::pair< double, double >  c,
std::pair< double, double >  d 
) const
private

Definition at line 355 of file SimplePolygonBrepVolumeBounds.cxx.

361 {
362 
363  return Xor(Left(a, b, c), Left(a, b, d)) && Xor(Left(c, d, a), Left(c, d, b));
364 }

◆ Left()

bool Trk::SimplePolygonBrepVolumeBounds::Left ( std::pair< double, double >  a,
std::pair< double, double >  b,
std::pair< double, double >  c 
) const
private

Definition at line 338 of file SimplePolygonBrepVolumeBounds.cxx.

344 {
345  double CrossZ = (b.first - a.first) * (c.second - a.second) -
346  (c.first - a.first) * (b.second - a.second);
347  if (m_ordering == 1)
348  return (CrossZ >= 0.);
349  if (m_ordering == 0)
350  return (CrossZ < 0.);
351  return false;
352 }

◆ operator=()

Trk::SimplePolygonBrepVolumeBounds & Trk::SimplePolygonBrepVolumeBounds::operator= ( const SimplePolygonBrepVolumeBounds bobo)

Assignment operator.

Definition at line 149 of file SimplePolygonBrepVolumeBounds.cxx.

151 {
152  if (this != &trabo) {
153  m_halfX = trabo.m_halfX;
154  m_halfY = trabo.m_halfY;
155  m_halfZ = trabo.m_halfZ;
156  m_objectAccessor = trabo.m_objectAccessor;
157  m_xyVtx.resize(trabo.m_xyVtx.size());
158  for (unsigned int i = 0; i < m_xyVtx.size(); i++)
159  m_xyVtx[i] = trabo.m_xyVtx[i];
160  delete m_combinedVolume;
161  delete m_envelope;
162  m_combinedVolume = trabo.m_combinedVolume->clone();
163  m_envelope = trabo.m_envelope->clone();
164  m_ordering = trabo.m_ordering;
165  }
166  return *this;
167 }

◆ processSubVols()

void Trk::SimplePolygonBrepVolumeBounds::processSubVols ( )
private

Definition at line 262 of file SimplePolygonBrepVolumeBounds.cxx.

263 {
264  // translate into prisms (triangulate)
265  Trk::Volume* cVol = nullptr;
266 #ifdef TRKDETDESCR_USEFLOATPRECISON
267 #define double float
268 #endif
269  std::vector<std::pair<double, double>> triangles = TriangulatePolygonCheck(
270  m_xyVtx); //@TODO change argument to const vector<pair< > >
271  std::vector<std::pair<double, double>> vertices;
272 #ifdef TRKDETDESCR_USEFLOATPRECISON
273 #undef double
274 #endif
275  for (unsigned int i = 0; i < triangles.size(); i = i + 3) {
276  vertices.push_back(triangles[i]);
277  vertices.push_back(triangles[i + 1]);
278  vertices.push_back(triangles[i + 2]);
279  Trk::Volume* newVol =
280  new Trk::Volume(nullptr, new Trk::PrismVolumeBounds(vertices, m_halfZ));
281  if (cVol)
282  cVol = new Trk::Volume(
283  nullptr, new Trk::CombinedVolumeBounds(cVol, newVol, false));
284  else
285  cVol = newVol;
286  vertices.clear();
287  }
288  m_combinedVolume = cVol;
289 }

◆ sideSurf()

Trk::PlaneSurface * Trk::SimplePolygonBrepVolumeBounds::sideSurf ( const Amg::Transform3D transform,
unsigned int  iv1,
unsigned int  iv2 
) const
private

Definition at line 209 of file SimplePolygonBrepVolumeBounds.cxx.

213 {
214  Trk::PlaneSurface* plane = nullptr;
215 
216  double xdif = m_xyVtx[iv2].first - m_xyVtx[iv1].first;
217  double ydif = m_xyVtx[iv2].second - m_xyVtx[iv1].second;
218  double xsize = sqrt(xdif * xdif + ydif * ydif);
219 
220  double ori = m_ordering > 0 ? -1. : 1.;
221 
223  0.5 * (m_xyVtx[iv1].first + m_xyVtx[iv2].first),
224  0.5 * (m_xyVtx[iv1].second + m_xyVtx[iv2].second),
225  0.);
226  double phi = ori * ydif < 0 ? M_PI / 2 : -M_PI / 2;
227  if (ori > 0 && ydif > 0)
228  phi = M_PI / 2;
229  if (std::abs(xdif) > 1e-6) {
230  phi = std::atan(ydif / xdif);
231  if (xdif < 0)
232  phi += M_PI;
233  }
234 
235  Amg::Transform3D tr(
237  Amg::AngleAxis3D(phi, Amg::Vector3D(0., 0., 1.)) *
238  Amg::AngleAxis3D(-ori * 90 * Gaudi::Units::deg, Amg::Vector3D(1., 0., 0.)));
239  plane =
240  new Trk::PlaneSurface(tr, new Trk::RectangleBounds(0.5 * xsize, m_halfZ));
241 
242  // verify position of vertices - uncomment for debugging
243  // if
244  // (!plane->isOnSurface(Trk::GlobalPosition(m_xyVtx[iv1].first,m_xyVtx[iv1].second,m_halfZ),true,0.001,0.001)
245  // ||
246  // !plane->isOnSurface(Trk::GlobalPosition(m_xyVtx[iv2].first,m_xyVtx[iv2].second,-m_halfZ),true,0.001,0.001)
247  // )
248  // std::cout << "ERROR in SIMPLEPGONBREP side boundary:vertices out of
249  // plane"<< std::endl;
250 
251  return plane;
252 }

◆ TriangulatePolygon()

std::vector< std::pair< double, double > > Trk::SimplePolygonBrepVolumeBounds::TriangulatePolygon ( const std::vector< std::pair< double, double > > &  Vertices) const
private

Definition at line 429 of file SimplePolygonBrepVolumeBounds.cxx.

431 {
432  // Subtracting ears method
433  //
434  // One way to triangulate a simple polygon is by using the assertion that any
435  // simple polygon without holes
436  // has at least two so called 'ears'. An ear is a triangle with two sides on
437  // the edge of the polygon and the other one completely inside it. The
438  // algorithm then consists of finding such an ear, removing it from the
439  // polygon (which results in a new polygon that still meets the conditions)
440  // and repeating until there is only one triangle left.
441  //
442 
443  int NSize = Vertices.size();
444  std::vector<std::pair<double, double>> outTriangles;
445  std::vector<std::pair<double, double>> inputVertices;
446  inputVertices.reserve(NSize);
447  for (int i = 0; i < NSize; i++)
448  inputVertices.push_back((Vertices)[i]);
449 
450  // for (int i; i<NSize;i++) std::cout<<"MW input vertices:
451  // "<<inputVertices[i].first<<" "<<inputVertices[i].second<<std::endl;
452  // Triangulates this polygon and saves triangle edges in TriPoly.
453  // Triangles are stored CCW, with each set of 3 consecutive points in TriPoly
454  // representing 1 triangle.
455  // Assumes this polygon is closed.
456 
457  if (NSize < 4)
458  return inputVertices;
459 
460  // Start triangulating
461  int VerticesLeft = NSize;
462  while (VerticesLeft > 3) {
463  // std::cout<<"MW vertices left "<<VerticesLeft<<std::endl;
464  bool bCornerCut = false;
465  for (int i = 0; i < VerticesLeft; i++) {
466 
467  int iPlus1 = i + 1;
468  if (iPlus1 == VerticesLeft)
469  iPlus1 = 0;
470  int iPlus2 = (iPlus1 + 1);
471  if (iPlus2 == VerticesLeft)
472  iPlus2 = 0;
473 
474  if (Diagonal(i, iPlus2, inputVertices)) {
475 
476  outTriangles.push_back(inputVertices[i]);
477  outTriangles.push_back(inputVertices[iPlus1]);
478  outTriangles.push_back(inputVertices[iPlus2]);
479 
480  inputVertices.erase(inputVertices.begin() + iPlus1);
481  VerticesLeft--;
482  bCornerCut = true;
483  break;
484  }
485  }
486  if (!bCornerCut) { // Error - bad poly
487  // std::cout<<"MW Error - bad poly"<<std::endl;
488  std::vector<std::pair<double, double>> out;
489  return out;
490  }
491  }
492 
493  if (VerticesLeft == 3) {
494  outTriangles.push_back(inputVertices[0]);
495  outTriangles.push_back(inputVertices[1]);
496  outTriangles.push_back(inputVertices[2]);
497  inputVertices.erase(inputVertices.begin() + 1);
498  VerticesLeft--;
499  }
500 
501  return outTriangles;
502 }

◆ TriangulatePolygonCheck()

std::vector< std::pair< double, double > > Trk::SimplePolygonBrepVolumeBounds::TriangulatePolygonCheck ( const std::vector< std::pair< double, double > > &  Vertices)
private

Definition at line 505 of file SimplePolygonBrepVolumeBounds.cxx.

507 {
508  // Perform triangulation. Check the orientation of the verices in the polygon
509  // m_ordering = -1 not set
510  // m_ordering = 1 anticlockwise
511  // m_ordering = 0 clockwise
512 
513  if (m_ordering == -1)
514  m_ordering = 1;
515  std::vector<std::pair<double, double>> outTriangles =
517  if (outTriangles.empty()) {
518  m_ordering = -m_ordering + 1;
519  outTriangles = TriangulatePolygon(Vertices);
520  }
521 
522  return outTriangles;
523 }

◆ Xor()

bool Trk::SimplePolygonBrepVolumeBounds::Xor ( bool  x,
bool  y 
)
staticprivate

Definition at line 326 of file SimplePolygonBrepVolumeBounds.cxx.

329 {
330  return !x ^ !y;
331 }

◆ xyVertices()

std::vector< std::pair< double, double > > Trk::SimplePolygonBrepVolumeBounds::xyVertices ( ) const
inline

This method returns the set of xy generating vertices.

Definition at line 147 of file SimplePolygonBrepVolumeBounds.h.

147  {
148  return m_xyVtx;
149 }

Member Data Documentation

◆ m_combinedVolume

const Trk::Volume* Trk::SimplePolygonBrepVolumeBounds::m_combinedVolume
private

triangulated polygon

Definition at line 134 of file SimplePolygonBrepVolumeBounds.h.

◆ m_envelope

const Trk::Volume* Trk::SimplePolygonBrepVolumeBounds::m_envelope
private

simplified envelope

Definition at line 135 of file SimplePolygonBrepVolumeBounds.h.

◆ m_halfX

double Trk::SimplePolygonBrepVolumeBounds::m_halfX
private

halflength in x - to define enclosing rectangle

Definition at line 129 of file SimplePolygonBrepVolumeBounds.h.

◆ m_halfY

double Trk::SimplePolygonBrepVolumeBounds::m_halfY
private

halflength in y - to define enclosing rectangle

Definition at line 130 of file SimplePolygonBrepVolumeBounds.h.

◆ m_halfZ

double Trk::SimplePolygonBrepVolumeBounds::m_halfZ
private

halflength in z

Definition at line 131 of file SimplePolygonBrepVolumeBounds.h.

◆ m_objectAccessor

Trk::EightObjectsAccessor Trk::SimplePolygonBrepVolumeBounds::m_objectAccessor
private

There's only one single object Acessor for the moment has to be implemented if Cuboids are used more widely.

can we get rid of this ?

Definition at line 139 of file SimplePolygonBrepVolumeBounds.h.

◆ m_ordering

int Trk::SimplePolygonBrepVolumeBounds::m_ordering
private

-1 not set/ 1 anticlockwise / 0 clockwise

Definition at line 133 of file SimplePolygonBrepVolumeBounds.h.

◆ m_xyVtx

std::vector<std::pair<double, double> > Trk::SimplePolygonBrepVolumeBounds::m_xyVtx
private

generating xy vertices

Definition at line 128 of file SimplePolygonBrepVolumeBounds.h.


The documentation for this class was generated from the following files:
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
Trk::y
@ y
Definition: ParamDefs.h:56
Trk::RectangleBounds
Definition: RectangleBounds.h:38
python.SystemOfUnits.second
int second
Definition: SystemOfUnits.py:120
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
Trk::Volume::inside
bool inside(const Amg::Vector3D &gp, double tol=0.) const
Inside() method for checks.
Definition: Volume.cxx:90
Trk::SimplePolygonBrepVolumeBounds::m_ordering
int m_ordering
-1 not set/ 1 anticlockwise / 0 clockwise
Definition: SimplePolygonBrepVolumeBounds.h:133
hist_file_dump.d
d
Definition: hist_file_dump.py:137
Trk::SimplePolygonBrepVolumeBounds::Intersect
bool Intersect(std::pair< double, double > a, std::pair< double, double > b, std::pair< double, double > c, std::pair< double, double > d) const
Definition: SimplePolygonBrepVolumeBounds.cxx:355
Trk::SimplePolygonBrepVolumeBounds::InCone
bool InCone(int i, int j, const std::vector< std::pair< double, double > > &inputVertices) const
Definition: SimplePolygonBrepVolumeBounds.cxx:367
Trk::SimplePolygonBrepVolumeBounds::Diagonal
bool Diagonal(int i, int j, const std::vector< std::pair< double, double > > &inputVertices) const
Definition: SimplePolygonBrepVolumeBounds.cxx:417
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
Trk::SimplePolygonBrepVolumeBounds::m_halfX
double m_halfX
halflength in x - to define enclosing rectangle
Definition: SimplePolygonBrepVolumeBounds.h:129
M_PI
#define M_PI
Definition: ActiveFraction.h:11
deg
#define deg
Definition: SbPolyhedron.cxx:17
Trk::SimplePolygonBrepVolumeBounds::Xor
static bool Xor(bool x, bool y)
Definition: SimplePolygonBrepVolumeBounds.cxx:326
Trk::SimplePolygonBrepVolumeBounds::m_objectAccessor
Trk::EightObjectsAccessor m_objectAccessor
There's only one single object Acessor for the moment has to be implemented if Cuboids are used more ...
Definition: SimplePolygonBrepVolumeBounds.h:139
drawFromPickle.atan
atan
Definition: drawFromPickle.py:36
Trk::SimplePolygonBrepVolumeBounds::TriangulatePolygon
std::vector< std::pair< double, double > > TriangulatePolygon(const std::vector< std::pair< double, double > > &Vertices) const
Definition: SimplePolygonBrepVolumeBounds.cxx:429
Trk::SimplePolygonBrepVolumeBounds::sideSurf
Trk::PlaneSurface * sideSurf(const Amg::Transform3D &, unsigned int, unsigned int) const
Definition: SimplePolygonBrepVolumeBounds.cxx:209
Trk::SubtractedPlaneSurface
Definition: SubtractedPlaneSurface.h:32
lumiFormat.i
int i
Definition: lumiFormat.py:85
Trk::SimplePolygonBrepVolumeBounds::Diagonalie
bool Diagonalie(int i, int j, const std::vector< std::pair< double, double > > &inputVertices) const
Definition: SimplePolygonBrepVolumeBounds.cxx:391
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
Trk::Volume::clone
virtual Volume * clone() const
Pseudo-constructor.
Definition: Volume.cxx:78
Trk::PrismVolumeBounds
Definition: PrismVolumeBounds.h:44
Trk::SimplePolygonBrepVolumeBounds::m_combinedVolume
const Trk::Volume * m_combinedVolume
triangulated polygon
Definition: SimplePolygonBrepVolumeBounds.h:134
Trk::SimplePolygonBrepVolumeBounds::m_xyVtx
std::vector< std::pair< double, double > > m_xyVtx
generating xy vertices
Definition: SimplePolygonBrepVolumeBounds.h:128
Trk::SimplePolygonBrepVolumeBounds::m_halfZ
double m_halfZ
halflength in z
Definition: SimplePolygonBrepVolumeBounds.h:131
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
Trk::SimplePolygonBrepVolumeBounds::SimplePolygonBrepVolumeBounds
SimplePolygonBrepVolumeBounds()
Default Constructor.
Definition: SimplePolygonBrepVolumeBounds.cxx:28
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
Trk::ObjectAccessor
Definition: ObjectAccessor.h:15
a
TList * a
Definition: liststreamerinfos.cxx:10
Trk::PlaneSurface
Definition: PlaneSurface.h:64
Trk::SimplePolygonBrepVolumeBounds::m_halfY
double m_halfY
halflength in y - to define enclosing rectangle
Definition: SimplePolygonBrepVolumeBounds.h:130
DeMoScan.first
bool first
Definition: DeMoScan.py:536
Amg::Translation3D
Eigen::Translation< double, 3 > Translation3D
Definition: GeoPrimitives.h:44
Trk::SimplePolygonBrepVolumeBounds::TriangulatePolygonCheck
std::vector< std::pair< double, double > > TriangulatePolygonCheck(const std::vector< std::pair< double, double > > &Vertices)
Definition: SimplePolygonBrepVolumeBounds.cxx:505
Amg::AngleAxis3D
Eigen::AngleAxisd AngleAxis3D
Definition: GeoPrimitives.h:45
Trk::VolumeExcluder
Definition: VolumeExcluder.h:29
Trk::phi
@ phi
Definition: ParamDefs.h:75
Trk::SimplePolygonBrepVolumeBounds::Left
bool Left(std::pair< double, double > a, std::pair< double, double > b, std::pair< double, double > c) const
Definition: SimplePolygonBrepVolumeBounds.cxx:338
Trk::x
@ x
Definition: ParamDefs.h:55
Trk::CombinedVolumeBounds
Definition: CombinedVolumeBounds.h:42
Trk::Volume
Definition: Volume.h:35
python.compressB64.c
def c
Definition: compressB64.py:93
NSWL1::Vertices
std::vector< Vertex > Vertices
Definition: GeoUtils.h:19
Trk::VolumeBounds::VolumeBounds
VolumeBounds()
Default Constructor.
Definition: VolumeBounds.h:48
fitman.k
k
Definition: fitman.py:528
Trk::SimplePolygonBrepVolumeBounds::m_envelope
const Trk::Volume * m_envelope
simplified envelope
Definition: SimplePolygonBrepVolumeBounds.h:135