51 const Acts::GeometryContext& ,
52 std::shared_ptr<Acts::Experimental::BlueprintNode>&& child) {
56 ATH_MSG_ERROR(
"BeamPipeBlueprintNodeBuilder expects no child node");
57 throw std::runtime_error(
"Child node is not null");
83 const GeoLogVol* beamPipeLogVolume = beamPipeTopVolume->getLogVol();
84 if (beamPipeLogVolume ==
nullptr) {
86 throw std::runtime_error(
"Beam pipe volume has no log volume");
89 const GeoTube* beamPipeTube =
90 dynamic_cast<const GeoTube*
>(beamPipeLogVolume->getShape());
91 if (beamPipeTube ==
nullptr) {
93 throw std::runtime_error{
"BeamPipeLogVolume was not of type GeoTube"};
98 for (
unsigned int i = 0; i < beamPipeTopVolume->getNChildVols(); i++) {
99 if (beamPipeTopVolume->getNameOfChildVol(i) !=
"SectionC03") {
102 PVConstLink childTopVolume = beamPipeTopVolume->getChildVol(i);
103 const GeoLogVol* childLogVolume = childTopVolume->getLogVol();
104 const GeoTube* childTube =
105 dynamic_cast<const GeoTube*
>(childLogVolume->getShape());
107 beamPipeRadius = 0.5 * (childTube->getRMax() + childTube->getRMin());
113 "BeamPipe constructed from database with radius = " << beamPipeRadius);
115 "BeamPipe shift : " << beamPipeTransform.translation().transpose());
118 "BeamPipe constructed from default parameters with radius = "
121 "BeamPipe shift : " << beamPipeTransform.translation().transpose());
130 std::make_shared<Acts::Experimental::GeometryIdentifierBlueprintNode>();
133 auto& beamPipeContainer =
134 beamPipeNode->addCylinderContainer(
"BeamPipeContainer", AxisR);
135 beamPipeContainer.setAttachmentStrategy(AttachmentStrategy::Gap);
136 beamPipeContainer.setResizeStrategy(ResizeStrategy::Gap);
138 beamPipeContainer.addMaterial(
"BeamPipe_Material", [&](
auto& mat) {
140 mat.configureFace(OuterCylinder, {AxisRPhi, Closed, 20},
143 mat.addStaticVolume(beamPipeTransform,
144 std::make_shared<Acts::CylinderVolumeBounds>(
145 0, beamPipeRadius * 1_mm, 3. * 1_m),