ATLAS Offline Software
SCT_DetectorManager.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
10 #include "Identifier/Identifier.h"
12 #include "InDetIdentifier/SCT_ID.h"
16 #include "StoreGate/StoreGateSvc.h"
17 
18 #include <iostream>
19 
20 namespace InDetDD {
21 
22  const int FIRST_HIGHER_LEVEL = 2;
23 
24 
26  : SCT_DetectorManager(detStore, "SCT") {}
27 
29  const std::string& name )
31  m_idHelper(nullptr),
32  m_isLogical(false) // Change to true to change the definition of local module corrections
33  {
34  ATH_MSG_VERBOSE("Creating SCT_DetectorManager named " << name);
35  //
36  // Initialized the Identifier helper.
37  //
38  StatusCode sc = detStore->retrieve(m_idHelper, "SCT_ID");
39  if (sc.isFailure()) {
40  ATH_MSG_ERROR("Could not retrieve SCT id helper");
41  }
42  // Initialize the collections.
43  if (m_idHelper) {
47  }
48  }
49 
51  {
52  return m_volume.size();
53  }
54 
55  PVConstLink SCT_DetectorManager::getTreeTop(unsigned int i) const
56  {
57  return m_volume[i];
58  }
59 
60  void SCT_DetectorManager::addTreeTop(PVConstLink vol){
61  m_volume.push_back(vol);
62  }
63 
65  {
66  // NB the id helpers implementation for getting a hash is not optimal.
67  // Essentially does a binary search.
68  // Make sure it is a wafer Id
69  Identifier waferId = m_idHelper->wafer_id(id);
70  IdentifierHash idHash = m_idHelper->wafer_hash(waferId);
71  if (idHash.is_valid()) {
72  return m_elementCollection[idHash];
73  } else {
74  return nullptr;
75  }
76  }
77 
79  {
80  return m_elementCollection[idHash];
81  }
82 
83  SiDetectorElement* SCT_DetectorManager::getDetectorElement(int barrel_endcap, int layer_wheel, int phi_module, int eta_module, int side) const
84  {
85  return getDetectorElement(m_idHelper->wafer_id(barrel_endcap, layer_wheel, phi_module, eta_module, side));
86  }
87 
89  {
90  return &m_elementCollection;
91  }
92 
93  SiDetectorElementCollection::const_iterator SCT_DetectorManager::getDetectorElementBegin() const
94  {
95  return m_elementCollection.begin();
96  }
97 
98  SiDetectorElementCollection::const_iterator SCT_DetectorManager::getDetectorElementEnd() const
99  {
100  return m_elementCollection.end();
101  }
102 
103 
105  {
106  IdentifierHash idHash = element->identifyHash();
107  if (idHash >= m_elementCollection.size())
108  throw std::runtime_error("SCT_DetectorManager: Error adding detector element.");
109  m_elementCollection[idHash] = element;
110  }
111 
113  {
115 
116  // Loop over all elements and set the neighbours
117  for (iter = m_elementCollection.begin(); iter != m_elementCollection.end(); ++iter){
118 
119  SiDetectorElement * element = *iter;
120  if (element) {
121 
122  IdentifierHash idHash = element->identifyHash();
123  IdentifierHash idHashOther;
124 
125  int result;
126  // If no neighbour, result != 0 in which case we leave neighbour as null
127  result = m_idHelper->get_next_in_eta(idHash, idHashOther);
128  if (result==0) element->setNextInEta(m_elementCollection[idHashOther]);
129 
130  result = m_idHelper->get_prev_in_eta(idHash, idHashOther);
131  if (result==0) element->setPrevInEta(m_elementCollection[idHashOther]);
132 
133  result = m_idHelper->get_next_in_phi(idHash, idHashOther);
134  if (result==0) element->setNextInPhi(m_elementCollection[idHashOther]);
135 
136  result = m_idHelper->get_prev_in_phi(idHash, idHashOther);
137  if (result==0) element->setPrevInPhi(m_elementCollection[idHashOther]);
138 
139  result = m_idHelper->get_other_side(idHash, idHashOther);
140  if (result==0) element->setOtherSide(m_elementCollection[idHashOther]);
141  }
142  }
143  }
144 
145 
147  {
148  return m_idHelper;
149  }
150 
151 
153  const Identifier & id,
154  const Amg::Transform3D & delta,
155  FrameType frame,
156  GeoVAlignmentStore* alignStore) const
157  {
158 
159  if (level == 0) { // 0 - At the element level
160 
161  // We retrieve it via a hashId.
162  IdentifierHash idHash = m_idHelper->wafer_hash(id);
163  if (!idHash.is_valid()) return false;
164 
165  if (frame == InDetDD::global) { // global shift
166  // Its a global transform
167  return setAlignableTransformGlobalDelta(m_alignableTransforms[idHash].get(), delta, alignStore);
168 
169  } else if (frame == InDetDD::local) { // local shift
170 
171  SiDetectorElement * element = m_elementCollection[idHash];
172  if (!element) return false;
173 
174 
175  // Its a local transform
176  //See header file for definition of m_isLogical
177  if( m_isLogical ){
178  //Ensure cache is up to date and use the alignment corrected local to global transform
179  element->setCache();
180  return setAlignableTransformLocalDelta(m_alignableTransforms[idHash].get(), element->transform(), delta, alignStore);
181  } else
182  //Use default local to global transform
183  return setAlignableTransformLocalDelta(m_alignableTransforms[idHash].get(), element->defTransform(), delta, alignStore);
184 
185  } else {
186  // other not supported
187  ATH_MSG_WARNING("Frames other than global or local are not supported.");
188  return false;
189  }
190 
191  } else if (level == 1) { // module level
192 
193  // We retrieve it via a hashId.
194  IdentifierHash idHash = m_idHelper->wafer_hash(id);
195  if (!idHash.is_valid()) return false;
196 
197  int idModuleHash = idHash / 2;
198 
199  if (idHash%2) {
200  ATH_MSG_WARNING("Side 1 wafer id used for module id");
201  return false;
202  }
203 
204  if (frame == InDetDD::global) { // global shift
205  // Its a global transform
206  return setAlignableTransformGlobalDelta(m_moduleAlignableTransforms[idModuleHash].get(), delta, alignStore);
207  } else if (frame == InDetDD::local) { // local shift
208  SiDetectorElement * element = m_elementCollection[idHash];
209  if (!element) return false;
210 
211  // Its a local transform
212  //See header file for definition of m_isLogical
213  if( m_isLogical ){
214  //Ensure cache is up to date and use the alignment corrected local to global transform
215  element->setCache();
216  return setAlignableTransformLocalDelta(m_moduleAlignableTransforms[idModuleHash].get(), element->moduleTransform(), delta, alignStore);
217  } else
218  //Use default local to global transform
219  return setAlignableTransformLocalDelta(m_moduleAlignableTransforms[idModuleHash].get(), element->defModuleTransform(), delta, alignStore);
220 
221  } else {
222  // other not supported
223  ATH_MSG_WARNING("Frames other than global or local are not supported.");
224  return false;
225  }
226 
227  } else { // higher level
228 
229  if (frame != InDetDD::global) {
230  ATH_MSG_WARNING("Non global shift at higher levels is not supported.");
231  return false;
232  }
233 
234  int index = level - FIRST_HIGHER_LEVEL; // level 0 and 1 is treated separately.
235  if (index >= static_cast<int>(m_higherAlignableTransforms.size())) return false;
236 
237  // We retrieve it from a map.
238  AlignableTransformMap::const_iterator iter;
239  iter = m_higherAlignableTransforms[index].find(id);
240  if (iter == m_higherAlignableTransforms[index].end()) return false;
241 
242  // Its a global transform
243  return setAlignableTransformGlobalDelta((iter->second).get(), delta, alignStore);
244  }
245 
246  }
247 
249  const Identifier & id,
250  GeoAlignableTransform *transform,
251  const GeoVPhysVol * child)
252  {
253  if (m_idHelper) {
254 
255  const GeoVFullPhysVol * childFPV = dynamic_cast<const GeoVFullPhysVol *>(child);
256  if (!childFPV) {
257  ATH_MSG_ERROR("Child of alignable transform is not a full physical volume");
258  } else {
259  addAlignableTransform (level, id, transform, childFPV);
260  }
261  }
262  }
263 
265  const Identifier & id,
266  GeoAlignableTransform *transform,
267  const GeoVFullPhysVol * child)
268  {
269  if (m_idHelper) {
270  if (level == 0) {
271  // Element
272  IdentifierHash idHash = m_idHelper->wafer_hash(id);
273  if (idHash.is_valid()) {
274  m_alignableTransforms[idHash] = std::make_unique<ExtendedAlignableTransform>(transform, child);
275  }
276  } else if (level == 1) {
277  // Module
278  IdentifierHash idHash = m_idHelper->wafer_hash(id);
279  if (idHash.is_valid()) {
280  m_moduleAlignableTransforms[idHash/2] = std::make_unique<ExtendedAlignableTransform>(transform, child);
281  }
282 
283  } else {
284 
285  // Higher levels are saved in a map. NB level=0,1 is treated above.
286  int index = level - FIRST_HIGHER_LEVEL; // level 0 and 1 is treated separately.
287  if (index >= static_cast<int>(m_higherAlignableTransforms.size())) m_higherAlignableTransforms.resize(index+1);
288  m_higherAlignableTransforms[index][id] = std::make_unique<ExtendedAlignableTransform>(transform, child);
289  }
290  }
291  }
292 
293  bool
295  {
296  return getIdHelper()->is_sct(id);
297  }
298 
299 
301  {
302  return dynamic_cast<const SCT_ModuleSideDesign *>(getDesign(i));
303  }
304 
305  // New global alignment folders
306  bool SCT_DetectorManager::processGlobalAlignment(const std::string & key, int level, FrameType frame,
307  const CondAttrListCollection* obj, GeoVAlignmentStore* alignStore) const
308  {
309  ATH_MSG_INFO("Processing new global alignment containers with key " << key << " in the " << frame << " frame at level ");
310 
311  const CondAttrListCollection* atrlistcol=obj;
312  if(atrlistcol==nullptr and m_detStore->retrieve(atrlistcol,key)!=StatusCode::SUCCESS) {
313  ATH_MSG_WARNING("Cannot find new global align Container for key "
314  << key << " - no new global alignment ");
315  return false;
316  }
317 
318  bool alignmentChange = false;
320 
321  // loop over objects in collection
322  for (CondAttrListCollection::const_iterator citr=atrlistcol->begin(); citr!=atrlistcol->end();++citr) {
323  const coral::AttributeList& atrlist=citr->second;
324  // SCT manager, therefore ignore all that is not a SCT Identifier
325  if (atrlist["det"].data<int>()!=2) continue;
326 
327  ident = getIdHelper()->wafer_id(atrlist["bec"].data<int>(),
328  atrlist["layer"].data<int>(),
329  atrlist["ring"].data<int>(),
330  atrlist["sector"].data<int>(),
331  0); // The last is the module side which is at this ident-level always the 0-side
332 
333  // construct new transform
334  // Order of rotations is defined as around z, then y, then x.
335  Amg::Translation3D newtranslation(atrlist["Tx"].data<float>(),atrlist["Ty"].data<float>(),atrlist["Tz"].data<float>());
336  Amg::Transform3D newtrans = newtranslation * Amg::RotationMatrix3D::Identity();
337  newtrans *= Amg::AngleAxis3D(atrlist["Rz"].data<float>()*CLHEP::mrad, Amg::Vector3D(0.,0.,1.));
338  newtrans *= Amg::AngleAxis3D(atrlist["Ry"].data<float>()*CLHEP::mrad, Amg::Vector3D(0.,1.,0.));
339  newtrans *= Amg::AngleAxis3D(atrlist["Rx"].data<float>()*CLHEP::mrad, Amg::Vector3D(1.,0.,0.));
340 
341  ATH_MSG_DEBUG("New global DB -- channel: " << citr->first
342  << " ,det: " << atrlist["det"].data<int>()
343  << " ,bec: " << atrlist["bec"].data<int>()
344  << " ,layer: " << atrlist["layer"].data<int>()
345  << " ,ring: " << atrlist["ring"].data<int>()
346  << " ,sector: " << atrlist["sector"].data<int>()
347  << " ,Tx: " << atrlist["Tx"].data<float>()
348  << " ,Ty: " << atrlist["Ty"].data<float>()
349  << " ,Tz: " << atrlist["Tz"].data<float>()
350  << " ,Rx: " << atrlist["Rx"].data<float>()
351  << " ,Ry: " << atrlist["Ry"].data<float>()
352  << " ,Rz: " << atrlist["Rz"].data<float>());
353 
354  // Set the new transform; Will replace existing one with updated transform
356  ident,
357  newtrans,
358  frame,
359  alignStore);
360 
361  if (!status) {
362  ATH_MSG_DEBUG("Cannot set AlignableTransform for identifier."
363  << getIdHelper()->show_to_string(ident)
364  << " at level " << level << " for new global DB ");
365  }
366 
367  alignmentChange = (alignmentChange || status);
368  }
369  return alignmentChange;
370  }
371 
373  const std::string &, InDetDD::AlignFolderType) const {
374  return false;
375 }
376 
377 bool SCT_DetectorManager::processSpecialAlignment(const std::string& /*key*/,
378  const CondAttrListCollection* /*obj*/,
379  GeoVAlignmentStore* /*alignStore*/) const {
380  return false;
381 
382 }
383 
384  void SCT_DetectorManager::addMotherDesign(std::unique_ptr<const SCT_ModuleSideDesign>&& motherDesign){
385  m_motherDesigns.push_back(std::move(motherDesign));
386  }
387 
388 } // namespace InDetDD
InDetDD::FrameType
FrameType
Definition: InDetDD_Defs.h:16
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
InDetDD::SCT_DetectorManager::addMotherDesign
void addMotherDesign(std::unique_ptr< const SCT_ModuleSideDesign > &&)
Definition: SCT_DetectorManager.cxx:384
InDetDD::SCT_DetectorManager::m_higherAlignableTransforms
std::vector< AlignableTransformMap > m_higherAlignableTransforms
Definition: SCT_DetectorManager.h:169
InDetDD::SCT_DetectorManager::getNumTreeTops
virtual unsigned int getNumTreeTops() const override
Definition: SCT_DetectorManager.cxx:50
SCT_ID::get_next_in_phi
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:405
CondAttrListCollection::end
const_iterator end() const
Definition: CondAttrListCollection.h:315
SCT_ID.h
This is an Identifier helper class for the SCT subdetector. This class is a factory for creating comp...
get_generator_info.result
result
Definition: get_generator_info.py:21
InDetDD::SCT_DetectorManager
Definition: SCT_DetectorManager.h:49
InDetDD::SiDetectorElement::setOtherSide
void setOtherSide(const SiDetectorElement *element)
For SCT only.
InDetDD::SiDetectorElementCollection
Definition: SiDetectorElementCollection.h:30
CondAttrListCollection.h
This file defines the class for a collection of AttributeLists where each one is associated with a ch...
InDetDD::SCT_DetectorManager::SCT_DetectorManager
SCT_DetectorManager(StoreGateSvc *detStore)
Constructor.
Definition: SCT_DetectorManager.cxx:25
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
AthMsgStreamMacros.h
InDetDD::SiDetectorElement::setPrevInEta
void setPrevInEta(const SiDetectorElement *element)
InDetDD::SCT_DetectorManager::identifierBelongs
virtual bool identifierBelongs(const Identifier &id) const override
Check identifier is for this detector.
Definition: SCT_DetectorManager.cxx:294
InDetDD::SCT_DetectorManager::m_moduleAlignableTransforms
std::vector< std::unique_ptr< ExtendedAlignableTransform > > m_moduleAlignableTransforms
Definition: SCT_DetectorManager.h:171
SCT_ID::get_prev_in_phi
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:395
InDetDD::SCT_DetectorManager::m_motherDesigns
std::vector< std::unique_ptr< const SCT_ModuleSideDesign > > m_motherDesigns
Definition: SCT_DetectorManager.h:173
AtlasDetectorID::is_sct
bool is_sct(Identifier id) const
Definition: AtlasDetectorID.h:770
index
Definition: index.py:1
InDetDD::SCT_ModuleSideDesign
Definition: SCT_ModuleSideDesign.h:40
InDetDD::SiDetectorManager::setAlignableTransformLocalDelta
static bool setAlignableTransformLocalDelta(ExtendedAlignableTransform *extXF, const Amg::Transform3D &localToGlobalXF, const Amg::Transform3D &delta, GeoVAlignmentStore *alignStore=nullptr)
Helper method to set delta transform from a local delta - Amg interface.
Definition: SiDetectorManager.cxx:62
ExtendedAlignableTransform.h
InDetDD::SCT_DetectorManager::m_isLogical
bool m_isLogical
This variable switches the how the local alignment corrections are applied If true they will be calcu...
Definition: SCT_DetectorManager.h:180
InDetDD::SCT_DetectorManager::getDetectorElementBegin
virtual SiDetectorElementCollection::const_iterator getDetectorElementBegin() const override
Definition: SCT_DetectorManager.cxx:93
InDetDD::SCT_DetectorManager::setAlignableTransformDelta
virtual bool setAlignableTransformDelta(int level, const Identifier &id, const Amg::Transform3D &delta, FrameType frame, GeoVAlignmentStore *alignStore) const override
implements the main alignment update for delta transforms in different frames, it translates into the...
Definition: SCT_DetectorManager.cxx:152
InDetDD::SiDetectorElement::setPrevInPhi
void setPrevInPhi(const SiDetectorElement *element)
CondAttrListCollection::begin
const_iterator begin() const
Access to Chan/AttributeList pairs via iterators.
Definition: CondAttrListCollection.h:309
InDetDD::SiDetectorElement::setNextInEta
void setNextInEta(const SiDetectorElement *element)
InDetDD::SCT_DetectorManager::processSpecialAlignment
bool processSpecialAlignment(const std::string &key, InDetDD::AlignFolderType alignfolder) const override
Comply with InDetDetectorManager interface (not implemented for SCT)
Definition: SCT_DetectorManager.cxx:372
InDetDD::SCT_DetectorManager::processGlobalAlignment
virtual bool processGlobalAlignment(const std::string &, int level, FrameType frame, const CondAttrListCollection *obj, GeoVAlignmentStore *alignStore) const override
Process new global DB folders for L1 and L2.
Definition: SCT_DetectorManager.cxx:306
InDetDD::global
@ global
Definition: InDetDD_Defs.h:16
python.PyKernel.AttributeList
AttributeList
Definition: PyKernel.py:36
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
InDetDD::SolidStateDetectorElementBase::setCache
void setCache()
Set/calculate cache values (inline)
InDetDD::SCT_DetectorManager::m_idHelper
const SCT_ID * m_idHelper
Definition: SCT_DetectorManager.h:172
CondAttrListCollection
This class is a collection of AttributeLists where each one is associated with a channel number....
Definition: CondAttrListCollection.h:52
python.SystemOfUnits.mrad
int mrad
Definition: SystemOfUnits.py:112
InDetDD::SCT_DetectorManager::getDetectorElement
virtual SiDetectorElement * getDetectorElement(const Identifier &id) const override
access to individual elements via Identifier
Definition: SCT_DetectorManager.cxx:64
InDetDD::SolidStateDetectorElementBase::identifyHash
virtual IdentifierHash identifyHash() const override final
identifier hash (inline)
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
python.iconfTool.models.loaders.level
level
Definition: loaders.py:20
InDetDD::SCT_DetectorManager::getIdHelper
virtual const SCT_ID * getIdHelper() const override
Definition: SCT_DetectorManager.cxx:146
InDetDD::SiDetectorManager::setAlignableTransformGlobalDelta
static bool setAlignableTransformGlobalDelta(ExtendedAlignableTransform *extXF, const Amg::Transform3D &delta, GeoVAlignmentStore *alignStore=nullptr)
Helper method to set delta transform from a global delta - Amg interface.
Definition: SiDetectorManager.cxx:101
StoreGateSvc::retrieve
StatusCode retrieve(const T *&ptr) const
Retrieve the default object into a const T*.
TRT::Hit::side
@ side
Definition: HitInfo.h:83
InDetDD::SCT_DetectorManager::getDetectorElementCollection
virtual const SiDetectorElementCollection * getDetectorElementCollection() const override
access to whole collectiom
Definition: SCT_DetectorManager.cxx:88
InDetDD::SolidStateDetectorElementBase::defTransform
const Amg::Transform3D defTransform() const
Definition: SolidStateDetectorElementBase.cxx:60
StoreGateSvc
The Athena Transient Store API.
Definition: StoreGateSvc.h:128
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
InDetDD::SiDetectorElement::moduleTransform
const Amg::Transform3D & moduleTransform() const
Module to global frame transform.
Definition: SiDetectorElement.cxx:173
lumiFormat.i
int i
Definition: lumiFormat.py:92
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
InDetDD::SCT_DetectorManager::m_alignableTransforms
std::vector< std::unique_ptr< ExtendedAlignableTransform > > m_alignableTransforms
Definition: SCT_DetectorManager.h:170
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
InDetDD::SiDetectorManager::getDesign
const SiDetectorDesign * getDesign(int i) const
Definition: SiDetectorManager.cxx:146
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
InDetDD::FIRST_HIGHER_LEVEL
const int FIRST_HIGHER_LEVEL
Definition: PixelDetectorManager.cxx:22
SCT_ID::wafer_hash
IdentifierHash wafer_hash(const Identifier &wafer_id) const
wafer hash from id - optimized
Definition: SCT_ID.h:492
SCT_ID::get_other_side
int get_other_side(const IdentifierHash &id, IdentifierHash &other) const
Wafer hash on other side.
Definition: SCT_ID.cxx:435
InDetDD::InDetDetectorManager::m_detStore
StoreGateSvc * m_detStore
Definition: InDetDetectorManager.h:99
IdentifierHash::is_valid
bool is_valid() const
Check if id is in a valid state.
InDetDD::local
@ local
Definition: InDetDD_Defs.h:16
InDetDD::SCT_DetectorManager::addTreeTop
void addTreeTop(PVConstLink vol)
Add tree top.
Definition: SCT_DetectorManager.cxx:60
CLHEPtoEigenConverter.h
InDetDD::SCT_DetectorManager::getSCT_Design
const SCT_ModuleSideDesign * getSCT_Design(int i) const
Access to module design, casts to SCT_ModuleSideDesign.
Definition: SCT_DetectorManager.cxx:300
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
InDetDD::SCT_DetectorManager::m_elementCollection
SiDetectorElementCollection m_elementCollection
Definition: SCT_DetectorManager.h:167
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:191
InDetDD::SCT_DetectorManager::getDetectorElementEnd
virtual SiDetectorElementCollection::const_iterator getDetectorElementEnd() const override
Definition: SCT_DetectorManager.cxx:98
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
SCT_ID::wafer_hash_max
size_type wafer_hash_max(void) const
Definition: SCT_ID.cxx:639
IdentifierHash.h
InDetDD::SCT_DetectorManager::m_volume
std::vector< PVConstLink > m_volume
Definition: SCT_DetectorManager.h:166
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
SiDetectorElementCollection.h
InDetDD::SiDetectorElement::defModuleTransform
Amg::Transform3D defModuleTransform() const
Default module to global frame transform, ie with no misalignment.
Definition: SiDetectorElement.cxx:179
TRT::Hit::ident
@ ident
Definition: HitInfo.h:77
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
SiDetectorElement.h
SCT_ID::get_prev_in_eta
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:415
SCT_ID::get_next_in_eta
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:425
InDetDD::SCT_DetectorManager::getTreeTop
virtual PVConstLink getTreeTop(unsigned int i) const override
Definition: SCT_DetectorManager.cxx:55
InDetDD::SiDetectorElement::setNextInPhi
void setNextInPhi(const SiDetectorElement *element)
DeMoScan.index
string index
Definition: DeMoScan.py:362
SCT_ID
Definition: SCT_ID.h:68
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
CondAttrListCollection::const_iterator
ChanAttrListMap::const_iterator const_iterator
Definition: CondAttrListCollection.h:63
InDetDD
Message Stream Member.
Definition: FakeTrackBuilder.h:8
InDetDD::SCT_DetectorManager::addAlignableTransform
virtual void addAlignableTransform(int level, const Identifier &id, GeoAlignableTransform *xf, const GeoVFullPhysVol *child)
Add alignable transforms. No access to these, they will be changed by manager:
Definition: SCT_DetectorManager.cxx:264
Amg::Translation3D
Eigen::Translation< double, 3 > Translation3D
Definition: GeoPrimitives.h:44
InDetDD::SCT_DetectorManager::addDetectorElement
virtual void addDetectorElement(SiDetectorElement *element) override
Add elememts during construction.
Definition: SCT_DetectorManager.cxx:104
get
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition: hcg.cxx:127
InDetDD::SiDetectorManager
Definition: SiDetectorManager.h:60
Amg::AngleAxis3D
Eigen::AngleAxisd AngleAxis3D
Definition: GeoPrimitives.h:45
merge.status
status
Definition: merge.py:17
SCT_ID::wafer_id
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module, int side) const
For a single side of module.
Definition: SCT_ID.h:464
SCT_DetectorManager.h
IdentifierHash
Definition: IdentifierHash.h:38
python.PyAthena.obj
obj
Definition: PyAthena.py:135
StoreGateSvc.h
InDetDD::AlignFolderType
AlignFolderType
Definition: InDetDD_Defs.h:19
InDetDD::SolidStateDetectorElementBase::transform
virtual const Amg::Transform3D & transform() const override final
Return local to global transform.
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
InDetDD::SCT_DetectorManager::initNeighbours
virtual void initNeighbours() override
Initialize the neighbours. This can only be done when all elements are built.
Definition: SCT_DetectorManager.cxx:112