|
ATLAS Offline Software
|
#include <CylinderVolumeBounds.h>
Bounds for a cylindrical Volume, the decomposeToSurfaces method creates a vector of up to 6 surfaces:
case A) 3 Surfaces (full cylindrical tube): BoundarySurfaceFace [index]:
case B) 4 Surfaces (tube with inner and outer radius): BoundarySurfaceFace [index]:
case C) 6 Surfaces (sectoral tube with inner and outer radius): BoundarySurfaceFace [index]:
- negativeFaceXY [0] : Trk::DiscSurface with \( r_{inner}>0 \) and \( \phi < \pi \), parallel to \( xy \) plane at negative \( z \)
- positiveFaceXY [1] : Trk::DiscSurface with \( r_{inner}>0 \) and \( \phi < \pi \), parallel to \( xy \) plane at positive \( z \)
- tubeSectorOuterCover [2] : Trk::CylinderSurface with \( r = r_{outer} \)
- tubeSectorInnerCover [3] : Trk::CylinderSurface with \( r = r_{inner} \)
- tubeSectorNegativePhi [4] : Rectangular Trk::PlaneSurface attached to [0] and [1] at negative \( \phi \)
- tubeSectorNegativePhi [5] : Rectangular Trk::PlaneSurface attached to [0] and [1] at positive \( \phi \)
- Author
- Andre.nosp@m.as.S.nosp@m.alzbu.nosp@m.rger.nosp@m.@cern.nosp@m..ch
-
Christos Anastopoulos (Athena MT modifications)
Definition at line 70 of file CylinderVolumeBounds.h.
◆ CylinderVolumeBounds() [1/5]
Trk::CylinderVolumeBounds::CylinderVolumeBounds |
( |
| ) |
|
◆ CylinderVolumeBounds() [2/5]
Trk::CylinderVolumeBounds::CylinderVolumeBounds |
( |
double |
radius, |
|
|
double |
halez |
|
) |
| |
◆ CylinderVolumeBounds() [3/5]
Trk::CylinderVolumeBounds::CylinderVolumeBounds |
( |
double |
rinner, |
|
|
double |
router, |
|
|
double |
halez |
|
) |
| |
◆ CylinderVolumeBounds() [4/5]
Trk::CylinderVolumeBounds::CylinderVolumeBounds |
( |
double |
rinner, |
|
|
double |
router, |
|
|
double |
halfPhiSector, |
|
|
double |
halez |
|
) |
| |
◆ CylinderVolumeBounds() [5/5]
◆ ~CylinderVolumeBounds()
Trk::CylinderVolumeBounds::~CylinderVolumeBounds |
( |
| ) |
|
|
virtualdefault |
◆ bottomDiscBounds()
◆ boundarySurfaceAccessor()
Provide accessor for BoundarySurfaces.
Implements Trk::VolumeBounds.
Definition at line 164 of file CylinderVolumeBounds.cxx.
174 double posZ = gp.z();
175 double posR = gp.perp();
183 bool isOnFace =
false;
184 bool intersectionIndicator = (
deltaR > 0.);
185 bool choiceIndicator =
false;
200 (posR < m_innerRadius && deltaR > 0.)) {
217 if (intersectionIndicator) {
221 double zOfIntersect = intersectRmax.yOfX;
223 if (std::abs(zOfIntersect) <=
m_halfZ)
224 return {(choiceIndicator || zOfIntersect > 0.)
231 (choiceIndicator || zOfIntersect > 0.)
239 double zOfIntersect = intersectRmin.yOfX;
241 if (std::abs(zOfIntersect) <=
m_halfZ)
243 (choiceIndicator || zOfIntersect > 0.)
249 (choiceIndicator || zOfIntersect > 0.)
273 double zOfIntersect = intersectRmax.yOfX;
275 if (std::abs(zOfIntersect) <=
m_halfZ && zOfIntersect > 0.)
277 if (std::abs(zOfIntersect) <=
m_halfZ && zOfIntersect < 0.)
279 if (std::abs(zOfIntersect) >
m_halfZ && zOfIntersect < 0.)
281 if (std::abs(zOfIntersect) >
m_halfZ && zOfIntersect > 0.)
289 double zOfIntersect = intersectRmin.yOfX;
291 if (std::abs(zOfIntersect) <=
m_halfZ && zOfIntersect > 0.)
293 if (std::abs(zOfIntersect) <=
m_halfZ && zOfIntersect < 0.)
295 if (std::abs(zOfIntersect) >
m_halfZ && zOfIntersect > 0.)
306 double posZ = gp.z();
307 double posR = gp.perp();
318 int radiusSign =
deltaR > 0. ? 1 : -1;
329 double zOfIntersect = intersectR.yOfX;
331 bool intersectsCylinder =
332 !isOnCylinder ? (zOfIntersect * zOfIntersect <=
m_halfZ *
m_halfZ)
336 if (intersectsCylinder && zOfIntersect > 0.)
338 if (intersectsCylinder && zOfIntersect <= 0.)
◆ clone()
◆ createBoundarySurfaceAccessors()
void Trk::CylinderVolumeBounds::createBoundarySurfaceAccessors |
( |
| ) |
|
|
private |
Private method to construct the accessors.
◆ decomposeToSurfaces()
Method to decompose the Bounds into boundarySurfaces.
Implements Trk::VolumeBounds.
Definition at line 98 of file CylinderVolumeBounds.cxx.
101 std::vector<const Trk::Surface*>* retsf =
102 new std::vector<const Trk::Surface*>;
107 bool isConcentric =
transform.isApprox(Amg::Transform3D::Identity());
114 bottomDiscRot.col(0) = discRot.col(1);
115 bottomDiscRot.col(1) = discRot.col(0);
116 bottomDiscRot.col(2) = -discRot.col(2);
◆ deltaRadius()
double Trk::CylinderVolumeBounds::deltaRadius |
( |
| ) |
const |
|
inline |
◆ dump() [1/2]
MsgStream & Trk::CylinderVolumeBounds::dump |
( |
MsgStream & |
sl | ) |
const |
|
finaloverridevirtual |
Output Method for MsgStream.
Implements Trk::VolumeBounds.
Definition at line 380 of file CylinderVolumeBounds.cxx.
382 std::stringstream temp_sl;
383 temp_sl << std::setiosflags(std::ios::fixed);
384 temp_sl << std::setprecision(2);
385 temp_sl <<
"Trk::CylinderVolumeBounds: (rMin, rMax, halfPhi, halfZ) = ";
◆ dump() [2/2]
std::ostream & Trk::CylinderVolumeBounds::dump |
( |
std::ostream & |
sl | ) |
const |
|
finaloverridevirtual |
Output Method for std::ostream.
Implements Trk::VolumeBounds.
Definition at line 393 of file CylinderVolumeBounds.cxx.
395 std::stringstream temp_sl;
396 temp_sl << std::setiosflags(std::ios::fixed);
397 temp_sl << std::setprecision(2);
398 temp_sl <<
"Trk::CylinderVolumeBounds: (rMin, rMax, halfPhi, halfZ) = ";
◆ halflengthZ()
double Trk::CylinderVolumeBounds::halflengthZ |
( |
| ) |
const |
|
inline |
◆ halfPhiSector()
double Trk::CylinderVolumeBounds::halfPhiSector |
( |
| ) |
const |
|
inline |
◆ innerCylinderBounds()
◆ innerRadius()
double Trk::CylinderVolumeBounds::innerRadius |
( |
| ) |
const |
|
inline |
◆ inside()
bool Trk::CylinderVolumeBounds::inside |
( |
const Amg::Vector3D & |
pos, |
|
|
double |
tol = 0. |
|
) |
| const |
|
inlinefinaloverridevirtual |
This method checks if position in the 3D volume frame is inside the cylinder.
Implements Trk::VolumeBounds.
Definition at line 175 of file CylinderVolumeBounds.h.
183 bool insideZ = insideR ? (fabs(
pos.z()) <=
m_halfZ + tol) :
false;
184 return (insideZ && insideR && insidePhi);
◆ mediumRadius()
double Trk::CylinderVolumeBounds::mediumRadius |
( |
| ) |
const |
|
inline |
◆ operator=()
◆ outerCylinderBounds()
◆ outerRadius()
double Trk::CylinderVolumeBounds::outerRadius |
( |
| ) |
const |
|
inline |
◆ sectorPlaneBounds()
This method returns the associated PlaneBounds limiting a sectoral CylinderVolume.
Definition at line 371 of file CylinderVolumeBounds.cxx.
◆ topDiscBounds()
DiscBounds * Trk::CylinderVolumeBounds::topDiscBounds |
( |
| ) |
const |
|
inlineprivate |
◆ m_boundaryAccessors
Accessors for Boundary surface access - static is not possible due to mismatched delete() / free () with TrkMagFieldUtils.
Definition at line 165 of file CylinderVolumeBounds.h.
◆ m_halfPhiSector
double Trk::CylinderVolumeBounds::m_halfPhiSector |
|
private |
◆ m_halfZ
double Trk::CylinderVolumeBounds::m_halfZ |
|
private |
◆ m_innerRadius
double Trk::CylinderVolumeBounds::m_innerRadius |
|
private |
◆ m_outerRadius
double Trk::CylinderVolumeBounds::m_outerRadius |
|
private |
◆ s_numericalStable
const double Trk::CylinderVolumeBounds::s_numericalStable |
|
staticprivate |
The documentation for this class was generated from the following files:
@ TubeRdecreaseZdecrease
Accessor type [ 3,0,1,2 ].
@ TubeOutsideRmaxRincrease
Accessor type [ 2,1,0,3 ] - inverse case.
const FourObjectsAccessor & tubeAccessor(TubeAccessorType tat) const
Return the accessor for the tube case.
@ TubeZdecreaseRdecrease
Accessor type [ 0,3,1,2 ].
DiscBounds * topDiscBounds() const
This method returns the associated DiscBounds for the bottom/top DiscSurface.
@ TubeOutsideZmaxZincrease
Accessor type [ 1,3,2,0 ] - inverse case.
@ TubeRincreaseZdecrease
Accessor type [ 2,0,1,3 ].
CylinderVolumeBounds()
Default Constructor.
@ StandardSectoralCylinder
const ThreeObjectsAccessor & cylinderAccessor(CylinderAccessorType cat) const
Return the accessor for the cylindrical case.
CylinderVolumeBoundaryAccessors m_boundaryAccessors
Accessors for Boundary surface access - static is not possible due to mismatched delete() / free () w...
Eigen::Affine3d Transform3D
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
double halflengthZ() const
This method returns the halflengthZ.
@ TubeZdecreaseRincrease
Accessor type [ 0,2,1,3 ].
DiscBounds * bottomDiscBounds() const
This method returns the associated DiscBounds for the bottom/top DiscSurface.
@ CylinderZdecrease
Cylinder hit, the neg.
@ TubeRdecreaseZincrease
Accessor type [ 3,1,0,2 ].
@ CylinderNegativeFace
Neg.
Eigen::Matrix< double, 3, 1 > Vector3D
@ TubeRincreaseZincrease
Accessor type [ 2,1,0,3 ].
CylinderBounds * outerCylinderBounds() const
This method returns the associated CylinderBounds of the outer CylinderSurfaces.
double halfPhiSector() const
This method returns the halfPhiSector angle.
double innerRadius() const
This method returns the inner radius.
Eigen::Matrix< double, 3, 3 > RotationMatrix3D
const SixObjectsAccessor & sectoralTubeAccessor(SectoralTubeAccessorType stat) const
Return the accessor for the sectoral tube case.
@ TubeZincreaseRdecrease
Accessor type [ 1,3,0,2 ].
Eigen::Translation< double, 3 > Translation3D
const FiveObjectsAccessor & sectoralCylinderAccessor(SectoralCylinderAccessorType scat) const
Return the accessor for the sectoral cylinciracl case.
CylinderBounds * innerCylinderBounds() const
This method returns the associated CylinderBounds of the inner CylinderSurfaces.
@ CylinderPositiveFace
Pos.
Eigen::AngleAxisd AngleAxis3D
@ CylinderZincrease
Cylinder hit, then pos.
static const double s_numericalStable
numerical stability
RectangleBounds * sectorPlaneBounds() const
This method returns the associated PlaneBounds limiting a sectoral CylinderVolume.
@ TubeOutsideRminRdecrease
Accessor type [ 3,1,0,2] - inverse case.
@ TubeOutsideZminZdecrease
Accessor type [ 0,3,2,1 ] - inverse case.
VolumeBounds()
Default Constructor.
double mediumRadius() const
This method returns the medium radius.
@ TubeZincreaseRincrease
Accessor type [ 1,2,0,3 ].