ATLAS Offline Software
Loading...
Searching...
No Matches
Trk::DiscLayer Class Referencefinal

Class to describe a disc-like detector layer for tracking, it inhertis from both, Layer base class and DiscSurface class. More...

#include <DiscLayer.h>

Inheritance diagram for Trk::DiscLayer:
Collaboration diagram for Trk::DiscLayer:

Public Types

using ChargedTrackParametersUniquePtr
 Unique ptr types.
using NeutralTrackParametersUniquePtr

Public Member Functions

 DiscLayer ()=default
 Default Constructor.
 DiscLayer (const Amg::Transform3D &transform, std::shared_ptr< const DiscBounds > dbounds, const LayerMaterialProperties &laymatprop, double thickness=0., std::unique_ptr< OverlapDescriptor > od=nullptr, int laytyp=int(Trk::active))
 Constructor with DiscSurface components and MaterialProperties.
 DiscLayer (DiscSurface *disc, const LayerMaterialProperties &laymatprop, double thickness=0., std::unique_ptr< OverlapDescriptor > od=nullptr, int laytyp=int(Trk::active))
 Constructor with DiscSurface and MaterialProperties.
 DiscLayer (const Amg::Transform3D &transform, std::shared_ptr< const DiscBounds > dbounds, std::unique_ptr< SurfaceArray > surfaceArray, double isontolerance=0., std::unique_ptr< OverlapDescriptor > od=nullptr, IApproachDescriptor *ad=nullptr, int laytyp=int(Trk::active))
 Constructor with DiscSurface components and pointer to SurfaceArray (passing ownership)
 DiscLayer (const Amg::Transform3D &transform, std::shared_ptr< const DiscBounds > dbounds, std::unique_ptr< SurfaceArray > surfaceArray, const LayerMaterialProperties &laymatprop, double thickness=0., std::unique_ptr< OverlapDescriptor > od=nullptr, IApproachDescriptor *ad=nullptr, int laytyp=int(Trk::active))
 Constructor with DiscSurface components, MaterialProperties and pointer SurfaceArray (passing ownership)
 DiscLayer (const DiscLayer &cla)
 Copy constructor of DiscLayer.
 DiscLayer (const DiscLayer &cla, const Amg::Transform3D &tr)
 Copy constructor with shift.
DiscLayeroperator= (const DiscLayer &)
 Assignment operator for DiscLayers.
virtual ~DiscLayer ()=default
 Destructor.
virtual const DiscSurfacesurfaceRepresentation () const override final
 Transforms the layer into a Surface representation for extrapolation.
virtual DiscSurfacesurfaceRepresentation () override final
virtual const SurfacesurfaceOnApproach (const Amg::Vector3D &pos, const Amg::Vector3D &mom, PropDirection pdir, const BoundaryCheck &bcheck, bool resolveSubSurfaces=0, const ICompatibilityEstimator *ice=nullptr) const override final
 Surface seen on approach - if not defined differently, it is the surfaceRepresentation()
virtual double preUpdateMaterialFactor (const Trk::TrackParameters &par, Trk::PropDirection dir) const override final
 getting the MaterialProperties back - for pre-update
virtual double postUpdateMaterialFactor (const Trk::TrackParameters &par, Trk::PropDirection dir) const override final
 getting the MaterialProperties back - for post-update
virtual void moveLayer (Amg::Transform3D &shift) override final
 move the Layer non-const
virtual void resizeLayer (const VolumeBounds &vBounds, double envelope) override final
 Resize the layer to the tracking volume - only works for CylinderVolumeBouns.
virtual void resizeAndRepositionLayer (const VolumeBounds &vBounds, const Amg::Vector3D &cCenter, double envelop) override final
 Resize the layer to the tracking volume - not implemented.
virtual bool operator== (const Surface &sf) const override
 Equality operator.
bool operator== (const DiscSurface &cf) const
virtual DiscSurfaceclone () const override
 Virtual constructor.
virtual Surface::ChargedTrackParametersUniquePtr createUniqueTrackParameters (double l1, double l2, double phi, double theta, double qop, std::optional< AmgSymMatrix(5)> cov=std::nullopt) const override final
 Use the Surface as a ParametersBase constructor, from local parameters - charged.
virtual Surface::ChargedTrackParametersUniquePtr createUniqueTrackParameters (const Amg::Vector3D &position, const Amg::Vector3D &momentum, double charge, std::optional< AmgSymMatrix(5)> cov=std::nullopt) const override final
 Use the Surface as a ParametersBase constructor, from global parameters - charged.
virtual NeutralTrackParametersUniquePtr createUniqueNeutralParameters (double l1, double l2, double phi, double theta, double qop, std::optional< AmgSymMatrix(5)> cov=std::nullopt) const override final
 Use the Surface as a ParametersBase constructor, from local parameters - neutral.
virtual NeutralTrackParametersUniquePtr createUniqueNeutralParameters (const Amg::Vector3D &position, const Amg::Vector3D &momentum, double charge, std::optional< AmgSymMatrix(5)> cov=std::nullopt) const override final
 Use the Surface as a ParametersBase constructor, from global parameters - neutral.
template<int DIM, class T>
std::unique_ptr< ParametersT< DIM, T, DiscSurface > > createUniqueParameters (double l1, double l2, double phi, double theta, double qop, std::optional< AmgSymMatrix(DIM)> cov=std::nullopt) const
 Use the Surface as a ParametersBase constructor, from local parameters.
template<int DIM, class T>
std::unique_ptr< ParametersT< DIM, T, DiscSurface > > createUniqueParameters (const Amg::Vector3D &position, const Amg::Vector3D &momentum, double charge, std::optional< AmgSymMatrix(DIM)> cov=std::nullopt) const
 Use the Surface as a ParametersBase constructor, from global parameters.
virtual constexpr SurfaceType type () const override final
 Return the surface type.
virtual const Amg::Vector3DglobalReferencePoint () const override final
 Returns a global reference point: For the Disc this is \( (R*cos(\phi), R*sin(\phi),0)*transform() \) Where \( r, \phi \) denote the r(), averagePhi() of the Bounds.
const SurfaceBoundsbounds () const override final
 This method returns the bounds by reference.
virtual bool insideBounds (const Amg::Vector2D &locpos, double tol1=0., double tol2=0.) const override
 This method calls the inside method of the bounds.
virtual bool insideBoundsCheck (const Amg::Vector2D &locpos, const BoundaryCheck &bchk) const override final
virtual bool isOnSurface (const Amg::Vector3D &glopo, const BoundaryCheck &bchk=true, double tol1=0., double tol2=0.) const override
 This method returns true if the GlobalPosition is on the Surface for both, within or without check of whether the local position is inside boundaries or not.
virtual Amg::Vector2D localParametersToPosition (const LocalParameters &locpars) const override final
 Specialized for DiscSurface : LocalParameters to Vector2D.
virtual void localToGlobal (const Amg::Vector2D &locp, const Amg::Vector3D &mom, Amg::Vector3D &glob) const override
 Specialized for DiscSurface: LocalToGlobal method without dynamic memory allocation.
Amg::Vector3D localToGlobal (const Amg::Vector2D &locpos) const
 This method returns the GlobalPosition from a LocalPosition uses the per surface localToGlobal.
Amg::Vector3D localToGlobal (const Amg::Vector2D &locpos, const Amg::Vector3D &glomom) const
 This method returns the GlobalPosition from a LocalPosition The LocalPosition can be outside Surface bounds - for generality with momentum.
Amg::Vector3D localToGlobal (const LocalParameters &locpars) const
 This method returns the GlobalPosition from LocalParameters The LocalParameters can be outside Surface bounds.
Amg::Vector3D localToGlobal (const LocalParameters &locpars, const Amg::Vector3D &glomom) const
 This method returns the GlobalPosition from LocalParameters The LocalParameters can be outside Surface bounds - for generality with momentum.
virtual bool globalToLocal (const Amg::Vector3D &glob, const Amg::Vector3D &mom, Amg::Vector2D &loc) const override
 Specialized for DiscSurface: GlobalToLocal method without dynamic memory allocation - boolean checks if on surface.
std::optional< Amg::Vector2DglobalToLocal (const Amg::Vector3D &glopos, double tol=0.) const
 This method returns the LocalPosition from a provided GlobalPosition.
std::optional< Amg::Vector2DglobalToLocal (const Amg::Vector3D &glopos, const Amg::Vector3D &glomom) const
 This method returns the LocalPosition from a provided GlobalPosition.
virtual Intersection straightLineIntersection (const Amg::Vector3D &pos, const Amg::Vector3D &dir, bool forceDir=false, Trk::BoundaryCheck bchk=false) const override final
 fast straight line intersection schema - standard: provides closest intersection and (signed) path length forceDir is to provide the closest forward solution
template<typename T>
Intersection straightLineIntersection (const T &pars, bool forceDir=false, const Trk::BoundaryCheck &bchk=false) const
 fst straight line intersection schema - templated for charged and neutral parameters
virtual DistanceSolution straightLineDistanceEstimate (const Amg::Vector3D &pos, const Amg::Vector3D &dir) const override
 fast straight line distance evaluation to Surface
virtual DistanceSolution straightLineDistanceEstimate (const Amg::Vector3D &pos, const Amg::Vector3D &dir, bool Bound) const override
 fast straight line distance evaluation to Surface - with bound option
virtual std::string name () const override
 Return properly formatted class name for screen output.
bool operator!= (const Surface &sf) const
 Non-equality operator.
std::unique_ptr< SurfaceuniqueClone () const
 NVI method returning unique_ptr clone.
const Amg::Transform3DcachedTransform () const
 Return the cached transformation directly.
const Amg::Transform3Dtransform () const
 Returns HepGeom::Transform3D by reference.
const Amg::Vector3Dcenter () const
 Returns the center position of the Surface.
