Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-19 09:23:22

0001 // This file is part of the Acts project.
0002 //
0003 // Copyright (C) 2016-2018 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 http://mozilla.org/MPL/2.0/.
0008 
0009 #pragma once
0010 
0011 #include "Acts/Definitions/Algebra.hpp"
0012 #include "Acts/Geometry/GeometryContext.hpp"
0013 #include "Acts/Utilities/BinningType.hpp"
0014 
0015 #include <memory>
0016 #include <string>
0017 #include <vector>
0018 
0019 namespace Acts {
0020 
0021 class Layer;
0022 class TrackingVolume;
0023 class VolumeBounds;
0024 class IVolumeMaterial;
0025 
0026 using LayerPtr = std::shared_ptr<const Layer>;
0027 using TrackingVolumePtr = std::shared_ptr<const TrackingVolume>;
0028 using MutableTrackingVolumePtr = std::shared_ptr<TrackingVolume>;
0029 
0030 using LayerVector = std::vector<LayerPtr>;
0031 using TrackingVolumeVector = std::vector<TrackingVolumePtr>;
0032 using MutableTrackingVolumeVector = std::vector<MutableTrackingVolumePtr>;
0033 
0034 ///  @class ITrackingVolumeHelper
0035 ///
0036 /// Interface class ITrackingVolumeHelper tools, it inherits from IAlgTool.
0037 /// The ITrackingVolumeHelper is a tool to pack a set of layers into a volume,
0038 /// or - to wrap several volumes into a container volume.
0039 ///
0040 /// @todo add documentation how this is done
0041 ///
0042 /// TrackingVolumes only exist as std::shared_ptr
0043 ///
0044 class ITrackingVolumeHelper {
0045  public:
0046   /// Virtual destructor
0047   virtual ~ITrackingVolumeHelper() = default;
0048 
0049   /// Create a TrackingVolume* from a set of layers and (optional) parameters
0050   ///
0051   /// @param gctx is the geometry context for witch the volume is built
0052   /// @param layers vector of static layers confined by the TrackingVolume
0053   /// if no bounds or HepTransform is given, they define the size
0054   /// together with the volume enevlope parameters
0055   /// @param volumeMaterial material properties for this TrackingVolume
0056   /// @param volumeBounds: confinement of this TrackingVolume
0057   /// @param mtvVector (optional) Vector of confined TrackingVolumes
0058   /// @param transform (optional) placement of this TrackingVolume
0059   /// @param volumeName  volume name to be given
0060   /// @param btype (optional) BinningType - arbitrary(default) or equidistant
0061   ///
0062   /// @return shared pointer to a new TrackingVolume
0063   virtual MutableTrackingVolumePtr createTrackingVolume(
0064       const GeometryContext& gctx, const LayerVector& layers,
0065       std::shared_ptr<const IVolumeMaterial> volumeMaterial,
0066       std::shared_ptr<VolumeBounds> volumeBounds,
0067       MutableTrackingVolumeVector mtvVector = {},
0068       const Transform3& transform = Transform3::Identity(),
0069       const std::string& volumeName = "UndefinedVolume",
0070       BinningType btype = arbitrary) const = 0;
0071 
0072   /// Create a TrackingVolume* from a set of layers and (optional) parameters
0073   ///
0074   /// @param gctx is the geometry context for witch the volume is built
0075   /// @param layers vector of static layers confined by the TrackingVolume
0076   /// if no bounds or HepTransform is given, they define the size
0077   /// together with the volume enevlope parameters
0078   /// @param volumeMaterial material properties for this TrackingVolume
0079   /// @param mtvVector Vector of confined TrackingVolumes
0080   /// @param loc0Min, loc0Max, loc1Min, loc1Max : local position in space,
0081   /// this TrackingVolume is restricted to Translation only
0082   /// @param volumeName  volume name to be given
0083   /// @param btype (optional) BinningType - arbitrary(default) or equidistant
0084   ///
0085   /// @return shared pointer to a new TrackingVolume
0086   virtual MutableTrackingVolumePtr createTrackingVolume(
0087       const GeometryContext& gctx, const LayerVector& layers,
0088       MutableTrackingVolumeVector mtvVector,
0089       std::shared_ptr<const IVolumeMaterial> volumeMaterial, double loc0Min,
0090       double loc0Max, double loc1Min, double loc1Max,
0091       const std::string& volumeName = "UndefinedVolume",
0092       BinningType btype = arbitrary) const = 0;
0093 
0094   /// Create a gap volume from dimensions and
0095   ///
0096   /// @param gctx is the geometry context for witch the volume is built
0097   /// @param mtvVector Vector of confined TrackingVolumes
0098   /// @param volumeMaterial material properties for this TrackingVolume
0099   /// @param loc0Min, loc0Max, loc1Min, loc1Max : local position in space,
0100   /// this TrackingVolume is restricted to Translation only
0101   /// @param materialLayers number of material layers (equidistant binning)
0102   /// @param cylinder type of layers
0103   /// @param volumeName  volume name to be given
0104   ///
0105   /// @return shared pointer to a new TrackingVolume
0106   virtual MutableTrackingVolumePtr createGapTrackingVolume(
0107       const GeometryContext& gctx, MutableTrackingVolumeVector& mtvVector,
0108       std::shared_ptr<const IVolumeMaterial> volumeMaterial, double loc0Min,
0109       double loc0Max, double loc1Min, double loc1Max,
0110       unsigned int materialLayers, bool cylinder = true,
0111       const std::string& volumeName = "UndefinedVolume") const = 0;
0112 
0113   /// Create a gap volume from dimensions and
0114   ///
0115   /// @param gctx is the geometry context for witch the volume is built
0116   /// @param mtvVector Vector of confined TrackingVolumes
0117   /// @param volumeMaterial material properties for this TrackingVolume
0118   /// @param loc0Min, loc0Max, loc1Min, loc1Max local position in space,
0119   /// @param layerPositions custom layer positions
0120   /// @param cylinder type of layers
0121   /// @param volumeName  : volume name to be given
0122   /// @param btype (optional) BinningType - arbitrary(default) or equidistant
0123   ///
0124   /// @return shared pointer to a new TrackingVolume
0125   virtual MutableTrackingVolumePtr createGapTrackingVolume(
0126       const GeometryContext& gctx, MutableTrackingVolumeVector& mtvVector,
0127       std::shared_ptr<const IVolumeMaterial> volumeMaterial, double loc0Min,
0128       double loc0Max, double loc1Min, double loc1Max,
0129       const std::vector<double>& layerPositions, bool cylinder = true,
0130       const std::string& volumeName = "UndefinedVolume",
0131       BinningType btype = arbitrary) const = 0;
0132 
0133   /// Create a one level higher TrackingVolue
0134   ///
0135   /// @param gctx is the geometry context for witch the volume is built
0136   /// @param volumes the volumes to be contained
0137   ///
0138   /// @return shared pointer to a new TrackingVolume
0139   virtual MutableTrackingVolumePtr createContainerTrackingVolume(
0140       const GeometryContext& gctx,
0141       const TrackingVolumeVector& volumes) const = 0;
0142 };
0143 
0144 }  // namespace Acts