ATLAS Offline Software
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | Static Protected Attributes | Private Member Functions | Friends | List of all members
Trk::DiscLayer Class Referencefinal

#include <DiscLayer.h>

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

Public Types

using ChargedTrackParametersUniquePtr = std::unique_ptr< ParametersBase< 5, Trk::Charged > >
 Unique ptr types. More...
 
using NeutralTrackParametersUniquePtr = std::unique_ptr< ParametersBase< 5, Trk::Neutral > >
 

Public Member Functions

 DiscLayer ()=default
 Default Constructor. More...
 
 DiscLayer (const Amg::Transform3D &transform, 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. More...
 
 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. More...
 
 DiscLayer (const Amg::Transform3D &transform, 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) More...
 
 DiscLayer (const Amg::Transform3D &transform, 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) More...
 
 DiscLayer (const DiscLayer &cla)
 Copy constructor of DiscLayer. More...
 
 DiscLayer (const DiscLayer &cla, const Amg::Transform3D &tr)
 Copy constructor with shift. More...
 
DiscLayeroperator= (const DiscLayer &)
 Assignment operator for DiscLayers. More...
 
virtual ~DiscLayer ()=default
 Destructor. More...
 
virtual const DiscSurfacesurfaceRepresentation () const override final
 Transforms the layer into a Surface representation for extrapolation. More...
 
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() More...
 
virtual double preUpdateMaterialFactor (const Trk::TrackParameters &par, Trk::PropDirection dir) const override final
 getting the MaterialProperties back - for pre-update More...
 
virtual double postUpdateMaterialFactor (const Trk::TrackParameters &par, Trk::PropDirection dir) const override final
 getting the MaterialProperties back - for post-update More...
 
virtual void moveLayer (Amg::Transform3D &shift) override final
 move the Layer non-const More...
 
virtual void resizeLayer (const VolumeBounds &vBounds, double envelope) override final
 Resize the layer to the tracking volume - only works for CylinderVolumeBouns. More...
 
virtual void resizeAndRepositionLayer (const VolumeBounds &vBounds, const Amg::Vector3D &cCenter, double envelop) override final
 Resize the layer to the tracking volume - not implemented. More...
 
virtual bool operator== (const Surface &sf) const override
 Equality operator. More...
 
bool operator== (const DiscSurface &cf) const
 
virtual DiscSurfaceclone () const override
 Virtual constructor. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
constexpr virtual SurfaceType type () const override final
 Return the surface type. More...
 
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. More...
 
const SurfaceBoundsbounds () const override final
 This method returns the bounds by reference. More...
 
virtual bool insideBounds (const Amg::Vector2D &locpos, double tol1=0., double tol2=0.) const override
 This method calls the inside method of the bounds. More...
 
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. More...
 
virtual Amg::Vector2D localParametersToPosition (const LocalParameters &locpars) const override final
 Specialized for DiscSurface : LocalParameters to Vector2D. More...
 
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. More...
 
Amg::Vector3D localToGlobal (const Amg::Vector2D &locpos) const
 This method returns the GlobalPosition from a LocalPosition uses the per surface localToGlobal. More...
 
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. More...
 
Amg::Vector3D localToGlobal (const LocalParameters &locpars) const
 This method returns the GlobalPosition from LocalParameters The LocalParameters can be outside Surface bounds. More...
 
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. More...
 
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. More...
 
std::optional< Amg::Vector2DglobalToLocal (const Amg::Vector3D &glopos, double tol=0.) const
 This method returns the LocalPosition from a provided GlobalPosition. More...
 
std::optional< Amg::Vector2DglobalToLocal (const Amg::Vector3D &glopos, const Amg::Vector3D &glomom) const
 This method returns the LocalPosition from a provided GlobalPosition. More...
 
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 More...
 
template<class 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 More...
 
virtual DistanceSolution straightLineDistanceEstimate (const Amg::Vector3D &pos, const Amg::Vector3D &dir) const override
 fast straight line distance evaluation to Surface More...
 
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 More...
 
virtual std::string name () const override
 Return properly formatted class name for screen output. More...
 
bool operator!= (const Surface &sf) const
 Non-equality operator. More...
 
std::unique_ptr< SurfaceuniqueClone () const
 NVI method returning unique_ptr clone. More...
 
const Amg::Transform3DcachedTransform () const
 Return the cached transformation directly. More...
 
const Amg::Transform3Dtransform () const
 Returns HepGeom::Transform3D by reference. More...
 
const Amg::Vector3Dcenter () const
 Returns the center position of the Surface. More...
 
virtual const Amg::Vector3Dnormal () const
 Returns the normal vector of the Surface (i.e. More...
 
virtual Amg::Vector3D normal (const Amg::Vector2D &lp) const
 Returns a normal vector at a specific local position. More...
 
const TrkDetElementBaseassociatedDetectorElement () const
 return associated Detector Element More...
 
Identifier associatedDetectorElementIdentifier () const
 return Identifier of the associated Detector Element More...
 
const Trk::LayerassociatedLayer () const
 return the associated Layer More...
 
const Trk::LayermaterialLayer () const
 return the material Layer More...
 
Trk::LayermaterialLayer ()
 
virtual const Trk::SurfacebaseSurface () const
 return the base surface (simplified for persistification) More...
 
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). More...
 
template<class T >
bool onSurface (const T &parameters, const BoundaryCheck &bchk=BoundaryCheck(true)) const
 The templated Parameters OnSurface method - checks on surface pointer first. More...
 
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 More...
 
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. More...
 
bool isFree () const
 Returns 'true' if this surface is 'free', i.e. More...
 
bool isActive () const
 Return 'true' if this surface is owned by the detector element. More...
 
void setTransform (const Amg::Transform3D &trans)
 Set the transform updates center and normal. More...
 
void setOwner (SurfaceOwner x)
 set Ownership More...
 
SurfaceOwner owner () const
 return ownership More...
 
void setMaterialLayer (std::shared_ptr< Layer > mlay)
 set material layer More...
 
virtual MsgStream & dump (MsgStream &sl) const
 Output Method for MsgStream, to be overloaded by child classes. More...
 
virtual std::ostream & dump (std::ostream &sl) const
 Output Method for std::ostream, to be overloaded by child classes. More...
 
void associateLayer (const Layer &lay)
 method to associate the associated Trk::Layer which is alreay owned More...
 
const SurfaceArraysurfaceArray () const
 Return the entire SurfaceArray, returns nullptr if no SurfaceArray. More...
 
SurfaceArraysurfaceArray ()
 Return the entire SurfaceArray, returns nullptr if no SurfaceArray. More...
 
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. More...
 
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. More...
 
const SurfacesubSurfaceReference (unsigned int idx=0) const
 Return a reference sub surface of the layer, usually the first one in the array. More...
 
double thickness () const
 Return the Thickness of the Layer. More...
 
template<class T >
bool onLayer (const T &parameters, const BoundaryCheck &bcheck=BoundaryCheck(true)) const
 templated on Layer method More...
 
virtual bool isOnLayer (const Amg::Vector3D &gp, const BoundaryCheck &bcheck=BoundaryCheck(true)) const
 isOnLayer() method, using isOnSurface() with Layer specific tolerance More...
 
const LayerMaterialPropertieslayerMaterialProperties () const
 getting the LayerMaterialProperties including full/pre/post update More...
 
const MaterialPropertiesfullUpdateMaterialProperties (const TrackParameters &par) const
 getting the MaterialProperties back - for full update More...
 
const OverlapDescriptoroverlapDescriptor () const
 gettint hte overlap descriptor More...
 
const LayerpreviousLayer (bool skipNavLayer=false) const
 getting what's stored to be the previous Layer, boolean to skip navigation layers More...
 
void setPreviousLayer (const Layer *)
 set the previous Layer More...
 
const LayernextLayer (const Amg::Vector3D &gp, const Amg::Vector3D &udir) const
 getting the next/previous Layer if registered - unit for direction vector required More...
 
const LayernextLayer (bool skipNavLayer=false) const
 getting what's stored to be the next Layer, boolean to skip navigation layers More...
 
void setNextLayer (const Layer *)
 set the next Layer More...
 
const BinUtilitybinUtility () const
 access the BinUtility More...
 
void setBinUtility (const BinUtility *)
 set the BinUtility More...
 
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 More...
 
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 More...
 
virtual bool hasSubStructure (bool resolveSensitive=false) const
 Has sub-structure method: More...
 
const TrackingVolumeenclosingTrackingVolume () const
 get the confining TrackingVolume More...
 
const DetachedTrackingVolumeenclosingDetachedTrackingVolume () const
 get the confining DetachedTrackingVolume More...
 
const LayerIndexlayerIndex () const
 get the layerIndex More...
 
int layerType () const
 get the Layer coding More...
 
void setLayerType (int identifier)
 set the Layer coding More...
 
void assignMaterialProperties (const LayerMaterialProperties &, double scale=1.0)
 assignMaterialPropeties More...
 
void registerRepresentingVolume (const Volume *theVol)
 register Volume associated to the layer More...
 
const VolumerepresentingVolume () const
 get the Volume associated to the layer More...
 
void setRef (double)
 set the reference measure More...
 
double getRef () const
 get the reference measure More...
 
void encloseTrackingVolume (const TrackingVolume &tvol)
 private method to set the enclosed detached TV More...
 
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 More...
 
void compactify (size_t &cSurfaces, size_t &tSurfaces)
 register layer index for material map registration More...
 
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. More...
 
Amg::Vector3D inverseTransformMultHelper (const Amg::Vector3D &glopos) const
 

Protected Attributes

std::unique_ptr< IApproachDescriptorm_approachDescriptor
 < surface for approaching More...
 
SharedObject< const SurfaceBoundsm_bounds
 reference Point on the Surface More...
 
CxxUtils::CachedUniquePtr< Amg::Vector3Dm_referencePoint
 static member for boundless approach More...
 
std::unique_ptr< Transformsm_transforms {}
 
const TrkDetElementBasem_associatedDetElement {}
 Not owning Pointer to the TrkDetElementBase. More...
 
Identifier m_associatedDetElementId {}
 Identifier for the TrkDetElementBase. More...
 
const Layerm_associatedLayer {}
 The associated layer Trk::Layer. More...
 
std::shared_ptr< Layerm_materialLayer {}
 Possibility to attach a material descrption. More...
 
SurfaceOwner m_owner {SurfaceOwner::noOwn}
 enum for surface owner : 0 free surface More...
 
std::unique_ptr< SurfaceArraym_surfaceArray
 MaterialPoperties of this layer Surface. More...
 
std::unique_ptr< LayerMaterialPropertiesm_layerMaterialProperties
 thickness of the Layer More...
 
double m_layerThickness
 descriptor for overlap/next surface (owning ptr) More...
 
std::unique_ptr< OverlapDescriptorm_overlapDescriptor
 
const Layerm_previousLayer
 < the previous Layer according to BinGenUtils More...
 
const Layerm_nextLayer
 BinUtility for next/previous decision. More...
 
const BinUtilitym_binUtility
 Enclosing TrackingVolume. More...
 
const TrackingVolumem_enclosingTrackingVolume
 Enclosing DetachedTrackingVolume. More...
 
const DetachedTrackingVolumem_enclosingDetachedTrackingVolume
 
LayerIndex m_index
 LayerIndex. More...
 
int m_layerType
 active passive layer More...
 
double m_ref
 reference measure for local coordinate convertors More...
 

Static Protected Attributes

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

Private Member Functions

void buildApproachDescriptor ()
 build approach surfaces More...
 
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() More...
 

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

Unique ptr types.

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

◆ NeutralTrackParametersUniquePtr

Constructor & Destructor Documentation

◆ DiscLayer() [1/7]

Trk::DiscLayer::DiscLayer ( )
default

Default Constructor.

◆ DiscLayer() [2/7]

Trk::DiscLayer::DiscLayer ( const Amg::Transform3D transform,
Trk::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, dbounds)
28  , Layer(laymatprop, thickness, std::move(olap), laytyp)
29  , m_approachDescriptor(nullptr)
30 {
32 }

◆ 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,
Trk::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, dbounds)
54  , Layer(std::move(surfaceArray), thickness, std::move(olap), laytyp)
55  , m_approachDescriptor(ades)
56 {
59  // register the layer
60  if (ades) m_approachDescriptor->registerLayer(*this);
61 }

