9#ifndef TRKGEOMETRY_LAYER_H
10#define TRKGEOMETRY_LAYER_H
37class ICompatibilityEstimator;
82 std::unique_ptr<OverlapDescriptor> od =
nullptr,
87 std::unique_ptr<OverlapDescriptor> =
nullptr,
int ltype =
int(
passive));
92 double thickness = 0., std::unique_ptr<OverlapDescriptor> od =
nullptr,
183 const ICompatibilityEstimator* ice =
nullptr)
const;
189 bool materialSurfacesOnly =
true,
190 const Surface* startSurface =
nullptr,
191 const Surface* endSurface =
nullptr,
192 const ICompatibilityEstimator* ice =
nullptr)
const;
198 bool materialSurfacesOnly =
true,
199 const Surface* startSurface =
nullptr,
200 const Surface* endSurface =
nullptr,
201 const ICompatibilityEstimator* ice =
nullptr)
const;
250 std::vector<SurfaceIntersection>& cSurfaces,
const T& pars,
252 bool materialSurfacesOnly =
true,
const Surface* startSurface =
nullptr,
253 const Surface* endSurface =
nullptr,
254 const ICompatibilityEstimator* ice =
nullptr)
const;
257 void compactify(
size_t& cSurfaces,
size_t& tSurfaces);
277 double envelope = 1.) = 0;
Define macros for attributes used to control the static checker.
Layer()=default
Default Constructor.
A generic symmetric BinUtility, for fully symmetric binning in terms of binning grid and binning type...
Binned Array for avoiding map searches/.
The BoundaryCheck class allows to steer the way surface boundaries are used for inside/outside checks...
Base Class for a navigation object (active/passive) in the Tracking realm.
LayerIndex for the identification of layers in a simplified detector geometry of Cylinders and Discs.
This virtual base class encapsulates the logics to build pre/post/full update material for Layer stru...
void assignMaterialProperties(const LayerMaterialProperties &, double scale=1.0)
assignMaterialPropeties
size_t compatibleSurfaces(std::vector< SurfaceIntersection > &cSurfaces, const TrackParameters &pars, PropDirection pdir, const BoundaryCheck &bcheck, bool materialSurfacesOnly=true, const Surface *startSurface=nullptr, const Surface *endSurface=nullptr, const ICompatibilityEstimator *ice=nullptr) const
get compatible surfaces starting from charged parameters
void compactify(size_t &cSurfaces, size_t &tSurfaces)
register layer index for material map registration
SurfaceArray * surfaceArray()
Return the entire SurfaceArray, returns nullptr if no SurfaceArray.
int layerType() const
get the Layer coding
virtual const Surface & surfaceRepresentation() const =0
Transforms the layer into a Surface representation for extrapolation.
void registerRepresentingVolume(const Volume *theVol)
register Volume associated to the layer
const OverlapDescriptor * overlapDescriptor() const
gettint hte overlap descriptor
const Layer * previousLayer(bool skipNavLayer=false) const
getting what's stored to be the previous Layer, boolean to skip navigation layers
virtual Surface & surfaceRepresentation()=0
size_t getCompatibleSurfaces(std::vector< SurfaceIntersection > &cSurfaces, const T &pars, PropDirection pdir, const BoundaryCheck &bcheck, bool materialSurfacesOnly=true, const Surface *startSurface=nullptr, const Surface *endSurface=nullptr, const ICompatibilityEstimator *ice=nullptr) const
get compatible surfaces starting from charged parameters
virtual ~Layer()=default
Destructor.
void setRef(double)
set the reference measure
Layer()=default
Default Constructor.
const MaterialProperties * fullUpdateMaterialProperties(const TrackParameters &par) const
getting the MaterialProperties back - for full update
virtual bool isOnLayer(const Amg::Vector3D &gp, const BoundaryCheck &bcheck=BoundaryCheck(true)) const
isOnLayer() method, using isOnSurface() with Layer specific tolerance
void setNextLayer(const Layer *)
set the next Layer
const Volume * representingVolume() const
get the Volume associated to the layer
LayerIndex m_index
LayerIndex.
const Layer * m_previousLayer
< the previous Layer according to BinGenUtils
const Layer * nextLayer(const Amg::Vector3D &gp, const Amg::Vector3D &udir) const
getting the next/previous Layer if registered - unit for direction vector required
const SurfaceArray * surfaceArray() const
Return the entire SurfaceArray, returns nullptr if no SurfaceArray.
size_t compatibleSurfaces(std::vector< SurfaceIntersection > &cSurfaces, const NeutralParameters &pars, PropDirection pdir, const BoundaryCheck &bcheck, bool materialSurfacesOnly=true, const Surface *startSurface=nullptr, const Surface *endSurface=nullptr, const ICompatibilityEstimator *ice=nullptr) const
get compatible surfaces starting from neutral parameters
const LayerMaterialProperties * layerMaterialProperties() const
getting the LayerMaterialProperties including full/pre/post update
void registerLayerIndex(const LayerIndex &lIdx)
std::unique_ptr< OverlapDescriptor > m_overlapDescriptor
void encloseTrackingVolume(const TrackingVolume &tvol)
private method to set the enclosed detached TV
const LayerIndex & layerIndex() const
get the layerIndex
virtual void resizeAndRepositionLayer(const VolumeBounds &vBounds, const Amg::Vector3D &vCenter, double envelope=1.)=0
resize and reposition layer : dedicated for entry layers
const Layer * m_nextLayer
BinUtility for next/previous decision.
void setPreviousLayer(const Layer *)
set the previous Layer
double m_layerThickness
descriptor for overlap/next surface (owning ptr)
virtual double postUpdateMaterialFactor(const TrackParameters &, PropDirection) const
getting the MaterialProperties back - for pre-update
virtual double preUpdateMaterialFactor(const TrackParameters &, PropDirection) const
getting the MaterialProperties back - for pre-update
double thickness() const
Return the Thickness of the Layer.
void encloseDetachedTrackingVolume(const DetachedTrackingVolume &tvol)
const DetachedTrackingVolume * m_enclosingDetachedTrackingVolume
bool onLayer(const T ¶meters, const BoundaryCheck &bcheck=BoundaryCheck(true)) const
templated on Layer method
const TrackingVolume * enclosingTrackingVolume() const
get the confining TrackingVolume
Layer & operator=(const Layer &lay)
Assignment operator for Derived classes.
void setBinUtility(const BinUtility *)
set the BinUtility
double getRef() const
get the reference measure
const BinUtility * m_binUtility
Enclosing TrackingVolume.
void setLayerType(int identifier)
set the Layer coding
virtual bool hasSubStructure(bool resolveSensitive=false) const
Has sub-structure method:
virtual void resizeLayer(const VolumeBounds &, double)=0
private method to set enclosing TrackingVolume, called by friend class only optionally,...
int m_layerType
active passive layer
const Surface * subSurface(const Amg::Vector3D &gp) const
If no subSurface array is defined or no subSurface can be found to the given Amg::Vector3D,...
const DetachedTrackingVolume * enclosingDetachedTrackingVolume() const
get the confining DetachedTrackingVolume
double m_ref
reference measure for local coordinate convertors
virtual void moveLayer(Amg::Transform3D &)=0
move the Layer
std::unique_ptr< LayerMaterialProperties > m_layerMaterialProperties
thickness of the Layer
virtual const Surface & surfaceOnApproach(const Amg::Vector3D &pos, const Amg::Vector3D &dir, PropDirection pdir, const BoundaryCheck &bcheck, bool resolveSubSurfaces=0, const ICompatibilityEstimator *ice=nullptr) const
Surface seen on approach - if not defined differently, it is the surfaceRepresentation()
const TrackingVolume * m_enclosingTrackingVolume
Enclosing DetachedTrackingVolume.
std::unique_ptr< SurfaceArray > m_surfaceArray
MaterialPoperties of this layer Surface.
const BinUtility * binUtility() const
access the BinUtility
const Surface * subSurfaceReference(unsigned int idx=0) const
Return a reference sub surface of the layer, usually the first one in the array.
Material with information about thickness of material.
class extensions to return also the object
BaseClass to be overloaded for describing overlaps and next-by elements for the sub-detector implemen...
Abstract Base Class for tracking surfaces.
Full Volume description used in Tracking, it inherits from Volume to get the geometrical structure,...
Pure Absract Base Class for Volume bounds.
Base class for all volumes inside the tracking realm, it defines the interface for inherited Volume c...
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 2, 1 > Vector2D
Eigen::Matrix< double, 3, 1 > Vector3D
Ensure that the ATLAS eigen extensions are properly loaded.
PropDirection
PropDirection, enum for direction of the propagation.
BinnedArray< Surface > SurfaceArray
ParametersBase< NeutralParametersDim, Neutral > NeutralParameters
ObjectIntersection< Surface > SurfaceIntersection
ParametersBase< TrackParametersDim, Charged > TrackParameters
LayerType
For readability.