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_trtcoll;
37  }
38 
40  {
41  return m_trtnum;
42  }
43 
45  , unsigned int moduleIndex
46  , unsigned int phiIndex
47  , unsigned int strawLayerIndex) const
48  {
49  if ( positive >= 2 || moduleIndex >= NMODMAX
50  || phiIndex>=NPHIMAX || strawLayerIndex >= NSTRAWLAYMAXBR) return nullptr;
51 
52  return m_baArray[positive][moduleIndex][phiIndex][strawLayerIndex];
53  }
54 
56  , unsigned int moduleIndex
57  , unsigned int phiIndex
58  , unsigned int strawLayerIndex)
59  {
60  if ( positive >= 2 || moduleIndex >= NMODMAX
61  || phiIndex>=NPHIMAX || strawLayerIndex >= NSTRAWLAYMAXBR) return nullptr;
62 
63  return m_baArray[positive][moduleIndex][phiIndex][strawLayerIndex];
64  }
65 
66 
68  , unsigned int wheelIndex
69  , unsigned int strawLayerIndex
70  , unsigned int phiIndex) const
71  {
72  if ( positive >= 2 || wheelIndex >= NWHEELMAX
73  || phiIndex>=NPHIMAX || strawLayerIndex >= NSTRAWLAYMAXEC) return nullptr;
74 
75  return m_ecArray[positive][wheelIndex][strawLayerIndex][phiIndex];
76  }
77 
79  , unsigned int wheelIndex
80  , unsigned int strawLayerIndex
81  , unsigned int phiIndex)
82  {
83  if ( positive >= 2 || wheelIndex >= NWHEELMAX
84  || phiIndex>=NPHIMAX || strawLayerIndex >= NSTRAWLAYMAXEC) return nullptr;
85 
86  return m_ecArray[positive][wheelIndex][strawLayerIndex][phiIndex];
87  }
88 
90  {
91  // check if the element has already been added
92  if (std::find(m_trtcoll.begin(), m_trtcoll.end(), barrel) != m_trtcoll.end()) return;
93  // check if something was stored at the given indices
94  TRT_BarrelElement* arrayElement = m_baArray
95  [barrel->getCode().isPosZ()]
96  [barrel->getCode().getModuleIndex()]
97  [barrel->getCode().getPhiIndex()]
98  [barrel->getCode().getStrawLayerIndex()];
99  if (arrayElement != nullptr) {
100  m_trtcoll.erase(std::remove(m_trtcoll.begin(), m_trtcoll.end(), arrayElement));
101  delete arrayElement;
102  }
103  m_baArray[barrel->getCode().isPosZ()]
104  [barrel->getCode().getModuleIndex()]
105  [barrel->getCode().getPhiIndex()]
106  [barrel->getCode().getStrawLayerIndex()] = barrel;
107  m_trtcoll.push_back(barrel);
108  }
109 
111  {
112  // check if the element has already been added
113  if (std::find(m_trtcoll.begin(), m_trtcoll.end(), endcap) != m_trtcoll.end()) return;
114  // check if something was stored at the given indices
115  TRT_EndcapElement* arrayElement = m_ecArray
116  [endcap->getCode().isPosZ()]
117  [endcap->getCode().getWheelIndex()]
118  [endcap->getCode().getStrawLayerIndex()]
119  [endcap->getCode().getPhiIndex()];
120  if (arrayElement != nullptr) {
121  m_trtcoll.erase(std::remove(m_trtcoll.begin(), m_trtcoll.end(), arrayElement));
122  delete arrayElement;
123  }
124  m_ecArray[endcap->getCode().isPosZ()]
125  [endcap->getCode().getWheelIndex()]
126  [endcap->getCode().getStrawLayerIndex()]
127  [endcap->getCode().getPhiIndex()] = endcap;
128  m_trtcoll.push_back(endcap);
129  }
130 
132  {
133  if (m_baArray
134  [barrel->getCode().isPosZ()]
135  [barrel->getCode().getModuleIndex()]
136  [barrel->getCode().getPhiIndex()]
137  [barrel->getCode().getStrawLayerIndex()] ) {
138 
139  //Element already added - complain!
140  ATH_MSG_DEBUG("manageBarrelElement: Overriding existing element");
141  }
142 
143  m_baArray
144  [barrel->getCode().isPosZ()]
145  [barrel->getCode().getModuleIndex()]
146  [barrel->getCode().getPhiIndex()]
147  [barrel->getCode().getStrawLayerIndex()]
148  =barrel;
149 
150  // Add the barrel element to the hash vector:
151  if (idHelper) {
152  Identifier id = idHelper->layer_id(barrel->getCode().isPosZ() ? +1 : -1,
153  barrel->getCode().getPhiIndex(),
154  barrel->getCode().getModuleIndex(),
155  barrel->getCode().getStrawLayerIndex());
156  IdentifierHash hashId = idHelper->straw_layer_hash(id);
157  if (hashId.is_valid()) {
158  if (m_trtcoll.size() <= hashId) {
159  m_trtcoll.resize(static_cast<unsigned int>(hashId) + 1);
160  }
161  if (m_trtcoll[hashId]) {
162  //Element already added - complain!
163  ATH_MSG_DEBUG("manageBarrelElement: Overriding existing element for hashID");
164  }
165  m_trtcoll[hashId]=barrel;
166  }
167  else {
168  ATH_MSG_WARNING("manageBarrelElement: Invalid identifier");
169  }
170  }
171  }
172 
174  {
175  if (m_ecArray
176  [endcap->getCode().isPosZ()]
177  [endcap->getCode().getWheelIndex()]
178  [endcap->getCode().getStrawLayerIndex()]
179  [endcap->getCode().getPhiIndex()] ) {
180  //Element already added - complain!
181  ATH_MSG_WARNING("manageEndcapElement: Overriding existing element");
182  }
183 
184  m_ecArray
185  [endcap->getCode().isPosZ()]
186  [endcap->getCode().getWheelIndex()]
187  [endcap->getCode().getStrawLayerIndex()]
188  [endcap->getCode().getPhiIndex()]
189  =endcap;
190 
191  if (idHelper) {
192  Identifier id = idHelper->layer_id(endcap->getCode().isPosZ() ? +2 : -2,
193  endcap->getCode().getPhiIndex(),
194  endcap->getCode().getWheelIndex(),
195  endcap->getCode().getStrawLayerIndex());
196 
197  IdentifierHash hashId = idHelper->straw_layer_hash(id);
198  if (hashId.is_valid()) {
199  if (m_trtcoll.size() <= hashId) {
200  m_trtcoll.resize(static_cast<unsigned int>(hashId) + 1);
201  }
202  if (m_trtcoll[hashId]) {
203  //Element already added - complain!
204  ATH_MSG_DEBUG("manageEndcapElement: Overriding existing element for hashID");
205  }
206  m_trtcoll[hashId]=endcap;
207  } else {
208  ATH_MSG_WARNING("manageEndcapElement: Invalid identifier");
209  }
210  }
211  }
212 
214  {
215  m_trtcoll.clear();
216  for (auto & ec : m_baArray) {
217  for (auto & mod : ec) {
218  for (auto & phi : mod) {
219  for (auto & sLay : phi) {
220  sLay = nullptr;
221  }
222  }
223  }
224  }
225  for (auto & ec : m_ecArray) {
226  for (auto & whe : ec) {
227  for (auto & sLay : whe) {
228  for(auto & phi : sLay) {
229  phi = nullptr;
230  }
231  }
232  }
233  }
234  }
235 
236 }
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:494
InDetDD::TRT_DetElementContainer::m_ecArray
TRT_EndcapElement * m_ecArray[2][NWHEELMAX][NSTRAWLAYMAXEC][NPHIMAX]
Definition: TRT_DetElementContainer.h:85
InDetDD::TRT_BarrelElement
Definition: TRT_BarrelElement.h:43
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
InDetDD::TRT_DetElementContainer::manageEndcapElement
void manageEndcapElement(TRT_EndcapElement *endcap, const TRT_ID *idHelper)
Definition: TRT_DetElementContainer.cxx:173
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
InDetDD::TRT_DetElementContainer::NPHIMAX
@ NPHIMAX
Definition: TRT_DetElementContainer.h:80
TRT_DetElementContainer.h
InDetDD::TRT_EndcapElement
Definition: TRT_EndcapElement.h:43
InDetDD::TRT_DetElementContainer::addEndcapElement
void addEndcapElement(TRT_EndcapElement *element)
Definition: TRT_DetElementContainer.cxx:110
InDetDD::TRT_DetElementContainer::manageBarrelElement
void manageBarrelElement(TRT_BarrelElement *barrel, const TRT_ID *idHelper)
Definition: TRT_DetElementContainer.cxx:131
InDetDD::TRT_DetElementContainer::clear
void clear()
Definition: TRT_DetElementContainer.cxx:213
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::NSTRAWLAYMAXBR
@ NSTRAWLAYMAXBR
Definition: TRT_DetElementContainer.h:81
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 (??)
InDetDD::TRT_DetElementContainer::NSTRAWLAYMAXEC
@ NSTRAWLAYMAXEC
Definition: TRT_DetElementContainer.h:82
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
InDetDD::TRT_DetElementContainer::NWHEELMAX
@ NWHEELMAX
Definition: TRT_DetElementContainer.h:79
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
DataVector::clear
void clear()
Erase all the elements in the collection.
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:44
DataVector::resize
void resize(size_type sz)
Resizes the collection to the specified number of elements.
InDetDD::TRT_DetElementContainer::m_trtcoll
TRT_DetElementCollection m_trtcoll
Definition: TRT_DetElementContainer.h:75
InDetDD::TRT_DetElementContainer::NMODMAX
@ NMODMAX
Definition: TRT_DetElementContainer.h:78
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
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:84
eflowRec::phiIndex
unsigned int phiIndex(float phi, float binsize)
calculate phi index for a given phi
Definition: EtaPhiLUT.cxx:23
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
TRT_ID
Definition: TRT_ID.h:82
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:39
InDetDD::TRT_DetElementContainer::m_trtnum
const TRT_Numerology * m_trtnum
Definition: TRT_DetElementContainer.h:76
InDetDD::TRT_DetElementContainer::getElements
const TRT_DetElementCollection * getElements() const
Definition: TRT_DetElementContainer.cxx:29
InDetDD::TRT_DetElementCollection
Class to hold collection of TRT detector elements.
Definition: TRT_DetElementCollection.h:26
IdentifierHash
This is a "hash" representation of an Identifier. This encodes a 32 bit index which can be used to lo...
Definition: IdentifierHash.h:25
DataVector::erase
iterator erase(iterator position)
Remove element at a given position.
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:67
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
TRT_ID::straw_layer_hash
IdentifierHash straw_layer_hash(Identifier straw_layer_id) const
straw_layer hash from id - optimized
Definition: TRT_ID.h:744
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
InDetDD::TRT_DetElementContainer::addBarrelElement
void addBarrelElement(TRT_BarrelElement *element)
Definition: TRT_DetElementContainer.cxx:89
Identifier
Definition: IdentifierFieldParser.cxx:14