![]() |
|
|||
File indexing completed on 2025-09-17 08:01:37
0001 // This file is part of the ACTS project. 0002 // 0003 // Copyright (C) 2016 CERN for the benefit of the ACTS project 0004 // 0005 // This Source Code Form is subject to the terms of the Mozilla Public 0006 // License, v. 2.0. If a copy of the MPL was not distributed with this 0007 // file, You can obtain one at https://mozilla.org/MPL/2.0/. 0008 0009 #pragma once 0010 0011 #include "Acts/Definitions/Algebra.hpp" 0012 #include "Acts/Geometry/BoundarySurfaceFace.hpp" 0013 #include "Acts/Geometry/BoundarySurfaceT.hpp" 0014 #include "Acts/Geometry/GeometryContext.hpp" 0015 #include "Acts/Geometry/GeometryIdentifier.hpp" 0016 #include "Acts/Geometry/Layer.hpp" 0017 #include "Acts/Geometry/Portal.hpp" 0018 #include "Acts/Geometry/TrackingGeometryVisitor.hpp" 0019 #include "Acts/Geometry/TrackingVolumeVisitorConcept.hpp" 0020 #include "Acts/Geometry/Volume.hpp" 0021 #include "Acts/Material/IVolumeMaterial.hpp" 0022 #include "Acts/Navigation/NavigationDelegate.hpp" 0023 #include "Acts/Navigation/NavigationStream.hpp" 0024 #include "Acts/Surfaces/Surface.hpp" 0025 #include "Acts/Surfaces/SurfaceVisitorConcept.hpp" 0026 #include "Acts/Utilities/BinnedArray.hpp" 0027 #include "Acts/Utilities/Logger.hpp" 0028 #include "Acts/Utilities/TransformRange.hpp" 0029 #include "Acts/Visualization/ViewConfig.hpp" 0030 0031 #include <cstddef> 0032 #include <memory> 0033 #include <string> 0034 #include <unordered_map> 0035 #include <utility> 0036 #include <vector> 0037 0038 #include <boost/container/container_fwd.hpp> 0039 0040 namespace Acts { 0041 0042 class GlueVolumesDescriptor; 0043 class VolumeBounds; 0044 template <typename object_t> 0045 struct NavigationOptions; 0046 class IMaterialDecorator; 0047 class ISurfaceMaterial; 0048 class IVolumeMaterial; 0049 class Surface; 0050 class TrackingVolume; 0051 struct GeometryIdentifierHook; 0052 class Portal; 0053 class INavigationPolicy; 0054 0055 /// Interface types of the Gen1 geometry model 0056 /// @note This interface is being replaced, and is subject to removal 0057 /// @{ 0058 0059 // master typedefs 0060 using TrackingVolumePtr = std::shared_ptr<const TrackingVolume>; 0061 using MutableTrackingVolumePtr = std::shared_ptr<TrackingVolume>; 0062 0063 using TrackingVolumeBoundaryPtr = 0064 std::shared_ptr<const BoundarySurfaceT<TrackingVolume>>; 0065 using TrackingVolumeBoundaries = std::vector<TrackingVolumeBoundaryPtr>; 0066 0067 // possible contained 0068 using TrackingVolumeArray = BinnedArray<TrackingVolumePtr>; 0069 using TrackingVolumeVector = std::vector<TrackingVolumePtr>; 0070 using MutableTrackingVolumeVector = std::vector<MutableTrackingVolumePtr>; 0071 using LayerArray = BinnedArray<LayerPtr>; 0072 using LayerVector = std::vector<LayerPtr>; 0073 0074 /// Intersection with @c Layer 0075 using LayerIntersection = std::pair<SurfaceIntersection, const Layer*>; 0076 /// Multi-intersection with @c Layer 0077 using LayerMultiIntersection = 0078 std::pair<SurfaceMultiIntersection, const Layer*>; 0079 0080 /// BoundarySurface of a volume 0081 using BoundarySurface = BoundarySurfaceT<TrackingVolume>; 0082 0083 /// Intersection with a @c BoundarySurface 0084 /// @note This struct is currently split between a gen1 boundary surface 0085 /// and a gen3 portal but only one of them will be set. This will go away 0086 /// once the gen 1 geometry is removed. 0087 struct BoundaryIntersection { 0088 SurfaceIntersection intersection; 0089 const BoundarySurface* boundarySurface; 0090 const Portal* portal; 0091 }; 0092 0093 /// Multi-intersection with a @c BoundarySurface 0094 using BoundaryMultiIntersection = 0095 std::pair<SurfaceMultiIntersection, const BoundarySurface*>; 0096 0097 /// @} 0098 0099 /// @class TrackingVolume 0100 /// 0101 /// Full Volume description used in Tracking, 0102 /// it inherits from Volume to get the geometrical structure. 0103 /// 0104 /// A TrackingVolume at navigation level can provide the (layer) material 0105 /// information / internal navigation with in 0106 /// 5 different ways: 0107 /// 0108 /// --- a) Static confinement of Layers 0109 /// --- b) detached sub volumes 0110 /// --- b) unordered (arbitrarily oriented) layers 0111 /// --- d) unordered sub volumes 0112 /// --- e) unordered layers AND unordered subvolumes 0113 /// 0114 /// The TrackingVolume can also be a simple container of other 0115 /// TrackingVolumes 0116 /// 0117 /// In addition it is capable of holding a subarray of Layers and 0118 /// TrackingVolumes. 0119 /// 0120 class TrackingVolume : public Volume { 0121 friend class TrackingGeometry; 0122 0123 public: 0124 TrackingVolume() = delete; 0125 ~TrackingVolume() override; 0126 TrackingVolume(const TrackingVolume&) = delete; 0127 TrackingVolume& operator=(const TrackingVolume&) = delete; 0128 TrackingVolume(TrackingVolume&&) noexcept; 0129 TrackingVolume& operator=(TrackingVolume&&) noexcept; 0130 0131 /// Constructor for a container Volume 0132 /// - vacuum filled volume either as a for other tracking volumes 0133 /// 0134 /// @param transform is the global 3D transform to position the volume in 0135 /// space 0136 /// @param volbounds is the description of the volume boundaries 0137 /// @param volumeName is a string identifier 0138 TrackingVolume(const Transform3& transform, 0139 std::shared_ptr<VolumeBounds> volbounds, 0140 const std::string& volumeName = "undefined"); 0141 0142 /// Constructor for a full equipped Tracking Volume 0143 /// 0144 /// @param transform is the global 3D transform to position the volume in 0145 /// space 0146 /// @param volumeBounds is the description of the volume boundaries 0147 /// @param volumeMaterial is are materials of the tracking volume 0148 /// @param staticLayerArray is the confined layer array (optional) 0149 /// @param containedVolumeArray are the sub volumes if the volume is a 0150 /// container 0151 /// @param denseVolumeVector The contained dense volumes 0152 /// @param volumeName is a string identifier 0153 TrackingVolume( 0154 const Transform3& transform, std::shared_ptr<VolumeBounds> volumeBounds, 0155 std::shared_ptr<const IVolumeMaterial> volumeMaterial, 0156 std::unique_ptr<const LayerArray> staticLayerArray = nullptr, 0157 std::shared_ptr<const TrackingVolumeArray> containedVolumeArray = nullptr, 0158 MutableTrackingVolumeVector denseVolumeVector = {}, 0159 const std::string& volumeName = "undefined"); 0160 0161 /// Constructor from a regular volume 0162 /// @param volume is the volume to be converted 0163 /// @param volumeName is a string identifier 0164 explicit TrackingVolume(Volume& volume, 0165 const std::string& volumeName = "undefined"); 0166 0167 /// Return the associated sub Volume, returns THIS if no subVolume exists 0168 /// @param gctx The current geometry context object, e.g. alignment 0169 /// @param position is the global position associated with that search 0170 /// @param tol Search position tolerance for dense volumes 0171 /// 0172 /// @return plain pointer to associated with the position 0173 const TrackingVolume* lowestTrackingVolume(const GeometryContext& gctx, 0174 const Vector3& position, 0175 const double tol = 0.) const; 0176 0177 /// @brief Visit all reachable surfaces 0178 /// 0179 /// @tparam visitor_t Type of the callable visitor 0180 /// 0181 /// @param visitor The callable. Will be called for each reachable surface 0182 /// that is found, a selection of the surfaces can be done in the visitor 0183 /// @param restrictToSensitives If true, only sensitive surfaces are visited 0184 /// 0185 /// @note If a context is needed for the visit, the vistitor has to provide 0186 /// this, e.g. as a private member 0187 template <SurfaceVisitor visitor_t> 0188 void visitSurfaces(visitor_t&& visitor, bool restrictToSensitives) const { 0189 auto sensitive = [&visitor](const Surface& surface) { 0190 if (surface.geometryId().sensitive() == 0) { 0191 return; 0192 } 0193 visitor(&surface); 0194 }; 0195 0196 if (restrictToSensitives) { 0197 apply(sensitive); 0198 } else { 0199 apply(overloaded{ 0200 sensitive, 0201 [&visitor](const Portal& portal) { visitor(&portal.surface()); }, 0202 [&visitor](const BoundarySurface& bs) { 0203 visitor(&bs.surfaceRepresentation()); 0204 }}); 0205 } 0206 } 0207 0208 /// @brief Visit all sensitive surfaces 0209 /// 0210 /// @tparam visitor_t Type of the callable visitor 0211 /// 0212 /// @param visitor The callable. Will be called for each sensitive surface 0213 /// that is found, a selection of the surfaces can be done in the visitor 0214 /// 0215 /// @note If a context is needed for the visit, the vistitor has to provide 0216 /// this, e.g. as a private member 0217 template <SurfaceVisitor visitor_t> 0218 void visitSurfaces(visitor_t&& visitor) const { 0219 visitSurfaces(std::forward<visitor_t>(visitor), true); 0220 } 0221 0222 /// @brief Visit all reachable tracking volumes 0223 /// 0224 /// @tparam visitor_t Type of the callable visitor 0225 /// 0226 /// @param visitor The callable. Will be called for each reachable volume 0227 /// that is found, a selection of the volumes can be done in the visitor 0228 /// 0229 /// @note If a context is needed for the visit, the vistitor has to provide 0230 /// this, e.g. as a private member 0231 template <TrackingVolumeVisitor visitor_t> 0232 void visitVolumes(visitor_t&& visitor) const { 0233 apply([&visitor](const TrackingVolume& volume) { visitor(&volume); }); 0234 } 0235 0236 /// @brief Apply a visitor to the tracking volume 0237 /// 0238 /// @param visitor The visitor to apply 0239 /// 0240 void apply(TrackingGeometryVisitor& visitor) const; 0241 0242 /// @brief Apply a mutable visitor to the tracking volume 0243 /// 0244 /// @param visitor The visitor to apply 0245 /// 0246 void apply(TrackingGeometryMutableVisitor& visitor); 0247 0248 /// @brief Apply an arbitrary callable as a visitor to the tracking volume 0249 /// 0250 /// @param callable The callable to apply 0251 /// 0252 /// @note The visitor can be overloaded on any of the arguments that 0253 /// the methods in @c TrackingGeometryVisitor receive. 0254 template <typename Callable> 0255 void apply(Callable&& callable) 0256 requires(detail::callableWithAnyMutable<Callable>() && 0257 !detail::callableWithAnyConst<Callable>()) 0258 { 0259 detail::TrackingGeometryLambdaMutableVisitor visitor{ 0260 std::forward<Callable>(callable)}; 0261 apply(visitor); 0262 } 0263 0264 /// @brief Apply an arbitrary callable as a visitor to the tracking volume 0265 /// 0266 /// @param callable The callable to apply 0267 /// 0268 /// @note The visitor can be overloaded on any of the arguments that 0269 /// the methods in @c TrackingGeometryMutableVisitor receive. 0270 template <typename Callable> 0271 void apply(Callable&& callable) const 0272 requires(detail::callableWithAnyConst<Callable>()) 0273 { 0274 detail::TrackingGeometryLambdaVisitor visitor{ 0275 std::forward<Callable>(callable)}; 0276 apply(visitor); 0277 } 0278 0279 /// Returns the VolumeName - for debug reason, might be depreciated later 0280 const std::string& volumeName() const; 0281 0282 /// Set the volume name to @p volumeName 0283 /// @param volumeName is the new name of 0284 void setVolumeName(const std::string& volumeName); 0285 0286 /// Return the material of the volume 0287 const IVolumeMaterial* volumeMaterial() const; 0288 0289 /// Return the material of the volume as shared pointer 0290 const std::shared_ptr<const IVolumeMaterial>& volumeMaterialPtr() const; 0291 0292 /// Set the volume material description 0293 /// 0294 /// The material is usually derived in a complicated way and loaded from 0295 /// a framework given source. As various volumes could potentially share the 0296 /// the same material description, it is provided as a shared object 0297 /// 0298 /// @param material Material description of this volume 0299 void assignVolumeMaterial(std::shared_ptr<const IVolumeMaterial> material); 0300 0301 /// Return the MotherVolume - if it exists 0302 const TrackingVolume* motherVolume() const; 0303 0304 /// Return the MotherVolume - if it exists 0305 TrackingVolume* motherVolume(); 0306 0307 /// Set the MotherVolume 0308 /// 0309 /// @param mvol is the mother volume 0310 void setMotherVolume(TrackingVolume* mvol); 0311 0312 using MutableVolumeRange = 0313 detail::TransformRange<detail::Dereference, 0314 std::vector<std::unique_ptr<TrackingVolume>>>; 0315 using VolumeRange = detail::TransformRange< 0316 detail::ConstDereference, 0317 const std::vector<std::unique_ptr<TrackingVolume>>>; 0318 0319 /// Return all volumes registered under this tracking volume 0320 /// @return the range of volumes 0321 VolumeRange volumes() const; 0322 0323 /// Return mutable view of the registered volumes under this tracking volume 0324 /// @return the range of volumes 0325 MutableVolumeRange volumes(); 0326 0327 using MutablePortalRange = 0328 detail::TransformRange<detail::Dereference, 0329 std::vector<std::shared_ptr<Portal>>>; 0330 0331 using PortalRange = 0332 detail::TransformRange<detail::ConstDereference, 0333 const std::vector<std::shared_ptr<Portal>>>; 0334 0335 /// Return all portals registered under this tracking volume 0336 /// @return the range of portals 0337 PortalRange portals() const; 0338 0339 /// Return mutable view of the registered portals under this tracking volume 0340 /// @return the range of portals 0341 MutablePortalRange portals(); 0342 0343 /// Add a portal to this tracking volume 0344 /// @param portal The portal to add 0345 void addPortal(std::shared_ptr<Portal> portal); 0346 0347 using MutableSurfaceRange = 0348 detail::TransformRange<detail::Dereference, 0349 std::vector<std::shared_ptr<Surface>>>; 0350 using SurfaceRange = 0351 detail::TransformRange<detail::ConstDereference, 0352 const std::vector<std::shared_ptr<Surface>>>; 0353 0354 /// Return all surfaces registered under this tracking volume 0355 /// @return the range of surfaces 0356 SurfaceRange surfaces() const; 0357 0358 /// Return mutable view of the registered surfaces under this tracking volume 0359 /// @return the range of surfaces 0360 MutableSurfaceRange surfaces(); 0361 0362 /// Add a surface to this tracking volume 0363 /// @param surface The surface to add 0364 void addSurface(std::shared_ptr<Surface> surface); 0365 0366 /// Add a child volume to this tracking volume 0367 /// @param volume The volume to add 0368 /// @note The @p volume will have its mother volume assigned to @p this. 0369 /// It will throw if @p volume already has a mother volume set 0370 /// @return Reference to the added volume 0371 TrackingVolume& addVolume(std::unique_ptr<TrackingVolume> volume); 0372 0373 /// Interface of @c TrackingVolume in the Gen1 geometry model 0374 /// @note This interface is being replaced, and is subject to removal 0375 /// 0376 /// @{ 0377 0378 /// Return the associated Layer to the global position 0379 /// 0380 /// @param gctx The current geometry context object, e.g. alignment 0381 /// @param position is the associated global position 0382 /// 0383 /// @return plain pointer to layer object 0384 const Layer* associatedLayer(const GeometryContext& gctx, 0385 const Vector3& position) const; 0386 0387 /// @brief Resolves the volume into (compatible) Layers 0388 /// 0389 /// This is the method for the propagator/extrapolator 0390 /// @tparam options_t Type of navigation options object for decomposition 0391 /// 0392 /// @param gctx The current geometry context object, e.g. alignment 0393 /// @param position Position for the search 0394 /// @param direction Direction for the search 0395 /// @param options The templated navigation options 0396 /// 0397 /// @return vector of compatible intersections with layers 0398 boost::container::small_vector<LayerIntersection, 10> compatibleLayers( 0399 const GeometryContext& gctx, const Vector3& position, 0400 const Vector3& direction, const NavigationOptions<Layer>& options) const; 0401 0402 /// @brief Returns all boundary surfaces sorted by the user. 0403 /// 0404 /// @tparam options_t Type of navigation options object for decomposition 0405 /// @tparam sorter_t Type of the boundary surface sorter 0406 /// 0407 /// @param gctx The current geometry context object, e.g. alignment 0408 /// @param position The position for searching 0409 /// @param direction The direction for searching 0410 /// @param options The templated navigation options 0411 /// @param logger A @c Logger instance 0412 /// 0413 /// @return is the templated boundary intersection 0414 boost::container::small_vector<BoundaryIntersection, 4> compatibleBoundaries( 0415 const GeometryContext& gctx, const Vector3& position, 0416 const Vector3& direction, const NavigationOptions<Surface>& options, 0417 const Logger& logger = getDummyLogger()) const; 0418 0419 /// Return the confined static layer array - if it exists 0420 /// @return the BinnedArray of static layers if exists 0421 const LayerArray* confinedLayers() const; 0422 0423 /// Return the confined volumes of this container array - if it exists 0424 std::shared_ptr<const TrackingVolumeArray> confinedVolumes() const; 0425 0426 /// Return the confined dense volumes 0427 const MutableTrackingVolumeVector denseVolumes() const; 0428 0429 /// Method to return the BoundarySurfaces 0430 const TrackingVolumeBoundaries& boundarySurfaces() const; 0431 0432 /// Set the boundary surface material description 0433 /// 0434 /// The material is usually derived in a complicated way and loaded from 0435 /// a framework given source. As various volumes could potentially share the 0436 /// the same material description, it is provided as a shared object 0437 /// 0438 /// @param surfaceMaterial Material description of this volume 0439 /// @param bsFace Specifies which boundary surface to assign the material to 0440 void assignBoundaryMaterial( 0441 std::shared_ptr<const ISurfaceMaterial> surfaceMaterial, 0442 BoundarySurfaceFace bsFace); 0443 0444 /// Glue another tracking volume to this one 0445 /// - if common face is set the glued volumes are sharing the boundary, down 0446 /// to the last navigation volume 0447 /// 0448 /// @param gctx The current geometry context object, e.g. alignment 0449 /// @param bsfMine is the boundary face indicater where to glue 0450 /// @param neighbor is the TrackingVolume to be glued 0451 /// @param bsfNeighbor is the boundary surface of the neighbor 0452 void glueTrackingVolume(const GeometryContext& gctx, 0453 BoundarySurfaceFace bsfMine, TrackingVolume* neighbor, 0454 BoundarySurfaceFace bsfNeighbor); 0455 0456 /// Glue another tracking volume to this one 0457 /// - if common face is set the glued volumes are sharing the boundary, down 0458 /// to the last navigation volume 0459 /// 0460 /// @param gctx The current geometry context object, e.g. alignment 0461 /// @param bsfMine is the boundary face indicater where to glue 0462 /// @param neighbors are the TrackingVolumes to be glued 0463 /// @param bsfNeighbor are the boundary surface of the neighbors 0464 void glueTrackingVolumes( 0465 const GeometryContext& gctx, BoundarySurfaceFace bsfMine, 0466 const std::shared_ptr<TrackingVolumeArray>& neighbors, 0467 BoundarySurfaceFace bsfNeighbor); 0468 0469 /// Provide a new BoundarySurface from the glueing 0470 /// 0471 /// @param bsf is the boundary face indicater where to glue 0472 /// @param bs is the new boundary surface 0473 /// @param checkmaterial is a flag how to deal with material, if true: 0474 /// - if the old boundary surface had a material description 0475 /// but the new one has not, keep the current one 0476 /// - in all other cases just assign the new boundary surface 0477 void updateBoundarySurface( 0478 BoundarySurfaceFace bsf, 0479 std::shared_ptr<const BoundarySurfaceT<TrackingVolume>> bs, 0480 bool checkmaterial = true); 0481 0482 /// Register the outside glue volumes - 0483 /// ordering is in the TrackingVolume Frame: 0484 /// - negativeFaceXY 0485 /// - (faces YZ, ZY, radial faces) 0486 /// - positiveFaceXY 0487 /// 0488 /// @param gvd register a new GlueVolumeDescriptor 0489 void registerGlueVolumeDescriptor(std::unique_ptr<GlueVolumesDescriptor> gvd); 0490 0491 /// Clear boundary surfaces for this tracking volume 0492 void clearBoundarySurfaces(); 0493 0494 /// Register the outside glue volumes - 0495 /// ordering is in the TrackingVolume Frame: 0496 /// - negativeFaceXY 0497 /// - (faces YZ, ZY, radial faces) 0498 /// - positiveFaceXY 0499 GlueVolumesDescriptor& glueVolumesDescriptor(); 0500 0501 /// Produces a 3D visualization of this tracking volume 0502 /// @param helper The visualization helper describing the output format 0503 /// @param gctx The geometry context 0504 /// @param viewConfig The view configuration 0505 /// @param portalViewConfig View configuration for portals 0506 /// @param sensitiveViewConfig View configuration for sensitive surfaces 0507 void visualize(IVisualization3D& helper, const GeometryContext& gctx, 0508 const ViewConfig& viewConfig, 0509 const ViewConfig& portalViewConfig, 0510 const ViewConfig& sensitiveViewConfig) const; 0511 0512 /// Access the navigation policy if any that is registered on this volume 0513 /// @return a pointer to the navigation policy, or nullptr if none is set 0514 const INavigationPolicy* navigationPolicy() const; 0515 0516 /// Access the navigation policy if any that is registered on this volume 0517 /// @return a pointer to the navigation policy, or nullptr if none is set 0518 INavigationPolicy* navigationPolicy(); 0519 0520 /// Register a navigation policy with this volume. The argument can not be 0521 /// nullptr. 0522 /// @param policy is the navigation policy to be registered 0523 void setNavigationPolicy(std::unique_ptr<INavigationPolicy> policy); 0524 0525 /// Populate the navigation stream with navigation candidates from this 0526 /// volume. Internally, this consults the registered navigation policy, where 0527 /// the default is a noop. 0528 /// @param args are the navigation arguments 0529 /// @param stream is the navigation stream to be updated 0530 /// @param logger is the logger 0531 void initializeNavigationCandidates(const NavigationArguments& args, 0532 AppendOnlyNavigationStream& stream, 0533 const Logger& logger) const; 0534 0535 private: 0536 void connectDenseBoundarySurfaces( 0537 MutableTrackingVolumeVector& confinedDenseVolumes); 0538 0539 /// interlink the layers in this TrackingVolume 0540 void interlinkLayers(); 0541 0542 /// Create Boundary Surface 0543 void createBoundarySurfaces(); 0544 0545 /// method to synchronize the layers with potentially updated volume bounds: 0546 /// - adapts the layer dimensions to the new volumebounds + envelope 0547 /// 0548 /// @param envelope is the clearance between volume boundary and layer 0549 void synchronizeLayers(double envelope = 1.) const; 0550 0551 // the boundary surfaces 0552 std::vector<TrackingVolumeBoundaryPtr> m_boundarySurfaces; 0553 0554 ///(a) static configuration ordered by Binned arrays 0555 /// static layers 0556 std::unique_ptr<const LayerArray> m_confinedLayers = nullptr; 0557 0558 /// Array of Volumes inside the Volume when acting as container 0559 std::shared_ptr<const TrackingVolumeArray> m_confinedVolumes = nullptr; 0560 0561 /// confined dense 0562 MutableTrackingVolumeVector m_confinedDenseVolumes; 0563 0564 /// Volumes to glue Volumes from the outside 0565 std::unique_ptr<GlueVolumesDescriptor> m_glueVolumeDescriptor{nullptr}; 0566 0567 /// @} 0568 0569 private: 0570 /// The volume based material the TrackingVolume consists of 0571 std::shared_ptr<const IVolumeMaterial> m_volumeMaterial{nullptr}; 0572 0573 /// Remember the mother volume 0574 TrackingVolume* m_motherVolume{nullptr}; 0575 0576 /// Volume name for debug reasons & screen output 0577 std::string m_name; 0578 0579 std::vector<std::unique_ptr<TrackingVolume>> m_volumes; 0580 std::vector<std::shared_ptr<Portal>> m_portals; 0581 std::vector<std::shared_ptr<Surface>> m_surfaces; 0582 0583 std::unique_ptr<INavigationPolicy> m_navigationPolicy; 0584 0585 NavigationDelegate m_navigationDelegate{}; 0586 }; 0587 0588 } // namespace Acts
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |