26 #include <type_traits>
34 double ros =
perp(gpos);
36 bool insideR = (ros >=
get(
eMinR) - tol) && (ros <=
get(
eMaxR) + tol);
37 bool insideZ = std::abs(gpos.z()) <=
get(
eHalfLengthZ) + tol;
39 if (!insideR || !insideZ) {
45 bool insideRInner = ros <=
get(
eMedR) - tol;
48 return !insideRInner || !insideZInner;
55 if (
get(eMinR) == 0.) {
63 Surface::makeShared<CylinderSurface>(
transform, m_outerCylinderBounds);
69 Surface::makeShared<CylinderSurface>(
transform, m_cutoutCylinderBounds);
74 double hlChoke = (
get(eHalfLengthZ) -
get(eHalfLengthZcutout)) * 0.5;
75 double zChoke =
get(eHalfLengthZcutout) + hlChoke;
77 if (m_innerCylinderBounds !=
nullptr) {
79 auto posInner = Surface::makeShared<CylinderSurface>(posChokeTrf,
80 m_innerCylinderBounds);
85 auto negInner = Surface::makeShared<CylinderSurface>(negChokeTrf,
86 m_innerCylinderBounds);
95 Surface::makeShared<DiscSurface>(posOutDiscTrf, m_outerDiscBounds);
102 Surface::makeShared<DiscSurface>(negOutDiscTrf, m_outerDiscBounds);
110 Surface::makeShared<DiscSurface>(posInDiscTrf, m_innerDiscBounds);
117 Surface::makeShared<DiscSurface>(negInDiscTrf, m_innerDiscBounds);
132 vmax = {
get(eMaxR),
get(eMaxR),
get(eHalfLengthZ)};
133 vmin = {-
get(eMaxR), -
get(eMaxR), -
get(eHalfLengthZ)};
137 return trf ==
nullptr ? box : box.
transformed(*trf);
141 std::ostream& sl)
const {
142 sl <<
"Acts::CutoutCylinderVolumeBounds(\n";
143 sl <<
"rmin = " <<
get(eMinR) <<
" rmed = " <<
get(eMedR)
144 <<
" rmax = " <<
get(eMaxR) <<
"\n";
145 sl <<
"dz1 = " <<
get(eHalfLengthZ) <<
" dz2 = " <<
get(eHalfLengthZcutout);
151 double hlChoke = (
get(eHalfLengthZ) -
get(eHalfLengthZcutout)) * 0.5;
152 m_innerCylinderBounds =
153 std::make_shared<CylinderBounds>(
get(eMinR), hlChoke);
156 m_cutoutCylinderBounds =
157 std::make_shared<CylinderBounds>(
get(eMedR),
get(eHalfLengthZcutout));
159 m_outerCylinderBounds =
160 std::make_shared<CylinderBounds>(
get(eMaxR),
get(eHalfLengthZ));
162 m_innerDiscBounds = std::make_shared<RadialBounds>(
get(eMinR),
get(eMedR));
164 m_outerDiscBounds = std::make_shared<RadialBounds>(
get(eMinR),
get(eMaxR));