◆ DiscLayer() [5/7]

Trk::DiscLayer::DiscLayer ( const Amg::Transform3D transform,
Trk::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, dbounds)
72  , Layer(std::move(surfaceArray), laymatprop, thickness, std::move(olap), laytyp)
73  , m_approachDescriptor(ades)
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.

84  : DiscSurface(dlay), Layer(dlay), m_approachDescriptor(nullptr) {
87 }

◆ 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  {
193  if (m_approachDescriptor) {
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 }

◆ assignMaterialProperties()

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

assignMaterialPropeties

Definition at line 191 of file Layer.cxx.

192  {
193  m_layerMaterialProperties.reset(prop.clone());
194  if (scale != 1.0) {
196  }
197 }

◆ 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 the associated Trk::Layer which is alreay owned

  • only allowed by LayerBuilder
  • only done if no Layer is set already

◆ 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 =
247  Amg::Transform3D(Amg::Translation3D(asnPosition));
248  Amg::Transform3D aspTransform =
249  Amg::Transform3D(Amg::Translation3D(aspPosition));
250  aSurfaces->push_back(new Trk::DiscSurface(aspTransform, db->clone()));
251  aSurfaces->push_back(new Trk::DiscSurface(asnTransform, db->clone()));
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 }

◆ 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 200 of file Layer.cxx.