virtual const Amg::Vector3Dnormal () const
 Returns the normal vector of the Surface (i.e.
virtual Amg::Vector3D normal (const Amg::Vector2D &lp) const
 Returns a normal vector at a specific local position.
const TrkDetElementBaseassociatedDetectorElement () const
 return associated Detector Element
Identifier associatedDetectorElementIdentifier () const
 return Identifier of the associated Detector Element
const Trk::LayerassociatedLayer () const
 return the associated Layer
const Trk::MaterialLayermaterialLayer () const
 return the material Layer
Trk::MaterialLayermaterialLayer ()
virtual const Trk::SurfacebaseSurface () const
 return the base surface (simplified for persistification)
std::optional< Amg::Vector2DpositionOnSurface (const Amg::Vector3D &glopo, const BoundaryCheck &bchk=true, double tol1=0., double tol2=0.) const
 positionOnSurface() returns the LocalPosition on the Surface,
If BoundaryCheck==false it just returns the value of globalToLocal (including nullptr possibility), if BoundaryCheck==true it checks whether the point is inside bounds or not (returns std::nullopt in this case).
template<class T>
bool onSurface (const T &parameters, const BoundaryCheck &bchk=BoundaryCheck(true)) const
 The templated Parameters OnSurface method - checks on surface pointer first.
virtual double pathCorrection (const Amg::Vector3D &pos, const Amg::Vector3D &mom) const
 the pathCorrection for derived classes with thickness - it reflects if the direction projection is positive or negative
virtual Amg::RotationMatrix3D measurementFrame (const Amg::Vector3D &glopos, const Amg::Vector3D &glomom) const
 Return the measurement frame - this is needed for alignment, in particular for StraightLine and Perigee Surface.
bool isFree () const
 Returns 'true' if this surface is 'free', i.e.
bool isActive () const
 Return 'true' if this surface is owned by the detector element.
void setTransform (const Amg::Transform3D &trans)
 Set the transform updates center and normal.
void setOwner (SurfaceOwner x)
 set Ownership
SurfaceOwner owner () const
 return ownership
void setMaterialLayer (std::shared_ptr< Trk::MaterialLayer > mlay)
 set material layer
virtual MsgStream & dump (MsgStream &sl) const
 Output Method for MsgStream, to be overloaded by child classes.
virtual std::ostream & dump (std::ostream &sl) const
 Output Method for std::ostream, to be overloaded by child classes.
void associateLayer (const Layer &lay)
 method to associate a Trk::Layer.
const SurfaceArraysurfaceArray () const
 Return the entire SurfaceArray, returns nullptr if no SurfaceArray.
SurfaceArraysurfaceArray ()
 Return the entire SurfaceArray, returns nullptr if no SurfaceArray.
const SurfacesubSurface (const Amg::Vector3D &gp) const
 If no subSurface array is defined or no subSurface can be found to the given Amg::Vector3D, it would return 0.
const SurfacesubSurface (const Amg::Vector2D &lp) const
 If no subSurface array is defined or no subSurface can be found to the given Amg::Vector2D, it would return 0.
const SurfacesubSurfaceReference (unsigned int idx=0) const
 Return a reference sub surface of the layer, usually the first one in the array.
double thickness () const
 Return the Thickness of the Layer.
template<class T>
bool onLayer (const T &parameters, const BoundaryCheck &bcheck=BoundaryCheck(true)) const
 templated on Layer method
virtual bool isOnLayer (const Amg::Vector3D &gp, const BoundaryCheck &bcheck=BoundaryCheck(true)) const
 isOnLayer() method, using isOnSurface() with Layer specific tolerance
const LayerMaterialPropertieslayerMaterialProperties () const
 getting the LayerMaterialProperties including full/pre/post update
const MaterialPropertiesfullUpdateMaterialProperties (const TrackParameters &par) const
 getting the MaterialProperties back - for full update
const OverlapDescriptoroverlapDescriptor () const
 gettint hte overlap descriptor
const LayerpreviousLayer (bool skipNavLayer=false) const
 getting what's stored to be the previous Layer, boolean to skip navigation layers
void setPreviousLayer (const Layer *)
 set the previous Layer
const LayernextLayer (const Amg::Vector3D &gp, const Amg::Vector3D &udir) const
 getting the next/previous Layer if registered - unit for direction vector required
const LayernextLayer (bool skipNavLayer=false) const
 getting what's stored to be the next Layer, boolean to skip navigation layers
void setNextLayer (const Layer *)
 set the next Layer
const BinUtilitybinUtility () const
 access the BinUtility
void setBinUtility (const BinUtility *)
 set the BinUtility
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
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
virtual bool hasSubStructure (bool resolveSensitive=false) const
 Has sub-structure method:
const TrackingVolumeenclosingTrackingVolume () const
 get the confining TrackingVolume
const DetachedTrackingVolumeenclosingDetachedTrackingVolume () const
 get the confining DetachedTrackingVolume
const LayerIndexlayerIndex () const
 get the layerIndex
int layerType () const
 get the Layer coding
void setLayerType (int identifier)
 set the Layer coding
void assignMaterialProperties (const LayerMaterialProperties &, double scale=1.0)
 assignMaterialPropeties
void registerRepresentingVolume (const Volume *theVol)
 register Volume associated to the layer
const VolumerepresentingVolume () const
 get the Volume associated to the layer
void setRef (double)
 set the reference measure
double getRef () const
 get the reference measure
void encloseTrackingVolume (const TrackingVolume &tvol)
 private method to set the enclosed detached TV
void encloseDetachedTrackingVolume (const DetachedTrackingVolume &tvol)
template<class T>
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
void compactify (size_t &cSurfaces, size_t &tSurfaces)
 register layer index for material map registration
void registerLayerIndex (const LayerIndex &lIdx)

Static Public Member Functions

static std::size_t numberOfInstantiations ()

Static Public Attributes

static constexpr SurfaceType staticType = SurfaceType::Disc
static std::atomic_size_t s_numberOfInstantiations

Protected Member Functions

Amg::Transform3D inverseTransformHelper () const
 Helper method to factorize in one place common operations calculate inverse transofrm and multiply with position.
Amg::Vector3D inverseTransformMultHelper (const Amg::Vector3D &glopos) const

Protected Attributes

std::unique_ptr< IApproachDescriptorm_approachDescriptor
 < surface for approaching
std::shared_ptr< const SurfaceBoundsm_bounds
 reference Point on the Surface
CxxUtils::CachedUniquePtr< Amg::Vector3Dm_referencePoint
 static member for boundless approach
std::unique_ptr< Transformsm_transforms {}
 Unique Pointer to the Transforms struct.
const TrkDetElementBasem_associatedDetElement {}
 Not owning Pointer to the Detector Element.
Identifier m_associatedDetElementId {}
 Identifier to the Detector Element.
const Layerm_associatedLayer {}
 The associated layer Trk::Layer This is the layer in which the Surface is embedded.
std::shared_ptr< MaterialLayerm_materialLayer {}
 Possibility to attach a material description to the surface.
SurfaceOwner m_owner {SurfaceOwner::noOwn}
 enum for surface owner : default free surface
std::unique_ptr< SurfaceArraym_surfaceArray {}
 MaterialPoperties of this layer Surface.
std::unique_ptr< LayerMaterialPropertiesm_layerMaterialProperties {}
 thickness of the Layer
double m_layerThickness {}
 descriptor for overlap/next surface (owning ptr)
std::unique_ptr< OverlapDescriptorm_overlapDescriptor {}
const Layerm_previousLayer = nullptr
 < the previous Layer according to BinGenUtils
const Layerm_nextLayer = nullptr
 BinUtility for next/previous decision.
const BinUtilitym_binUtility = nullptr
 Enclosing TrackingVolume.
const TrackingVolumem_enclosingTrackingVolume = nullptr
 Enclosing DetachedTrackingVolume.
const DetachedTrackingVolumem_enclosingDetachedTrackingVolume = nullptr
LayerIndex m_index {-1}
 LayerIndex.
int m_layerType {Trk::active}
 active passive layer
double m_ref {}
 reference measure for local coordinate convertors

Static Protected Attributes

static const NoBounds s_boundless
static constexpr double s_onSurfaceTolerance = 10e-5
 Tolerance for being on Surface.

Private Member Functions

void buildApproachDescriptor ()
 build approach surfaces
const SurfaceapproachSurface (const Amg::Vector3D &pos, const Amg::Vector3D &dir, const BoundaryCheck &bcheck) const
 Surface seen on approach - if not defined differently, it is the surfaceRepresentation()

Friends

class TrackingVolume

Detailed Description

Class to describe a disc-like detector layer for tracking, it inhertis from both, Layer base class and DiscSurface class.

Author
Andre.nosp@m.as.S.nosp@m.alzbu.nosp@m.rger.nosp@m.@cern.nosp@m..ch

Definition at line 42 of file DiscLayer.h.

Member Typedef Documentation

◆ ChargedTrackParametersUniquePtr

Initial value:
std::unique_ptr<ParametersBase<5, Trk::Charged>>

Unique ptr types.

Definition at line 128 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

◆ NeutralTrackParametersUniquePtr

Initial value:
std::unique_ptr<ParametersBase<5, Trk::Neutral>>

Definition at line 130 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

Constructor & Destructor Documentation

◆ DiscLayer() [1/7]

Trk::DiscLayer::DiscLayer ( )
default

Default Constructor.

◆ DiscLayer() [2/7]

Trk::DiscLayer::DiscLayer ( const Amg::Transform3D & transform,
std::shared_ptr< const DiscBounds > dbounds,
const LayerMaterialProperties & laymatprop,
double thickness = 0.,
std::unique_ptr< OverlapDescriptor > od = nullptr,
int laytyp = int(Trk::active) )

Constructor with DiscSurface components and MaterialProperties.

Definition at line 21 of file DiscLayer.cxx.

27 : DiscSurface(transform, std::move(dbounds))
28 , Layer(laymatprop, thickness, std::move(olap), laytyp)
29 , m_approachDescriptor(nullptr)
30{
32}
std::unique_ptr< IApproachDescriptor > m_approachDescriptor
< surface for approaching
Definition DiscLayer.h:146
DiscSurface()
Default Constructor.
Layer()=default
Default Constructor.
double thickness() const
Return the Thickness of the Layer.
void associateLayer(const Layer &lay)
method to associate a Trk::Layer.
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.

◆ DiscLayer() [3/7]

Trk::DiscLayer::DiscLayer ( Trk::DiscSurface * disc,
const LayerMaterialProperties & laymatprop,
double thickness = 0.,
std::unique_ptr< OverlapDescriptor > od = nullptr,
int laytyp = int(Trk::active) )

Constructor with DiscSurface and MaterialProperties.

Definition at line 34 of file DiscLayer.cxx.

39 : DiscSurface(*disc)
40 , Layer(laymatprop, thickness, std::move(olap), laytyp)
41 , m_approachDescriptor(nullptr)
42{
44}

◆ DiscLayer() [4/7]

Trk::DiscLayer::DiscLayer ( const Amg::Transform3D & transform,
std::shared_ptr< const DiscBounds > dbounds,
std::unique_ptr< SurfaceArray > surfaceArray,
double isontolerance = 0.,
std::unique_ptr< OverlapDescriptor > od = nullptr,
Trk::IApproachDescriptor * ades = nullptr,
int laytyp = int(Trk::active) )

Constructor with DiscSurface components and pointer to SurfaceArray (passing ownership)

Definition at line 46 of file DiscLayer.cxx.

53 : DiscSurface(transform, std::move(dbounds))
54 , Layer(std::move(surfaceArray), thickness, std::move(olap), laytyp)
56{
59 // register the layer
60 if (ades) m_approachDescriptor->registerLayer(*this);
61}
void buildApproachDescriptor()
build approach surfaces
const SurfaceArray * surfaceArray() const
Return the entire SurfaceArray, returns nullptr if no SurfaceArray.
std::unique_ptr< SurfaceArray > m_surfaceArray
MaterialPoperties of this layer Surface.
Definition Layer.h:286

◆ DiscLayer() [5/7]

Trk::DiscLayer::DiscLayer ( const Amg::Transform3D & transform,
std::shared_ptr< const DiscBounds > dbounds,
std::unique_ptr< SurfaceArray > surfaceArray,
const LayerMaterialProperties & laymatprop,
double thickness = 0.,
std::unique_ptr< OverlapDescriptor > od = nullptr,
Trk::IApproachDescriptor * ades = nullptr,
int laytyp = int(Trk::active) )

Constructor with DiscSurface components, MaterialProperties and pointer SurfaceArray (passing ownership)

Definition at line 63 of file DiscLayer.cxx.

71 : DiscSurface(transform, std::move(dbounds))
72 , Layer(std::move(surfaceArray), laymatprop, thickness, std::move(olap), laytyp)
74{
76 if (!ades && m_surfaceArray)
78 // register the layer
79 if (ades)
80 m_approachDescriptor->registerLayer(*this);
81}

◆ DiscLayer() [6/7]

Trk::DiscLayer::DiscLayer ( const DiscLayer & cla)

Copy constructor of DiscLayer.

Definition at line 83 of file DiscLayer.cxx.

◆ DiscLayer() [7/7]

Trk::DiscLayer::DiscLayer ( const DiscLayer & cla,
const Amg::Transform3D & tr )

Copy constructor with shift.

Definition at line 89 of file DiscLayer.cxx.

91 : DiscSurface(dlay, transf), Layer(dlay), m_approachDescriptor(nullptr) {
94}

◆ ~DiscLayer()

virtual Trk::DiscLayer::~DiscLayer ( )
virtualdefault

Destructor.

Member Function Documentation

◆ approachSurface()

const Trk::Surface & Trk::DiscLayer::approachSurface ( const Amg::Vector3D & pos,
const Amg::Vector3D & dir,
const BoundaryCheck & bcheck ) const
private

Surface seen on approach - if not defined differently, it is the surfaceRepresentation()

< @TODO -> optimise by breaking the loop if possible

Definition at line 190 of file DiscLayer.cxx.

192 {
194 // get the test surfaces from the approach Descriptor
195 const Trk::ApproachSurfaces* surfacesOnApproach =
196 m_approachDescriptor->approachSurfaces(pos, dir);
197 if (surfacesOnApproach) {
198 // test the intersections and go
199 std::vector<Trk::Intersection> sfIntersections;
200 const Trk::Surface* aSurface = nullptr;
201 double aPathLength = 10e10;
203 for (const auto& sfIter : (*surfacesOnApproach)) {
204 // get the intersection with the surface
205 Trk::Intersection sIntersection =
206 sfIter->straightLineIntersection(pos, dir, true, bcheck);
207 // validation
208 if (sIntersection.valid && sIntersection.pathLength < aPathLength) {
209 aPathLength = sIntersection.pathLength;
210 aSurface = sfIter;
211 }
212 }
213 if (aSurface) return (*aSurface);
214 }
215 }
216 return surfaceRepresentation();
217}
virtual DiscSurface & surfaceRepresentation() override final

