 |
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