ATLAS Offline Software
InDetDetectorManager.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
7 
14 
15 #include <map>
16 
17 namespace InDetDD
18 {
19 
21  : AthMessaging(name+"DetectorManager"),
22  m_alignfoldertype{none},m_detStore(detStore),
23  m_suppressWarnings(false)
24  {
25  setName(name);
26  }
27 
28  // Destructor
30  = default;
31 
32 
34  {
35  return m_version;
36  }
37 
38  const std::string& InDetDetectorManager::getLayout() const
39  {
40  return m_version.layout();
41  }
42 
44  {
46 
47  // Since default alignments are for final layout, Pixel Rome-Initial
48  // layout will result in several (harmless) WARNING message. We suppress these.
49  // Also the SR1 layout produce warnings due to missing parts. We suppress these also.
50  m_suppressWarnings = ( (getName() == "Pixel" &&
51  (version.tag() == "Pixel-01" || version.tag() == "Pixel-DC2-Initial-00"))
52  || version.layout() == "SR1" || version.layout() == "SR1-EndcapC");
53 
54  }
55 
56  void InDetDetectorManager::addChannel(const std::string & key, int level, FrameType frame)
57  {
58  std::string frameStr = "other";
59  if (frame == InDetDD::global) frameStr = "global";
60  if (frame == InDetDD::local) frameStr = "local";
61  ATH_MSG_INFO("Registering alignment channel with key " << key << ", level " << level
62  << ", with frame " << frameStr << ".");
63  m_keys[key] = LevelInfo(level, frame);
64  }
65 
66  void InDetDetectorManager::addFolder(const std::string & key)
67  {
68  m_folders.insert(key);
69  }
70 
71  void InDetDetectorManager::addSpecialFolder(const std::string & key)
72  {
73  m_specialFolders.insert(key);
74  }
75 
76  void InDetDetectorManager::addGlobalFolder(const std::string & key)
77  {
78  m_globalFolders.insert(key);
79  }
80 
82  {
83  m_alignfoldertype = alignfolder;
84  }
85 
86  // Return the level in the hierarchy (user defined) corresponding to the key.
88  {
89  std::map<std::string, LevelInfo>::const_iterator iter;
90  iter = m_keys.find(key);
91  if (iter == m_keys.end()) return s_invalidLevel;
92  return iter->second;
93  }
94 
96  {
97 
98  (void) I; // avoid warning about unused parameter
99 
100  ATH_MSG_DEBUG("AlignmentCallback called ");
101 
102  if (!getIdHelper()) return StatusCode::SUCCESS;
103 
104  bool alignmentChange = false;
105  const AlignInfo &aligninfo = AlignInfo(m_alignfoldertype);
106 
107  // If dummy arguments
108  if (keys.empty()) {
109 
110 
111  // New global aligment folders should be processed first
112  for (const auto & globalFolder : m_globalFolders) {
113 
114  try {
115  bool status = processGlobalAlignmentContainer(globalFolder);
116  alignmentChange = (alignmentChange || status);
117  } catch(std::runtime_error& err) {
118  // keys are empty when running simualtion. It is normal for detector specific aligments not to exist.
119  ATH_MSG_FATAL(err.what());
120  return StatusCode::FAILURE;
121  }
122  }
123 
124  // Regular alignments. Loop through folder keys. Normally only one.
125  for (const auto & folder : m_folders) {
126 
127  try {
129  alignmentChange = (alignmentChange || status);
130  }
131  catch(std::runtime_error& err) {
132  // alignments should always exist so we return fatal if we could not process the alignment for this key
133  ATH_MSG_FATAL(err.what());
134  return StatusCode::FAILURE;
135  }
136  }
137  // Detector specific aligments
138  for (const auto & specialFolder : m_specialFolders) {
139  try {
140  bool status = processSpecialAlignment(specialFolder, aligninfo.AlignFolder());
141  alignmentChange = (alignmentChange || status);
142  } catch(std::runtime_error& err) {
143  // keys are empty when running simualtion. It is normal for detector specific aligments not to exist.
144  ATH_MSG_INFO(err.what());
145  // We continue as detector specific aligments don't always exist.
146  }
147  }
148 
149  } else {
150  // Loop over all the keys.
151  for (std::list<std::string>::const_iterator itr=keys.begin(); itr!=keys.end(); ++itr) {
152 
153  const std::string & key = *itr;
154 
155  ATH_MSG_DEBUG(" Processing call back key " << key);
156 
157  if ( m_globalFolders.find(key) != m_globalFolders.end() ) {
158 
159  try {
160  // New global alignemnts
162  alignmentChange = (alignmentChange || status);
163  } catch(std::runtime_error& err) {
164  // alignments should always exist so we return fatal if we could not process the alignment for this key
165  ATH_MSG_FATAL(err.what());
166  return StatusCode::FAILURE;
167  }
168 
169  } else if ( m_folders.find(key) != m_folders.end() ) {
170 
171  try {
172  // Regular alignemnts
174  alignmentChange = (alignmentChange || status);
175  } catch(std::runtime_error& err) {
176  // alignments should always exist so we return fatal if we could not process the alignment for this key
177  ATH_MSG_FATAL(err.what());
178  return StatusCode::FAILURE;
179  }
180 
181  } else if ( m_specialFolders.find(key) != m_specialFolders.end() ) {
182  try {
183  // Detector specific alignments
184  bool status = processSpecialAlignment(key, aligninfo.AlignFolder());
185  alignmentChange = (alignmentChange || status);
186  }
187  catch(std::runtime_error& err) {
188  // Should always exist if the folder was requested so we return fatal if we could not process the alignment for this key
189  ATH_MSG_FATAL(err.what());
190  return StatusCode::FAILURE;
191  }
192  } else {
193  // Should not be any other keys specified in call back.
194  ATH_MSG_ERROR("Unrecognized key in call back.");
195  return StatusCode::RECOVERABLE;
196  }
197  }
198  }
199 
200  // We invalidate all the elements if at least one alignment changed.
201  if (alignmentChange) {
202  invalidateAll();
203  }
204 
205  return StatusCode::SUCCESS;
206  }
207 
208  StatusCode InDetDetectorManager::align(const RawAlignmentObjects& alignObjects, GeoVAlignmentStore* alignStore) const
209  {
210 
211  ATH_MSG_DEBUG("align() called from an alignment CondAlg");
212  if (!getIdHelper()) return StatusCode::SUCCESS; // To Do: is it really a success?
213 
214  bool alignmentChange = false;
215  // const AlignInfo &aligninfo = AlignInfo(m_alignfoldertype);
216 
217  for(const auto& alignObj : alignObjects) {
218  const std::string& key = alignObj.first;
219 
220  ATH_MSG_DEBUG(" Processing folder " << key);
221 
222  if(m_globalFolders.find(key)!=m_globalFolders.end()) {
223  try {
224  // New global alignemnts
225  const CondAttrListCollection* obj = static_cast<const CondAttrListCollection*>(alignObj.second);
226  bool status = processGlobalAlignmentContainer(key,obj,alignStore);
227  alignmentChange = (alignmentChange || status);
228  } catch(std::runtime_error& err) {
229  // alignments should always exist so we return fatal if we could not process the alignment for this key
230  ATH_MSG_FATAL(err.what());
231  return StatusCode::FAILURE;
232  }
233  }
234  else if(m_folders.find(key)!=m_folders.end()) {
235  try {
236  // Regular alignemnts
237  const AlignableTransformContainer* container = static_cast<const AlignableTransformContainer*>(alignObj.second);
238  bool status = processAlignmentContainer(container,alignStore);
239  alignmentChange = (alignmentChange || status);
240  } catch(std::runtime_error& err) {
241  // alignments should always exist so we return fatal if we could not process the alignment for this key
242  ATH_MSG_FATAL(err.what());
243  return StatusCode::FAILURE;
244  }
245  }
246  else if(m_specialFolders.find(key)!=m_specialFolders.end()) {
247  try {
248  // Detector specific alignments
249  const CondAttrListCollection *obj =
250  static_cast<const CondAttrListCollection*>(alignObj.second);
251  bool status = processSpecialAlignment(key, obj, alignStore);
252  alignmentChange = (alignmentChange || status);
253  }
254  catch(std::runtime_error& err) {
255  // Should always exist if the folder was requested so we return fatal if
256  // we could not process the alignment for this key
257  ATH_MSG_FATAL(err.what());
258  return StatusCode::FAILURE;
259  }
260  }
261  else {
262  // Should not be any other keys specified in raw alignment object.
263  ATH_MSG_ERROR("Unrecognized folder name "<<key<<". Expected names are:");
264  for (const std::string& out:m_globalFolders) ATH_MSG_ERROR("--"<<out);
265  for (const std::string& out:m_folders) ATH_MSG_ERROR("--"<<out);
266  for (const std::string& out:m_specialFolders) ATH_MSG_ERROR("--"<<out);
267 
268  return StatusCode::RECOVERABLE;
269  }
270  }
271  // To Do: custom caching is not going to work in MT
272  /*
273  if(alignmentChange) invalidateAll();
274  */
275 
276  return StatusCode::SUCCESS;
277  }
278 
279  bool InDetDetectorManager::processAlignmentContainer(const std::string & key) const
280  {
281  bool alignmentChange = false;
282 
283  ATH_MSG_DEBUG("Dealing with key as container");
284  const AlignableTransformContainer* container;
285  if (StatusCode::SUCCESS!=m_detStore->retrieve(container, key)) {
286  ATH_MSG_ERROR("Cannot find AlignableTransformContainer for key "
287  << key << " - no misalignment");
288  // This should not occur in normal situations so we force job to abort.
289  throw std::runtime_error("Unable to apply Inner Detector alignments");
290  }
291  // Check if container is empty - this can occur if it is an invalid IOV.
292  if (container->empty()) {
293  ATH_MSG_ERROR("AlignableTransformContainer for key "
294  << key << " is empty. Probably due to out of range IOV");
295  // This should not occur in normal situations so we force job to abort.
296  throw std::runtime_error("Unable to apply Inner Detector alignments.");
297  }
298  // loop over all the AlignableTransform objects in the collection
299  for (const auto *pat : *container) {
300 
301  bool status = processKey(pat->tag(),pat);
302  alignmentChange = (alignmentChange || status);
303  }
304  return alignmentChange;
305  }
306 
307  bool InDetDetectorManager::processAlignmentContainer(const AlignableTransformContainer* container, GeoVAlignmentStore* alignStore) const
308  {
309  bool alignmentChange = false;
310 
311  // Check if container is empty - this can occur if it is an invalid IOV.
312  if (container->empty()) {
313  ATH_MSG_ERROR("AlignableTransformContainer "
314  << " is empty. Probably due to out of range IOV"); // To Do: add key to this printout for making it more informative
315  // This should not occur in normal situations so we force job to abort.
316  throw std::runtime_error("Unable to apply Inner Detector alignments.");
317  }
318  // loop over all the AlignableTransform objects in the collection
319  // use only the last ones.
320  // /Indet/AlignL3/SCTEA9 appear repeatedly in tags of the /Indet/AlignL3 folder
321  std::map<const std::string, const AlignableTransform*> stringToTransform;
322  for (const auto *pat : *container) {
323  stringToTransform[pat->tag()] = pat;
324  }
325  for (const std::pair<const std::string, const AlignableTransform*>& value: stringToTransform) {
326  bool status = processKey(value.first, value.second, alignStore);
327  alignmentChange = (alignmentChange || status);
328  }
329  return alignmentChange;
330  }
331 
332  bool InDetDetectorManager::processKey(const std::string& key,
333  const AlignableTransform* transformCollection,
334  GeoVAlignmentStore* alignStore) const
335  {
336  bool alignmentChange = false;
337 
338  // From the key determine what level in hierarchy we are dealing with.
339  // returns -1 if unrecognized.
340  const LevelInfo & levelInfo = getLevel(key);
341  if (levelInfo.isValid()) {
342  ATH_MSG_VERBOSE("Processing channel: " << key);
343  } else {
344  ATH_MSG_DEBUG("Channel " << key << " not registered in this manager");
345  }
346  // return silently if unrecognised - this can happen in container mode
347  // when a single container holds transforms for both pixel and SCT
348  if (!levelInfo.isValid() ) return false;
349 
350  //Loop over the effected nodes.
351  for (AlignableTransform::AlignTransMem_citr trans_iter = transformCollection->begin();
352  trans_iter != transformCollection->end();
353  ++trans_iter) {
354  ATH_MSG_DEBUG( "Get alignment for identifier "
355  << getIdHelper()->show_to_string(trans_iter->identify())
356  << " at level " << levelInfo.level());
357 
358  // The delta in the conditions DB is not necessarily the same as what is needed in the
359  // alignable transform. At the moment we support global frame, local frame or an alternative frame
360  // The setAlignableTransformDelta method takes care of this correction - this is CLHEP <--> Amg interfaced
361  bool status = setAlignableTransformDelta(levelInfo.level(),
362  trans_iter->identify(),
363  Amg::CLHEPTransformToEigen(trans_iter->transform()),
364  levelInfo.frame(),
365  alignStore);
366 
367  alignmentChange = (alignmentChange || status);
368 
369  if (!status) {
370  if (!identifierBelongs(trans_iter->identify())) {
371  // Its probably OK. Eg /Indet/Align/ID contains alse pixel and sct ids.
372  ATH_MSG_DEBUG("Cannot set AlignableTransform for identifier."
373  << " Probably OK if its /Indet/Align/ID folder. "
374  << getIdHelper()->show_to_string(trans_iter->identify())
375  << " at level " << levelInfo.level());
376  } else {
377  if (m_suppressWarnings) {
378  ATH_MSG_DEBUG("WARNING: Cannot set AlignableTransform for identifier "
379  << getIdHelper()->show_to_string(trans_iter->identify())
380  << " at level " << levelInfo.level());
381  } else {
382  ATH_MSG_WARNING("Cannot set AlignableTransform for identifier "
383  << getIdHelper()->show_to_string(trans_iter->identify())
384  << " at level " << levelInfo.level());
385  ATH_MSG_WARNING("Subsequent WARNINGS will be printed at DEBUG level.");
386  m_suppressWarnings = true;
387  }
388  }
389  }
390  }
391  return alignmentChange;
392  }
393 
394  // We provide a default implementation of any detector specific alignment.
397  GeoVAlignmentStore* alignStore) const
398  {
399  bool alignmentChange = false;
400 
401  ATH_MSG_DEBUG("processing GlobalAlignmentContainer with key: " << key);
402  // From the key determine what level in hierarchy we are dealing with.
403  // returns -1 if unrecognized.
404  const LevelInfo & levelInfo = getLevel(key);
405  if (levelInfo.isValid()) {
406  ATH_MSG_VERBOSE("Processing channel: " << key);
407  } else {
408  ATH_MSG_DEBUG("Channel " << key << " not registered in this manager");
409  }
410  // return silently if unrecognised - this can happen in container mode
411  // when a single container holds transforms for both pixel and SCT
412  if (!levelInfo.isValid() ) return false;
413 
414  // Within detector specific code
415  bool status = processGlobalAlignment(key, levelInfo.level(), levelInfo.frame(), obj, alignStore);
416 
417  alignmentChange = (alignmentChange || status);
418 
419  return alignmentChange;
420 
421  }
422 
423  // We provide a default implementation of any detector specific alignment.
424  bool InDetDetectorManager::processGlobalAlignment(const std::string &, int /*level*/, FrameType /*frame*/,
425  const CondAttrListCollection* /*obj*/, GeoVAlignmentStore* /*alignStore*/) const
426  {
427  return false;
428  }
429 
430 
431  // We provide a default implementation of any detector specific alignment.
433  {
434  return false;
435  }
436 
438 
439 } // namespace InDetDD
InDetDD::FrameType
FrameType
Definition: InDetDD_Defs.h:16
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
InDetDD::InDetDetectorManager::addSpecialFolder
void addSpecialFolder(const std::string &key)
Definition: InDetDetectorManager.cxx:71
CondAttrListCollection.h
This file defines the class for a collection of AttributeLists where each one is associated with a ch...
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
AthMsgStreamMacros.h
InDetDD::InDetDetectorManager::identifierBelongs
virtual bool identifierBelongs(const Identifier &id) const =0
Check identifier is for this detector.
CondMultChanCollection
A CondMultChanCollection is a template class which can hold a collection of T* objects which are inte...
Definition: CondMultChanCollection.h:52
AlignableTransform::AlignTransMem_citr
std::vector< AlignTransMember >::const_iterator AlignTransMem_citr
Definition: AlignableTransform.h:46
InDetDD::InDetDetectorManager::getIdHelper
virtual const AtlasDetectorID * getIdHelper() const =0
InDetDD::RawAlignmentObjects
std::map< std::string, const void * > RawAlignmentObjects
Definition: InDetDetectorManager.h:43
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
InDetDD::InDetDetectorManager::m_suppressWarnings
std::atomic_bool m_suppressWarnings
Definition: InDetDetectorManager.h:100
InDetDD::InDetDetectorManager::setVersion
void setVersion(const Version &version)
Definition: InDetDetectorManager.cxx:43
InDetDD::Version
Definition: Version.h:24
athena.value
value
Definition: athena.py:124
IOVSVC_CALLBACK_ARGS_P
#define IOVSVC_CALLBACK_ARGS_P(I, K)
short hand for IOVSvc call back argument list, to be used when access to formal arguments is needed,...
Definition: IOVSvcDefs.h:42
InDetDD::InDetDetectorManager::invalidateAll
virtual void invalidateAll() const =0
Invalidate cache for all detector elements.
InDetDD::global
@ global
Definition: InDetDD_Defs.h:16
InDetDD::Version::layout
const std::string & layout() const
Layout (eg Initial, Final, TestBeam)
Definition: Version.cxx:50
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
InDetDD::InDetDetectorManager::~InDetDetectorManager
virtual ~InDetDetectorManager()
CondAttrListCollection
This class is a collection of AttributeLists where each one is associated with a channel number....
Definition: CondAttrListCollection.h:52
InDetDD::InDetDetectorManager::addAlignFolderType
void addAlignFolderType(const AlignFolderType alignfolder)
Definition: InDetDetectorManager.cxx:81
InDetDD::InDetDetectorManager::m_keys
std::map< std::string, LevelInfo > m_keys
Definition: InDetDetectorManager.h:179
InDetDD::InDetDetectorManager::getLevel
const LevelInfo & getLevel(const std::string &key) const
Retrieve level information.
Definition: InDetDetectorManager.cxx:87
dumpTruth.getName
getName
Definition: dumpTruth.py:34
python.iconfTool.models.loaders.level
level
Definition: loaders.py:20
StoreGateSvc::retrieve
StatusCode retrieve(const T *&ptr) const
Retrieve the default object into a const T*.
AtlasDetectorID.h
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
StoreGateSvc
The Athena Transient Store API.
Definition: StoreGateSvc.h:125
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
InDetDD::InDetDetectorManager::LevelInfo::isValid
bool isValid() const
Definition: InDetDetectorManager.h:120
dqt_zlumi_pandas.err
err
Definition: dqt_zlumi_pandas.py:182
InDetDD::InDetDetectorManager::LevelInfo::level
int level() const
Definition: InDetDetectorManager.h:116
InDetDD::InDetDetectorManager::LevelInfo::frame
FrameType frame() const
Definition: InDetDetectorManager.h:117
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::InDetDetectorManager::addFolder
void addFolder(const std::string &key)
Definition: InDetDetectorManager.cxx:66
AlignableTransform::end
AlignTransMem_citr end() const
Definition: AlignableTransform.h:106
InDetDD::InDetDetectorManager::m_globalFolders
std::set< std::string > m_globalFolders
Definition: InDetDetectorManager.h:182
InDetDD::InDetDetectorManager::getLayout
const std::string & getLayout() const
Definition: InDetDetectorManager.cxx:38
InDetDD::InDetDetectorManager::getVersion
const Version & getVersion() const
Get version information.
Definition: InDetDetectorManager.cxx:33
AthMessaging
Class to provide easy MsgStream access and capabilities.
Definition: AthMessaging.h:55
InDetDD::InDetDetectorManager::s_invalidLevel
static const LevelInfo s_invalidLevel
Definition: InDetDetectorManager.h:184
InDetDD::InDetDetectorManager::addGlobalFolder
void addGlobalFolder(const std::string &key)
Definition: InDetDetectorManager.cxx:76
InDetDD::none
@ none
Definition: InDetDD_Defs.h:19
InDetDD::InDetDetectorManager::m_detStore
StoreGateSvc * m_detStore
Definition: InDetDetectorManager.h:99
InDetDD::InDetDetectorManager::setAlignableTransformDelta
virtual bool setAlignableTransformDelta(int level, const Identifier &id, const Amg::Transform3D &delta, FrameType frame, GeoVAlignmentStore *alignStore=nullptr) const =0
Set method applying the delta transform (in global or local frame) onto the geoModel transform : CLHE...
AlignableTransform
Definition: AlignableTransform.h:24
InDetDD::local
@ local
Definition: InDetDD_Defs.h:16
CLHEPtoEigenConverter.h
dso-stats.pat
pat
Definition: dso-stats.py:39
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
InDetDD::InDetDetectorManager::m_folders
std::set< std::string > m_folders
Definition: InDetDetectorManager.h:180
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
InDetDD::InDetDetectorManager::align
StatusCode align(IOVSVC_CALLBACK_ARGS) const
InDetDD::InDetDetectorManager::processGlobalAlignment
virtual bool processGlobalAlignment(const std::string &key, int level, FrameType frame, const CondAttrListCollection *obj=nullptr, GeoVAlignmentStore *alignStore=nullptr) const
Definition: InDetDetectorManager.cxx:424
InDetDetectorManager.h
InDetDD::InDetDetectorManager::processKey
bool processKey(const std::string &key, const AlignableTransform *transformCollection, GeoVAlignmentStore *alignStore=nullptr) const
Called by processAlignmentContainer, applies only one key on the transform Collections.
Definition: InDetDetectorManager.cxx:332
AlignableTransform.h
get_generator_info.version
version
Definition: get_generator_info.py:33
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
InDetDD
Message Stream Member.
Definition: FakeTrackBuilder.h:8
Amg::CLHEPTransformToEigen
Amg::Transform3D CLHEPTransformToEigen(const HepGeom::Transform3D &CLHEPtransf)
Converts a CLHEP-based HepGeom::Transform3D into an Eigen Amg::Transform3D.
Definition: CLHEPtoEigenConverter.h:38
InDetDD::InDetDetectorManager::m_specialFolders
std::set< std::string > m_specialFolders
Definition: InDetDetectorManager.h:181
InDetDD::InDetDetectorManager::processAlignmentContainer
bool processAlignmentContainer(const std::string &key) const
return align folder string to use
Definition: InDetDetectorManager.cxx:279
InDetDD::InDetDetectorManager::m_version
Version m_version
Definition: InDetDetectorManager.h:178
InDetDD::InDetDetectorManager::processGlobalAlignmentContainer
bool processGlobalAlignmentContainer(const std::string &key, const CondAttrListCollection *obj=nullptr, GeoVAlignmentStore *alignStore=nullptr) const
Definition: InDetDetectorManager.cxx:395
CaloCondBlobAlgs_fillNoiseFromASCII.folder
folder
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:56
InDetDD::InDetDetectorManager::m_alignfoldertype
AlignFolderType m_alignfoldertype
Definition: InDetDetectorManager.h:96
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
merge.status
status
Definition: merge.py:17
InDetDD::InDetDetectorManager::InDetDetectorManager
InDetDetectorManager(StoreGateSvc *detStore, const std::string &name)
Definition: InDetDetectorManager.cxx:20
AlignableTransform::begin
AlignTransMem_citr begin() const
Definition: AlignableTransform.h:104
InDetDD::InDetDetectorManager::addChannel
void addChannel(const std::string &key, int level, FrameType frame)
Alignment access.
Definition: InDetDetectorManager.cxx:56
python.PyAthena.obj
obj
Definition: PyAthena.py:132
StoreGateSvc.h
InDetDD::InDetDetectorManager::processSpecialAlignment
virtual bool processSpecialAlignment(const std::string &key, InDetDD::AlignFolderType alignfolder) const =0
Definition: InDetDetectorManager.cxx:432
InDetDD::AlignFolderType
AlignFolderType
Definition: InDetDD_Defs.h:19
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
InDetDD::InDetDetectorManager::LevelInfo
Definition: InDetDetectorManager.h:106
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37