Get the chamber's sensitive elements.
229 std::vector<staticNodePtr> readoutVolumes;
230 std::vector<surfacePtr> readoutSurfaces;
231 Acts::GeometryIdentifier::Value mdtId{1};
235 std::vector<surfacePtr> detSurfaces = readoutEle->getSurfaces();
236 switch(readoutEle->detectorType()){
242 const Amg::Vector3D toChamber = element.globalToLocalTrans(gctx)*mdtReadoutEle->center(gctx);
243 const Acts::Transform3 mdtTransform = element.localToGlobalTrans(gctx) *
Amg::getTranslate3D(toChamber);
246 Acts::Experimental::MultiWireVolumeBuilder::Config mwCfg;
248 mwCfg.mlSurfaces = detSurfaces;
249 mwCfg.transform = mdtTransform;
251 auto mdtBounds = boundsFactory.makeBounds<Acts::TrapezoidVolumeBounds>(
parameters.shortHalfX,
254 mwCfg.bounds = mdtBounds;
255 using BoundsV = Acts::TrapezoidVolumeBounds::BoundValues;
256 mwCfg.binning = {{{Acts::AxisDirection::AxisY, Acts::AxisBoundaryType::Bound,
257 -mdtBounds->get(BoundsV::eHalfLengthY),
258 mdtBounds->get(BoundsV::eHalfLengthY),
259 static_cast<std::size_t
>(std::lround(2 * mdtBounds->get(BoundsV::eHalfLengthY) /
parameters.tubePitch))}, 2
u},
260 {{Acts::AxisDirection::AxisZ, Acts::AxisBoundaryType::Bound,
261 -mdtBounds->get(BoundsV::eHalfLengthZ),
262 mdtBounds->get(BoundsV::eHalfLengthZ),
263 static_cast<std::size_t
>(std::lround(2 * mdtBounds->get(BoundsV::eHalfLengthZ) /
parameters.tubePitch))}, 1
u}};
264 Acts::Experimental::MultiWireVolumeBuilder mdtBuilder{mwCfg};
265 std::unique_ptr<Acts::TrackingVolume> mdtVolume = mdtBuilder.buildVolume();
267 mdtVolume->assignGeometryId(chId.withExtra(mdtId++));
269 std::shared_ptr<Acts::Experimental::StaticBlueprintNode> mdtNode = std::make_shared<Acts::Experimental::StaticBlueprintNode>(std::move(mdtVolume));
270 mdtNode->setNavigationPolicyFactory(mdtBuilder.createNavigationPolicyFactory());
271 readoutVolumes.push_back(std::move(mdtNode));
280 readoutSurfaces.insert(readoutSurfaces.end(), std::make_move_iterator(detSurfaces.begin()),
281 std::make_move_iterator(detSurfaces.end()));
292 return std::make_pair(std::move(readoutVolumes), std::move(readoutSurfaces));