◆ assignMaterialProperties()

void Trk::Layer::assignMaterialProperties ( const LayerMaterialProperties & prop,
double scale = 1.0 )
inherited

assignMaterialPropeties

Definition at line 177 of file Layer.cxx.

178 {
179 m_layerMaterialProperties.reset(prop.clone());
180 if (scale != 1.0) {
181 (*(m_layerMaterialProperties)) *= scale;
182 }
183}
std::unique_ptr< LayerMaterialProperties > m_layerMaterialProperties
thickness of the Layer
Definition Layer.h:288

◆ associatedDetectorElement()

const TrkDetElementBase * Trk::Surface::associatedDetectorElement ( ) const
inherited

return associated Detector Element

◆ associatedDetectorElementIdentifier()

Identifier Trk::Surface::associatedDetectorElementIdentifier ( ) const
inherited

return Identifier of the associated Detector Element

◆ associatedLayer()

const Trk::Layer * Trk::Surface::associatedLayer ( ) const
inherited

return the associated Layer

◆ associateLayer()

void Trk::Surface::associateLayer ( const Layer & lay)
inherited

method to associate a Trk::Layer.

We do not take ownership as this is typically already owned by the Geometry

◆ baseSurface()

virtual const Trk::Surface * Trk::Surface::baseSurface ( ) const
virtualinherited

return the base surface (simplified for persistification)

◆ binUtility()

const BinUtility * Trk::Layer::binUtility ( ) const
inherited

access the BinUtility

◆ bounds()

const SurfaceBounds & Trk::DiscSurface::bounds ( ) const
finaloverridevirtualinherited

This method returns the bounds by reference.

Implements Trk::Surface.

◆ buildApproachDescriptor()

void Trk::DiscLayer::buildApproachDescriptor ( )
private

build approach surfaces

Definition at line 234 of file DiscLayer.cxx.