201 {
202  // set the layer surface representation
203  ++tSurfaces;
204  if (surfaceRepresentation().owner() == Trk::noOwn) {
206  ++cSurfaces;
207  }
208  // set the subsurface representation, usually already owned by DetElement
209  if (m_surfaceArray) {
210  BinnedArraySpan<Trk::Surface * const> surfaces = m_surfaceArray->arrayObjects();
211  for (Trk::Surface * const sIter : surfaces) {
212  if (sIter && (*sIter).owner() == Trk::noOwn) {
213  (*sIter).setOwner(Trk::TGOwn);
214  ++cSurfaces;
215  }
216  ++tSurfaces;
217  }
218  }
219 }

◆ 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 200 of file DiscSurface.cxx.

202  {
203  return std::make_unique<ParametersT<5, Neutral, DiscSurface>>(
204  position, momentum, charge, *this, std::move(cov));
205 }

◆ 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 190 of file DiscSurface.cxx.

192  {
193  return std::make_unique<ParametersT<5, Neutral, DiscSurface>>(
194  l1, l2, phi, theta, qop, *this, std::move(cov));
195 }

◆ 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 180 of file DiscSurface.cxx.

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

◆ 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 171 of file DiscSurface.cxx.

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

◆ dump() [1/2]

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

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

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

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 }

