|
ATLAS Offline Software
|
Go to the documentation of this file.
9 #ifndef TRKGEOMETRY_TRACKINGVOLUME_H
10 #define TRKGEOMETRY_TRACKINGVOLUME_H
40 #ifndef TRKGEOMETRY_MAXLAYERATTEMPTS
41 #define TRKGEOMETRY_MAXLAYERATTEMPTS 100
52 class DetachedTrackingVolume;
167 std::vector<DetachedTrackingVolume*>* detachedSubVolumes,
175 std::vector<DetachedTrackingVolume*>* detachedSubVolumes,
183 const std::vector<TrackingVolume*>* unorderedSubVolumes,
190 const std::vector<TrackingVolume*>* unorderedSubVolumes,
198 const std::vector<Layer*>* arbitraryLayers,
205 const std::vector<Layer*>* arbitraryLayers,
213 const std::vector<Layer*>* arbitraryLayers,
214 const std::vector<TrackingVolume*>* unorderedSubVolumes,
222 const std::vector<Layer*>* arbitraryLayers,
223 const std::vector<TrackingVolume*>* unorderedSubVolumes,
242 bool skipNavLayer =
false)
const;
263 bool resolveSubSurfaces =
false)
const;
334 std::vector<SharedObject<BoundarySurface<TrackingVolume>>>&
343 bool startOffBoundary =
false)
const;
425 void compactify(
size_t& rSurfaces,
size_t& tSurfaces);
488 #endif // TRKGEOMETRY_TRACKINGVOLUME_H
ConstSharedPtrSpan(const std::vector< std::shared_ptr< T >> &m_var)
TrackingVolumeArray * m_confinedVolumes
Detached subvolumes.
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()
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
LayerAttemptsCalculator * m_layerAttemptsCalculator
The Signature done by the GeometryBuilder.
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
std::vector< SharedObject< BoundarySurface< TrackingVolume > > > & boundarySurfaces()
Method to return the BoundarySurfaces.
~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.
bool m_redoNavigation
Navigation boolean.
const std::vector< TrackingVolume * > * m_confinedDenseVolumes
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.
LayerArray * m_confinedLayers
Array of Volumes inside the Volume.
const LayerArray * checkoutConfinedLayers() const
Return the subLayerarray including the ownership.
bool const RAWDATA *ch2 const
ArraySpan< TrackingVolume *const > confinedDenseVolumes()
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.
const std::vector< Layer * > * m_confinedArbitraryLayers
< Additionally, Unordered Layers inside the Volume (we own them)
const LayerArray * confinedLayers() const
Return the subLayer array.
const std::vector< DetachedTrackingVolume * > * m_confinedDetachedVolumes
Additionally, Unordered subvolumes (we ownd them)
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:
TrackingVolume()
Default Constructor.
TrackingVolume * cloneTV(Amg::Transform3D &transform) const
clone at new position
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
defines how the Extrapolator propagates through this
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
const Layer * exitLayer(const Amg::Vector3D &gp, const Amg::Vector3D &dir) const
Return the exit Layer from a TrackingVolume.
void clear()
remove content
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
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
Eigen::Matrix< double, 3, 1 > Vector3D
const TrackingVolume * m_motherVolume
mother volume of this volume
void createLayerAttemptsCalculator()
Create Layer Attempts Caluclator.
BinnedArray< Layer > LayerArray
constexpr bool empty() const noexcept
bool redoNavigation() const
Boolean, if true navigation needs to be redone when hitting this volume.
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 forceNavigationCheck()
force a navigation check
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
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
std::vector< SharedObject< BoundarySurface< TrackingVolume > > > m_boundarySurfaces
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