234 {
235 // create the surface container
236 auto aSurfaces = std::make_unique<Trk::ApproachSurfaces>();
237 // get the center
238 const auto halfThickness = 0.5 * thickness() * normal();
239 const Amg::Vector3D aspPosition(center() + halfThickness);
240 const Amg::Vector3D asnPosition(center() - halfThickness);
241 // create the new surfaces
242 const Trk::DiscBounds* db =
243 dynamic_cast<const Trk::DiscBounds*>(m_bounds.get());
244 if (db) {
245 // create new surfaces
246 Amg::Transform3D asnTransform =
248 Amg::Transform3D aspTransform =
250 aSurfaces->push_back(new Trk::DiscSurface(aspTransform, std::make_shared<Trk::DiscBounds>(*db)));
251 aSurfaces->push_back(new Trk::DiscSurface(asnTransform, std::make_shared<Trk::DiscBounds>(*db)));
252 // set the layer and make TGOwn
253 for (auto& sIter : (*aSurfaces)) {
254 sIter->associateLayer(*this);
255 sIter->setOwner(Trk::TGOwn);
256 }
257 }
258 // The approach descriptor takes owneship
260 std::make_unique<Trk::ApproachDescriptor>(std::move(aSurfaces));
261}
std::shared_ptr< const SurfaceBounds > m_bounds
reference Point on the Surface
virtual const Amg::Vector3D & normal() const
Returns the normal vector of the Surface (i.e.
const Amg::Vector3D & center() const
Returns the center position of the Surface.
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D
Eigen::Translation< double, 3 > Translation3D

◆ cachedTransform()

const Amg::Transform3D * Trk::Surface::cachedTransform ( ) const
inherited

Return the cached transformation directly.

Don't try to make a new transform if it's not here.

◆ center()

const Amg::Vector3D & Trk::Surface::center ( ) const
inherited

Returns the center position of the Surface.

◆ clone()

virtual DiscSurface * Trk::DiscSurface::clone ( ) const
overridevirtualinherited

Virtual constructor.

Implements Trk::Surface.

Reimplemented in Trk::SlidingDiscSurface.

◆ compactify()

void Trk::Layer::compactify ( size_t & cSurfaces,
size_t & tSurfaces )
inherited

register layer index for material map registration

Definition at line 186 of file Layer.cxx.

187{
188 // set the layer surface representation
189 ++tSurfaces;
190 if (surfaceRepresentation().owner() == Trk::noOwn) {
192 ++cSurfaces;
193 }
194 // set the subsurface representation, usually already owned by DetElement
195 if (m_surfaceArray) {
196 std::span<Trk::Surface * const> surfaces = m_surfaceArray->arrayObjects();
197 for (Trk::Surface * const sIter : surfaces) {
198 if (sIter && (*sIter).owner() == Trk::noOwn) {
199 (*sIter).setOwner(Trk::TGOwn);
200 ++cSurfaces;
201 }
202 ++tSurfaces;
203 }
204 }
205}
virtual Surface & surfaceRepresentation()=0
void setOwner(SurfaceOwner x)
set Ownership

◆ compatibleSurfaces() [1/2]

size_t Trk::Layer::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
inherited

get compatible surfaces starting from neutral parameters

◆ compatibleSurfaces() [2/2]

size_t Trk::Layer::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
inherited

get compatible surfaces starting from charged parameters

◆ createUniqueNeutralParameters() [1/2]

Trk::Surface::NeutralTrackParametersUniquePtr Trk::DiscSurface::createUniqueNeutralParameters ( const Amg::Vector3D & position,
const Amg::Vector3D & momentum,
double charge,
std::optional< AmgSymMatrix(5)> cov = std::nullopt ) const
finaloverridevirtualinherited

Use the Surface as a ParametersBase constructor, from global parameters - neutral.

Implements Trk::Surface.

Definition at line 201 of file DiscSurface.cxx.

203 {
204 return std::make_unique<ParametersT<5, Neutral, DiscSurface>>(
205 position, momentum, charge, *this, std::move(cov));
206}
double charge(const T &p)
Definition AtlasPID.h:997

◆ createUniqueNeutralParameters() [2/2]

Trk::Surface::NeutralTrackParametersUniquePtr Trk::DiscSurface::createUniqueNeutralParameters ( double l1,
double l2,
double phi,
double theta,
double qop,
std::optional< AmgSymMatrix(5)> cov = std::nullopt ) const
finaloverridevirtualinherited

Use the Surface as a ParametersBase constructor, from local parameters - neutral.

Implements Trk::Surface.

Definition at line 191 of file DiscSurface.cxx.

193 {
194 return std::make_unique<ParametersT<5, Neutral, DiscSurface>>(
195 l1, l2, phi, theta, qop, *this, std::move(cov));
196}
@ theta
Definition ParamDefs.h:66
@ phi
Definition ParamDefs.h:75

◆ createUniqueParameters() [1/2]

template<int DIM, class T>
std::unique_ptr< ParametersT< DIM, T, DiscSurface > > Trk::DiscSurface::createUniqueParameters ( const Amg::Vector3D & position,
const Amg::Vector3D & momentum,
double charge,
std::optional< AmgSymMatrix(DIM)> cov = std::nullopt ) const
inherited

Use the Surface as a ParametersBase constructor, from global parameters.

◆ createUniqueParameters() [2/2]

template<int DIM, class T>
std::unique_ptr< ParametersT< DIM, T, DiscSurface > > Trk::DiscSurface::createUniqueParameters ( double l1,
double l2,
double phi,
double theta,
double qop,
std::optional< AmgSymMatrix(DIM)> cov = std::nullopt ) const
inherited

Use the Surface as a ParametersBase constructor, from local parameters.

◆ createUniqueTrackParameters() [1/2]

Trk::Surface::ChargedTrackParametersUniquePtr Trk::DiscSurface::createUniqueTrackParameters ( const Amg::Vector3D & position,
const Amg::Vector3D & momentum,
double charge,
std::optional< AmgSymMatrix(5)> cov = std::nullopt ) const
finaloverridevirtualinherited

Use the Surface as a ParametersBase constructor, from global parameters - charged.

Implements Trk::Surface.

Definition at line 181 of file DiscSurface.cxx.

183 {
184 return std::make_unique<ParametersT<5, Charged, DiscSurface>>(
185 position, momentum, charge, *this, std::move(cov));
186}

◆ createUniqueTrackParameters() [2/2]

Trk::Surface::ChargedTrackParametersUniquePtr Trk::DiscSurface::createUniqueTrackParameters ( double l1,
double l2,
double phi,
double theta,
double qop,
std::optional< AmgSymMatrix(5)> cov = std::nullopt ) const
finaloverridevirtualinherited

Use the Surface as a ParametersBase constructor, from local parameters - charged.

Implements Trk::Surface.

Definition at line 172 of file DiscSurface.cxx.

174 {
175 return std::make_unique<ParametersT<5, Charged, DiscSurface>>(
176 l1, l2, phi, theta, qop, *this, std::move(cov));
177}

◆ dump() [1/2]

MsgStream & Surface::dump ( MsgStream & sl) const
virtualinherited

Output Method for MsgStream, to be overloaded by child classes.

Reimplemented in Trk::DetElementSurface, and Trk::PerigeeSurface.

Definition at line 157 of file Surface.cxx.

158{
159 sl << std::setiosflags(std::ios::fixed);
160 sl << std::setprecision(4);
161 sl << name() << std::endl;
162 if (associatedDetectorElement()!=nullptr){
163 sl<<" Detector Type = "<<associatedDetectorElement()->detectorTypeString()<<std::endl;
164 }
165 sl << " Center position (x, y, z) = (" << center().x() << ", " << center().y() << ", " << center().z() << ")"
166 << std::endl;
168 Amg::Vector3D rotX(rot.col(0));
169 Amg::Vector3D rotY(rot.col(1));
170 Amg::Vector3D rotZ(rot.col(2));
171 sl << std::setprecision(6);
172 sl << " Rotation: colX = (" << rotX(0) << ", " << rotX(1) << ", " << rotX(2) << ")" << std::endl;
173 sl << " colY = (" << rotY(0) << ", " << rotY(1) << ", " << rotY(2) << ")" << std::endl;
174 sl << " colZ = (" << rotZ(0) << ", " << rotZ(1) << ", " << rotZ(2) << ")" << std::endl;
175 sl << " Bounds : " << bounds();
176 if (!checkTransform(*this)) {
177 sl << std::endl << " NOT a strict rotation matrix." << std::endl;
178 }
179 sl << std::setprecision(-1);
180 return sl;
181}
const TrkDetElementBase * associatedDetectorElement() const
return associated Detector Element
virtual const SurfaceBounds & bounds() const =0
Surface Bounds method.
virtual std::string name() const =0
Return properly formatted class name.
std::string detectorTypeString() const
Returns a string of the Detector element type.
Eigen::Matrix< double, 3, 3 > RotationMatrix3D

◆ dump() [2/2]

std::ostream & Surface::dump ( std::ostream & sl) const
virtualinherited

Output Method for std::ostream, to be overloaded by child classes.

Reimplemented in Trk::DetElementSurface, and Trk::PerigeeSurface.

Definition at line 185 of file Surface.cxx.

186{
187 sl << std::setiosflags(std::ios::fixed);
188 sl << std::setprecision(4);
189 sl << name() << std::endl;
190 if (associatedDetectorElement()!=nullptr){
191 sl<<" Detector Type = "<<associatedDetectorElement()->detectorTypeString()<<std::endl;
192 }
193 sl << " Center position (x, y, z) = (" << center().x() << ", " << center().y() << ", " << center().z() << ")"
194 << std::endl;
196 Amg::Vector3D rotX(rot.col(0));
197 Amg::Vector3D rotY(rot.col(1));
198 Amg::Vector3D rotZ(rot.col(2));
199 sl << std::setprecision(6);
200 sl << " Rotation: colX = (" << rotX(0) << ", " << rotX(1) << ", " << rotX(2) << ")" << std::endl;
201 sl << " colY = (" << rotY(0) << ", " << rotY(1) << ", " << rotY(2) << ")" << std::endl;
202 sl << " colZ = (" << rotZ(0) << ", " << rotZ(1) << ", " << rotZ(2) << ")" << std::endl;
203 sl << " Bounds : " << bounds();
204 if (!checkTransform(*this)) {
205 sl << std::endl << " NOT a strict rotation matrix." << std::endl;
206 }
207 sl << std::setprecision(-1);
208 return sl;
209}

◆ encloseDetachedTrackingVolume()

void Trk::Layer::encloseDetachedTrackingVolume ( const DetachedTrackingVolume & tvol)
inherited

◆ encloseTrackingVolume()

void Trk::Layer::encloseTrackingVolume ( const TrackingVolume & tvol)
inherited

private method to set the enclosed detached TV

◆ enclosingDetachedTrackingVolume()

const DetachedTrackingVolume * Trk::Layer::enclosingDetachedTrackingVolume ( ) const
inherited

get the confining DetachedTrackingVolume

◆ enclosingTrackingVolume()

const TrackingVolume * Trk::Layer::enclosingTrackingVolume ( ) const
inherited

get the confining TrackingVolume

◆ fullUpdateMaterialProperties()

const Trk::MaterialProperties * Trk::Layer::fullUpdateMaterialProperties ( const TrackParameters & par) const
inherited

getting the MaterialProperties back - for full update

Definition at line 169 of file Layer.cxx.

170 {
172 return m_layerMaterialProperties->fullMaterial(parm.position());
173 }
174 return nullptr;
175}

◆ getCompatibleSurfaces()

template<class T>
size_t Trk::Layer::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
inherited

get compatible surfaces starting from charged parameters

propagate TrackingGeometry owner downstream

◆ getRef()

double Trk::Layer::getRef ( ) const
inherited

get the reference measure

◆ globalReferencePoint()

const Amg::Vector3D & Trk::DiscSurface::globalReferencePoint ( ) const
finaloverridevirtualinherited

Returns a global reference point: For the Disc this is \( (R*cos(\phi), R*sin(\phi),0)*transform() \) Where \( r, \phi \) denote the r(), averagePhi() of the Bounds.

Reimplemented from Trk::Surface.

Definition at line 209 of file DiscSurface.cxx.

210{
211 if (!m_referencePoint) {
212 const Trk::DiscBounds* dbo =
213 dynamic_cast<const Trk::DiscBounds*>(&(bounds()));
214 if (dbo) {
215 double rMedium = bounds().r();
216 double phi = dbo->averagePhi();
217 Amg::Vector3D gp(rMedium * cos(phi), rMedium * sin(phi), 0.);
218 m_referencePoint.set(std::make_unique<Amg::Vector3D>(transform() * gp));
219 } else {
220 const Trk::DiscTrapezoidalBounds* dtbo =
221 dynamic_cast<const Trk::DiscTrapezoidalBounds*>(&(bounds()));
222 // double rMedium = dtbo ? bounds().r() : dtbo->rCenter() ; //nonsense, or
223 // logic inverted?
224 double rMedium = bounds().r();
225 double phi = dtbo ? dtbo->averagePhi() : 0.;
226 Amg::Vector3D gp(rMedium * cos(phi), rMedium * sin(phi), 0.);
227 m_referencePoint.set(std::make_unique<Amg::Vector3D>(transform() * gp));
228 }
229 }
230 return (*m_referencePoint);
231}
double averagePhi() const
This method returns the average phi.
CxxUtils::CachedUniquePtr< Amg::Vector3D > m_referencePoint
static member for boundless approach
const SurfaceBounds & bounds() const override final
This method returns the bounds by reference.
double averagePhi() const
This method returns the average phi.
virtual double r() const =0
Interface method for the maximal extension or the radius.

