Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
SCT_DetectorManager.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 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,
30  const bool doEndcapEtaNeighbour )
32  m_idHelper(nullptr),
33  m_isLogical(false), // Change to true to change the definition of local module corrections
34  m_doEndcapEtaNeighbour(doEndcapEtaNeighbour)
35  {
36  ATH_MSG_VERBOSE("Creating SCT_DetectorManager named " << name);
37  //
38  // Initialized the Identifier helper.
39  //
40  StatusCode sc = detStore->retrieve(m_idHelper, "SCT_ID");
41  if (sc.isFailure()) {
42  ATH_MSG_ERROR("Could not retrieve SCT id helper");
43  }
44  // Initialize the collections.
45  if (m_idHelper) {
49  }
50  }
51 
53  {
54  return m_volume.size();
55  }
56 
57  PVConstLink SCT_DetectorManager::getTreeTop(unsigned int i) const
58  {
59  return m_volume[i];
60  }
61 
62  void SCT_DetectorManager::addTreeTop(const PVConstLink& vol){
63  m_volume.push_back(vol);
64  }
65 
67  {
68  // NB the id helpers implementation for getting a hash is not optimal.
69  // Essentially does a binary search.
70  // Make sure it is a wafer Id
71  Identifier waferId = m_idHelper->wafer_id(id);
72  IdentifierHash idHash = m_idHelper->wafer_hash(waferId);
73  if (idHash.is_valid()) {
74  return m_elementCollection[idHash];
75  } else {
76  return nullptr;
77  }
78  }
79 
81  {
82  return m_elementCollection[idHash];
83  }
84 
85  SiDetectorElement* SCT_DetectorManager::getDetectorElement(int barrel_endcap, int layer_wheel, int phi_module, int eta_module, int side) const
86  {
87  return getDetectorElement(m_idHelper->wafer_id(barrel_endcap, layer_wheel, phi_module, eta_module, side));
88  }
89 
91  {
92  return &m_elementCollection;
93  }
94 
95  SiDetectorElementCollection::const_iterator SCT_DetectorManager::getDetectorElementBegin() const
96  {
97  return m_elementCollection.begin();
98  }
99 
100  SiDetectorElementCollection::const_iterator SCT_DetectorManager::getDetectorElementEnd() const
101  {
102  return m_elementCollection.end();
103  }
104 
105 
107  {
108  IdentifierHash idHash = element->identifyHash();
109  if (idHash >= m_elementCollection.size())
110  throw std::runtime_error("SCT_DetectorManager: Error adding detector element.");
111  m_elementCollection[idHash] = element;
112  }
113 
115  {
117 
118  // Loop over all elements and set the neighbours
119  for (iter = m_elementCollection.begin(); iter != m_elementCollection.end(); ++iter){
120 
121  SiDetectorElement * element = *iter;
122  if (element) {
123 
124  IdentifierHash idHash = element->identifyHash();
125  IdentifierHash idHashOther;
126 
127  int result;
128  // If no neighbour, result != 0 in which case we leave neighbour as null
129  if(element->isBarrel()){
130  result = m_idHelper->get_next_in_eta(idHash, idHashOther);
131  if (result==0) element->setNextInEta(m_elementCollection[idHashOther]);
132  }
133  else if(m_doEndcapEtaNeighbour){
134  // In endcaps the neighbours cannot be found with id+/-1, therefore we cannot rely on SCT_ID and need
135  // a dedicated search, considering only neighbour at larger radius (compatible wih outgoing particle)
136  result = getStripEndcapEtaNeighbour(element, idHashOther, false);
137  if(result==0) element->setNextInEta(m_elementCollection[idHashOther]);
138 
139  // In ITk strip endcap, when we move from eta_module=9 to eta_module=10 we have change of module
140  // granularity in phi: twice more module in eta_module=10, therefore for module at eta_module=9
141  // and phi_module=phi we have two neighbours at larger radius: both at eta_module=10, but one with
142  // phi_module=2*phi the other with phi_module=2*phi+1, for completeness we store this neighbour in
143  // "PrevInEta" even if it is a misnomer in this case
144  if( m_idHelper->eta_module(element->identify())==9 ){
145  result = getStripEndcapEtaNeighbour(element, idHashOther, true);
146  if(result==0) element->setPrevInEta(m_elementCollection[idHashOther]);
147  }
148  }
149 
150  result = m_idHelper->get_prev_in_eta(idHash, idHashOther);
151  if (result==0) element->setPrevInEta(m_elementCollection[idHashOther]);
152 
153  result = m_idHelper->get_next_in_phi(idHash, idHashOther);
154  if (result==0) element->setNextInPhi(m_elementCollection[idHashOther]);
155 
156  result = m_idHelper->get_prev_in_phi(idHash, idHashOther);
157  if (result==0) element->setPrevInPhi(m_elementCollection[idHashOther]);
158 
159  result = m_idHelper->get_other_side(idHash, idHashOther);
160  if (result==0) element->setOtherSide(m_elementCollection[idHashOther]);
161  }
162  }
163  }
164 
166  IdentifierHash& idHashNeighbour,
167  const bool phi_plus_one) const
168 {
169  // Check we are well in strip endcap
170  if( !(element->isSCT() && element->isEndcap()) ) return 1;
171 
172  // Now we try to find a neighbour at larger radius
173  Identifier id = element->identify();
174  int bec = m_idHelper->barrel_ec(id);
175  int layer_disk = m_idHelper->layer_disk(id);
176  int phi_module = m_idHelper->phi_module(id);
177  int eta_module = m_idHelper->eta_module(id);
178  int side = m_idHelper->side(id);
179 
180  // We want to find neighbour only for elements on "main" side
181  // since the space points are made from trigger cluster (on side 0 for ITk)
182  // and stero cluster (on side 1 for ITk)
183  if(element->isStereo()) return 1;
184 
185  // Most of the time we want to find neighbours in same phi
186  // but in transition region (eta_module 9->10) the module granularity in phi changes
187  // we have to look for two neighours, at: 2*phi and 2*phi+1
188  int target_phi = phi_module;
189  if (eta_module==9) target_phi = (phi_plus_one)? 2*phi_module+1 : 2*phi_module;
190 
191  // Brute force search, loop on all elements to find a neighbour
192  for(const SiDetectorElement* other_element : m_elementCollection){
193 
194  Identifier other_id = other_element->identify();
195 
196  // To speed up the search, screening firt on bec, then layer_disk, etc...
197  int other_bec = m_idHelper->barrel_ec(other_id);
198  if(other_bec != bec) continue;
199 
200  int other_layer_disk = m_idHelper->layer_disk(other_id);
201  if(other_layer_disk != layer_disk) continue;
202 
203  int other_phi_module = m_idHelper->phi_module(other_id);
204  if(other_phi_module != target_phi) continue;
205 
206  // We keep only neighbour at eta_module+1 (larger radius)
207  int other_eta_module = m_idHelper->eta_module(other_id);
208  if( (other_eta_module-eta_module) != 1 ) continue;
209 
210  // We keep only neighbour on stereo side (side=1 for ITk)
211  int other_side = m_idHelper->side(other_id);
212  if(other_side==side) continue;
213 
214  // If we are here, we found it!
215  idHashNeighbour = other_element->identifyHash();
216  ATH_MSG_VERBOSE(__FUNCTION__<<"found strip endcap neighbour for id="<<id<<" neigh="<<other_id
217  <<" eta:"<<eta_module<<" "<<other_eta_module);
218  return 0;
219  }
220 
221  return 1;
222 }
223 
225  {
226  return m_idHelper;
227  }
228 
229 
231  const Identifier & id,
232  const Amg::Transform3D & delta,
233  FrameType frame,
234  GeoVAlignmentStore* alignStore) const
235  {
236 
237  if (level == 0) { // 0 - At the element level
238 
239  // We retrieve it via a hashId.
240  IdentifierHash idHash = m_idHelper->wafer_hash(id);
241  if (!idHash.is_valid()) return false;
242 
243  if (frame == InDetDD::global) { // global shift
244  // Its a global transform
245  return setAlignableTransformGlobalDelta(m_alignableTransforms[idHash].get(), delta, alignStore);
246 
247  } else if (frame == InDetDD::local) { // local shift
248 
249  SiDetectorElement * element = m_elementCollection[idHash];
250  if (!element) return false;
251 
252 
253  // Its a local transform
254  //See header file for definition of m_isLogical
255  if( m_isLogical ){
256  //Ensure cache is up to date and use the alignment corrected local to global transform
257  element->setCache();
258  return setAlignableTransformLocalDelta(m_alignableTransforms[idHash].get(), element->transform(), delta, alignStore);
259  } else
260  //Use default local to global transform
261  return setAlignableTransformLocalDelta(m_alignableTransforms[idHash].get(), element->defTransform(), delta, alignStore);
262 
263  } else {
264  // other not supported
265  ATH_MSG_WARNING("Frames other than global or local are not supported.");
266  return false;
267  }
268 
269  } else if (level == 1) { // module level
270 
271  // We retrieve it via a hashId.
272  IdentifierHash idHash = m_idHelper->wafer_hash(id);
273  if (!idHash.is_valid()) return false;
274 
275  int idModuleHash = idHash / 2;
276 
277  if (idHash%2) {
278  ATH_MSG_WARNING("Side 1 wafer id used for module id");
279  return false;
280  }
281 
282  if (frame == InDetDD::global) { // global shift
283  // Its a global transform
284  return setAlignableTransformGlobalDelta(m_moduleAlignableTransforms[idModuleHash].get(), delta, alignStore);
285  } else if (frame == InDetDD::local) { // local shift
286  SiDetectorElement * element = m_elementCollection[idHash];
287  if (!element) return false;
288 
289  // Its a local transform
290  //See header file for definition of m_isLogical
291  if( m_isLogical ){
292  //Ensure cache is up to date and use the alignment corrected local to global transform
293  element->setCache();
294  return setAlignableTransformLocalDelta(m_moduleAlignableTransforms[idModuleHash].get(), element->moduleTransform(), delta, alignStore);
295  } else
296  //Use default local to global transform
297  return setAlignableTransformLocalDelta(m_moduleAlignableTransforms[idModuleHash].get(), element->defModuleTransform(), delta, alignStore);
298 
299  } else {
300  // other not supported
301  ATH_MSG_WARNING("Frames other than global or local are not supported.");
302  return false;
303  }
304 
305  } else { // higher level
306 
307  if (frame != InDetDD::global) {
308  ATH_MSG_WARNING("Non global shift at higher levels is not supported.");
309  return false;
310  }
311 
312  int index = level - FIRST_HIGHER_LEVEL; // level 0 and 1 is treated separately.
313  if (index >= static_cast<int>(m_higherAlignableTransforms.size())) return false;
314 
315  // We retrieve it from a map.
316  AlignableTransformMap::const_iterator iter;
317  iter = m_higherAlignableTransforms[index].find(id);
318  if (iter == m_higherAlignableTransforms[index].end()) return false;
319 
320  // Its a global transform
321  return setAlignableTransformGlobalDelta((iter->second).get(), delta, alignStore);
322  }
323 
324  }
325 
327  const Identifier & id,
328  GeoAlignableTransform *transform,
329  const GeoVPhysVol * child)
330  {
331  if (m_idHelper) {
332 
333  const GeoVFullPhysVol * childFPV = dynamic_cast<const GeoVFullPhysVol *>(child);
334  if (!childFPV) {
335  ATH_MSG_ERROR("Child of alignable transform is not a full physical volume");
336  } else {
337  addAlignableTransform (level, id, transform, childFPV);
338  }
339  }
340  }
341 
343  const Identifier & id,
344  GeoAlignableTransform *transform,
345  const GeoVFullPhysVol * child)
346  {
347  if (m_idHelper) {
348  if (level == 0) {
349  // Element
350  IdentifierHash idHash = m_idHelper->wafer_hash(id);
351  if (idHash.is_valid()) {
352  m_alignableTransforms[idHash] = std::make_unique<ExtendedAlignableTransform>(transform, child);
353  }
354  } else if (level == 1) {
355  // Module
356  IdentifierHash idHash = m_idHelper->wafer_hash(id);
357  if (idHash.is_valid()) {
358  m_moduleAlignableTransforms[idHash/2] = std::make_unique<ExtendedAlignableTransform>(transform, child);
359  }
360 
361  } else {
362 
363  // Higher levels are saved in a map. NB level=0,1 is treated above.
364  int index = level - FIRST_HIGHER_LEVEL; // level 0 and 1 is treated separately.
365  if (index >= static_cast<int>(m_higherAlignableTransforms.size())) m_higherAlignableTransforms.resize(index+1);
366  m_higherAlignableTransforms[index][id] = std::make_unique<ExtendedAlignableTransform>(transform, child);
367  }
368  }
369  }
370 
371  bool
373  {
374  return getIdHelper()->is_sct(id);
375  }
376 
377 
379  {
380  return dynamic_cast<const SCT_ModuleSideDesign *>(getDesign(i));
381  }
382 
383  // New global alignment folders
384  bool SCT_DetectorManager::processGlobalAlignment(const std::string & key, int level, FrameType frame,
385  const CondAttrListCollection* obj, GeoVAlignmentStore* alignStore) const
386  {
387  ATH_MSG_INFO("Processing new global alignment containers with key " << key << " in the " << frame << " frame at level ");
388 
389  const CondAttrListCollection* atrlistcol=obj;
390  if(atrlistcol==nullptr and m_detStore->retrieve(atrlistcol,key)!=StatusCode::SUCCESS) {
391  ATH_MSG_WARNING("Cannot find new global align Container for key "
392  << key << " - no new global alignment ");
393  return false;
394  }
395 
396  bool alignmentChange = false;
398 
399  // loop over objects in collection
400  for (CondAttrListCollection::const_iterator citr=atrlistcol->begin(); citr!=atrlistcol->end();++citr) {
401  const coral::AttributeList& atrlist=citr->second;
402  // SCT manager, therefore ignore all that is not a SCT Identifier
403  if (atrlist["det"].data<int>()!=2) continue;
404 
405  ident = getIdHelper()->wafer_id(atrlist["bec"].data<int>(),
406  atrlist["layer"].data<int>(),
407  atrlist["ring"].data<int>(),
408  atrlist["sector"].data<int>(),
409  0); // The last is the module side which is at this ident-level always the 0-side
410 
411  // construct new transform
412  // Order of rotations is defined as around z, then y, then x.
413  Amg::Translation3D newtranslation(atrlist["Tx"].data<float>(),atrlist["Ty"].data<float>(),atrlist["Tz"].data<float>());
414  Amg::Transform3D newtrans = newtranslation * Amg::RotationMatrix3D::Identity();
415  newtrans *= Amg::AngleAxis3D(atrlist["Rz"].data<float>()*CLHEP::mrad, Amg::Vector3D(0.,0.,1.));
416  newtrans *= Amg::AngleAxis3D(atrlist["Ry"].data<float>()*CLHEP::mrad, Amg::Vector3D(0.,1.,0.));
417  newtrans *= Amg::AngleAxis3D(atrlist["Rx"].data<float>()*CLHEP::mrad, Amg::Vector3D(1.,0.,0.));
418 
419  ATH_MSG_DEBUG("New global DB -- channel: " << citr->first
420  << " ,det: " << atrlist["det"].data<int>()
421  << " ,bec: " << atrlist["bec"].data<int>()
422  << " ,layer: " << atrlist["layer"].data<int>()
423  << " ,ring: " << atrlist["ring"].data<int>()
424  << " ,sector: " << atrlist["sector"].data<int>()
425  << " ,Tx: " << atrlist["Tx"].data<float>()
426  << " ,Ty: " << atrlist["Ty"].data<float>()
427  << " ,Tz: " << atrlist["Tz"].data<float>()
428  << " ,Rx: " << atrlist["Rx"].data<float>()
429  << " ,Ry: " << atrlist["Ry"].data<float>()
430  << " ,Rz: " << atrlist["Rz"].data<float>());
431 
432  // Set the new transform; Will replace existing one with updated transform
434  ident,
435  newtrans,
436  frame,
437  alignStore);
438 
439  if (!status) {
440  ATH_MSG_DEBUG("Cannot set AlignableTransform for identifier."
441  << getIdHelper()->show_to_string(ident)
442  << " at level " << level << " for new global DB ");
443  }
444 
445  alignmentChange = (alignmentChange || status);
446  }
447  return alignmentChange;
448  }
449 
451  const std::string &, InDetDD::AlignFolderType) const {
452  return false;
453 }
454 
455 bool SCT_DetectorManager::processSpecialAlignment(const std::string& /*key*/,
456  const CondAttrListCollection* /*obj*/,
457  GeoVAlignmentStore* /*alignStore*/) const {
458  return false;
459 
460 }
461 
462  void SCT_DetectorManager::addMotherDesign(std::unique_ptr<const SCT_ModuleSideDesign>&& motherDesign){
463  m_motherDesigns.push_back(std::move(motherDesign));
464  }
465 
466 } // 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:462
InDetDD::SCT_DetectorManager::m_higherAlignableTransforms
std::vector< AlignableTransformMap > m_higherAlignableTransforms
Definition: SCT_DetectorManager.h:176
InDetDD::SCT_DetectorManager::getNumTreeTops
virtual unsigned int getNumTreeTops() const override
Definition: SCT_DetectorManager.cxx:52
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:413
InDetDD::SiDetectorElement::isEndcap
bool isEndcap() const
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::SCT_DetectorManager::getStripEndcapEtaNeighbour
int getStripEndcapEtaNeighbour(const SiDetectorElement *element, IdentifierHash &idHashNeighbour, const bool phi_plus_one=false) const
Definition: SCT_DetectorManager.cxx:165
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:372
InDetDD::SCT_DetectorManager::m_moduleAlignableTransforms
std::vector< std::unique_ptr< ExtendedAlignableTransform > > m_moduleAlignableTransforms
Definition: SCT_DetectorManager.h:178
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:403
ParticleGun_SamplingFraction.bec
int bec
Definition: ParticleGun_SamplingFraction.py:89
InDetDD::SCT_DetectorManager::m_motherDesigns
std::vector< std::unique_ptr< const SCT_ModuleSideDesign > > m_motherDesigns
Definition: SCT_DetectorManager.h:180
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:187
InDetDD::SCT_DetectorManager::getDetectorElementBegin
virtual SiDetectorElementCollection::const_iterator getDetectorElementBegin() const override
Definition: SCT_DetectorManager.cxx:95
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:230
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:450
SCT_ID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: SCT_ID.h:728
SCT_ID::phi_module
int phi_module(const Identifier &id) const
Definition: SCT_ID.h:740
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:384
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:179
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:66
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:224
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:90
InDetDD::SolidStateDetectorElementBase::defTransform
const Amg::Transform3D defTransform() const
Definition: SolidStateDetectorElementBase.cxx:60
StoreGateSvc
The Athena Transient Store API.
Definition: StoreGateSvc.h:125
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:85
InDetDD::SCT_DetectorManager::m_alignableTransforms
std::vector< std::unique_ptr< ExtendedAlignableTransform > > m_alignableTransforms
Definition: SCT_DetectorManager.h:177
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
InDetDD::SCT_DetectorManager::addTreeTop
void addTreeTop(const PVConstLink &vol)
Add tree top.
Definition: SCT_DetectorManager.cxx:62
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:443
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
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:378
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
InDetDD::SCT_DetectorManager::m_elementCollection
SiDetectorElementCollection m_elementCollection
Definition: SCT_DetectorManager.h:174
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:227
InDetDD::SCT_DetectorManager::getDetectorElementEnd
virtual SiDetectorElementCollection::const_iterator getDetectorElementEnd() const override
Definition: SCT_DetectorManager.cxx:100
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
SCT_ID::wafer_hash_max
size_type wafer_hash_max(void) const
Definition: SCT_ID.cxx:645
IdentifierHash.h
InDetDD::SCT_DetectorManager::m_volume
std::vector< PVConstLink > m_volume
Definition: SCT_DetectorManager.h:173
SCT_ID::layer_disk
int layer_disk(const Identifier &id) const
Definition: SCT_ID.h:734
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
InDetDD::SiDetectorElement::isBarrel
bool isBarrel() const
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:423
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:433
InDetDD::SCT_DetectorManager::getTreeTop
virtual PVConstLink getTreeTop(unsigned int i) const override
Definition: SCT_DetectorManager.cxx:57
InDetDD::SiDetectorElement::setNextInPhi
void setNextInPhi(const SiDetectorElement *element)
DeMoScan.index
string index
Definition: DeMoScan.py:364
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:342
SCT_ID::eta_module
int eta_module(const Identifier &id) const
Definition: SCT_ID.h:746
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:106
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
SCT_ID::side
int side(const Identifier &id) const
Definition: SCT_ID.h:752
Amg::AngleAxis3D
Eigen::AngleAxisd AngleAxis3D
Definition: GeoPrimitives.h:45
InDetDD::SiDetectorElement::isSCT
bool isSCT() const
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
This is a "hash" representation of an Identifier. This encodes a 32 bit index which can be used to lo...
Definition: IdentifierHash.h:25
InDetDD::SiDetectorElement::isStereo
bool isStereo() const
Check if it is the stereo side (useful for SCT)
Definition: SiDetectorElement.cxx:300
InDetDD::SCT_DetectorManager::m_doEndcapEtaNeighbour
bool m_doEndcapEtaNeighbour
Definition: SCT_DetectorManager.h:190
python.PyAthena.obj
obj
Definition: PyAthena.py:132
StoreGateSvc.h
InDetDD::AlignFolderType
AlignFolderType
Definition: InDetDD_Defs.h:19
InDetDD::SolidStateDetectorElementBase::identify
virtual Identifier identify() const override final
identifier of this detector element (inline)
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:114
Identifier
Definition: IdentifierFieldParser.cxx:14