◆ 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::PerigeeSurface, and Trk::DetElementSurface.

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 183 of file Layer.cxx.

184  {
186  return m_layerMaterialProperties->fullMaterial(parm.position());
187  }
188  return nullptr;
189 }

◆ 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 208 of file DiscSurface.cxx.

209 {
210  if (!m_referencePoint) {
211  const Trk::DiscBounds* dbo =
212  dynamic_cast<const Trk::DiscBounds*>(&(bounds()));
213  if (dbo) {
214  double rMedium = bounds().r();
215  double phi = dbo->averagePhi();
216  Amg::Vector3D gp(rMedium * cos(phi), rMedium * sin(phi), 0.);
217  m_referencePoint.set(std::make_unique<Amg::Vector3D>(transform() * gp));
218  } else {
219  const Trk::DiscTrapezoidalBounds* dtbo =
220  dynamic_cast<const Trk::DiscTrapezoidalBounds*>(&(bounds()));
221  // double rMedium = dtbo ? bounds().r() : dtbo->rCenter() ; //nonsense, or
222  // logic inverted?
223  double rMedium = bounds().r();
224  double phi = dtbo ? dtbo->averagePhi() : 0.;
225  Amg::Vector3D gp(rMedium * cos(phi), rMedium * sin(phi), 0.);
226  m_referencePoint.set(std::make_unique<Amg::Vector3D>(transform() * gp));
227  }
228  }
229  return (*m_referencePoint);
230 }

◆ 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 249 of file DiscSurface.cxx.

252 {
253  Amg::Vector3D loc3Dframe = inverseTransformMultHelper(glopos);
254  locpos = Amg::Vector2D(loc3Dframe.perp(), loc3Dframe.phi());
255  return (std::fabs(loc3Dframe.z()) <= s_onSurfaceTolerance);
256 }

◆ 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
inlinevirtualinherited

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 252 of file Layer.cxx.

252  {
253  return resolveSensitive && m_surfaceArray;
254 }

◆ 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::NavigationLayer, and Trk::MaterialLayer.

Definition at line 149 of file Layer.cxx.

150  {
151  return (surfaceRepresentation())
152  .isOnSurface(gp, bchk, 0.5 * m_layerThickness);
153 }

◆ 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 286 of file DiscSurface.cxx.

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

◆ 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 235 of file DiscSurface.cxx.

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

◆ 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::Layer* Trk::Surface::materialLayer ( )
inherited

◆ materialLayer() [2/2]

const Trk::Layer* 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.

  • the default implementation is the the RotationMatrix3D of the transform

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

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 }

◆ 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 165 of file Layer.cxx.