◆ globalToLocal() [1/3]

bool Trk::DiscSurface::globalToLocal ( const Amg::Vector3D & glob,
const Amg::Vector3D & mom,
Amg::Vector2D & loc ) const
overridevirtualinherited

Specialized for DiscSurface: GlobalToLocal method without dynamic memory allocation - boolean checks if on surface.

local<->global transformation in case of polar local coordinates

Implements Trk::Surface.

Reimplemented in Trk::SlidingDiscSurface.

Definition at line 250 of file DiscSurface.cxx.

253{
254 Amg::Vector3D loc3Dframe = inverseTransformMultHelper(glopos);
255 locpos = Amg::Vector2D(loc3Dframe.perp(), loc3Dframe.phi());
256 return (std::fabs(loc3Dframe.z()) <= s_onSurfaceTolerance);
257}
static constexpr double s_onSurfaceTolerance
Tolerance for being on Surface.
Amg::Vector3D inverseTransformMultHelper(const Amg::Vector3D &glopos) const
Eigen::Matrix< double, 2, 1 > Vector2D

◆ globalToLocal() [2/3]

std::optional< Amg::Vector2D > Trk::Surface::globalToLocal ( const Amg::Vector3D & glopos,
const Amg::Vector3D & glomom ) const
inherited

This method returns the LocalPosition from a provided GlobalPosition.

If the GlobalPosition is not on the Surface, it returns a nullopt This method does not check if the calculated LocalPosition is inside surface bounds. If this check is needed, use positionOnSurface - for generality with momentum

◆ globalToLocal() [3/3]

std::optional< Amg::Vector2D > Trk::Surface::globalToLocal ( const Amg::Vector3D & glopos,
double tol = 0. ) const
inherited

This method returns the LocalPosition from a provided GlobalPosition.

If the GlobalPosition is not on the Surface, it returns nullopt This method does not check if the calculated LocalPosition is inside surface bounds. If this check is needed, use positionOnSurface - only for planar, cylinder surface fully defined

◆ hasSubStructure()

bool Trk::Layer::hasSubStructure ( bool resolveSensitive = false) const
virtualinherited

Has sub-structure method:

  • sub-structure depending on : (a) only when required to resolve sub surfaces for sensitive hits (b) also material is ordered with sub structure

Definition at line 238 of file Layer.cxx.

238 {
239 return resolveSensitive && m_surfaceArray;
240}

◆ insideBounds()

virtual bool Trk::DiscSurface::insideBounds ( const Amg::Vector2D & locpos,
double tol1 = 0.,
double tol2 = 0. ) const
overridevirtualinherited

This method calls the inside method of the bounds.

Implements Trk::Surface.

Reimplemented in Trk::SubtractedDiscSurface.

◆ insideBoundsCheck()

virtual bool Trk::DiscSurface::insideBoundsCheck ( const Amg::Vector2D & locpos,
const BoundaryCheck & bchk ) const
finaloverridevirtualinherited

Implements Trk::Surface.

◆ inverseTransformHelper()

Amg::Transform3D Trk::Surface::inverseTransformHelper ( ) const
protectedinherited

Helper method to factorize in one place common operations calculate inverse transofrm and multiply with position.

◆ inverseTransformMultHelper()

Amg::Vector3D Trk::Surface::inverseTransformMultHelper ( const Amg::Vector3D & glopos) const
protectedinherited

◆ isActive()

bool Trk::Surface::isActive ( ) const
inherited

Return 'true' if this surface is owned by the detector element.

◆ isFree()

bool Trk::Surface::isFree ( ) const
inherited

Returns 'true' if this surface is 'free', i.e.

