9 const TrapezoidalPlaneBounds* trapezoidalBounds( dynamic_cast<const TrapezoidalPlaneBounds*>(&(plane.bounds())));
10 const RectangularPlaneBounds* rectangularBounds( dynamic_cast<const RectangularPlaneBounds*>(&(plane.bounds())));
14 if (trapezoidalBounds) {
15 std::array<const float, 4>
const &
parameters = (*trapezoidalBounds).parameters();
17 auto hbotedge = parameters[0];
18 auto htopedge = parameters[1];
19 auto hapothem = parameters[3];
20 auto thickness = (*trapezoidalBounds).thickness();
22 corners[0] = plane.toGlobal(
LocalPoint( -htopedge, hapothem, thickness/2));
23 corners[1] = plane.toGlobal(
LocalPoint( htopedge, hapothem, thickness/2));
24 corners[2] = plane.toGlobal(
LocalPoint( hbotedge, -hapothem, thickness/2));
25 corners[3] = plane.toGlobal(
LocalPoint( -hbotedge, -hapothem, thickness/2));
26 corners[4] = plane.toGlobal(
LocalPoint( -htopedge, hapothem, -thickness/2));
27 corners[5] = plane.toGlobal(
LocalPoint( htopedge, hapothem, -thickness/2));
28 corners[6] = plane.toGlobal(
LocalPoint( hbotedge, -hapothem, -thickness/2));
29 corners[7] = plane.toGlobal(
LocalPoint( -hbotedge, -hapothem, -thickness/2));
31 }
else if(rectangularBounds) {
32 auto length = rectangularBounds->length();
33 auto width = rectangularBounds->width();
34 auto thickness = (*rectangularBounds).thickness();
36 corners[0] = plane.toGlobal(
LocalPoint( -
width/2, -length/2, thickness/2));
37 corners[1] = plane.toGlobal(
LocalPoint( -
width/2, +length/2, thickness/2));
38 corners[2] = plane.toGlobal(
LocalPoint( +
width/2, -length/2, thickness/2));
39 corners[3] = plane.toGlobal(
LocalPoint( +
width/2, +length/2, thickness/2));
40 corners[4] = plane.toGlobal(
LocalPoint( -
width/2, -length/2, -thickness/2));
41 corners[5] = plane.toGlobal(
LocalPoint( -
width/2, +length/2, -thickness/2));
42 corners[6] = plane.toGlobal(
LocalPoint( +
width/2, -length/2, -thickness/2));
43 corners[7] = plane.toGlobal(
LocalPoint( +
width/2, +length/2, -thickness/2));
49 float zmin = corners[0].z();
float zmax = zmin;
50 float rmin = corners[0].perp2();
float rmax = rmin;
51 for (
int i = 1;
i < 8;
i++ ) {
52 auto cPhi = corners[
i].barePhi();
55 auto z = corners[
i].z();
56 if (
z < zmin) zmin =
z;
57 if (
z > zmax) zmax =
z;
58 auto r = corners[
i].perp2();
59 if (
r < rmin) rmin =
r;
60 if (
r > rmax) rmax =
r;
Point3DBase< Scalar, LocalTag > LocalPoint
std::pair< float, float > m_zSpan
std::pair< float, float > m_rSpan
bool phiLess(float phi1, float phi2)
std::pair< float, float > m_phiSpan