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

#include <SiElementProperties.h>

Collaboration diagram for InDet::SiElementProperties:

Public Member Functions

 SiElementProperties (const IdentifierHash &idHash, const SCT_ID &idHelper, const InDetDD::SiDetectorElement &element, float epsilonWidth, const bool doEncapEtaNeighbours=false)
 ~SiElementProperties ()
const std::vector< IdentifierHash > * neighbours (void) const
float halfWidth (void) const

Private Attributes

std::vector< IdentifierHashm_neighbours
float m_halfWidth

Detailed Description

Definition at line 25 of file SiElementProperties.h.

Constructor & Destructor Documentation

◆ SiElementProperties()

InDet::SiElementProperties::SiElementProperties ( const IdentifierHash & idHash,
const SCT_ID & idHelper,
const InDetDD::SiDetectorElement & element,
float epsilonWidth,
const bool doEncapEtaNeighbours = false )

Definition at line 18 of file SiElementProperties.cxx.

23
24{
25 // construct vector of neighbours of this wafer.
26 Identifier compact;
27 IdContext idCntxt(idHelper.wafer_context());
28
29 int res = idHelper.get_id(idHash,compact, &idCntxt);
30 if (res) return; // cannot convert
31
32 //if (idHelper.side(compact)==0) return;
33 // if it is the stereo side do nothing
34 if (element.isStereo()) return;
35 IdentifierHash otherHash;
36 IdentifierHash neighbourHash;
37
38 res = idHelper.get_other_side(idHash, otherHash);
39 if (res==0) m_neighbours.push_back(otherHash);
40 res = idHelper.get_prev_in_phi(otherHash, neighbourHash);
41 if (res==0) m_neighbours.push_back(neighbourHash);
42 res = idHelper.get_next_in_phi(otherHash, neighbourHash);
43 if (res==0) m_neighbours.push_back(neighbourHash);
44
45 // These neighbours are only defined for barrel, and may fail
46 // because wafer is at one of the ends
47 if (idHelper.is_barrel(compact))
48 {
49 res = idHelper.get_prev_in_eta(otherHash, neighbourHash);
50 if (res ==0)
51 m_neighbours.push_back(neighbourHash);
52 res = idHelper.get_next_in_eta(otherHash, neighbourHash );
53 if (res ==0)
54 m_neighbours.push_back(neighbourHash);
55 }
56 else if(doEndcapEtaNeighbours){
57 const InDetDD::SiDetectorElement* nextInEta = element.nextInEta();
58 if(nextInEta){
59 neighbourHash = nextInEta->identifyHash();
60 m_neighbours.push_back(neighbourHash);
61 }
62
63 int trig_eta = idHelper.eta_module(compact);
64 if(trig_eta==9){
65 // For ITk strip endcaps we have a change of module granularity between eta_module=9 and 10
66 // therefore when we are at eta_module=9, we can have two neighbours at larger radius
67 // the second neighbour is put in "prevInEta()" in SCT_DetectorManager (a bit hacky, yes)
68 const InDetDD::SiDetectorElement* nextInEta2 = element.prevInEta();
69 if(nextInEta2){
70 neighbourHash = nextInEta2->identifyHash();
71 m_neighbours.push_back(neighbourHash);
72 }
73 }
74 }
75
76 // Find half width of wafer at centre
77
78 m_halfWidth = (element.design().minWidth()+element.design().maxWidth())*.25
79 + epsilonWidth; // add a bit for safety.
80}
std::pair< std::vector< unsigned int >, bool > res
virtual double maxWidth() const =0
Method to calculate maximum width of a module.
virtual const SiDetectorDesign & design() const override final
access to the local description (inline):
bool isStereo() const
Check if it is the stereo side (useful for SCT)
const SiDetectorElement * prevInEta() const
const SiDetectorElement * nextInEta() const
virtual IdentifierHash identifyHash() const override final
identifier hash (inline)
std::vector< IdentifierHash > m_neighbours
int get_prev_in_eta(const IdentifierHash &id, IdentifierHash &prev) const
Previous wafer hash in eta (return == 0 for neighbor found)
Definition SCT_ID.cxx:407
virtual int get_id(const IdentifierHash &hash_id, Identifier &id, const IdContext *context=0) const override final
Create compact id from hash id (return == 0 for OK)
Definition SCT_ID.cxx:648
int get_prev_in_phi(const IdentifierHash &id, IdentifierHash &prev) const
Previous wafer hash in phi (return == 0 for neighbor found)
Definition SCT_ID.cxx:387
int get_next_in_eta(const IdentifierHash &id, IdentifierHash &next) const
Next wafer hash in eta (return == 0 for neighbor found)
Definition SCT_ID.cxx:417
int eta_module(const Identifier &id) const
Definition SCT_ID.h:699
int get_next_in_phi(const IdentifierHash &id, IdentifierHash &next) const
Next wafer hash in phi (return == 0 for neighbor found)
Definition SCT_ID.cxx:397
IdContext wafer_context() const
Definition SCT_ID.cxx:772
int get_other_side(const IdentifierHash &id, IdentifierHash &other) const
Wafer hash on other side.
Definition SCT_ID.cxx:427
bool is_barrel(const Identifier &id) const
Test for barrel - WARNING: id MUST be sct id, otherwise answer is not accurate. Use SiliconID for gen...
Definition SCT_ID.h:674

◆ ~SiElementProperties()

InDet::SiElementProperties::~SiElementProperties ( )
default

Member Function Documentation

◆ halfWidth()

float InDet::SiElementProperties::halfWidth ( void ) const
inline

Definition at line 61 of file SiElementProperties.h.

62{
63 return m_halfWidth;
64}

◆ neighbours()

const std::vector< IdentifierHash > * InDet::SiElementProperties::neighbours ( void ) const
inline

Definition at line 54 of file SiElementProperties.h.

55{
56 return &m_neighbours;
57}

Member Data Documentation

◆ m_halfWidth

float InDet::SiElementProperties::m_halfWidth
private

Definition at line 43 of file SiElementProperties.h.

◆ m_neighbours

std::vector<IdentifierHash> InDet::SiElementProperties::m_neighbours
private

Definition at line 42 of file SiElementProperties.h.


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