|  | ATLAS Offline Software
    | 
 
 
 
Go to the documentation of this file.
    9 #ifndef TRKGEOMETRY_TRACKINGVOLUME_H 
   10 #define TRKGEOMETRY_TRACKINGVOLUME_H 
   39 #ifndef TRKGEOMETRY_MAXLAYERATTEMPTS 
   40 #define TRKGEOMETRY_MAXLAYERATTEMPTS 100 
   51 class DetachedTrackingVolume;
 
  137                  std::shared_ptr<VolumeBounds> volbounds,
 
  138                  std::unique_ptr<LayerArray> subLayers = 
nullptr,
 
  139                  std::unique_ptr<TrackingVolumeArray> subVolumes = 
nullptr,
 
  146                  std::unique_ptr<LayerArray> subLayers = 
nullptr,
 
  147                  std::unique_ptr<TrackingVolumeArray> subVolumes = 
nullptr,
 
  153                  std::shared_ptr<VolumeBounds> volbounds,
 
  155                  std::unique_ptr<LayerArray> subLayers = 
nullptr,
 
  156                  std::unique_ptr<TrackingVolumeArray> subVolumes = 
nullptr,
 
  162     std::unique_ptr<Amg::Transform3D> htrans,
 
  163     std::shared_ptr<VolumeBounds> volbounds,
 
  165     std::unique_ptr<std::vector<DetachedTrackingVolume*>> detachedSubVolumes,
 
  173     std::unique_ptr<std::vector<DetachedTrackingVolume*>> detachedSubVolumes,
 
  179                  std::shared_ptr<VolumeBounds> volbounds,
 
  181                  std::unique_ptr<
const std::vector<TrackingVolume*>> unorderedSubVolumes,
 
  188                  std::unique_ptr<
const std::vector<TrackingVolume*>> unorderedSubVolumes,
 
  194                  std::shared_ptr<VolumeBounds> volbounds,
 
  196                  std::unique_ptr<
const std::vector<Layer*>> arbitraryLayers,
 
  203                  std::unique_ptr<
const std::vector<Layer*>> arbitraryLayers,
 
  210                  std::shared_ptr<VolumeBounds> volbounds,
 
  211                  std::unique_ptr<
const std::vector<Layer*>> arbitraryLayers,
 
  212                  std::unique_ptr<
const std::vector<TrackingVolume*>> unorderedSubVolumes,
 
  220                  std::unique_ptr<
const std::vector<Layer*>> arbitraryLayers,
 
  221                  std::unique_ptr<
const std::vector<TrackingVolume*>> unorderedSubVolumes,
 
  240                          bool skipNavLayer = 
false) 
const;
 
  261     bool resolveSubSurfaces = 
false) 
const;
 
  332   std::vector<std::shared_ptr<BoundarySurface<TrackingVolume>>>& 
boundarySurfaces() ;
 
  340     bool startOffBoundary = 
false) 
const;
 
  410   void compactify(
size_t& rSurfaces, 
size_t& tSurfaces);
 
  463 #endif // TRKGEOMETRY_TRACKINGVOLUME_H 
  
