ATLAS Offline Software
Loading...
Searching...
No Matches
InDet::TRT_OverlapDescriptor Class Reference

Class to describe overlaps in the TRT detector, it extends the Trk::OverlapDescriptor base class. More...

#include <TRT_OverlapDescriptor.h>

Inheritance diagram for InDet::TRT_OverlapDescriptor:
Collaboration diagram for InDet::TRT_OverlapDescriptor:

Public Member Functions

 TRT_OverlapDescriptor (const TRT_ID *helper, double bTolerance=0.9, double oTolerance=1.1)
 Constructor.
 TRT_OverlapDescriptor (const TRT_OverlapDescriptor &od)
 Copy Constructor.
TRT_OverlapDescriptoroperator= (const TRT_OverlapDescriptor &)=default
 Default assignment.
virtual ~TRT_OverlapDescriptor ()
 Destructor.
TRT_OverlapDescriptorclone () const
 Pseudo-Constructor.
bool reachableSurfaces (std::vector< Trk::SurfaceIntersection > &cSurfaces, const Trk::Surface &sf, const Amg::Vector3D &pos, const Amg::Vector3D &dir) const
 get the compatible surfaces

Private Member Functions

int checkAndFill (std::vector< Trk::SurfaceIntersection > &cSurfaces, const Trk::Surface &sf, const Amg::Vector3D &pos, const Amg::Vector3D &dir) const

Private Attributes

const TRT_IDm_trtIdHelper
 the Id helper
double m_breakTolerance
 if the straight line intersection is within this fraction of the bounds - don't look for neighbours
double m_outsideTolerance
 accept even if it outside the bounds by this tolerance

Detailed Description

Class to describe overlaps in the TRT detector, it extends the Trk::OverlapDescriptor base class.

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

Definition at line 31 of file TRT_OverlapDescriptor.h.

Constructor & Destructor Documentation

◆ TRT_OverlapDescriptor() [1/2]

InDet::TRT_OverlapDescriptor::TRT_OverlapDescriptor ( const TRT_ID * helper,
double bTolerance = 0.9,
double oTolerance = 1.1 )
inline

Constructor.

Definition at line 34 of file TRT_OverlapDescriptor.h.

34 :
35 m_trtIdHelper(helper),
36 m_breakTolerance(bTolerance),
37 m_outsideTolerance(oTolerance)
38 {}
double m_outsideTolerance
accept even if it outside the bounds by this tolerance
double m_breakTolerance
if the straight line intersection is within this fraction of the bounds - don't look for neighbours
const TRT_ID * m_trtIdHelper
the Id helper

◆ TRT_OverlapDescriptor() [2/2]

InDet::TRT_OverlapDescriptor::TRT_OverlapDescriptor ( const TRT_OverlapDescriptor & od)
inline

Copy Constructor.

Definition at line 40 of file TRT_OverlapDescriptor.h.

40 :
41 Trk::OverlapDescriptor(),
42 m_trtIdHelper(od.m_trtIdHelper),
43 m_breakTolerance(od.m_breakTolerance),
44 m_outsideTolerance(od.m_outsideTolerance)
45 {}

◆ ~TRT_OverlapDescriptor()

virtual InDet::TRT_OverlapDescriptor::~TRT_OverlapDescriptor ( )
inlinevirtual

Destructor.

Definition at line 51 of file TRT_OverlapDescriptor.h.

51{}

Member Function Documentation

◆ checkAndFill()

int InDet::TRT_OverlapDescriptor::checkAndFill ( std::vector< Trk::SurfaceIntersection > & cSurfaces,
const Trk::Surface & sf,
const Amg::Vector3D & pos,
const Amg::Vector3D & dir ) const
private

Definition at line 63 of file TRT_OverlapDescriptor.cxx.