it does not belong to a detector element (and returns false otherwise

◆ isOnLayer()

bool Trk::Layer::isOnLayer ( const Amg::Vector3D & gp,
const BoundaryCheck & bcheck = BoundaryCheck(true) ) const
virtualinherited

isOnLayer() method, using isOnSurface() with Layer specific tolerance

Reimplemented in Trk::MaterialLayer, Trk::MaterialLayerNoOwnSurf, Trk::MaterialLayerOwnSurf, and Trk::NavigationLayer.

Definition at line 135 of file Layer.cxx.

136 {
137 return (surfaceRepresentation())
138 .isOnSurface(gp, bchk, 0.5 * m_layerThickness);
139}
double m_layerThickness
descriptor for overlap/next surface (owning ptr)
Definition Layer.h:290

◆ isOnSurface()

bool Trk::DiscSurface::isOnSurface ( const Amg::Vector3D & glopo,
const BoundaryCheck & bchk = true,
double tol1 = 0.,
double tol2 = 0. ) const
overridevirtualinherited

This method returns true if the GlobalPosition is on the Surface for both, within or without check of whether the local position is inside boundaries or not.

Reimplemented from Trk::Surface.

Reimplemented in Trk::SlidingDiscSurface.

Definition at line 287 of file DiscSurface.cxx.

291{
292 Amg::Vector3D loc3Dframe = inverseTransformMultHelper(glopo);
293 if (std::abs(loc3Dframe.z()) > (s_onSurfaceTolerance + tol1)) {
294 return false;
295 }
296 return (bchk
297 ? bounds().inside(
298 Amg::Vector2D(loc3Dframe.perp(), loc3Dframe.phi()), tol1, tol2)
299 : true);
300}

◆ layerIndex()

const LayerIndex & Trk::Layer::layerIndex ( ) const
inherited

get the layerIndex

◆ layerMaterialProperties()

const LayerMaterialProperties * Trk::Layer::layerMaterialProperties ( ) const
inherited

getting the LayerMaterialProperties including full/pre/post update

◆ layerType()

int Trk::Layer::layerType ( ) const
inherited

get the Layer coding

◆ localParametersToPosition()

virtual Amg::Vector2D Trk::DiscSurface::localParametersToPosition ( const LocalParameters & locpars) const
finaloverridevirtualinherited

Specialized for DiscSurface : LocalParameters to Vector2D.

Reimplemented from Trk::Surface.

◆ localToGlobal() [1/5]

ATH_FLATTEN void Trk::DiscSurface::localToGlobal ( const Amg::Vector2D & locp,
const Amg::Vector3D & mom,
Amg::Vector3D & glob ) const
overridevirtualinherited

Specialized for DiscSurface: LocalToGlobal method without dynamic memory allocation.

Implements Trk::Surface.

Reimplemented in Trk::SlidingDiscSurface.

Definition at line 236 of file DiscSurface.cxx.

239{
240 // create the position in the local 3d frame
241 Amg::Vector3D loc3Dframe(locpos[Trk::locR] * cos(locpos[Trk::locPhi]),
242 locpos[Trk::locR] * sin(locpos[Trk::locPhi]),
243 0.);
244 // transport it to the globalframe
245 glopos = transform() * loc3Dframe;
246}
@ locR
Definition ParamDefs.h:44
@ locPhi
local polar
Definition ParamDefs.h:45

◆ localToGlobal() [2/5]

Amg::Vector3D Trk::Surface::localToGlobal ( const Amg::Vector2D & locpos) const
inherited

This method returns the GlobalPosition from a LocalPosition uses the per surface localToGlobal.

◆ localToGlobal() [3/5]

Amg::Vector3D Trk::Surface::localToGlobal ( const Amg::Vector2D & locpos,
const Amg::Vector3D & glomom ) const
inherited

This method returns the GlobalPosition from a LocalPosition The LocalPosition can be outside Surface bounds - for generality with momentum.

◆ localToGlobal() [4/5]

Amg::Vector3D Trk::Surface::localToGlobal ( const LocalParameters & locpars) const
inherited

This method returns the GlobalPosition from LocalParameters The LocalParameters can be outside Surface bounds.

◆ localToGlobal() [5/5]

Amg::Vector3D Trk::Surface::localToGlobal ( const LocalParameters & locpars,
const Amg::Vector3D & glomom ) const
inherited

This method returns the GlobalPosition from LocalParameters The LocalParameters can be outside Surface bounds - for generality with momentum.

◆ materialLayer() [1/2]

Trk::MaterialLayer * Trk::Surface::materialLayer ( )
inherited

◆ materialLayer() [2/2]

const Trk::MaterialLayer * Trk::Surface::materialLayer ( ) const
inherited

return the material Layer

◆ measurementFrame()

Amg::RotationMatrix3D Surface::measurementFrame ( const Amg::Vector3D & glopos,
const Amg::Vector3D & glomom ) const
virtualinherited

Return the measurement frame - this is needed for alignment, in particular for StraightLine and Perigee Surface.

Reimplemented in GXF::CylinderSurface, Trk::ConeSurface, Trk::CylinderSurface, Trk::PerigeeSurface, and Trk::StraightLineSurface.

Definition at line 135 of file Surface.cxx.

136{
137 return transform().linear();
138}

◆ moveLayer()

void Trk::DiscLayer::moveLayer ( Amg::Transform3D & shift)
finaloverridevirtual

move the Layer non-const

Implements Trk::Layer.

Definition at line 139 of file DiscLayer.cxx.

139 {
140 Amg::Transform3D transf = shift * m_transforms->transform;
141 m_transforms = std::make_unique<Transforms>(transf, transf.translation(),
142 transf.rotation().col(2));
143 // rebuild that - deletes the current one
144 if (m_approachDescriptor && m_approachDescriptor->rebuild()) {
146 }
147}
std::unique_ptr< Transforms > m_transforms
Unique Pointer to the Transforms struct.

◆ name()

virtual std::string Trk::DiscSurface::name ( ) const
overridevirtualinherited

Return properly formatted class name for screen output.

Implements Trk::Surface.

Reimplemented in Trk::SlidingDiscSurface, and Trk::SubtractedDiscSurface.

◆ nextLayer() [1/2]

const Trk::Layer * Trk::Layer::nextLayer ( bool skipNavLayer = false) const
inherited

getting what's stored to be the next Layer, boolean to skip navigation layers

Definition at line 151 of file Layer.cxx.

151 {
152 if (!skipNavLayer) return m_nextLayer;
153 const Trk::Layer* nextMatLayer = m_nextLayer;
154 // get the next Material layer
155 while (nextMatLayer && !nextMatLayer->layerMaterialProperties() &&
156 !nextMatLayer->surfaceArray())
157 nextMatLayer = nextMatLayer->nextLayer();
158 return nextMatLayer;
159}
const Layer * nextLayer(const Amg::Vector3D &gp, const Amg::Vector3D &udir) const
getting the next/previous Layer if registered - unit for direction vector required
Definition Layer.cxx:161
const LayerMaterialProperties * layerMaterialProperties() const
getting the LayerMaterialProperties including full/pre/post update
const Layer * m_nextLayer
BinUtility for next/previous decision.
Definition Layer.h:298

◆ nextLayer() [2/2]

const Trk::Layer * Trk::Layer::nextLayer ( const Amg::Vector3D & gp,
const Amg::Vector3D & udir ) const
inherited

getting the next/previous Layer if registered - unit for direction vector required

Definition at line 161 of file Layer.cxx.

162 {
163 // no binutility -> no chance to find out the direction
164 if (!m_binUtility) return nullptr;
165 return (m_binUtility->orderDirection(gp, mom) == Trk::next) ? m_nextLayer
167}
const Layer * m_previousLayer
< the previous Layer according to BinGenUtils
Definition Layer.h:296
const BinUtility * m_binUtility
Enclosing TrackingVolume.
Definition Layer.h:300
@ next
Definition BinningData.h:33

◆ normal() [1/2]

virtual const Amg::Vector3D & Trk::Surface::normal ( ) const
virtualinherited

Returns the normal vector of the Surface (i.e.

in generall z-axis of rotation)

Reimplemented in GXF::CylinderSurface, Trk::ConeSurface, Trk::CylinderSurface, and Trk::PerigeeSurface.

◆ normal() [2/2]

virtual Amg::Vector3D Trk::Surface::normal ( const Amg::Vector2D & lp) const
virtualinherited

Returns a normal vector at a specific local position.

Reimplemented in GXF::CylinderSurface, Trk::ConeSurface, Trk::CylinderSurface, and Trk::PerigeeSurface.

◆ numberOfInstantiations()

std::size_t Trk::ObjectCounter< Trk::Surface >::numberOfInstantiations ( )
inlinestaticinherited

Definition at line 25 of file TrkObjectCounter.h.

26 {
27#ifndef NDEBUG
28 return s_numberOfInstantiations.load();
29#endif
30 return 0;
31 }
Helper to enable counting number of instantiations in debug builds.

◆ onLayer()

template<class T>
bool Trk::Layer::onLayer ( const T & parameters,
const BoundaryCheck & bcheck = BoundaryCheck(true) ) const
inherited

templated on Layer method

◆ onSurface()

template<class T>
bool Trk::Surface::onSurface ( const T & parameters,
const BoundaryCheck & bchk = BoundaryCheck(true) ) const
inherited

The templated Parameters OnSurface method - checks on surface pointer first.

◆ operator!=()

bool Trk::Surface::operator!= ( const Surface & sf) const
inherited

Non-equality operator.

◆ operator=()

Trk::DiscLayer & Trk::DiscLayer::operator= ( const DiscLayer & dlay)

Assignment operator for DiscLayers.

Definition at line 96 of file DiscLayer.cxx.

96 {
97 if (this != &dlay) {
98 // call the assignments of the base classes
101 m_approachDescriptor.reset();
102 if (m_surfaceArray) {
104 }
106 }
107 return (*this);
108}
DiscSurface & operator=(const DiscSurface &dsf)
Assignement operator.
Layer & operator=(const Layer &lay)
Assignment operator for Derived classes.
Definition Layer.cxx:84

◆ operator==() [1/2]

bool Trk::DiscSurface::operator== ( const DiscSurface & cf) const
inherited

◆ operator==() [2/2]

bool Trk::DiscSurface::operator== ( const Surface & sf) const
overridevirtualinherited

Equality operator.

Implements Trk::Surface.

Reimplemented in Trk::SlidingDiscSurface, and Trk::SubtractedDiscSurface.

Definition at line 160 of file DiscSurface.cxx.

161{
162 // first check the type not to compare apples with oranges
163 if (sf.type()!=Trk::SurfaceType::Disc){
164 return false;
165 }
166 return (*this) == static_cast<const Trk::DiscSurface&>(sf);
167}

◆ overlapDescriptor()

const OverlapDescriptor * Trk::Layer::overlapDescriptor ( ) const
inherited

gettint hte overlap descriptor

◆ owner()

SurfaceOwner Trk::Surface::owner ( ) const
inherited

return ownership

◆ pathCorrection()

virtual double Trk::Surface::pathCorrection ( const Amg::Vector3D & pos,
const Amg::Vector3D & mom ) const
virtualinherited

the pathCorrection for derived classes with thickness - it reflects if the direction projection is positive or negative

Reimplemented in GXF::CylinderSurface, Trk::ConeSurface, Trk::CylinderSurface, Trk::PerigeeSurface, and Trk::StraightLineSurface.

◆ positionOnSurface()

std::optional< Amg::Vector2D > Surface::positionOnSurface ( const Amg::Vector3D & glopo,
const BoundaryCheck & bchk = true,
double tol1 = 0.,
double tol2 = 0. ) const
inherited

positionOnSurface() returns the LocalPosition on the Surface,
If BoundaryCheck==false it just returns the value of globalToLocal (including nullptr possibility), if BoundaryCheck==true it checks whether the point is inside bounds or not (returns std::nullopt in this case).

Definition at line 106 of file Surface.cxx.

110{
111 std::optional<Amg::Vector2D> posOnSurface = globalToLocal(glopo, tol1);
112 if (!bchk){
113 return posOnSurface;
114 }
115 if (posOnSurface && insideBounds(*posOnSurface, tol1, tol2)){
116 return posOnSurface;
117 }
118 return std::nullopt;
119}
virtual bool globalToLocal(const Amg::Vector3D &glob, const Amg::Vector3D &mom, Amg::Vector2D &loc) const =0
Specified by each surface type: GlobalToLocal method without dynamic memory allocation - boolean chec...
virtual bool insideBounds(const Amg::Vector2D &locpos, double tol1=0., double tol2=0.) const =0
virtual methods to be overwritten by the inherited surfaces

◆ postUpdateMaterialFactor()

double Trk::DiscLayer::postUpdateMaterialFactor ( const Trk::TrackParameters & par,
Trk::PropDirection dir ) const
finaloverridevirtual

getting the MaterialProperties back - for post-update

Reimplemented from Trk::Layer.

Definition at line 130 of file DiscLayer.cxx.

131 {
133 // const Amg::Vector3D& parmPos = parm.position();
134 if (Trk::DiscSurface::normal().dot(dir * parm.momentum().normalized()) > 0.)
135 return Trk::Layer::m_layerMaterialProperties->alongPostFactor();
136 return Trk::Layer::m_layerMaterialProperties->oppositePostFactor();
137}
dot(G, fn, nodesToHighlight=[])
Definition dot.py:5

◆ preUpdateMaterialFactor()

double Trk::DiscLayer::preUpdateMaterialFactor ( const Trk::TrackParameters & par,
Trk::PropDirection dir ) const
finaloverridevirtual

getting the MaterialProperties back - for pre-update

Reimplemented from Trk::Layer.

Definition at line 121 of file DiscLayer.cxx.

122 {
124 // const Amg::Vector3D& parmPos = parm.position();
125 if (Trk::DiscSurface::normal().dot(dir * parm.momentum().normalized()) > 0.)
126 return Trk::Layer::m_layerMaterialProperties->alongPreFactor();
127 return Trk::Layer::m_layerMaterialProperties->oppositePreFactor();
128}

◆ previousLayer()

const Trk::Layer * Trk::Layer::previousLayer ( bool skipNavLayer = false) const
inherited

getting what's stored to be the previous Layer, boolean to skip navigation layers

Definition at line 141 of file Layer.cxx.

141 {
142 if (!skipNavLayer) return m_previousLayer;
143 const Trk::Layer* prevMatLayer = m_previousLayer;
144 // get the previoys Material layer
145 while (prevMatLayer && !prevMatLayer->layerMaterialProperties() &&
146 !prevMatLayer->surfaceArray())
147 prevMatLayer = prevMatLayer->previousLayer();
148 return prevMatLayer;
149}
const Layer * previousLayer(bool skipNavLayer=false) const
getting what's stored to be the previous Layer, boolean to skip navigation layers
Definition Layer.cxx:141

◆ registerLayerIndex()

void Trk::Layer::registerLayerIndex ( const LayerIndex & lIdx)
inherited

◆ registerRepresentingVolume()

void Trk::Layer::registerRepresentingVolume ( const Volume * theVol)
inherited

register Volume associated to the layer

◆ representingVolume()

const Volume * Trk::Layer::representingVolume ( ) const
inherited

get the Volume associated to the layer

◆ resizeAndRepositionLayer()

void Trk::DiscLayer::resizeAndRepositionLayer ( const VolumeBounds & vBounds,
const Amg::Vector3D & cCenter,
double envelop )
finaloverridevirtual

Resize the layer to the tracking volume - not implemented.

Implements Trk::Layer.

Definition at line 263 of file DiscLayer.cxx.

265 {
266 // resize first of all
267 resizeLayer(vBounds, envelope);
268 // now reposition to the potentially center if necessary, do not change layers
269 // with no transform
270 const Trk::CylinderVolumeBounds* cvb =
271 dynamic_cast<const Trk::CylinderVolumeBounds*>(&vBounds);
272 if (cvb) {
273 // get the halflength
274 double hLengthZ = cvb->halflengthZ();
275 Amg::Vector3D nDiscCenter =
276 center().z() < 0.
277 ? Amg::Vector3D(vCenter -
278 Amg::Vector3D(0., 0., hLengthZ - 0.5 * thickness()))
279 : Amg::Vector3D(
280 vCenter +
281 Amg::Vector3D(0., 0., hLengthZ - 0.5 * thickness()));
282 if (center().isApprox(nDiscCenter)) return;
283 // else set to the new volume center
284 Amg::Transform3D transf((Amg::Translation3D(nDiscCenter)));
285 Amg::Vector3D center(nDiscCenter);
286 m_transforms = std::make_unique<Transforms>(transf, center);
287 }
288 // rebuild the approaching layer
291}
Eigen::Matrix< double, 3, 1 > Vector3D
double halflengthZ() const
This method returns the halflengthZ.
virtual void resizeLayer(const VolumeBounds &vBounds, double envelope) override final
Resize the layer to the tracking volume - only works for CylinderVolumeBouns.

◆ resizeLayer()

void Trk::DiscLayer::resizeLayer ( const VolumeBounds & vBounds,
double envelope )
finaloverridevirtual

Resize the layer to the tracking volume - only works for CylinderVolumeBouns.

Implements Trk::Layer.

Definition at line 149 of file DiscLayer.cxx.

149 {
150 // only do this if the volume bounds a CylinderVolumeBounds
151 const Trk::CylinderVolumeBounds* cvb =
152 dynamic_cast<const Trk::CylinderVolumeBounds*>(&bounds);
153 if (cvb) {
154 // get the dimensions
155 double rInner = cvb->innerRadius();
156 double rOuter = cvb->outerRadius();
157 // (0) first, resize the layer itself
158 Trk::DiscBounds* rDiscBounds =
159 new Trk::DiscBounds(rInner + envelope, rOuter - envelope);
161 std::shared_ptr<const Trk::SurfaceBounds>(rDiscBounds);
162 // (1) resize the material properties by updating the BinUtility, assuming
163 // r/phi binning
165 const BinUtility* layerMaterialBU =
167 if (layerMaterialBU && layerMaterialBU->binningValue(0) == Trk::binR) {
168 size_t binsR = layerMaterialBU->max(0) + 1;
169 // create a new binning with the new dimensions
170 Trk::BinUtility* rBinUtility = new Trk::BinUtility(
171 binsR, rInner + envelope, rOuter - envelope, Trk::open, Trk::binR);
172 // copy the second dimension over if exist
173 if (layerMaterialBU->dimensions() > 1) {
174 (*rBinUtility) += Trk::BinUtility(layerMaterialBU->max(1) + 1, -M_PI,
176 }
177 Trk::Layer::m_layerMaterialProperties->updateBinning(rBinUtility);
178 }
179 }
180 }
181
182 if (m_approachDescriptor && m_approachDescriptor->rebuild()) {
183 // rebuild the approach descriptor - delete the current approach descriptor
185 }
186}
#define M_PI
double innerRadius() const
This method returns the inner radius.
double outerRadius() const
This method returns the outer radius.
@ open
Definition BinningType.h:40
@ closed
Definition BinningType.h:41
@ binR
Definition BinningType.h:50
@ binPhi
Definition BinningType.h:51

◆ setBinUtility()

void Trk::Layer::setBinUtility ( const BinUtility * )
inherited

set the BinUtility

◆ setLayerType()

void Trk::Layer::setLayerType ( int identifier)
inherited

set the Layer coding

◆ setMaterialLayer()

void Trk::Surface::setMaterialLayer ( std::shared_ptr< Trk::MaterialLayer > mlay)
inherited

set material layer

◆ setNextLayer()

void Trk::Layer::setNextLayer ( const Layer * )
inherited

set the next Layer

◆ setOwner()

void Trk::Surface::setOwner ( SurfaceOwner x)
inherited

set Ownership

◆ setPreviousLayer()

void Trk::Layer::setPreviousLayer ( const Layer * )
inherited

set the previous Layer

◆ setRef()

void Trk::Layer::setRef ( double )
inherited

set the reference measure

◆ setTransform()

void Trk::Surface::setTransform ( const Amg::Transform3D & trans)
inherited

Set the transform updates center and normal.

◆ straightLineDistanceEstimate() [1/2]

Trk::DistanceSolution Trk::DiscSurface::straightLineDistanceEstimate ( const Amg::Vector3D & pos,
const Amg::Vector3D & dir ) const
overridevirtualinherited

fast straight line distance evaluation to Surface

distance to surface

Implements Trk::Surface.

Reimplemented in Trk::SlidingDiscSurface.

Definition at line 304 of file DiscSurface.cxx.

306{
307 double tol = 0.001;
308
309 const Amg::Vector3D& C = center();
310 const Amg::Vector3D& N = normal();
311
312 double S = C.dot(N);
313 double b = S < 0. ? -1 : 1;
314 double d = (pos - C).dot(N); // distance to surface
315
316 double A = b * dir.dot(N);
317 if (A == 0.) { // direction parallel to surface
318 if (fabs(d) < tol) {
319 return {1, 0., true, 0.};
320 }
321 return {0, d, true, 0.};
322 }
323
324 double D = b * (S - (pos.dot(N))) / A;
325 return {1, d, true, D};
326}
struct color C

◆ straightLineDistanceEstimate() [2/2]

Trk::DistanceSolution Trk::DiscSurface::straightLineDistanceEstimate ( const Amg::Vector3D & pos,
const Amg::Vector3D & dir,
bool Bound ) const
overridevirtualinherited

fast straight line distance evaluation to Surface - with bound option

Implements Trk::Surface.

Reimplemented in Trk::SlidingDiscSurface.

Definition at line 329 of file DiscSurface.cxx.

332{
333 const Amg::Transform3D& T = transform();
334 const double Az[3] = { T(0, 2), T(1, 2), T(2, 2) };
335
336 // Transformation to cylinder system coordinates
337 //
338 const double dx = pos[0] - T(0, 3);
339 const double dy = pos[1] - T(1, 3);
340 const double dz = pos[2] - T(2, 3);
341 const double z = dx * Az[0] + dy * Az[1] + dz * Az[2];
342 const double az = dir[0] * Az[0] + dir[1] * Az[1] + dir[2] * Az[2];
343
344 // Step to surface
345 //
346 int ns = 0;
347 double s = 0.;
348 if (az != 0.) {
349 s = -z / az;
350 ns = 1;
351 }
352 double dist = std::abs(z);
353 if (!bound) {
354 return {ns, dist, true, s};
355 }
356
357 // Min distance to surface
358 //
359 const double x = dx * T(0, 0) + dy * T(1, 0) + dz * T(2, 0);
360 const double y = dx * T(0, 1) + dy * T(1, 1) + dz * T(2, 1);
361
362 Amg::Vector2D lp(sqrt(x * x + y * y), atan2(y, x));
363
364 double d = bounds().minDistance(lp);
365 if (d > 0.) {
366 dist = std::sqrt(dist * dist + d * d);
367 }
368
369 return {ns, dist, true, s};
370}
virtual double minDistance(const Amg::Vector2D &pos) const =0
Minimal distance to boundary ( > 0 if outside and <=0 if inside)
unsigned long long T
@ x
Definition ParamDefs.h:55
@ z
global position (cartesian)
Definition ParamDefs.h:57
@ y
Definition ParamDefs.h:56

◆ straightLineIntersection() [1/2]

Trk::Intersection Trk::DiscSurface::straightLineIntersection ( const Amg::Vector3D & pos,
const Amg::Vector3D & dir,
bool forceDir = false,
Trk::BoundaryCheck bchk = false ) const
finaloverridevirtualinherited

fast straight line intersection schema - standard: provides closest intersection and (signed) path length forceDir is to provide the closest forward solution

mathematical motivation:

the equation of the plane is given by:
\( \vec n \cdot \vec x = \vec n \cdot \vec p,\)
where \( \vec n = (n_{x}, n_{y}, n_{z})\) denotes the normal vector of the plane, \( \vec p = (p_{x}, p_{y}, p_{z})\) one specific point on the plane and \( \vec x = (x,y,z) \) all possible points on the plane.
Given a line with:
\( \vec l(u) = \vec l_{1} + u \cdot \vec v \),
the solution for \( u \) can be written: \( u = \frac{\vec n (\vec p - \vec l_{1})}{\vec n \vec v}\)
If the denominator is 0 then the line lies:

  • either in the plane
  • perpenticular to the normal of the plane

Implements Trk::Surface.

Definition at line 260 of file DiscSurface.cxx.

263 {
264 double denom = dir.dot(normal());
265 if (denom) {
266 double u = (normal().dot((center() - pos))) / (denom);
267 Amg::Vector3D intersectPoint(pos + u * dir);
268 // evaluate the intersection in terms of direction
269 bool isValid = forceDir ? (u > 0.) : true;
270 // evaluate (if necessary in terms of boundaries)
271 isValid = bchk ? (isValid && isOnSurface(intersectPoint)) : isValid;
272 // return the result
273 return Trk::Intersection(intersectPoint, u, isValid);
274 }
275 return Trk::Intersection(pos, 0., false);
276}
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition AtlasPID.h:878
virtual bool isOnSurface(const Amg::Vector3D &glopo, const BoundaryCheck &bchk=true, double tol1=0., double tol2=0.) const override
This method returns true if the GlobalPosition is on the Surface for both, within or without check of...
@ u
Enums for curvilinear frames.
Definition ParamDefs.h:77

◆ straightLineIntersection() [2/2]

template<typename T>
Intersection Trk::Surface::straightLineIntersection ( const T & pars,
bool forceDir = false,
const Trk::BoundaryCheck & bchk = false ) const
inlineinherited

fst straight line intersection schema - templated for charged and neutral parameters

Definition at line 352 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

356 {
358 pars.position(), pars.momentum().unit(), forceDir, bchk);
359 }
Intersection straightLineIntersection(const T &pars, bool forceDir=false, const Trk::BoundaryCheck &bchk=false) const
fst straight line intersection schema - templated for charged and neutral parameters