static const Layer * closest(const Amg::Vector3D &pos, const Amg::Vector3D &dir, const Layer &first, const Layer &second)
Helper method - find closest of two layers.
GlueVolumesDescriptor & glueVolumesDescriptor()
std::unique_ptr< const std::vector< DetachedTrackingVolume * > > m_confinedDetachedVolumes
Additionally, Unordered subvolumes (we own the elements)
const TrackingVolume * nextSubVolume(const Amg::Vector3D &gp, const Amg::Vector3D &dir) const
Return the next sub Volume if existing, returns THIS if no subVolume exists.
void addMaterial(const Material &mat, float fact=1.)
add Material
void createBoundarySurfaces()
Create Boundary Surface.
const Layer * nextLayer(const Amg::Vector3D &gp, const Amg::Vector3D &mom, bool asres=true, bool skipNavLayer=false) const
Return the next Layer if existing, NULL if no next layer corresponds.
void moveVolume(Amg::Transform3D &shift)
move Volume
ConstSharedPtrSpan(const std::vector< std::shared_ptr< T >> &var)
LayerIntersection< Amg::Vector3D > closestMaterialLayer(const Amg::Vector3D &gp, const Amg::Vector3D &dir, PropDirection pDir=alongMomentum, const BoundaryCheck &bchk=true) const
Return the closest layer with material description.
GeometrySignature geometrySignature() const
return the Signature
virtual ~TrackingVolume() override
Destructor.
TrackingVolumeArray * confinedVolumes()
Return the subLayer array.
constexpr size_t size() const noexcept
Cached pointer with atomic update.
GeometryType geometryType() const
return the Signature
const TrackingVolume * getMotherVolume() const
Return the MotherVolume - if it exists.
const TrackingVolume * associatedSubVolume(const Amg::Vector3D &gp) const
Return the associated sub Volume, returns THIS if no subVolume exists.
const Layer * entryLayer(const Amg::Vector3D &gp, const Amg::Vector3D &dir) const
Return the entry Layer to a TrackingVolume depending on the entry point.
ArraySpan< DetachedTrackingVolume const *const  > confinedDetachedVolumes() const
Return detached subVolumes - not the ownership.
std::vector< std::shared_ptr< BoundarySurface< TrackingVolume > > > m_boundarySurfaces
std::unique_ptr< const std::vector< TrackingVolume * > > m_confinedDenseVolumes
Additionally, Unordered Layers inside the Volume (we own the elements)
const LayerArray * checkoutConfinedLayers() const
Return the subLayerarray including the ownership.
bool const RAWDATA *ch2 const
ArraySpan< TrackingVolume *const  > confinedDenseVolumes()
std::unique_ptr< LayerArray > m_confinedLayers
Array of Volumes inside the Volume.
void indexContainedMaterialLayers(GeometrySignature geoSig, int &offset)
reIndex the material layers of the TrackingVolume
unsigned int layerAttempts(BoundarySurfaceFace exitFace) const
Layer attempts - as provided by the LayerAttemptCreator.
void registerColorCode(unsigned int icolor)
Register the color code.
std::unique_ptr< const std::vector< Layer * > > m_confinedArbitraryLayers
std::unique_ptr< TrackingVolumeArray > m_confinedVolumes
Detached subvolumes.
const LayerArray * confinedLayers() const
Return the subLayer array.
bool onVolumeBoundary(const T &pars) const
show if you are on a boundary surface
std::vector< LayerIntersection< T > > materialLayersOrdered(const Layer *sLayer, const Layer *eLayer, const T ¶meters, PropDirection pDir=alongMomentum, const BoundaryCheck &bchk=true, bool resolveSubSurfaces=false) const
Return the material layers ordered based on straight line intersections:
unsigned int colorCode() const
Get the color code.
void indexContainedStaticLayers(GeometrySignature geoSig, int &offset)
reIndex the static layers of the TrackingVolume
std::vector< const DetachedTrackingVolume * > assocDetachedSubVolumes(const Amg::Vector3D &gp, double tol) const
Return the associated detached subvolumes.
ArraySpan< Layer const *const  > confinedArbitraryLayers() const
Return the confined subLayer array.
ArraySpan< TrackingVolume const *const  > confinedDenseVolumes() const
Return unordered subVolumes - not the ownership.
const BoundarySurface< TrackingVolume > * boundarySurface(const ObjectAccessor::value_type &oa) const
Get the BoundarySurface to the appointed Accessor state.
std::string m_name
Volume name for debug reasons.
GeometrySignature m_geometrySignature
Eigen::Affine3d Transform3D
void registerOutsideGlueVolumes(GlueVolumesDescriptor *gvd)
Register the outside glue volumes - ordering is in the TrackingVolume Frame:
Cached unique_ptr with atomic update.
void synchronizeLayers(MsgStream &msgstream, double envelope=1.)
method to synchronize the layers with potentially updated volume bounds:
unsigned int m_colorCode
Color code for displaying.
BinnedArray< TrackingVolume > TrackingVolumeArray
std::vector< std::shared_ptr< BoundarySurface< TrackingVolume > > > & boundarySurfaces()
Method to return the BoundarySurfaces.
const Layer * exitLayer(const Amg::Vector3D &gp, const Amg::Vector3D &dir) const
Return the exit Layer from a TrackingVolume.
const T * operator[](size_t i) const
ArraySpan< DetachedTrackingVolume *const  > confinedDetachedVolumes()
ArraySpan< const std::shared_ptr< T > > m_span
Ensure that the ATLAS eigen extensions are properly loaded.
const std::string & volumeName() const
Returns the VolumeName - for debug reason, might be depreciated later.
TrackingVolume & operator=(const TrackingVolume &)=delete
Forbid assignment.
void moveTV(Amg::Transform3D &transform)
move the Tracking Volume
BinnedArray< Layer > LayerArray
ArraySpan< Layer *const  > confinedArbitraryLayers()
Return the confined subLayer array.
std::vector< BoundaryIntersection< T > > boundarySurfacesOrdered(const T ¶meters, PropDirection pDir=alongMomentum, bool startOffBoundary=false) const
Returns the boundary surfaces ordered in probability to hit them based on straight line intersection.
const Amg::Transform3D & transform() const
Return methods for geometry transform.
GeometryType m_geometryType
The Signature done by the GeometryBuilder.
Eigen::Matrix< double, 3, 1 > Vector3D
const TrackingVolume * m_motherVolume
boundary Surfaces, they can be shared between volumes
void createLayerAttemptsCalculator()
Create Layer Attempts Caluclator.
TrackingVolume()=default
Default Constructor.
constexpr bool empty() const noexcept
TrackingVolume(const TrackingVolume &)=delete
Forbidden copy constructor.
const TrackingVolume * nextVolume(const Amg::Vector3D &gp, const Amg::Vector3D &dir, PropDirection pDir=alongMomentum) const
Return the next volume along the navigation stream.
void sign(GeometrySignature signat, GeometryType gtype=Static)
sign the volume - the geometry builder has to do that
const TrackingVolumeArray * confinedVolumes() const
Return the subLayer array.
void setMotherVolume(const TrackingVolume *mvol)
set the MotherVolume
void compactify(size_t &rSurfaces, size_t &tSurfaces)
compactify the memory usage in the event by setting ownership to TackingGeometry the referenced types...
virtual bool isAlignable() const
std::unique_ptr< LayerAttemptsCalculator > m_layerAttemptsCalculator
defines how the Extrapolator propagates through this
Class extension to return the object, a represenation & the result.
void interlinkLayers()
Register Next - Previous for Layers, set volumelink.
CxxUtils::CachedUniquePtrT< GlueVolumesDescriptor > m_outsideGlueVolumes
provided the number of layer attempts
Define macros for attributes used to control the static checker.
const Layer * associatedLayer(const Amg::Vector3D &gp) const
Return the associated Layer.
LayerArray * confinedLayers()
Return the subLayer array.
unsigned int maxLayerAttempts() const
Layer attempts - as provided by the LayerAttemptCreator.
void screenDump(MsgStream &msg) const