ATLAS Offline Software
SiGeometryManagerTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
10 
11 #include "InDetIdentifier/SCT_ID.h"
14 
16 
19 #include "TrkAlignEvent/AlignPar.h"
20 
22 #include <ostream>
23 
24 
25 using namespace InDetDD;
26 
27 namespace InDet {
28 
29  //________________________________________________________________________
30  SiGeometryManagerTool::SiGeometryManagerTool(const std::string& type,
31  const std::string& name,
32  const IInterface * parent)
34  , m_pixelDetManager(nullptr)
35  , m_sctDetManager(nullptr)
36  , m_pixHelper()
37  , m_sctHelper()
38  , m_idHelper()
39  , m_pixelGeoManager("")
40  , m_sctGeoManager("")
41  , m_alignModuleTool("Trk::AlignModuleTool/AlignModuleTool")
42  , m_idHashToAlignModuleMaps(Trk::AlignModule::NDetectorTypes,(Trk::AlignModuleList*)nullptr)
43  , m_alignParList(nullptr)
44  , m_fullAlignParList(nullptr)
45  {
46  declareInterface<IGeometryManagerTool>(this);
47  declareProperty("AlignModuleTool", m_alignModuleTool);
48 
49  declareProperty("PixelGeometryManager", m_pixelGeoManager);
50  declareProperty("SCTGeometryManager", m_sctGeoManager);
51 
52  // Silicon joboptions
53  declareProperty("AlignPixel", m_alignPixel = true);
54  declareProperty("AlignSCT", m_alignSCT = true);
55 
56  declareProperty("AlignX", m_alignX = true);
57  declareProperty("AlignY", m_alignY = true);
58  declareProperty("AlignZ", m_alignZ = true);
59  declareProperty("AlignRotX", m_alignRotX = true);
60  declareProperty("AlignRotY", m_alignRotY = true);
61  declareProperty("AlignRotZ", m_alignRotZ = true);
62 
63  declareProperty("SetSigmaX", m_sigmaX = 1.);
64  declareProperty("SetSigmaY", m_sigmaY = 1.);
65  declareProperty("SetSigmaZ", m_sigmaZ = 1.);
66  declareProperty("SetSigmaRotX", m_sigmaRotX = 0.001);
67  declareProperty("SetSigmaRotY", m_sigmaRotY = 0.001);
68  declareProperty("SetSigmaRotZ", m_sigmaRotZ = 0.001);
69 
70  // defines alignment level
71  declareProperty("AlignmentLevel", m_alignLevel = -1);
72 
73  declareProperty("doModuleSelection", m_doModuleSelection = false);
74  declareProperty("ModuleSelection", m_moduleSelection);
75 
76  declareProperty("DumpGeometry", m_dumpGeometry = true);
77  declareProperty("ActualGeometry", m_actualGeom = false);
78 
79  m_hashCounter = 0;
80  m_logStream = nullptr;
81  }
82 
83  //________________________________________________________________________
85  {
86  ATH_MSG_DEBUG("deleting alignModuleList");
87  for (const auto & i:m_alignModuleList) delete i;
88  m_alignModuleList.clear();
89 
90  ATH_MSG_DEBUG("deleting fullAlignParList");
91  delete m_fullAlignParList;
92  ATH_MSG_DEBUG("deleting alignParList");
93  delete m_alignParList;
94  }
95 
96  //________________________________________________________________________
98  {
99  ATH_MSG_DEBUG("initialize() of SiGeometryManagerTool");
100 
101  // retrieve AlignModuleTool
102  ATH_CHECK( m_alignModuleTool.retrieve() );
103 
104  // retrieve Pixel helper
106 
107  // retrieve SCT helper
109 
110  // retrieve silicon helper
112 
113  // retrieve SCT detector manager
115 
116  // retrieve PIX detector manager
118 
119  // dump module selection
120  if(m_doModuleSelection && msgLvl(MSG::INFO)) {
121  int idx{};
122  ATH_MSG_INFO("Creating geometry for selected "<<m_moduleSelection.size()<<" modules:");
123  for(const auto & mod:m_moduleSelection)
124  ATH_MSG_INFO(" "<<idx++<<". "<<mod);
125  }
126 
127  // retrieve PixelGeometryManagerTool
128  if ( !m_pixelGeoManager.empty() ) {
129  ATH_CHECK( m_pixelGeoManager.retrieve() );
130  }
131 
132  // retrieve SCTGeometryManagerTool
133  if ( !m_sctGeoManager.empty() ) {
134  ATH_CHECK( m_sctGeoManager.retrieve() );
135  }
136 
137  if(!m_alignPixel && !m_alignSCT) {
138  ATH_MSG_FATAL("Alignment of both Pixel and SCT turned off. Aborting.");
139  return StatusCode::FAILURE;
140  }
141 
142  // check allowed alignment level
143  if(!checkAlignLevel()) {
144  ATH_MSG_FATAL("Wrong alignment level.");
145  return StatusCode::FAILURE;
146  }
147 
148  return StatusCode::SUCCESS;
149  }
150 
151  //________________________________________________________________________
153  {
154  ATH_MSG_DEBUG("finalize() of SiGeometryManagerTool");
155 
156  return StatusCode::SUCCESS;
157  }
158 
159  //________________________________________________________________________
161  {
162  switch(m_alignLevel) {
163 
164  case 0:
165  // for L0 we don't need the other two managers so everything is ok
166  ATH_MSG_INFO("Setting up level 0 alignment of the Silicon");
167  break;
168 
169  case 1: case 2: case 3:
170  // for levels 1,2,3 we need the managers and we have to
171  // set the levels in them
172  if( (m_pixelGeoManager.empty() && m_alignPixel) || (m_sctGeoManager.empty() && m_alignSCT) ) {
173  ATH_MSG_ERROR("PixelGeometryManagerTool and/or SCTGeometryManagerTool not available");
174  ATH_MSG_ERROR("Can't set alignment geometry.");
175  return false;
176  }
177 
178  ATH_MSG_INFO("Setting up level "<<m_alignLevel<<" alignment of the Silicon");
179  m_pixelGeoManager->setAlignLevel(m_alignLevel);
180  m_sctGeoManager->setAlignLevel(m_alignLevel);
181 
182  // we also check that the managers support the levels
183  if( (m_alignPixel && !m_pixelGeoManager->checkAlignLevel()) || (m_alignSCT && !m_sctGeoManager->checkAlignLevel()) )
184  return false;
185  break;
186 
187  case -1:
188  // if level is not set here (i.e. it is equal to -1) we need the Pixel and SCT
189  // managers but we trust their setup, we don't need to check it
190  if( (m_pixelGeoManager.empty() && m_alignPixel) || (m_sctGeoManager.empty() && m_alignSCT) ) {
191  ATH_MSG_ERROR("PixelGeometryManagerTool and/or SCTGeometryManagerTool not available");
192  ATH_MSG_ERROR("Can't set alignment geometry.");
193  return false;
194  }
195  break;
196 
197  default:
198  ATH_MSG_ERROR("Unknown alignment level "<<m_alignLevel<<". Can't set alignment geometry.");
199  return false;
200 
201  }
202 
203  return true;
204  }
205 
206  //________________________________________________________________________
208  {
209  m_logStream = os;
210  if (!m_pixelGeoManager.empty())
211  m_pixelGeoManager->setLogStream(m_logStream);
212  if (!m_sctGeoManager.empty())
213  m_sctGeoManager->setLogStream(m_logStream);
214  }
215 
216  //________________________________________________________________________
218  {
219  ATH_MSG_DEBUG("in ReadGeometry() solveLevel="<<solveLevel);
220 
221  // set pointers
224 
225  // build alignment geometry
226  buildGeometry();
227 
228  // now set the alignment parameters
229  // first prepare the parameter lists
232  // loop over modules
233  ATH_MSG_DEBUG("Adding module parameters to modules");
234  std::vector<Trk::AlignModule *>::const_iterator imod = m_alignModuleList.begin();
235  std::vector<Trk::AlignModule *>::const_iterator imod_end = m_alignModuleList.end();
236  for( ; imod!=imod_end ; ++imod) {
237  ATH_MSG_DEBUG("Module "<<(*imod)->name());
239  }
240 
241  // set alignModuleList and hash table in the alignModuleTool
243  ATH_MSG_DEBUG(" geometry set in m_alignModuleTool");
244 
245  // set alignPar lists in the alignModuleTool
246  ATH_MSG_DEBUG(" alignParList = "<<m_alignParList);
247  ATH_MSG_DEBUG(" fullAlignParList = "<<m_fullAlignParList);
249  ATH_MSG_DEBUG(" AlignParLists set in m_alignModuleTool");
250 
251  // dump summary about the geometry setup
252  if (m_dumpGeometry)
253  dumpGeometry();
254 
255  int nDoF= m_alignModuleTool->nAlignParameters();
256  ATH_MSG_INFO("Total number of degrees of freedom: "<<nDoF);
257 
258  return nDoF;
259  }
260 
261  //_______________________________________________________________________
263  {
264  ATH_MSG_INFO("Preparing the Silicon geometry");
265 
266  int idHash = 0;
267 
268  if(m_alignLevel==0)
269  buildL0();
270 
271  else {
272 
273  // PIXEL
274  if(m_alignPixel) {
275  m_pixelGeoManager->setFirstIDHash(idHash);
276  m_pixelGeoManager->setModuleList(m_alignModuleListPtr);
278 
279  m_pixelGeoManager->buildGeometry();
280 
281  idHash=m_pixelGeoManager->getNextIDHash();
282  }
283 
284  // SCT
285  if(m_alignSCT) {
286  m_sctGeoManager->setFirstIDHash(idHash);
287  m_sctGeoManager->setModuleList(m_alignModuleListPtr);
289 
290  m_sctGeoManager->buildGeometry();
291  }
292  }
293 
294  return;
295  }
296 
297  //_______________________________________________________________________
299  {
300  ATH_MSG_INFO("Preparing the Silicon geometry for L0");
301  // ========================================
302  // Level 0 is just one module containing
303  // the whole Silicon detector (Pixel+SCT)
304 
305  Trk::AlignModule * silicon = new Trk::AlignModule(this);
306  silicon->setIdHash(getNextIDHash());
307  silicon->setName("Silicon");
308 
309  // use the identifier of the Pixel for the whole Silicon at L0
310  silicon->setIdentifier(m_pixHelper->wafer_id(0,0,0,0));
311 
312  // check if we're aligning Silicon
313  if(!moduleSelected(silicon)) {
314  ATH_MSG_DEBUG("Module "<<silicon->name()<<" NOT selected");
315  delete silicon;
316  return;
317  }
318 
319  ATH_MSG_DEBUG("Created module "<<silicon->name()<<" idHash: "<<silicon->identifyHash()<<" identifier: "<<silicon->identify());
320 
321  // for L0 alignment the alignment frame is equal to the global frame
322  // and since the PIXEL and SCT detector element positions are also stored
323  // in the global frame in DB, transform is identity
324  const Amg::Transform3D transform = Amg::Transform3D::Identity();
325 
326  // PIXEL
327  // get maximum number of elements from the helper
328  unsigned int pixelmaxHash = m_pixHelper->wafer_hash_max();
329  ATH_MSG_DEBUG("maxHash for the Pixel: "<<pixelmaxHash);
330 
332  m_idHashToAlignModuleMapsPtr->at(Trk::AlignModule::Pixel) = new Trk::AlignModuleList((size_t)(pixelmaxHash),nullptr);
334 
335  // ==================================================================
336  // loop over Pixel elements and add them to respective alignModules
337  // ==================================================================
338  for (unsigned int index = 0; index < pixelmaxHash; index++) {
339  IdentifierHash idHash = index;
340  Identifier id = m_pixHelper->wafer_id(idHash);
341 
342  ATH_MSG_DEBUG(" Pixel DetectorElement idhash: "<<index);
343  ATH_MSG_DEBUG(" DetectorElement id: "<<id);
344 
345  // get the element via hash
347  if (element2) {
348  const Trk::TrkDetElementBase * element = (const Trk::TrkDetElementBase*) element2;
349 
350  // get element location for debugging
351  // HepGeom::Point3D<double> center = element->transform() * HepGeom::Point3D<double>();
352  // ATH_MSG_DEBUG(" DetectorElement idhash: " << index);
353  // ATH_MSG_DEBUG(" DetectorElement id: " << id << " with center = " << center);
354  // ATH_MSG_DEBUG(" Is Barrel: "<< m_pixHelper->is_barrel(id));
355 
356  // add element to respective AlignModule
357 
358  // add to the pixel structure
359  if(msgLvl(MSG::DEBUG)) {
360  if (m_pixHelper->is_barrel(id))
361  msg(MSG::DEBUG)<<"... Pixel barrel element"<<endmsg;
362  else
363  msg(MSG::DEBUG)<<"... Pixel endcap element"<<endmsg;
364  }
366 
367  // and fill the corresponding map
368  (*pixelIdHashMap)[idHash] = silicon;
369  }
370  else
371  ATH_MSG_DEBUG("No Pixel detector with id: "<<id);
372  }
373 
374  // SCT
375  // get maximum number of elements from the helper
376  unsigned int sctmaxHash = m_sctHelper->wafer_hash_max();
377  ATH_MSG_DEBUG("maxHash for the SCT: "<<sctmaxHash);
378 
380  m_idHashToAlignModuleMapsPtr->at(Trk::AlignModule::SCT) = new Trk::AlignModuleList((size_t)(sctmaxHash),nullptr);
382 
383  // ================================================================
384  // loop over SCT elements and add them to respective alignModules
385  // ================================================================
386  for (unsigned int index = 0; index < sctmaxHash; index++) {
387  IdentifierHash idHash = index;
388  Identifier id = m_sctHelper->wafer_id(idHash);
389 
390  ATH_MSG_DEBUG(" SCT DetectorElement idhash: "<<index);
391  ATH_MSG_DEBUG(" DetectorElement id: "<<id);
392 
393  // get the element via hash
395  if (element2) {
396  const Trk::TrkDetElementBase * element = (const Trk::TrkDetElementBase*) element2;
397 
398  // add element to respective AlignModule
399 
400  // add to the sct barrel structure
401  if(msgLvl(MSG::DEBUG)) {
402  if (m_sctHelper->is_barrel(id))
403  msg(MSG::DEBUG)<<"... SCT barrel element"<<endmsg;
404  else
405  msg(MSG::DEBUG)<<"... SCT endcap element"<<endmsg;
406  }
408 
409  // and fill the corresponding map
410  (*sctIdHashMap)[idHash] = silicon;
411  }
412  else
413  ATH_MSG_DEBUG("No SCT detector with id: "<<id);
414  }
415 
416  // add created module to the geometry
417  m_alignModuleListPtr->push_back(silicon);
418 
419  ATH_MSG_DEBUG("Silicon L0 module successfully added to the list");
420  }
421 
422  //________________________________________________________________________
424  {
425  // for standalone Pixel and SCT modules call the respective methods
427  m_pixelGeoManager->addModuleParameters(module,allFullModPars,allActiveModPars);
428  return;
429  }
431  m_sctGeoManager->addModuleParameters(module,allFullModPars,allActiveModPars);
432  return;
433  }
434 
435  // for combined modules do the work here
436 
437  // prepare all parameters
445 
446  // set sigmas
447  setSigmas(module,fullModPars);
448 
449  // select active parameters based on jobOption properties
451  for(unsigned int ipar=0;ipar<fullModPars->size();++ipar) {
452 
453  Identifier AlimodID = module->identify();
454 
455  ATH_MSG_DEBUG("Silicon module with id "<<AlimodID);
456  if( (fullModPars->at(ipar)->paramType() == Trk::AlignModule::TransX && m_alignX)
457  || (fullModPars->at(ipar)->paramType() == Trk::AlignModule::TransY && m_alignY)
458  || (fullModPars->at(ipar)->paramType() == Trk::AlignModule::TransZ && m_alignZ)
459  || (fullModPars->at(ipar)->paramType() == Trk::AlignModule::RotX && m_alignRotX)
460  || (fullModPars->at(ipar)->paramType() == Trk::AlignModule::RotY && m_alignRotY)
461  || (fullModPars->at(ipar)->paramType() == Trk::AlignModule::RotZ && m_alignRotZ) ) {
462  ATH_MSG_DEBUG("parameter type "<<fullModPars->at(ipar)->paramType()<<" is now active");
463  activeModPars->push_back(fullModPars->at(ipar));
464  }
465  else
466  ATH_MSG_DEBUG("parameter type "<<fullModPars->at(ipar)->paramType()<<" is NOT active");
467  }
468 
469  // now add parameters to the list
470  allFullModPars->push_back(fullModPars);
471  allActiveModPars->push_back(activeModPars);
472  }
473 
474  //________________________________________________________________________
475  bool SiGeometryManagerTool::moduleSelected(unsigned long long id)
476  {
478  return true;
479 
480  int nsel = m_moduleSelection.size();
481  for(int i=0;i<nsel;++i)
482  if(m_moduleSelection.at(i) == id)
483  return true;
484 
485  return false;
486  }
487 
488  //________________________________________________________________________
490  {
491  ATH_MSG_DEBUG("Setting sigmas for module: "<<module->name());
492  for(unsigned int ipar=0;ipar<modPars->size();++ipar)
493  switch(modPars->at(ipar)->paramType()) {
495  modPars->at(ipar)->setSigma(m_sigmaX);
496  break;
498  modPars->at(ipar)->setSigma(m_sigmaY);
499  break;
501  modPars->at(ipar)->setSigma(m_sigmaZ);
502  break;
504  modPars->at(ipar)->setSigma(m_sigmaRotX);
505  break;
507  modPars->at(ipar)->setSigma(m_sigmaRotY);
508  break;
510  modPars->at(ipar)->setSigma(m_sigmaRotZ);
511  break;
512  default:
513  break;
514  }
515  }
516 
517  //________________________________________________________________________
519  {
520  return moduleSelected(mod->identify().get_compact());
521  }
522 
523  //________________________________________________________________________
525  {
526 
527  ATH_MSG_INFO("---------------------------------------------------");
528  ATH_MSG_INFO("Try to write an Si geom root file:");
529  TGeoManager* gm=new TGeoManager("Silicon","Silicon");
530  TGeoMaterial* mat=new TGeoMaterial("Vacuum",0,0,0);
531  TGeoMedium* med=new TGeoMedium("Vacuum",1,mat);
532  TGeoVolume* top = gm->MakeBox("Silicon",med,2000.,2000.,10000.);
533  gm->SetTopVolume(top);
534  TGeoVolume* Si_cog[22000];
535  TGeoVolume* Si[22000];
536  int Si_count=0;
537  TGeoTranslation* tr[22000];
538  TGeoRotation* ro[22000];
539  TGeoCombiTrans* mx[22000];
540 
541  TGeoTranslation* nulltrans=new TGeoTranslation(0.0,0.0,0.0);
542  TGeoRotation* nullrota=new TGeoRotation();
543  nullrota->SetAngles(0.0,0.0,0.0); // Euler angles
544  TGeoRotation* fliprota=new TGeoRotation();
545  fliprota->SetAngles(0.0,-90.0,0.0); // Euler angles (rotation around X)
546  TGeoCombiTrans* donothing=new TGeoCombiTrans(*nulltrans,*nullrota);
547  TGeoCombiTrans* swapaxes=new TGeoCombiTrans(*nulltrans,*fliprota);
548 
549  Amg::Vector3D ea;
551 
552  // First prepare the higher level (L1, L2) structures:
553  TGeoVolume* L0_A = gm->MakeTube("L0_A",med,0.0,1100.0,5000.0);
554  L0_A->SetVisibility(kFALSE);
555  top->AddNodeOverlap(L0_A,Si_count,donothing);
556  Si_count++;
557  TGeoVolume* L1_IBL_A = gm->MakeTube("L1_IBL_A",med,20.0,40.0,700.0);
558  L1_IBL_A->SetVisibility(kFALSE);
559  L0_A->AddNodeOverlap(L1_IBL_A,Si_count,donothing);
560  Si_count++;
561  TGeoVolume* L1_DBM_A = gm->MakeTube("L1_DBM_A",med,20.0,40.0,1000.0);
562  L1_DBM_A->SetVisibility(kFALSE);
563  L0_A->AddNodeOverlap(L1_DBM_A,Si_count,donothing);
564  Si_count++;
565  TGeoVolume* L1_PIX_A = gm->MakeTube("L1_PIX_A",med,40.0,150.0,700.0);
566  L1_PIX_A->SetVisibility(kFALSE);
567  L0_A->AddNodeOverlap(L1_PIX_A,Si_count,donothing);
568  Si_count++;
569  TGeoVolume* L1_SCTA_A = gm->MakeTube("L1_SCTA_A",med,250.0,550.0,3000.0);
570  L1_SCTA_A->SetVisibility(kFALSE);
571  L0_A->AddNodeOverlap(L1_SCTA_A,Si_count,donothing);
572  Si_count++;
573  TGeoVolume* L1_SCTB_A = gm->MakeTube("L1_SCTB_A",med,250.0,550.0,3000.0);
574  L1_SCTB_A->SetVisibility(kFALSE);
575  L0_A->AddNodeOverlap(L1_SCTB_A,Si_count,donothing);
576  Si_count++;
577  TGeoVolume* L1_SCTC_A = gm->MakeTube("L1_SCTC_A",med,250.0,550.0,3000.0);
578  L1_SCTC_A->SetVisibility(kFALSE);
579  L0_A->AddNodeOverlap(L1_SCTC_A,Si_count,donothing);
580  Si_count++;
581 
582 
583 
584  ATH_MSG_INFO("---------------------------------------------------");
585  ATH_MSG_INFO("Summary of the alignment geometry");
586  ATH_MSG_INFO("Number of alignable objects: "<< m_alignModuleList.size());
587  for(unsigned int i=0;i<m_alignModuleList.size();i++) {
589  ATH_MSG_INFO(i<<". "<< module->name());
590  ATH_MSG_INFO(" - identifier: "<<module->identify());
591  ATH_MSG_INFO(" - identifierHash: "<<module->identifyHash());
592 
593  unsigned int npix(0);
594  unsigned int nsct(0);
595  unsigned int nSi(0);
596  bool isPix(false);
597  bool isSCT(false);
598  if(module->detElementCollection(Trk::AlignModule::Pixel)) {
599  npix = module->detElementCollection(Trk::AlignModule::Pixel)->size();
600  nSi = npix; isPix = true;
601  ATH_MSG_INFO(" - has "<<npix<<" Pixel modules");
602  }
603  if(module->detElementCollection(Trk::AlignModule::SCT)) {
604  nsct = module->detElementCollection(Trk::AlignModule::SCT)->size();
605  nSi = nsct; isSCT = true;
606  ATH_MSG_INFO(" - has "<<nsct<<" SCT modules");
607  }
608  if(!isPix && !isSCT) ATH_MSG_INFO(" UNKNOWN module found: "<<module->identify());
609 
610  // Loop over all detector elements of this align module:
611  for(unsigned int j=0;j<nSi;j++) {
612  const SiDetectorElement * element=nullptr;
613  if(isPix) element = dynamic_cast<const SiDetectorElement*>(module->detElementCollection(Trk::AlignModule::Pixel)->at(j));
614  if(isSCT) element = dynamic_cast<const SiDetectorElement*>(module->detElementCollection(Trk::AlignModule::SCT)->at(j));
615  if (not element){
616  ATH_MSG_WARNING("Dynamic cast to SiDetectorElement from pixel or SCT module failed");
617  return;
618  }
619  const Identifier element_id = element->identify();
620  int det,bec,layer,ring,sector,side;
621  // in the future, the InDetAlignDBTool::idToDetSet should be directly used !
622  bool resok=false;
623  if (m_pixHelper->is_pixel(element_id)) {
624  det=1;
625  bec=m_pixHelper->barrel_ec(element_id);
626  layer=m_pixHelper->layer_disk(element_id);
627  ring=m_pixHelper->eta_module(element_id);
628  sector=m_pixHelper->phi_module(element_id);
629  side=0;
630  resok=true;
631  } else if (m_sctHelper->is_sct(element_id)) {
632  det=2;
633  bec=m_sctHelper->barrel_ec(element_id);
634  layer=m_sctHelper->layer_disk(element_id);
635  ring=m_sctHelper->eta_module(element_id);
636  sector=m_sctHelper->phi_module(element_id);
637  side=m_sctHelper->side(element_id);
638  resok=true;
639  }
640  if(!resok) ATH_MSG_INFO(" UNRESOLVED module found: "<<element_id);
641 
642  if(resok && !(element->isStereo())) { // take only phi SCT modules and Pixels
643  // extract the transformation parameters from Eigen:
644  if( m_actualGeom ) {
645  xyz = element->transform().translation(); // translation (actual)
646  ea = element->transform().rotation().eulerAngles(2, 0, 2); // Euler angles (actual)
647  } else {
648  xyz = element->defTransform().translation(); // translation (nominal)
649  ea = element->defTransform().rotation().eulerAngles(2, 0, 2); // Euler angles (nominal)
650  }
651 
652  ATH_MSG_INFO(">>> Element ident,det,bec,layer,ring,sector,side: "<<element_id<<", "<<det<<", "<<bec<<", "<<layer<<", "<<ring<<", "<<sector<<", "<<side);
653  ATH_MSG_INFO(">>> Element length/width/thickness: "<<element->length()<<", "<<element->width()<<", "<<element->thickness());
654  if(element->isSCT() && element->isEndcap())
655  ATH_MSG_INFO(">>> SCT Endcap wedge, min/max "<<element->minWidth()<<" / "<<element->maxWidth());
656  ATH_MSG_INFO(">>> Center position: "<<element->center());
657  ATH_MSG_INFO(">>> Default transformation: ");
658  ATH_MSG_INFO(">>> translation: "<<xyz);
659  ATH_MSG_INFO(">>> Euler angles: Phi="<<57.2957*ea[0]<<" Theta="<<57.2957*ea[1]<<" Psi="<<57.2957*ea[2]);
660 
661 
662  ATH_MSG_INFO("Adding a volume to the Silicon geometry:");
663  TString nname = "Si_COG_";
664  TString mname = "Si_MOD_";
665  TString undsc = "_";
666 
667  std::string det_str = std::to_string(det);
668  std::string bec_str = std::to_string( bec);
669  std::string layer_str = std::to_string( layer);
670  std::string ring_str = std::to_string( ring);
671  std::string sector_str = std::to_string( sector);
672  const auto suffix = TString(det_str)+undsc+TString(bec_str)+undsc+TString(layer_str)+undsc+TString(ring_str)+undsc+TString(sector_str);
673  nname += suffix;
674  mname += suffix;
675 
676  Si_cog[Si_count] = gm->MakeSphere(nname,med,0.0,element->length(),0.0,180.0,0.0,360.0); // invisible container
677  Si_cog[Si_count]->SetVisibility(kFALSE);
678  // create a wedge for SCT Endcap, otherwise a box:
679  if(element->isSCT() && element->isEndcap()) {
680  Si[Si_count] = gm->MakeTrd1(mname,med,0.5*element->minWidth(),0.5*element->maxWidth(),0.5*element->thickness(),0.5*element->length()); // this is a wedge!
681  } else {
682  Si[Si_count] = gm->MakeBox(mname,med,0.5*element->width(),0.5*element->thickness(),0.5*element->length()); // creator takes the half-lengths!
683  }
684  tr[Si_count] = new TGeoTranslation();
685  tr[Si_count]->SetTranslation(xyz[0],xyz[1],xyz[2]);
686  ro[Si_count] = new TGeoRotation();
687  ro[Si_count]->SetAngles(57.2957*ea[0],57.2957*ea[1],57.2957*ea[2]);
688  mx[Si_count] = new TGeoCombiTrans(*tr[Si_count],*ro[Si_count]);
689 
690  TGeoVolume* parrent_elem = nullptr;
691  switch(det)
692  {
693  case 1:
694  if(bec==0 && layer==0) parrent_elem = L1_IBL_A;
695  else if(abs(bec)==4) parrent_elem = L1_DBM_A;
696  else parrent_elem = L1_PIX_A;
697  break;
698  case 2:
699  switch(bec)
700  {
701  case -2:
702  parrent_elem = L1_SCTC_A;
703  break;
704  case 0:
705  parrent_elem = L1_SCTB_A;
706  break;
707  case 2:
708  parrent_elem = L1_SCTA_A;
709  break;
710  default:
711  break;
712  }
713  break;
714  default:
715  break;
716  }
717  if(parrent_elem) {
718  // parrent_elem->AddNode(Si_cog[Si_count],Si_count,mx[Si_count]);
719  // top->AddNode(Si_cog[Si_count],Si_count,mx[Si_count]);
720  top->AddNode(Si_cog[Si_count],0,mx[Si_count]);
721  // Si_cog[Si_count]->AddNode(Si[Si_count],Si_count,gGeoIdentity);
722  // Si_cog[Si_count]->AddNode(Si[Si_count],side,swapaxes);
723  Si_cog[Si_count]->AddNode(Si[Si_count],0,swapaxes);
724  Si_count++;
725  }
726  }
727  }
728 
729 
730  if(npix && nsct)
731  ATH_MSG_INFO(" - has "<<npix+nsct<<" Silicon modules in total");
732 
733  Amg::Transform3D localtoglobal = (module->globalFrameToAlignFrame()).inverse();
734  ATH_MSG_DEBUG(" - local to global : "<<std::setprecision(12)<<localtoglobal.translation()<<" "<<localtoglobal.rotation());
735 
737  int npars = pars->size();
738  ATH_MSG_DEBUG(" - number of active transform parameters: "<<npars);
739  for(int j=0;j<npars;j++)
740  ATH_MSG_DEBUG(" * par "<<j<<": sigma = "<<(*pars)[j]->sigma());
741 
742  }
743 
744 
745  // close geometry end write the geometry root file:
746  gm->CloseGeometry();
747  gm->Export("Silicon.root","Silicon","v");
748 
749  }
750 
751  //________________________________________________________________________
753  {
754  ATH_MSG_DEBUG("in isOneDetOnly for detector type "<<dettype);
755  const Trk::AlignModule::DetElementCollection * coll = mod->detElementCollection(dettype);
756  if(!coll || coll->size() == 0)
757  return false;
758 
759  int nelem(0);
760  for(int i=1;i<Trk::AlignModule::NDetectorTypes;i++) {
761  if(i==dettype)
762  continue;
763  coll = mod->detElementCollection((Trk::AlignModule::DetectorType)i);
764  if(coll)
765  nelem += coll->size();
766  }
767 
768  if(nelem)
769  return false;
770 
771  ATH_MSG_DEBUG("module IS of type "<<dettype);
772  return true;
773  }
774 
775 
776 } // end namespace
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
PixelID.h
This is an Identifier helper class for the Pixel subdetector. This class is a factory for creating co...
AtlasDetectorID::is_pixel
bool is_pixel(Identifier id) const
Definition: AtlasDetectorID.h:760
make_hlt_rep.pars
pars
Definition: make_hlt_rep.py:90
InDet::SiGeometryManagerTool::setLogStream
void setLogStream(std::ostream *os)
sets the output stream for the logfile
Definition: SiGeometryManagerTool.cxx:207
InDet::SiGeometryManagerTool::isOneDetOnly
bool isOneDetOnly(const Trk::AlignModule *mod, Trk::AlignModule::DetectorType dettype) const
check whether the module is of a single detector type
Definition: SiGeometryManagerTool.cxx:752
InDet::SiGeometryManagerTool::m_alignModuleTool
ToolHandle< Trk::IAlignModuleTool > m_alignModuleTool
pointer to AlignModuleTool
Definition: SiGeometryManagerTool.h:111
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
SCT_ID.h
This is an Identifier helper class for the SCT subdetector. This class is a factory for creating comp...
pdg_comparison.sigma
sigma
Definition: pdg_comparison.py:324
top
TopConfig A simple configuration that is NOT a singleton.
Definition: AnalysisTrackingHelper.cxx:58
hotSpotInTAG.suffix
string suffix
Definition: hotSpotInTAG.py:186
InDet::SiGeometryManagerTool::buildGeometry
void buildGeometry()
builds geometry for Silicon alignment
Definition: SiGeometryManagerTool.cxx:262
Trk::AlignModule::TransZ
@ TransZ
Definition: AlignModule.h:54
InDet::SiGeometryManagerTool::m_actualGeom
bool m_actualGeom
Definition: SiGeometryManagerTool.h:144
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
InDet::SiGeometryManagerTool::initialize
StatusCode initialize()
Definition: SiGeometryManagerTool.cxx:97
Trk::AlignModuleList
std::vector< AlignModule * > AlignModuleList
Definition: AlignModuleList.h:37
InDet::SiGeometryManagerTool::m_sctGeoManager
ToolHandle< Trk::IGeometryManagerTool > m_sctGeoManager
pointer to SCT geometry manager
Definition: SiGeometryManagerTool.h:109
ParticleGun_SamplingFraction.bec
int bec
Definition: ParticleGun_SamplingFraction.py:89
InDet::SiGeometryManagerTool::m_sigmaRotZ
double m_sigmaRotZ
Definition: SiGeometryManagerTool.h:134
SG::VIEW_ELEMENTS
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Definition: OwnershipPolicy.h:18
AtlasDetectorID::is_sct
bool is_sct(Identifier id) const
Definition: AtlasDetectorID.h:770
PixelID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: PixelID.h:619
Trk::IGeometryManagerTool::m_hashCounter
int m_hashCounter
variable for setting the idHash of the AlignModules
Definition: IGeometryManagerTool.h:111
index
Definition: index.py:1
InDet::SiGeometryManagerTool::m_dumpGeometry
bool m_dumpGeometry
Definition: SiGeometryManagerTool.h:143
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
InDet
DUMMY Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
mat
GeoMaterial * mat
Definition: LArDetectorConstructionTBEC.cxx:53
SiGeometryManagerTool.h
InDet::SiGeometryManagerTool::m_pixelDetManager
const InDetDD::PixelDetectorManager * m_pixelDetManager
pointer to PIX detector manager
Definition: SiGeometryManagerTool.h:101
Trk::AlignModule::addDetElement
void addDetElement(AlignModule::DetectorType detType, const TrkDetElementBase *det, const Amg::Transform3D &transform, Identifier id=Identifier())
used to add a detector element to the align module with a align frame to detector element local frame...
Definition: AlignModule.cxx:126
Trk::AlignModule
Definition: AlignModule.h:45
InDet::SiGeometryManagerTool::m_sigmaRotX
double m_sigmaRotX
Definition: SiGeometryManagerTool.h:132
xyz
#define xyz
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
fitman.mx
mx
Definition: fitman.py:520
Trk::TrkDetElementBase
Definition: TrkDetElementBase.h:52
Trk::AlignModule::Pixel
@ Pixel
Definition: AlignModule.h:57
SCT_ID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: SCT_ID.h:728
InDet::SiGeometryManagerTool::m_sigmaZ
double m_sigmaZ
Definition: SiGeometryManagerTool.h:131
InDet::SiGeometryManagerTool::checkAlignLevel
bool checkAlignLevel()
check whether the alignment level is correct
Definition: SiGeometryManagerTool.cxx:160
SCT_ID::phi_module
int phi_module(const Identifier &id) const
Definition: SCT_ID.h:740
Trk::AlignModule::NDetectorTypes
@ NDetectorTypes
Definition: AlignModule.h:57
InDetDD::SCT_DetectorManager::getDetectorElement
virtual SiDetectorElement * getDetectorElement(const Identifier &id) const override
access to individual elements via Identifier
Definition: SCT_DetectorManager.cxx:64
Trk::AlignPar::paramType
AlignModule::TransformParameters paramType() const
returns the type of parameter (i.e.
Definition: AlignPar.h:47
PixelID::wafer_id
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module) const
For a single crystal.
Definition: PixelID.h:364
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
InDet::SiGeometryManagerTool::finalize
StatusCode finalize()
Definition: SiGeometryManagerTool.cxx:152
InDet::SiGeometryManagerTool::m_sctDetManager
const InDetDD::SCT_DetectorManager * m_sctDetManager
pointer to SCT detector manager
Definition: SiGeometryManagerTool.h:102
InDet::SiGeometryManagerTool::m_alignPixel
bool m_alignPixel
Definition: SiGeometryManagerTool.h:137
Trk::IGeometryManagerTool::m_alignLevel
int m_alignLevel
alignment level
Definition: IGeometryManagerTool.h:115
TRT::Hit::side
@ side
Definition: HitInfo.h:83
Rec::nDoF
double nDoF(const Trk::Track &track)
Definition: OutwardsCombinedMuonTrackBuilder.cxx:31
InDet::SiGeometryManagerTool::m_sigmaRotY
double m_sigmaRotY
Definition: SiGeometryManagerTool.h:133
InDet::SiGeometryManagerTool::ReadGeometry
int ReadGeometry(int solveLevel)
read the geometry Method is called from the main AlignAlg to build the geometry based on the requeste...
Definition: SiGeometryManagerTool.cxx:217
AlignModule
AlignModule is a grouping of TrkDetElementBase objects, grouped according to the type of alignment,...
python.PyAthena.module
module
Definition: PyAthena.py:134
PixelID::is_barrel
bool is_barrel(const Identifier &id) const
Test for barrel - WARNING: id MUST be pixel id, otherwise answer is not accurate. Use SiliconID for g...
Definition: PixelID.h:605
Trk::AlignPar::setSigma
void setSigma(double sigma)
sets sigma
Definition: AlignPar.h:87
PixelDetectorManager.h
Trk::AlignModule::setName
void setName(const std::string &name)
Set and return name of align module (i.e.
Definition: AlignModule.h:88
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
Trk::IGeometryManagerTool::m_alignModuleListPtr
Trk::AlignModuleList * m_alignModuleListPtr
pointer to module list to which the modules are added
Definition: IGeometryManagerTool.h:106
maskDeadModules.mod
mod
Definition: maskDeadModules.py:36
Trk::AlignModule::setIdentifier
void setIdentifier(Identifier identifier)
Set and return identifier of module.
Definition: AlignModule.h:96
lumiFormat.i
int i
Definition: lumiFormat.py:92
SG::OWN_ELEMENTS
@ OWN_ELEMENTS
this data object owns its elements
Definition: OwnershipPolicy.h:17
Trk::IGeometryManagerTool::getNextIDHash
virtual int getNextIDHash()
get next free IDHash usable for new AlignModule
Definition: IGeometryManagerTool.h:65
Trk::AlignModule::identifyHash
IdentifierHash identifyHash() const
Set and return index of module, used by alignment classes to keep track of order of align module.
Definition: AlignModule.h:92
InDet::SiGeometryManagerTool::m_fullAlignParList
DataVector< DataVector< Trk::AlignPar > > * m_fullAlignParList
Definition: SiGeometryManagerTool.h:119
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
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
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
WritePulseShapeToCool.det
det
Definition: WritePulseShapeToCool.py:204
InDet::SiGeometryManagerTool::m_alignSCT
bool m_alignSCT
Definition: SiGeometryManagerTool.h:138
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
Trk::AlignPar
Definition: AlignPar.h:25
SiliconID.h
This is an Identifier helper class for both the Pixel and SCT subdetectors. This class defines identi...
test_pyathena.parent
parent
Definition: test_pyathena.py:15
InDet::SiGeometryManagerTool::m_alignX
bool m_alignX
Definition: SiGeometryManagerTool.h:122
Trk::AlignModule::RotX
@ RotX
Definition: AlignModule.h:54
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Trk::AlignModule::SCT
@ SCT
Definition: AlignModule.h:57
InDet::SiGeometryManagerTool::m_alignY
bool m_alignY
Definition: SiGeometryManagerTool.h:123
InDet::SiGeometryManagerTool::m_alignParList
DataVector< DataVector< Trk::AlignPar > > * m_alignParList
Definition: SiGeometryManagerTool.h:118
InDet::SiGeometryManagerTool::m_pixelGeoManager
ToolHandle< Trk::IGeometryManagerTool > m_pixelGeoManager
pointer to Pixel geometry manager
Definition: SiGeometryManagerTool.h:108
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
AlignModuleList.h
ReadFromCoolCompare.os
os
Definition: ReadFromCoolCompare.py:231
Trk::AlignModule::DetElementCollection
std::vector< const TrkDetElementBase * > DetElementCollection
typedefs to contain detector element pointers and transforms
Definition: AlignModule.h:60
Trk::AlignModule::name
const std::string & name() const
Definition: AlignModule.h:89
InDet::SiGeometryManagerTool::setSigmas
void setSigmas(Trk::AlignModule *mod, DataVector< Trk::AlignPar > *modPars)
sets sigmas for modules
Definition: SiGeometryManagerTool.cxx:489
keylayer_zslicemap.isPix
isPix
Definition: keylayer_zslicemap.py:127
PixelID::layer_disk
int layer_disk(const Identifier &id) const
Definition: PixelID.h:626
InDet::SiGeometryManagerTool::m_idHelper
const SiliconID * m_idHelper
pointer to Silicon detector manager
Definition: SiGeometryManagerTool.h:106
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
PixelID::eta_module
int eta_module(const Identifier &id) const
Definition: PixelID.h:651
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
Trk::AlignModule::DetectorType
DetectorType
Definition: AlignModule.h:57
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
AlignModule.h
InDet::SiGeometryManagerTool::m_doModuleSelection
bool m_doModuleSelection
Definition: SiGeometryManagerTool.h:140
SCT_ID::layer_disk
int layer_disk(const Identifier &id) const
Definition: SCT_ID.h:734
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
InDet::SiGeometryManagerTool::m_alignZ
bool m_alignZ
Definition: SiGeometryManagerTool.h:124
PixelID::wafer_hash_max
size_type wafer_hash_max(void) const
Definition: PixelID.cxx:912
Trk::IGeometryManagerTool::m_logStream
std::ostream * m_logStream
logfile output stream
Definition: IGeometryManagerTool.h:113
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
SiDetectorElement.h
InDet::SiGeometryManagerTool::moduleSelected
bool moduleSelected(Trk::AlignModule *mod)
check wheather module is selected for module pointer
Definition: SiGeometryManagerTool.cxx:518
InDet::SiGeometryManagerTool::buildL0
void buildL0()
creates L0 AlignModules for Silicon
Definition: SiGeometryManagerTool.cxx:298
Trk::AlignModule::setIdHash
void setIdHash(IdentifierHash id)
Definition: AlignModule.h:93
Trk::AlignModule::TransX
@ TransX
Definition: AlignModule.h:54
DataVector.h
An STL vector of pointers that by default owns its pointed-to elements.
DeMoScan.index
string index
Definition: DeMoScan.py:362
InDet::SiGeometryManagerTool::m_sigmaX
double m_sigmaX
Definition: SiGeometryManagerTool.h:129
InDet::SiGeometryManagerTool::dumpGeometry
void dumpGeometry()
print basic geometry info to screen
Definition: SiGeometryManagerTool.cxx:524
InDet::SiGeometryManagerTool::m_sigmaY
double m_sigmaY
Definition: SiGeometryManagerTool.h:130
Trk::IGeometryManagerTool::m_idHashToAlignModuleMapsPtr
std::vector< Trk::AlignModuleList * > * m_idHashToAlignModuleMapsPtr
pointer to vector of hashMaps to which the elements are added
Definition: IGeometryManagerTool.h:109
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
InDetDD
Message Stream Member.
Definition: FakeTrackBuilder.h:8
InDet::SiGeometryManagerTool::m_moduleSelection
std::vector< unsigned long long > m_moduleSelection
Definition: SiGeometryManagerTool.h:141
Trk::AlignModule::RotY
@ RotY
Definition: AlignModule.h:54
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DEBUG
#define DEBUG
Definition: page_access.h:11
SCT_ID::eta_module
int eta_module(const Identifier &id) const
Definition: SCT_ID.h:746
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
InDet::SiGeometryManagerTool::m_alignRotY
bool m_alignRotY
Definition: SiGeometryManagerTool.h:126
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
IAlignModuleTool.h
InDet::SiGeometryManagerTool::~SiGeometryManagerTool
virtual ~SiGeometryManagerTool()
Definition: SiGeometryManagerTool.cxx:84
InDet::SiGeometryManagerTool::m_idHashToAlignModuleMaps
std::vector< Trk::AlignModuleList * > m_idHashToAlignModuleMaps
Definition: SiGeometryManagerTool.h:116
AlignPar.h
SCT_ID::side
int side(const Identifier &id) const
Definition: SCT_ID.h:752
InDet::SiGeometryManagerTool::m_sctHelper
const SCT_ID * m_sctHelper
pointer to SCT detector manager
Definition: SiGeometryManagerTool.h:105
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
InDet::SiGeometryManagerTool::m_alignModuleList
Trk::AlignModuleList m_alignModuleList
Definition: SiGeometryManagerTool.h:113
InDet::SiGeometryManagerTool::addModuleParameters
void addModuleParameters(Trk::AlignModule *module, DataVector< DataVector< Trk::AlignPar > > *allFullModPars, DataVector< DataVector< Trk::AlignPar > > *allActiveModPars)
adds alignment parameters for the module checks for active parameters and calls setSigmas()
Definition: SiGeometryManagerTool.cxx:423
AthAlgTool
Definition: AthAlgTool.h:26
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
Trk::AlignModule::RotZ
@ RotZ
Definition: AlignModule.h:54
PixelID::phi_module
int phi_module(const Identifier &id) const
Definition: PixelID.h:644
InDet::SiGeometryManagerTool::m_alignRotZ
bool m_alignRotZ
Definition: SiGeometryManagerTool.h:127
Trk::AlignModule::TransY
@ TransY
Definition: AlignModule.h:54
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
Trk::AlignModule::identify
Identifier identify() const
Definition: AlignModule.h:97
InDet::SiGeometryManagerTool::m_alignRotX
bool m_alignRotX
Definition: SiGeometryManagerTool.h:125
InDet::SiGeometryManagerTool::m_pixHelper
const PixelID * m_pixHelper
pointer to PIX detector manager
Definition: SiGeometryManagerTool.h:104
SCT_ID::is_barrel
bool is_barrel(const Identifier &id) const
Test for barrel - WARNING: id MUST be sct id, otherwise answer is not accurate. Use SiliconID for gen...
Definition: SCT_ID.h:721
InDetDD::PixelDetectorManager::getDetectorElement
virtual SiDetectorElement * getDetectorElement(const Identifier &id) const override
access to individual elements : via Identifier
Definition: PixelDetectorManager.cxx:80