◆ subSurface() [1/2]

const Trk::Surface * Trk::Layer::subSurface ( const Amg::Vector2D & lp) const
inherited

If no subSurface array is defined or no subSurface can be found to the given Amg::Vector2D, it would return 0.

Definition at line 112 of file Layer.cxx.

112 {
113 if (m_surfaceArray) return m_surfaceArray->object(lp);
114 return nullptr;
115}

◆ subSurface() [2/2]

const Trk::Surface * Trk::Layer::subSurface ( const Amg::Vector3D & gp) const
inherited

If no subSurface array is defined or no subSurface can be found to the given Amg::Vector3D, it would return 0.

Definition at line 107 of file Layer.cxx.

107 {
108 if (m_surfaceArray) return m_surfaceArray->object(gp);
109 return nullptr;
110}

◆ subSurfaceReference()

const Trk::Surface * Trk::Layer::subSurfaceReference ( unsigned int idx = 0) const
inherited

Return a reference sub surface of the layer, usually the first one in the array.

  • if an index is given (and the index is in range), this surface is returned

Definition at line 117 of file Layer.cxx.

117 {
118 // the reference surface
119 const Trk::Surface* referenceSurface = nullptr;
120 if (m_surfaceArray) {
121 // get a reference surface
122 std::span<Trk::Surface const * const> surfaces = std::as_const(*m_surfaceArray).arrayObjects();
123 // get a reference surface
124 unsigned int rfSurfaces = surfaces.size();
125 if (idx && idx < rfSurfaces) return surfaces[idx];
126 // get the first one which is non zero
127 for (unsigned int rsf = 0; rsf < rfSurfaces; ++rsf) {
128 referenceSurface = surfaces[rsf];
129 if (referenceSurface) break;
130 }
131 }
132 return referenceSurface;
133}