165  {
166  if (!skipNavLayer) return m_nextLayer;
167  const Trk::Layer* nextMatLayer = m_nextLayer;
168  // get the next Material layer
169  while (nextMatLayer && !nextMatLayer->layerMaterialProperties() &&
170  !nextMatLayer->surfaceArray())
171  nextMatLayer = nextMatLayer->nextLayer();
172  return nextMatLayer;
173 }

◆ 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 175 of file Layer.cxx.

176  {
177  // no binutility -> no chance to find out the direction
178  if (!m_binUtility) return nullptr;
180  : m_previousLayer;
181 }

◆ 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 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 Trk::PerigeeSurface, Trk::CylinderSurface, and Trk::ConeSurface.

◆ numberOfInstantiations()

static 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  }

◆ 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
100  Trk::Layer::operator=(dlay);
101  m_approachDescriptor.reset();
102  if (m_surfaceArray) {
104  }
106  }
107  return (*this);
108 }

◆ 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 159 of file DiscSurface.cxx.

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

◆ 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 Trk::CylinderSurface, Trk::StraightLineSurface, Trk::PerigeeSurface, and Trk::ConeSurface.

◆ 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 }

◆ 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 }

◆ 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 155 of file Layer.cxx.

155  {
156  if (!skipNavLayer) return m_previousLayer;
157  const Trk::Layer* prevMatLayer = m_previousLayer;
158  // get the previoys Material layer
159  while (prevMatLayer && !prevMatLayer->layerMaterialProperties() &&
160  !prevMatLayer->surfaceArray())
161  prevMatLayer = prevMatLayer->previousLayer();
162  return prevMatLayer;
163 }

◆ 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
289  if (m_approachDescriptor && m_approachDescriptor->rebuild())
291 }

◆ 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);
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 }

◆ 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< Layer 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 303 of file DiscSurface.cxx.

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

◆ 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 328 of file DiscSurface.cxx.

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

◆ 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 259 of file DiscSurface.cxx.

262  {
263  double denom = dir.dot(normal());
264  if (denom) {
265  double u = (normal().dot((center() - pos))) / (denom);
266  Amg::Vector3D intersectPoint(pos + u * dir);
267  // evaluate the intersection in terms of direction
268  bool isValid = forceDir ? (u > 0.) : true;
269  // evaluate (if necessary in terms of boundaries)
270  isValid = bchk ? (isValid && isOnSurface(intersectPoint)) : isValid;
271  // return the result
272  return Trk::Intersection(intersectPoint, u, isValid);
273  }
274  return Trk::Intersection(pos, 0., false);
275 }

◆ straightLineIntersection() [2/2]

template<class 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 351 of file Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h.

355  {
357  pars.position(), pars.momentum().unit(), forceDir, bchk);
358  }

◆ 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 126 of file Layer.cxx.

126  {
127  if (m_surfaceArray) return m_surfaceArray->object(lp);
128  return nullptr;
129 }

◆ 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 121 of file Layer.cxx.

121  {
122  if (m_surfaceArray) return m_surfaceArray->object(gp);
123  return nullptr;
124 }

◆ 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 131 of file Layer.cxx.

131  {
132  // the reference surface
133  const Trk::Surface* referenceSurface = nullptr;
134  if (m_surfaceArray) {
135  // get a reference surface
136  Trk::BinnedArraySpan<Trk::Surface const * const> surfaces = std::as_const(*m_surfaceArray).arrayObjects();
137  // get a reference surface
138  unsigned int rfSurfaces = surfaces.size();
139  if (idx && idx < rfSurfaces) return surfaces[idx];
140  // get the first one which is non zero
141  for (unsigned int rsf = 0; rsf < rfSurfaces; ++rsf) {
142  referenceSurface = surfaces[rsf];
143  if (referenceSurface) break;
144  }
145  }
146  return referenceSurface;
147 }

◆ 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 }

◆ 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()

constexpr virtual 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.

Friends And Related Function Documentation

◆ 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 TrkDetElementBase.

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

◆ m_associatedDetElementId

Identifier Trk::Surface::m_associatedDetElementId {}
protectedinherited

◆ m_associatedLayer

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

The associated layer Trk::Layer.

  • layer in which the Surface is embedded (not owning pointed)

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

◆ m_binUtility

const BinUtility* Trk::Layer::m_binUtility
protectedinherited

Enclosing TrackingVolume.

Definition at line 301 of file Layer.h.

◆ m_bounds

SharedObject<const SurfaceBounds> Trk::DiscSurface::m_bounds
protectedinherited

reference Point on the Surface