68{
69 Trk::Intersection sfIntersection =
70 sf.straightLineIntersection(pos, dir, false, false);
71 // we have a valid intersection - is it within tolerance ?
72 if (sfIntersection.valid) {
73 // this is the boundary cylinder of the straw surface
74 double rSurface2 = sf.bounds().r() * sf.bounds().r();
75 // what's the distance - hess' normal form
76 const Amg::Vector3D& sCenter = sf.center();
77 const Amg::Vector3D sDirection = sf.transform().rotation().col(2);
78 // d^2 = | (dir) x
79 double d2 =
80 (sDirection.cross((sfIntersection.position - sCenter))).squaredNorm();
81 // check it
82 bool acceptSurface =
84 if (acceptSurface)
85 cSurfaces.emplace_back(sfIntersection, &sf);
86 // give the break signal if it's really inside
87 return (d2 < (m_breakTolerance * m_breakTolerance * rSurface2)
88 ? 0
89 : (sfIntersection.position.phi() > sf.center().phi() ? 1 : -1));
90 }
91 // base the decision on the position phi value
92 return (pos.phi() > sf.center().phi() ? 1 : -1);
93}
Eigen::Matrix< double, 3, 1 > Vector3D
Amg::Vector3D position

◆ clone()

TRT_OverlapDescriptor * InDet::TRT_OverlapDescriptor::clone ( ) const
inlinevirtual

Pseudo-Constructor.

Implements Trk::OverlapDescriptor.

Definition at line 75 of file TRT_OverlapDescriptor.h.

75{ return new TRT_OverlapDescriptor(*this); }
TRT_OverlapDescriptor(const TRT_ID *helper, double bTolerance=0.9, double oTolerance=1.1)
Constructor.

◆ operator=()

TRT_OverlapDescriptor & InDet::TRT_OverlapDescriptor::operator= ( const TRT_OverlapDescriptor & )
default

Default assignment.

◆ reachableSurfaces()

bool InDet::TRT_OverlapDescriptor::reachableSurfaces ( std::vector< Trk::SurfaceIntersection > & cSurfaces,
const Trk::Surface & sf,
const Amg::Vector3D & pos,
const Amg::Vector3D & dir ) const
virtual

get the compatible surfaces

Implements Trk::OverlapDescriptor.

Definition at line 18 of file TRT_OverlapDescriptor.cxx.

24{
25 const Amg::Vector3D dir = momentum.unit();
26 // first add the target surface - if it fits
27 int nextInt = checkAndFill(cSurfaces, tsf, position, dir);
28 if (!nextInt)
29 return true;
30
31 // make sure we have the correct associated element
32 const auto* tmp = tsf.associatedDetectorElement();
33 const InDetDD::TRT_BaseElement* trtBaseElement =
34 tmp->detectorType() == Trk::DetectorElemType::TRT
35 ? static_cast<const InDetDD::TRT_BaseElement*>(tmp)
36 : nullptr;
37
38 // we have a trt base element
39 if (trtBaseElement) {
40
41 Identifier strawID = tsf.associatedDetectorElementIdentifier();
42
43 // straw Max
44 int strawMax = trtBaseElement->nStraws() - 1;
45 int strawInt = m_trtIdHelper->straw(strawID);
46
47 if (strawInt != 0 && strawInt < strawMax && strawMax != -999) {
48 // get the next straw
49 Identifier nextID =
50 m_trtIdHelper->straw_id(trtBaseElement->identify(), strawInt + nextInt);
51 const Trk::Surface* nextStraw = (strawInt > 1 && strawInt < strawMax)
52 ? (&(trtBaseElement->surface(nextID)))
53 : nullptr;
54 if (nextStraw)
55 nextInt = checkAndFill(cSurfaces, *nextStraw, position, dir);
56 }
57 }
58
59 return true;
60}
unsigned int nStraws() const
Number of straws in the element.
virtual Identifier identify() const override final
identifier of this detector element:
virtual const Trk::Surface & surface() const override final
Element Surface: access to the Surface (straw layer)
int checkAndFill(std::vector< Trk::SurfaceIntersection > &cSurfaces, const Trk::Surface &sf, const Amg::Vector3D &pos, const Amg::Vector3D &dir) const

Member Data Documentation

◆ m_breakTolerance

double InDet::TRT_OverlapDescriptor::m_breakTolerance
private

if the straight line intersection is within this fraction of the bounds - don't look for neighbours

Definition at line 70 of file TRT_OverlapDescriptor.h.

◆ m_outsideTolerance

double InDet::TRT_OverlapDescriptor::m_outsideTolerance
private

accept even if it outside the bounds by this tolerance

Definition at line 71 of file TRT_OverlapDescriptor.h.

◆ m_trtIdHelper

const TRT_ID* InDet::TRT_OverlapDescriptor::m_trtIdHelper
private

the Id helper

Definition at line 69 of file TRT_OverlapDescriptor.h.


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