◆ surfaceArray() [1/2]

SurfaceArray * Trk::Layer::surfaceArray ( )
inherited

Return the entire SurfaceArray, returns nullptr if no SurfaceArray.

◆ surfaceArray() [2/2]

const SurfaceArray * Trk::Layer::surfaceArray ( ) const
inherited

Return the entire SurfaceArray, returns nullptr if no SurfaceArray.

◆ surfaceOnApproach()

const Trk::Surface & Trk::DiscLayer::surfaceOnApproach ( const Amg::Vector3D & pos,
const Amg::Vector3D & mom,
PropDirection pdir,
const BoundaryCheck & bcheck,
bool resolveSubSurfaces = 0,
const ICompatibilityEstimator * ice = nullptr ) const
finaloverridevirtual

Surface seen on approach - if not defined differently, it is the surfaceRepresentation()

Reimplemented from Trk::Layer.

Definition at line 221 of file DiscLayer.cxx.

224 {
225 // resolve the surfaces
226 if (m_approachDescriptor && resolveSubSurfaces) {
227 // resolve based on straight line intersection
228 return approachSurface(pos, double(pDir) * mom.unit(), bcheck);
229 }
230 return surfaceRepresentation();
231}
const Surface & approachSurface(const Amg::Vector3D &pos, const Amg::Vector3D &dir, const BoundaryCheck &bcheck) const
Surface seen on approach - if not defined differently, it is the surfaceRepresentation()

◆ surfaceRepresentation() [1/2]

const Trk::DiscSurface & Trk::DiscLayer::surfaceRepresentation ( ) const
finaloverridevirtual

Transforms the layer into a Surface representation for extrapolation.

Implements Trk::Layer.

Definition at line 111 of file DiscLayer.cxx.

112{
113 return (*this);
114}

◆ surfaceRepresentation() [2/2]

Trk::DiscSurface & Trk::DiscLayer::surfaceRepresentation ( )
finaloverridevirtual

Implements Trk::Layer.

Definition at line 116 of file DiscLayer.cxx.

117{
118 return (*this);
119}

◆ thickness()

double Trk::Layer::thickness ( ) const
inherited

Return the Thickness of the Layer.

◆ transform()

const Amg::Transform3D & Trk::Surface::transform ( ) const
inherited

Returns HepGeom::Transform3D by reference.

◆ type()

virtual constexpr SurfaceType Trk::DiscSurface::type ( ) const
constexprfinaloverridevirtualinherited

Return the surface type.

Implements Trk::Surface.

◆ uniqueClone()

std::unique_ptr< Surface > Trk::Surface::uniqueClone ( ) const
inherited

NVI method returning unique_ptr clone.

◆ TrackingVolume

friend class TrackingVolume
friend

Definition at line 46 of file DiscLayer.h.

Member Data Documentation

◆ m_approachDescriptor

std::unique_ptr<IApproachDescriptor> Trk::DiscLayer::m_approachDescriptor
protected

< surface for approaching

Definition at line 146 of file DiscLayer.h.

◆ m_associatedDetElement

const TrkDetElementBase* Trk::Surface::m_associatedDetElement {}
protectedinherited

Not owning Pointer to the Detector Element.

Definition at line 441 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

441{};

◆ m_associatedDetElementId

Identifier Trk::Surface::m_associatedDetElementId {}
protectedinherited

Identifier to the Detector Element.

Definition at line 443 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

443{};

◆ m_associatedLayer

const Layer* Trk::Surface::m_associatedLayer {}
protectedinherited

The associated layer Trk::Layer This is the layer in which the Surface is embedded.

so not owning pointer.

Definition at line 448 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

448{};

◆ m_binUtility

const BinUtility* Trk::Layer::m_binUtility = nullptr
protectedinherited

Enclosing TrackingVolume.

Definition at line 300 of file Layer.h.

◆ m_bounds

std::shared_ptr<const SurfaceBounds> Trk::DiscSurface::m_bounds
protectedinherited

reference Point on the Surface

Definition at line 284 of file DiscSurface.h.

◆ m_enclosingDetachedTrackingVolume

const DetachedTrackingVolume* Trk::Layer::m_enclosingDetachedTrackingVolume = nullptr
protectedinherited

Definition at line 304 of file Layer.h.

◆ m_enclosingTrackingVolume

const TrackingVolume* Trk::Layer::m_enclosingTrackingVolume = nullptr
protectedinherited

Enclosing DetachedTrackingVolume.

Definition at line 302 of file Layer.h.

◆ m_index

LayerIndex Trk::Layer::m_index {-1}
protectedinherited

LayerIndex.

Definition at line 306 of file Layer.h.

306{-1};

◆ m_layerMaterialProperties

std::unique_ptr<LayerMaterialProperties> Trk::Layer::m_layerMaterialProperties {}
protectedinherited

thickness of the Layer

Definition at line 288 of file Layer.h.

288{};

◆ m_layerThickness

double Trk::Layer::m_layerThickness {}
protectedinherited

descriptor for overlap/next surface (owning ptr)

Definition at line 290 of file Layer.h.

290{};

◆ m_layerType

int Trk::Layer::m_layerType {Trk::active}
protectedinherited

active passive layer

Definition at line 307 of file Layer.h.

307{Trk::active};
@ active
Definition Layer.h:47

◆ m_materialLayer

std::shared_ptr<MaterialLayer> Trk::Surface::m_materialLayer {}
protectedinherited

Possibility to attach a material description to the surface.

In this case the surface is what holds the MaterialLayer. This is usually done for boundary surfaces so shared ptr.

Definition at line 453 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

453{};

◆ m_nextLayer

const Layer* Trk::Layer::m_nextLayer = nullptr
protectedinherited

BinUtility for next/previous decision.

Definition at line 298 of file Layer.h.

◆ m_overlapDescriptor

std::unique_ptr<OverlapDescriptor> Trk::Layer::m_overlapDescriptor {}
protectedinherited

Definition at line 292 of file Layer.h.

292{};

◆ m_owner

SurfaceOwner Trk::Surface::m_owner {SurfaceOwner::noOwn}
protectedinherited

enum for surface owner : default free surface

Definition at line 455 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

◆ m_previousLayer

const Layer* Trk::Layer::m_previousLayer = nullptr
protectedinherited

< the previous Layer according to BinGenUtils

next Layer according to BinGenUtils

Definition at line 296 of file Layer.h.

◆ m_ref

double Trk::Layer::m_ref {}
protectedinherited

reference measure for local coordinate convertors

Definition at line 308 of file Layer.h.

308{};

◆ m_referencePoint

CxxUtils::CachedUniquePtr<Amg::Vector3D> Trk::DiscSurface::m_referencePoint
protectedinherited

static member for boundless approach

Definition at line 286 of file DiscSurface.h.

◆ m_surfaceArray

std::unique_ptr<SurfaceArray> Trk::Layer::m_surfaceArray {}
protectedinherited

MaterialPoperties of this layer Surface.

Definition at line 286 of file Layer.h.

286{};

◆ m_transforms

std::unique_ptr<Transforms> Trk::Surface::m_transforms {}
protectedinherited

Unique Pointer to the Transforms struct.

Definition at line 439 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

439{};

◆ s_boundless

const Trk::NoBounds Trk::DiscSurface::s_boundless
staticprotectedinherited

Definition at line 288 of file DiscSurface.h.

◆ s_numberOfInstantiations

std::atomic_size_t Trk::ObjectCounter< Trk::Surface >::s_numberOfInstantiations
inlinestaticinherited

Definition at line 22 of file TrkObjectCounter.h.

◆ s_onSurfaceTolerance

double Trk::Surface::s_onSurfaceTolerance = 10e-5
staticconstexprprotectedinherited

Tolerance for being on Surface.

Definition at line 458 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

◆ staticType

SurfaceType Trk::DiscSurface::staticType = SurfaceType::Disc
staticconstexprinherited

Definition at line 57 of file DiscSurface.h.


The documentation for this class was generated from the following files: