ATLAS Offline Software
TRT_DetElementContainer.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
8 
9 namespace InDetDD{
10 
12  : AthMessaging("TRT_DetElementContainer")
13  , m_trtcoll()
14  , m_trtnum(nullptr)
15  {
16  clear();
17  }
18 
20  {
21  clear();
22  }
23 
25  {
26  m_trtnum=mynum;
27  }
28 
30  {
31  return &m_trtcoll;
32  }
33 
35  {
36  return m_trtnum;
37  }
38 
40  , unsigned int moduleIndex
41  , unsigned int phiIndex
42  , unsigned int strawLayerIndex) const
43  {
44  if ( positive >= 2 || moduleIndex >= NMODMAX
45  || phiIndex>=NPHIMAX || strawLayerIndex >= NSTRAWLAYMAXBR) return nullptr;
46 
47  return m_baArray[positive][moduleIndex][phiIndex][strawLayerIndex];
48  }
49 
51  , unsigned int moduleIndex
52  , unsigned int phiIndex
53  , unsigned int strawLayerIndex)
54  {
55  if ( positive >= 2 || moduleIndex >= NMODMAX
56  || phiIndex>=NPHIMAX || strawLayerIndex >= NSTRAWLAYMAXBR) return nullptr;
57 
58  return m_baArray[positive][moduleIndex][phiIndex][strawLayerIndex];
59  }
60 
61 
63  , unsigned int wheelIndex
64  , unsigned int strawLayerIndex
65  , unsigned int phiIndex) const
66  {
67  if ( positive >= 2 || wheelIndex >= NWHEELMAX
68  || phiIndex>=NPHIMAX || strawLayerIndex >= NSTRAWLAYMAXEC) return nullptr;
69 
70  return m_ecArray[positive][wheelIndex][strawLayerIndex][phiIndex];
71  }
72 
74  , unsigned int wheelIndex
75  , unsigned int strawLayerIndex
76  , unsigned int phiIndex)
77  {
78  if ( positive >= 2 || wheelIndex >= NWHEELMAX
79  || phiIndex>=NPHIMAX || strawLayerIndex >= NSTRAWLAYMAXEC) return nullptr;
80 
81  return m_ecArray[positive][wheelIndex][strawLayerIndex][phiIndex];
82  }
83 
85  {
86  // check if the element has already been added
87  if (std::find(m_trtcoll.begin(), m_trtcoll.end(), barrel) != m_trtcoll.end()) return;
88  // check if something was stored at the given indices
89  TRT_BarrelElement* arrayElement = m_baArray
90  [barrel->getCode().isPosZ()]
91  [barrel->getCode().getModuleIndex()]
92  [barrel->getCode().getPhiIndex()]
93  [barrel->getCode().getStrawLayerIndex()];
94  if (arrayElement != nullptr) {
95  m_trtcoll.erase(std::remove(m_trtcoll.begin(), m_trtcoll.end(), arrayElement));
96  delete arrayElement;
97  }
98  m_baArray[barrel->getCode().isPosZ()]
99  [barrel->getCode().getModuleIndex()]
100  [barrel->getCode().getPhiIndex()]
101  [barrel->getCode().getStrawLayerIndex()] = barrel;
102  m_trtcoll.push_back(barrel);
103  }
104 
106  {
107  // check if the element has already been added
108  if (std::find(m_trtcoll.begin(), m_trtcoll.end(), endcap) != m_trtcoll.end()) return;
109  // check if something was stored at the given indices
110  TRT_EndcapElement* arrayElement = m_ecArray
111  [endcap->getCode().isPosZ()]
112  [endcap->getCode().getWheelIndex()]
113  [endcap->getCode().getStrawLayerIndex()]
114  [endcap->getCode().getPhiIndex()];
115  if (arrayElement != nullptr) {
116  m_trtcoll.erase(std::remove(m_trtcoll.begin(), m_trtcoll.end(), arrayElement));
117  delete arrayElement;
118  }
119  m_ecArray[endcap->getCode().isPosZ()]
120  [endcap->getCode().getWheelIndex()]
121  [endcap->getCode().getStrawLayerIndex()]
122  [endcap->getCode().getPhiIndex()] = endcap;
123  m_trtcoll.push_back(endcap);
124  }
125 
127  {
128  if (m_baArray
129  [barrel->getCode().isPosZ()]
130  [barrel->getCode().getModuleIndex()]
131  [barrel->getCode().getPhiIndex()]
132  [barrel->getCode().getStrawLayerIndex()] ) {
133 
134  //Element already added - complain!
135  ATH_MSG_DEBUG("manageBarrelElement: Overriding existing element");
136  }
137 
138  m_baArray
139  [barrel->getCode().isPosZ()]
140  [barrel->getCode().getModuleIndex()]
141  [barrel->getCode().getPhiIndex()]
142  [barrel->getCode().getStrawLayerIndex()]
143  =barrel;
144 
145  // Add the barrel element to the hash vector:
146  if (idHelper) {
147  Identifier id = idHelper->layer_id(barrel->getCode().isPosZ() ? +1 : -1,
148  barrel->getCode().getPhiIndex(),
149  barrel->getCode().getModuleIndex(),
150  barrel->getCode().getStrawLayerIndex());
151  IdentifierHash hashId = idHelper->straw_layer_hash(id);
152  if (hashId.is_valid()) {
153  if (m_trtcoll.size() <= hashId) {
154  m_trtcoll.resize(static_cast<unsigned int>(hashId) + 1);
155  }
156  if (m_trtcoll[hashId]) {
157  //Element already added - complain!
158  ATH_MSG_DEBUG("manageBarrelElement: Overriding existing element for hashID");
159  }
160  m_trtcoll[hashId]=barrel;
161  }
162  else {
163  ATH_MSG_WARNING("manageBarrelElement: Invalid identifier");
164  }
165  }
166  }
167 
169  {
170  if (m_ecArray
171  [endcap->getCode().isPosZ()]
172  [endcap->getCode().getWheelIndex()]
173  [endcap->getCode().getStrawLayerIndex()]
174  [endcap->getCode().getPhiIndex()] ) {
175  //Element already added - complain!
176  ATH_MSG_WARNING("manageEndcapElement: Overriding existing element");
177  }
178 
179  m_ecArray
180  [endcap->getCode().isPosZ()]
181  [endcap->getCode().getWheelIndex()]
182  [endcap->getCode().getStrawLayerIndex()]
183  [endcap->getCode().getPhiIndex()]
184  =endcap;
185 
186  if (idHelper) {
187  Identifier id = idHelper->layer_id(endcap->getCode().isPosZ() ? +2 : -2,
188  endcap->getCode().getPhiIndex(),
189  endcap->getCode().getWheelIndex(),
190  endcap->getCode().getStrawLayerIndex());
191 
192  IdentifierHash hashId = idHelper->straw_layer_hash(id);
193  if (hashId.is_valid()) {
194  if (m_trtcoll.size() <= hashId) {
195  m_trtcoll.resize(static_cast<unsigned int>(hashId) + 1);
196  }
197  if (m_trtcoll[hashId]) {
198  //Element already added - complain!
199  ATH_MSG_DEBUG("manageEndcapElement: Overriding existing element for hashID");
200  }
201  m_trtcoll[hashId]=endcap;
202  } else {
203  ATH_MSG_WARNING("manageEndcapElement: Invalid identifier");
204  }
205  }
206  }
207 
209  {
210  for (auto *p : m_trtcoll) {
211  delete p;
212  }
213  m_trtcoll.clear();
214  for (auto & ec : m_baArray) {
215  for (auto & mod : ec) {
216  for (auto & phi : mod) {
217  for (auto & sLay : phi) {
218  sLay = nullptr;
219  }
220  }
221  }
222  }
223  for (auto & ec : m_ecArray) {
224  for (auto & whe : ec) {
225  for (auto & sLay : whe) {
226  for(auto & phi : sLay) {
227  phi = nullptr;
228  }
229  }
230  }
231  }
232  }
233 
234 }
InDetDD::TRT_DetElementContainer::NWHEELMAX
@ NWHEELMAX
Definition: TRT_DetElementContainer.h:78
InDetDD::TRT_EndcapCode::getStrawLayerIndex
unsigned int getStrawLayerIndex() const
Definition: TRT_EndcapCode.h:90
TRT_ID::layer_id
Identifier layer_id(int barrel_ec, int phi_module, int layer_or_wheel, int straw_layer) const
For an individual straw layer.
Definition: TRT_ID.h:500
InDetDD::TRT_DetElementContainer::m_ecArray
TRT_EndcapElement * m_ecArray[2][NWHEELMAX][NSTRAWLAYMAXEC][NPHIMAX]
Definition: TRT_DetElementContainer.h:84
InDetDD::TRT_BarrelElement
Definition: TRT_BarrelElement.h:44
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
InDetDD::TRT_DetElementContainer::manageEndcapElement
void manageEndcapElement(TRT_EndcapElement *endcap, const TRT_ID *idHelper)
Definition: TRT_DetElementContainer.cxx:168
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
TRT_DetElementContainer.h
InDetDD::TRT_EndcapElement
Definition: TRT_EndcapElement.h:44
InDetDD::TRT_DetElementContainer::NSTRAWLAYMAXEC
@ NSTRAWLAYMAXEC
Definition: TRT_DetElementContainer.h:81
InDetDD::TRT_DetElementContainer::addEndcapElement
void addEndcapElement(TRT_EndcapElement *element)
Definition: TRT_DetElementContainer.cxx:105
InDetDD::TRT_DetElementContainer::manageBarrelElement
void manageBarrelElement(TRT_BarrelElement *barrel, const TRT_ID *idHelper)
Definition: TRT_DetElementContainer.cxx:126
InDetDD::TRT_DetElementContainer::clear
void clear()
Definition: TRT_DetElementContainer.cxx:208
PixelModuleFeMask_create_db.remove
string remove
Definition: PixelModuleFeMask_create_db.py:83
InDetDD::TRT_DetElementContainer::setNumerology
void setNumerology(const TRT_Numerology *mynum)
Definition: TRT_DetElementContainer.cxx:24
InDetDD::TRT_EndcapCode::getWheelIndex
unsigned int getWheelIndex() const
Definition: TRT_EndcapCode.h:84
TRT_EndcapElement.h
InDetDD::TRT_Numerology
Definition: TRT_Numerology.h:22
InDetDD::TRT_DetElementContainer::~TRT_DetElementContainer
~TRT_DetElementContainer()
Definition: TRT_DetElementContainer.cxx:19
InDetDD::TRT_DetElementContainer::TRT_DetElementContainer
TRT_DetElementContainer()
Definition: TRT_DetElementContainer.cxx:11
maskDeadModules.mod
mod
Definition: maskDeadModules.py:36
InDetDD::TRT_EndcapElement::getCode
const TRT_EndcapCode & getCode() const
Doomed (??)
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AthMessaging
Class to provide easy MsgStream access and capabilities.
Definition: AthMessaging.h:55
InDetDD::TRT_EndcapCode::isPosZ
unsigned int isPosZ() const
Definition: TRT_EndcapCode.h:79
TRT_BarrelElement.h
IdentifierHash::is_valid
bool is_valid() const
Check if id is in a valid state.
InDetDD::TRT_DetElementContainer::getBarrelDetElement
const TRT_BarrelElement * getBarrelDetElement(unsigned int positive, unsigned int moduleIndex, unsigned int phiIndex, unsigned int strawLayerIndex) const
Definition: TRT_DetElementContainer.cxx:39
InDetDD::TRT_DetElementContainer::m_trtcoll
TRT_DetElementCollection m_trtcoll
Definition: TRT_DetElementContainer.h:74
InDetDD::TRT_DetElementContainer::NPHIMAX
@ NPHIMAX
Definition: TRT_DetElementContainer.h:79
InDetDD::TRT_EndcapCode::getPhiIndex
unsigned int getPhiIndex() const
Definition: TRT_EndcapCode.h:95
InDetDD::TRT_DetElementContainer::m_baArray
TRT_BarrelElement * m_baArray[2][NMODMAX][NPHIMAX][NSTRAWLAYMAXBR]
Definition: TRT_DetElementContainer.h:83
eflowRec::phiIndex
unsigned int phiIndex(float phi, float binsize)
calculate phi index for a given phi
Definition: EtaPhiLUT.cxx:23
TRT_ID
Definition: TRT_ID.h:84
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
InDetDD
Message Stream Member.
Definition: FakeTrackBuilder.h:8
InDetDD::TRT_DetElementContainer::getTRTNumerology
const TRT_Numerology * getTRTNumerology() const
Definition: TRT_DetElementContainer.cxx:34
InDetDD::TRT_DetElementContainer::m_trtnum
const TRT_Numerology * m_trtnum
Definition: TRT_DetElementContainer.h:75
InDetDD::TRT_DetElementContainer::getElements
const TRT_DetElementCollection * getElements() const
Definition: TRT_DetElementContainer.cxx:29
InDetDD::TRT_DetElementContainer::NMODMAX
@ NMODMAX
Definition: TRT_DetElementContainer.h:77
InDetDD::TRT_DetElementCollection
Class to hold collection of TRT detector elements.
Definition: TRT_DetElementCollection.h:28
IdentifierHash
Definition: IdentifierHash.h:38
InDetDD::TRT_DetElementContainer::getEndcapDetElement
const TRT_EndcapElement * getEndcapDetElement(unsigned int positive, unsigned int wheelIndex, unsigned int strawLayerIndex, unsigned int phiIndex) const
Definition: TRT_DetElementContainer.cxx:62
InDetDD::TRT_DetElementContainer::NSTRAWLAYMAXBR
@ NSTRAWLAYMAXBR
Definition: TRT_DetElementContainer.h:80
TRT_ID::straw_layer_hash
IdentifierHash straw_layer_hash(Identifier straw_layer_id) const
straw_layer hash from id - optimized
Definition: TRT_ID.h:750
InDetDD::TRT_DetElementContainer::addBarrelElement
void addBarrelElement(TRT_BarrelElement *element)
Definition: TRT_DetElementContainer.cxx:84