Definition at line 285 of file DiscSurface.h.

◆ m_enclosingDetachedTrackingVolume

const DetachedTrackingVolume* Trk::Layer::m_enclosingDetachedTrackingVolume
protectedinherited

Definition at line 305 of file Layer.h.

◆ m_enclosingTrackingVolume

const TrackingVolume* Trk::Layer::m_enclosingTrackingVolume
protectedinherited

Enclosing DetachedTrackingVolume.

Definition at line 303 of file Layer.h.

◆ m_index

LayerIndex Trk::Layer::m_index
protectedinherited

LayerIndex.

Definition at line 307 of file Layer.h.

◆ m_layerMaterialProperties

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

thickness of the Layer

Definition at line 289 of file Layer.h.

◆ m_layerThickness

double Trk::Layer::m_layerThickness
protectedinherited

descriptor for overlap/next surface (owning ptr)

Definition at line 291 of file Layer.h.

◆ m_layerType

int Trk::Layer::m_layerType
protectedinherited

active passive layer

Definition at line 308 of file Layer.h.

◆ m_materialLayer

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

Possibility to attach a material descrption.

  • potentially given as the associated material layer (not owning pointer)

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

◆ m_nextLayer

const Layer* Trk::Layer::m_nextLayer
protectedinherited

BinUtility for next/previous decision.

Definition at line 299 of file Layer.h.

◆ m_overlapDescriptor

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

Definition at line 293 of file Layer.h.

◆ m_owner

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

enum for surface owner : 0 free surface

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

◆ m_previousLayer

const Layer* Trk::Layer::m_previousLayer
protectedinherited

< the previous Layer according to BinGenUtils

next Layer according to BinGenUtils

Definition at line 297 of file Layer.h.

◆ m_ref

double Trk::Layer::m_ref
protectedinherited

reference measure for local coordinate convertors

Definition at line 309 of file Layer.h.

◆ m_referencePoint

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

static member for boundless approach

Definition at line 287 of file DiscSurface.h.

◆ m_surfaceArray

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

MaterialPoperties of this layer Surface.

Definition at line 287 of file Layer.h.

◆ m_transforms

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

◆ s_boundless

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

Definition at line 289 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

constexpr 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

constexpr 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:
make_hlt_rep.pars
pars
Definition: make_hlt_rep.py:90
Trk::y
@ y
Definition: ParamDefs.h:56
Trk::DiscLayer::resizeLayer
virtual void resizeLayer(const VolumeBounds &vBounds, double envelope) override final
Resize the layer to the tracking volume - only works for CylinderVolumeBouns.
Definition: DiscLayer.cxx:149
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
Trk::DiscBounds::averagePhi
double averagePhi() const
This method returns the average phi.
Trk::Intersection
Definition: Intersection.h:24
Trk::Surface::associatedDetectorElement
const TrkDetElementBase * associatedDetectorElement() const
return associated Detector Element
Trk::Surface::name
virtual std::string name() const =0
Return properly formatted class name.
Trk::z
@ z
global position (cartesian)
Definition: ParamDefs.h:57
Trk::BinUtility::orderDirection
LayerOrder orderDirection(const Amg::Vector3D &position, const Amg::Vector3D &direction, size_t ba=0) const
Return the oder direciton for fast interlinking.
Definition: BinUtility.h:171
Trk::Layer::m_previousLayer
const Layer * m_previousLayer
< the previous Layer according to BinGenUtils
Definition: Layer.h:297
Trk::Surface::straightLineIntersection
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
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:351
Trk::Surface::setOwner
void setOwner(SurfaceOwner x)
set Ownership
Trk::noOwn
@ noOwn
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:54
Trk::next
@ next
Definition: BinningData.h:33
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
Trk::Layer::m_layerMaterialProperties
std::unique_ptr< LayerMaterialProperties > m_layerMaterialProperties
thickness of the Layer
Definition: Layer.h:289
Trk::DiscLayer::m_approachDescriptor
std::unique_ptr< IApproachDescriptor > m_approachDescriptor
< surface for approaching
Definition: DiscLayer.h:146
Trk::DiscSurface::isOnSurface
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...
Definition: DiscSurface.cxx:286
hist_file_dump.d
d
Definition: hist_file_dump.py:137
CaloCondBlobAlgs_fillNoiseFromASCII.db
db
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:43
Trk::DiscSurface::operator=
DiscSurface & operator=(const DiscSurface &dsf)
Assignement operator.
Definition: DiscSurface.cxx:148
Trk::Layer::m_surfaceArray
std::unique_ptr< SurfaceArray > m_surfaceArray
MaterialPoperties of this layer Surface.
Definition: Layer.h:287
DMTest::C
C_v1 C
Definition: C.h:26
Trk::Intersection::pathLength
double pathLength
Definition: Intersection.h:26
plotBeamSpotVxVal.cov
cov
Definition: plotBeamSpotVxVal.py:201
Trk::DiscSurface::m_referencePoint
CxxUtils::CachedUniquePtr< Amg::Vector3D > m_referencePoint
static member for boundless approach
Definition: DiscSurface.h:287
M_PI
#define M_PI
Definition: ActiveFraction.h:11
Trk::closed
@ closed
Definition: BinningType.h:41
Trk::DiscSurface
Definition: DiscSurface.h:54
JetTiledMap::N
@ N
Definition: TiledEtaPhiMap.h:44
Trk::locR
@ locR
Definition: ParamDefs.h:44
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
isValid
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition: AtlasPID.h:620
Trk::Surface::center
const Amg::Vector3D & center() const
Returns the center position of the Surface.
yodamerge_tmp.scale
scale
Definition: yodamerge_tmp.py:138
JetTiledMap::S
@ S
Definition: TiledEtaPhiMap.h:44
Trk::DiscSurface::DiscSurface
DiscSurface()
Default Constructor.
Definition: DiscSurface.cxx:26
Trk::ApproachSurfaces
Definition: IApproachDescriptor.h:25
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
Trk::DiscTrapezoidalBounds
Definition: DiscTrapezoidalBounds.h:42
Trk::SurfaceBounds::minDistance
virtual double minDistance(const Amg::Vector2D &pos) const =0
Minimal distance to boundary ( > 0 if outside and <=0 if inside)
Trk::Surface::inverseTransformMultHelper
Amg::Vector3D inverseTransformMultHelper(const Amg::Vector3D &glopos) const
Trk::Layer::surfaceArray
const SurfaceArray * surfaceArray() const
Return the entire SurfaceArray, returns nullptr if no SurfaceArray.
Trk::TrkDetElementBase::detectorTypeString
std::string detectorTypeString() const
Returns a string of the Detector element type.
Definition: TrkDetElementBase.cxx:10
A
skel.l2
l2
Definition: skel.GENtoEVGEN.py:399
Trk::Surface::m_transforms
std::unique_ptr< Transforms > m_transforms
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:436
ParticleGun_EoverP_Config.mom
mom
Definition: ParticleGun_EoverP_Config.py:63
Trk::Surface::s_onSurfaceTolerance
static constexpr double s_onSurfaceTolerance
Tolerance for being on Surface.
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:458
Trk::Layer::surfaceRepresentation
virtual const Surface & surfaceRepresentation() const =0
Transforms the layer into a Surface representation for extrapolation.
ParticleGun_EoverP_Config.momentum
momentum
Definition: ParticleGun_EoverP_Config.py:63
Trk::theta
@ theta
Definition: ParamDefs.h:66
Trk::DiscSurface::m_bounds
SharedObject< const SurfaceBounds > m_bounds
reference Point on the Surface
Definition: DiscSurface.h:285
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
dumpNswErrorDb.linear
def linear
Definition: dumpNswErrorDb.py:23
Trk::DiscSurface::bounds
const SurfaceBounds & bounds() const override final
This method returns the bounds by reference.
Trk::DiscTrapezoidalBounds::averagePhi
double averagePhi() const
This method returns the average phi.
Trk::CylinderVolumeBounds::halflengthZ
double halflengthZ() const
This method returns the halflengthZ.
Definition: CylinderVolumeBounds.h:207
Trk::Layer::operator=
Layer & operator=(const Layer &lay)
Assignment operator for Derived classes.
Definition: Layer.cxx:98
Trk::Surface::normal
virtual const Amg::Vector3D & normal() const
Returns the normal vector of the Surface (i.e.
Trk::Layer::nextLayer
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:175
dot.dot
def dot(G, fn, nodesToHighlight=[])
Definition: dot.py:5
compute_lumi.denom
denom
Definition: compute_lumi.py:76
beamspotman.dir
string dir
Definition: beamspotman.py:623
Trk::BinUtility
Definition: BinUtility.h:39
Trk::Layer::Layer
Layer()
Default Constructor.
Definition: Layer.cxx:18
Trk::TGOwn
@ TGOwn
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:55
Trk::CylinderVolumeBounds
Definition: CylinderVolumeBounds.h:70
Amg
Definition of ATLAS Math & Geometry primitives (Amg)
Definition: AmgStringHelpers.h:19
Trk::Surface::bounds
virtual const SurfaceBounds & bounds() const =0
Surface Bounds method.
Trk::Surface::associateLayer
void associateLayer(const Layer &lay)
method to associate the associated Trk::Layer which is alreay owned
Trk::DiscLayer::surfaceRepresentation
virtual const DiscSurface & surfaceRepresentation() const override final
Transforms the layer into a Surface representation for extrapolation.
Definition: DiscLayer.cxx:111
Trk::CylinderVolumeBounds::outerRadius
double outerRadius() const
This method returns the outer radius.
Definition: CylinderVolumeBounds.h:191
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
Trk::locPhi
@ locPhi
local polar
Definition: ParamDefs.h:45
charge
double charge(const T &p)
Definition: AtlasPID.h:756
Trk::Layer::thickness
double thickness() const
Return the Thickness of the Layer.
Trk::Surface::insideBounds
virtual bool insideBounds(const Amg::Vector2D &locpos, double tol1=0., double tol2=0.) const =0
virtual methods to be overwritten by the inherited surfaces
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Trk::Layer::m_nextLayer
const Layer * m_nextLayer
BinUtility for next/previous decision.
Definition: Layer.h:299
Trk::Intersection::valid
bool valid
Definition: Intersection.h:28
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
Trk::Layer::m_binUtility
const BinUtility * m_binUtility
Enclosing TrackingVolume.
Definition: Layer.h:301
Trk::open
@ open
Definition: BinningType.h:40
Trk::inside
@ inside
Definition: PropDirection.h:29
makeTRTBarrelCans.dy
tuple dy
Definition: makeTRTBarrelCans.py:21
Trk::binR
@ binR
Definition: BinningType.h:50
Trk::ObjectCounter< Trk::Surface >::s_numberOfInstantiations
static std::atomic_size_t s_numberOfInstantiations
Definition: TrkObjectCounter.h:22
Trk::SharedObject
std::shared_ptr< T > SharedObject
Definition: SharedObject.h:24
Trk::Surface::globalToLocal
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...
mapkey::sf
@ sf
Definition: TElectronEfficiencyCorrectionTool.cxx:38
Trk::CylinderVolumeBounds::innerRadius
double innerRadius() const
This method returns the inner radius.
Definition: CylinderVolumeBounds.h:187
Amg::RotationMatrix3D
Eigen::Matrix< double, 3, 3 > RotationMatrix3D
Definition: GeoPrimitives.h:49
Trk::Layer::previousLayer
const Layer * previousLayer(bool skipNavLayer=false) const
getting what's stored to be the previous Layer, boolean to skip navigation layers
Definition: Layer.cxx:155
makeTRTBarrelCans.dx
tuple dx
Definition: makeTRTBarrelCans.py:20
Amg::Translation3D
Eigen::Translation< double, 3 > Translation3D
Definition: GeoPrimitives.h:44
Trk::SurfaceType::Disc
@ Disc
Trk::Layer::layerMaterialProperties
const LayerMaterialProperties * layerMaterialProperties() const
getting the LayerMaterialProperties including full/pre/post update
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
Trk::Layer::m_layerThickness
double m_layerThickness
descriptor for overlap/next surface (owning ptr)
Definition: Layer.h:291
python.SystemOfUnits.ns
int ns
Definition: SystemOfUnits.py:130
Trk::phi
@ phi
Definition: ParamDefs.h:75
skel.l1
l1
Definition: skel.GENtoEVGEN.py:398
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
Trk::x
@ x
Definition: ParamDefs.h:55
Trk::DiscLayer::buildApproachDescriptor
void buildApproachDescriptor()
build approach surfaces
Definition: DiscLayer.cxx:234
Trk::DiscLayer::approachSurface
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()
Definition: DiscLayer.cxx:190
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:75
Trk::Surface::transform
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
Trk::BinnedArraySpan
std::span< T > BinnedArraySpan
Definition: BinnedArray.h:34
TSU::T
unsigned long long T
Definition: L1TopoDataTypes.h:35
Trk::DiscBounds
Definition: DiscBounds.h:44
Trk::Layer
Definition: Layer.h:73
Trk::binPhi
@ binPhi
Definition: BinningType.h:51
Trk::SurfaceBounds::r
virtual double r() const =0
Interface method for the maximal extension or the radius.