ATLAS Offline Software
TRTGeometryManagerTool.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 
11 #include "InDetIdentifier/TRT_ID.h"
12 
14 
17 #include "TrkAlignEvent/AlignPar.h"
18 
19 
21 
22 
23 #include <iostream>
24 
25 using namespace InDetDD;
26 
27 namespace InDet {
28 
29 //________________________________________________________________________
30 TRTGeometryManagerTool::TRTGeometryManagerTool(const std::string& type,
31  const std::string& name,
32  const IInterface * parent)
34  , m_trtDetManager(nullptr)
35  , m_idHelper()
36  , m_alignModuleTool("Trk::AlignModuleTool/AlignModuleTool")
37  , m_idHashToAlignModuleMaps(Trk::AlignModule::NDetectorTypes,(Trk::AlignModuleList*)nullptr)
38  , m_alignParList(nullptr)
39  , m_fullAlignParList(nullptr)
40 {
41  declareInterface<IGeometryManagerTool>(this);
42  declareProperty("AlignModuleTool", m_alignModuleTool);
43 
44  declareProperty("AlignBarrel", m_alignBarrel = true);
45  declareProperty("AlignBarrelX", m_alignBarrelX = true);
46  declareProperty("AlignBarrelY", m_alignBarrelY = true);
47  declareProperty("AlignBarrelZ", m_alignBarrelZ = false);
48  declareProperty("AlignBarrelRotX", m_alignBarrelRotX = true);
49  declareProperty("AlignBarrelRotY", m_alignBarrelRotY = true);
50  declareProperty("AlignBarrelRotZ", m_alignBarrelRotZ = true);
51 
52  declareProperty("AlignEndcaps", m_alignEndcaps = true);
53  declareProperty("AlignEndcapX", m_alignEndcapX = true);
54  declareProperty("AlignEndcapY", m_alignEndcapY = true);
55  declareProperty("AlignEndcapZ", m_alignEndcapZ = true);
56  declareProperty("AlignEndcapRotX", m_alignEndcapRotX = true);
57  declareProperty("AlignEndcapRotY", m_alignEndcapRotY = true);
58  declareProperty("AlignEndcapRotZ", m_alignEndcapRotZ = true);
59 
60  declareProperty("SetSigmaBarrelX", m_sigmaBarrelX = 1.);
61  declareProperty("SetSigmaBarrelY", m_sigmaBarrelY = 1.);
62  declareProperty("SetSigmaBarrelZ", m_sigmaBarrelZ = 1.);
63  declareProperty("SetSigmaBarrelRotX", m_sigmaBarrelRotX = 0.001);
64  declareProperty("SetSigmaBarrelRotY", m_sigmaBarrelRotY = 0.001);
65  declareProperty("SetSigmaBarrelRotZ", m_sigmaBarrelRotZ = 0.001);
66 
67  declareProperty("SetSigmaEndcapX", m_sigmaEndcapX = 1.);
68  declareProperty("SetSigmaEndcapY", m_sigmaEndcapY = 1.);
69  declareProperty("SetSigmaEndcapZ", m_sigmaEndcapZ = 1.);
70  declareProperty("SetSigmaEndcapRotX", m_sigmaEndcapRotX = 0.001);
71  declareProperty("SetSigmaEndcapRotY", m_sigmaEndcapRotY = 0.001);
72  declareProperty("SetSigmaEndcapRotZ", m_sigmaEndcapRotZ = 0.001);
73 
74  declareProperty("SetSoftCutBarrelX", m_softcutBarrelX = 1.);
75  declareProperty("SetSoftCutBarrelY", m_softcutBarrelY = 1.);
76  declareProperty("SetSoftCutBarrelZ", m_softcutBarrelZ = 1.);
77  declareProperty("SetSoftCutBarrelRotX", m_softcutBarrelRotX = 1.);
78  declareProperty("SetSoftCutBarrelRotY", m_softcutBarrelRotY = 1.);
79  declareProperty("SetSoftCutBarrelRotZ", m_softcutBarrelRotZ = 1.);
80 
81  declareProperty("SetSoftCutEndcapX", m_softcutEndcapX = 1.);
82  declareProperty("SetSoftCutEndcapY", m_softcutEndcapY = 1.);
83  declareProperty("SetSoftCutEndcapZ", m_softcutEndcapZ = 1.);
84  declareProperty("SetSoftCutEndcapRotX", m_softcutEndcapRotX = 1.);
85  declareProperty("SetSoftCutEndcapRotY", m_softcutEndcapRotY = 1.);
86  declareProperty("SetSoftCutEndcapRotZ", m_softcutEndcapRotZ = 1.);
87 
88  declareProperty("AlignmentLevel", m_alignLevel = 1);
89  declareProperty("AlignmentLevelBarrel", m_alignLevelBarrel = -1);
90  declareProperty("AlignmentLevelEndcaps", m_alignLevelEndcaps = -1);
91 
92  declareProperty("AlignBarrelPhiSectors", m_barrelPhiSectors);
93  declareProperty("AlignBarrelLayers", m_barrelLayers);
94 
95  declareProperty("AlignSingleEndcap", m_endcap = 0);
96  declareProperty("AlignEndcapWheels", m_endcapWheels);
97  declareProperty("AlignEndcapPhiSectors", m_endcapPhiSectors);
98 
99  declareProperty("doModuleSelection", m_doModuleSelection = false);
100  declareProperty("ModuleSelection", m_moduleSelection);
101 
102  declareProperty("DumpGeometry", m_dumpGeometry = true);
103 
104  m_hashCounter = 0;
105  m_logStream = nullptr;
106 }
107 
108 //________________________________________________________________________
110 {
111  ATH_MSG_DEBUG("deleting alignModuleList");
112  for (int i=0;i<(int)m_alignModuleList.size();i++)
113  delete m_alignModuleList[i];
114  m_alignModuleList.clear();
115 
116  ATH_MSG_DEBUG("deleting fullAlignParList");
117  delete m_fullAlignParList;
118  ATH_MSG_DEBUG("deleting alignParList");
119  delete m_alignParList;
120 }
121 
122 //________________________________________________________________________
124 {
125  ATH_MSG_DEBUG("initialize() of TRTGeometryManagerTool");
126 
127  // retrieve AlignModuleTool
128  if ( m_alignModuleTool.retrieve().isFailure() ) {
129  msg(MSG::FATAL)<<"Could not get " << m_alignModuleTool << endmsg;
130  return StatusCode::FAILURE;
131  }
132  else
133  ATH_MSG_INFO("Retrieved " << m_alignModuleTool);
134 
135  // retrieve TRT ID helper
136  if ( detStore()->retrieve(m_idHelper, "TRT_ID").isFailure() ) {
137  msg(MSG::FATAL) << " Cannot retrieve TRT ID Helper " << endmsg;
138  return StatusCode::FAILURE;
139  }
140  else
141  ATH_MSG_INFO("retrieved TRT ID Helper");
142 
143  // retrieve TRT detector manager
144  if ( detStore()->retrieve(m_trtDetManager).isFailure() ) {
145  msg(MSG::FATAL) << " Cannot retrieve TRT Detector Manager " << endmsg;
146  return StatusCode::FAILURE;
147  }
148  else
149  ATH_MSG_INFO("retrieved TRT Detector Manager");
150 
151  // dump module selection
152  if(m_doModuleSelection && msgLvl(MSG::INFO)) {
153  msg(MSG::INFO)<<"Creating geometry for selected "<<m_moduleSelection.size()<<" modules:"<<endmsg;
154  for(unsigned int i=0;i<m_moduleSelection.size();i++)
155  msg(MSG::INFO)<<" "<<i<<". "<<m_moduleSelection.at(i)<<endmsg;
156  }
157 
158  // check the allowed geometry levels
159  if(!checkAlignLevel())
160  return StatusCode::FAILURE;
161 
162  return StatusCode::SUCCESS;
163 }
164 
165 //________________________________________________________________________
167 {
168  ATH_MSG_DEBUG("finalize() of TRTGeometryManagerTool");
169 
170  return StatusCode::SUCCESS;
171 }
172 
173 //________________________________________________________________________
175 {
178 }
179 
180 //________________________________________________________________________
182 {
183  if(m_alignLevel == 0) {
184  ATH_MSG_INFO("Alignment level for TRT is "<<m_alignLevel);
185  return true;
186  }
187 
188  if(m_alignLevelBarrel == -1) {
189  if(m_alignLevel == 200)
190  m_alignLevelBarrel = 2;
191  else
193  }
194 
195  if(m_alignLevelEndcaps == -1)
197 
199 
200  // if the alignment level for barrel and EC is set correctly
201  // reset the global alignment level
202  if(ok)
203  m_alignLevel = -1;
204 
205  return ok;
206 }
207 
208 //________________________________________________________________________
210 {
211  if(!m_alignBarrel)
212  return true;
213 
214  // check whether geometry level is allowed
215  switch(m_alignLevelBarrel) {
216  case 1: case 2: case 3:
217  ATH_MSG_INFO("Alignment level for TRT Barrel is "<<m_alignLevelBarrel);
218  return true;
219  default:
220  msg(MSG::FATAL)<<"Alignment level "<<m_alignLevelBarrel<<" does not exist for TRT Barrel"<<endmsg;
221  return false;
222  }
223 }
224 
225 //________________________________________________________________________
227 {
228  if(!m_alignEndcaps)
229  return true;
230 
231  // check whether geometry level is allowed
232  switch(m_alignLevelEndcaps) {
233  case 1: case 2: case 200: case 3:
234  ATH_MSG_INFO("Alignment level for TRT Endcaps is "<<m_alignLevelEndcaps);
235  return true;
236  default:
237  msg(MSG::FATAL)<<"Alignment level "<<m_alignLevelEndcaps<<" does not exist for TRT Endcaps"<<endmsg;
238  return false;
239  }
240 }
241 
242 //________________________________________________________________________
244 {
245  ATH_MSG_DEBUG("in ReadGeometry() solveLevel="<<solveLevel);
246 
247  // set pointers
250 
251  // build alignment geometry
252  buildGeometry();
253 
254  // now set the alignment parameters
255  // first prepare the parameter lists
258  // loop over modules
259  std::vector<Trk::AlignModule *>::const_iterator imod = m_alignModuleList.begin();
260  std::vector<Trk::AlignModule *>::const_iterator imod_end = m_alignModuleList.end();
261  for( ; imod!=imod_end; ++imod)
263 
264  // set alignModuleList and hash table in the alignModuleTool
266  ATH_MSG_DEBUG(" geometry set in m_alignModuleTool");
267 
268  // set alignPar lists in the alignModuleTool
269  ATH_MSG_DEBUG(" alignParList = "<<m_alignParList);
270  ATH_MSG_DEBUG(" fullAlignParList = "<<m_fullAlignParList);
272  ATH_MSG_DEBUG(" AlignParLists set in m_alignModuleTool");
273 
274  // dump summary about the geometry setup
275  if (m_dumpGeometry)
276  dumpGeometry();
277 
278  int nDoF= m_alignModuleTool->nAlignParameters();
279  ATH_MSG_INFO("Total number of degrees of freedom: "<<nDoF);
280 
281  return nDoF;
282 }
283 
284 //_______________________________________________________________________
286 {
287  ATH_MSG_INFO("Preparing the TRT geometry");
288 
289  if(m_alignLevel == 0)
290  buildL0();
291  else {
292 
293  if(m_alignBarrel)
294  switch(m_alignLevelBarrel) {
295  case 1:
296  buildL1Barrel();
297  break;
298  case 2:
299  buildL2Barrel();
300  break;
301  case 3:
302  buildL3Barrel();
303  m_alignModuleTool->setSubDetElement(Trk::AlignModule::TRT,true);
304  break;
305  default:
306  break;
307  }
308 
309  if(m_alignEndcaps)
310  switch(m_alignLevelEndcaps) {
311  case 1:
312  buildL1Endcaps();
313  break;
314  case 2:
315  buildL2Endcaps();
316  break;
317  case 200:
319  break;
320  case 3:
321  buildL3Endcap();
322  m_alignModuleTool->setSubDetElement(Trk::AlignModule::TRT,true);
323  break;
324  default:
325  break;
326  }
327  }
328 }
329 
330 //_______________________________________________________________________
332 {
333  ATH_MSG_INFO("Preparing the TRT geometry for L0: whole TRT");
334 
335  // ========================================
336  // get all modules for Level 0 alignment
337  // Level 0 is the whole TRT, i.e., 1 AlignModule in total
338 
339  // define modules
340  // we'll stick with the base AlignModule here since we don't want to
341  // do shifting for the moment but we might need to extend AlignModule
342  // in the future
343 
344  // for L1 alignment the alignment frame is equal to the global frame
345  // and since the TRT detector element positions are also stored in
346  // the global frame in DB, transform is identity
347  Amg::Transform3D transform = Amg::Transform3D::Identity();
348 
349  // use the 'real' identifier of the TRT barrel for TRT L0 module
350  Trk::AlignModule * trt = new Trk::AlignModule(this);
351  trt->setIdHash(getNextIDHash());
352  trt->setName("TRT");
354 
355  if(!moduleSelected(trt)) {
356  ATH_MSG_DEBUG("Module "<<trt->name()<<" NOT selected");
357  delete trt;
358  return;
359  }
360 
361  // get maximum number of elements from the helper
362  unsigned int trtmaxHash = m_idHelper->straw_layer_hash_max();
363  ATH_MSG_DEBUG("maxHash for the TRT "<<trtmaxHash);
364 
366  m_idHashToAlignModuleMapsPtr->at(Trk::AlignModule::TRT) = new Trk::AlignModuleList((size_t)(trtmaxHash),nullptr);
368 
369  // ================================================================
370  // loop over TRT elements and add them to respective alignModules
371  // ================================================================
372  for (unsigned int index = 0; index < trtmaxHash; index++) {
373  IdentifierHash idHash = index;
374  Identifier id = m_idHelper->layer_id(idHash);
375 
376  // get the element via hash
377  const TRT_BaseElement * element = m_trtDetManager->getElement(idHash);
378  if (element) {
379  // get element location for debugging
380 // HepGeom::Point3D<double> center = element->transform() * HepGeom::Point3D<double>();
381 // ATH_MSG_DEBUG(" TRTDetectorElement id: " << id << " with center = " << center);
382 
383  // add element to respective AlignModule
384 
385  // add to the Inner Detector structure
386  if(msgLvl(MSG::DEBUG)) {
387  if (m_idHelper->is_barrel(id))
388  msg(MSG::DEBUG)<<"... TRT barrel element"<<endmsg;
389  else
390  msg(MSG::DEBUG)<<"... TRT endcap element"<<endmsg;
391  }
393 
394  // and fill the corresponding map
395  (*trtIdHashMap)[idHash] = trt;
396  }
397  else
398  ATH_MSG_DEBUG("No TRTDetectorElement with id: "<<id);
399  }
400 
401  // add created module to the geometry
402  m_alignModuleListPtr->push_back(trt);
403 
404  ATH_MSG_DEBUG("TRT L0 module successfully added to the list");
405 
406  return;
407 }
408 
409 //_______________________________________________________________________
411 {
412  // ===========================
413  // BARREL
414  // ===========================
415  ATH_MSG_INFO("Preparing the TRT Barrelgeometry for L1: whole barrel");
416 
417  // ========================================
418  // get all modules for barrel Level 1 alignment
419  // Level 1 is barrel as a single AlignModule
420 
421  // define modules
422  // we'll stick with the base AlignModule here since we don't want to
423  // do shifting for the moment but we might need to extend AlignModule
424  // in the future
425 
426  // get maximum number of elements from the helper
427  unsigned int maxHash = 0;
428  if(m_alignLevelEndcaps==3)
429  maxHash = m_idHelper->straw_hash_max();
430  else
431  maxHash = m_idHelper->straw_layer_hash_max();
432  ATH_MSG_DEBUG("maxHash for the TRT "<<maxHash);
433 
435  m_idHashToAlignModuleMapsPtr->at(Trk::AlignModule::TRT) = new Trk::AlignModuleList((size_t)maxHash,nullptr);
437 
438  // for L1 alignment the alignment frame is equal to the global frame
439  // and since the TRT detector element positions are also stored in
440  // the global frame in DB, transform is identity
441  Amg::Transform3D transform = Amg::Transform3D::Identity();
442 
443  // BARREL
444  // use the 'real' identifier of the TRT barrel that can be
445  // used by idHelper->barrel_ec()
446  // TRT barrel has two sides so both -1 and +1 are ok
447  // but -1 is used in the DB so we use it here as well
449  trtBarrel->setIdHash(getNextIDHash());
450  trtBarrel->setName("TRT Barrel");
451  trtBarrel->setIdentifier(m_idHelper->barrel_ec_id(-1));
452 
453  if(!moduleSelected(trtBarrel)) {
454  ATH_MSG_DEBUG("Module "<<trtBarrel->name()<<" NOT selected");
455  delete trtBarrel;
456  }
457  else {
458  // loop over detector elements in the barrel and add them to respective alignModules
459  for (unsigned int iLayer = 0; iLayer < m_trtDetManager->getNumerology()->getNBarrelRings(); iLayer++) // barrel layers
460  for (unsigned int iPhiModule = 0; iPhiModule < m_trtDetManager->getNumerology()->getNBarrelPhi(); iPhiModule++) // modules in phi
461  for (unsigned int iStrawLayer = 0; iStrawLayer < m_trtDetManager->getNumerology()->getNBarrelLayers(iLayer); iStrawLayer++) // straw layers inside one phi module
462  for (int iSide = 0; iSide < 2; iSide++) { // side of the straw
463  const TRT_BarrelElement * element = m_trtDetManager->getBarrelElement(iSide, iLayer, iPhiModule, iStrawLayer);
464  if (element) {
465  // get element location for debugging
466 // HepGeom::Point3D<double> center = element->transform() * HepGeom::Point3D<double>();
467 // ATH_MSG_DEBUG(" TRTDetectorElement id: " << element->identify() << " with center = " << center);
468 
469  // add to the barrel
470  trtBarrel->addDetElement(Trk::AlignModule::TRT,element,transform);
471  // and fill the corresponding map
472  (*trtIdHashMap)[element->identifyHash()] = trtBarrel;
473  }
474  else
475  ATH_MSG_DEBUG("No TRT_BarrelElement with side-layer-phi-strawLayer:" <<iSide<<"-"<<iLayer<<"-"<<iPhiModule<<"-"<<iStrawLayer);
476  }
477 
478  // add
479  m_alignModuleListPtr->push_back(trtBarrel);
480  }
481 }
482 
483 
484 //_______________________________________________________________________
486 {
487  // ===========================
488  // ENDCAPs
489  // ===========================
490  ATH_MSG_INFO("Preparing the TRT Endcap geometry for L1: 2 endcaps");
491 
492  // ========================================
493  // get all modules for Endcap Level 1 alignment
494  // Level 1 is endcap AlignModules
495 
496  // define modules
497  // we'll stick with the base AlignModule here since we don't want to
498  // do shifting for the moment but we might need to extend AlignModule
499  // in the future
500 
501  // get maximum number of elements from the helper
502  unsigned int maxHash = 0;
503  if(m_alignLevelBarrel==3)
504  maxHash = m_idHelper->straw_hash_max();
505  else
506  maxHash = m_idHelper->straw_layer_hash_max();
507  ATH_MSG_DEBUG("maxHash for the TRT "<<maxHash);
508 
510  m_idHashToAlignModuleMapsPtr->at(Trk::AlignModule::TRT) = new Trk::AlignModuleList((size_t)maxHash,nullptr);
512 
513  // for L1 alignment the alignment frame is equal to the global frame
514  // and since the TRT detector element positions are also stored in
515  // the global frame in DB, transform is identity
516  Amg::Transform3D transform = Amg::Transform3D::Identity();
517 
518  // ENDCAPs
519  // identifiers for endcaps are set in analogy to barrel
520  // above to -2 and +2 so they can be used by
521  // idHelper->barrel_ec()
523  for (int iSide=0;iSide<2;iSide++) {
524  trtEndCap[iSide] = new Trk::AlignModule(this);
525  trtEndCap[iSide] -> setIdHash(getNextIDHash());
526 
527  if(iSide)
528  trtEndCap[iSide]->setName("TRT EndCap C");
529  else
530  trtEndCap[iSide]->setName("TRT EndCap A");
531 
532  int idSide = iSide ? 2 : -2;
533  trtEndCap[iSide]->setIdentifier(m_idHelper->barrel_ec_id(idSide));
534 
535  if( !moduleSelected(trtEndCap[iSide]) || (m_endcap!=idSide && m_endcap!=0 ) ) {
536  ATH_MSG_DEBUG("Module "<<trtEndCap[iSide]->name()<<" NOT selected");
537  delete trtEndCap[iSide];
538  }
539  else {
540  for (unsigned int iWheel = 0; iWheel < m_trtDetManager->getNumerology()->getNEndcapWheels(); iWheel++)
541  for (unsigned int iStrawLayer = 0; iStrawLayer < m_trtDetManager->getNumerology()->getNEndcapLayers(iWheel); iStrawLayer++)
542  for(unsigned int iPhi = 0; iPhi < m_trtDetManager->getNumerology()->getNEndcapPhi(); iPhi++) {
543  const TRT_EndcapElement * element = m_trtDetManager->getEndcapElement(iSide, iWheel, iStrawLayer, iPhi);
544  if (element) {
545  // get element location for debugging
546 // HepGeom::Point3D<double> center = element->transform() * HepGeom::Point3D<double>();
547 // ATH_MSG_DEBUG(" TRTDetectorElement id: " << id << " with center = " << center);
548 
549  // add element to respective AlignModule
550  trtEndCap[iSide]->addDetElement(Trk::AlignModule::TRT,element,transform);
551  // and fill the corresponding map
552  (*trtIdHashMap)[element->identifyHash()] = trtEndCap[iSide];
553  }
554  else
555  ATH_MSG_DEBUG("No TRT_EndcapElement with side-wheel-strawLayer-phi:" <<iSide<<"-"<<iWheel<<"-"<<iStrawLayer<<"-"<<iPhi);
556  }
557 
558  // for endcap we move the CoG
559  Amg::Translation3D translation(trtEndCap[iSide]->centerOfGravity());
560  Amg::Transform3D localtoglobal = translation * Amg::RotationMatrix3D::Identity();
561  trtEndCap[iSide]->setGlobalFrameToAlignFrameTransform(localtoglobal.inverse());
562 
563  // add
564  m_alignModuleListPtr->push_back(trtEndCap[iSide]);
565  }
566  }
567 }
568 
569 
570 //_______________________________________________________________________
572 {
573  // ===========================
574  // BARREL
575  // ===========================
576  ATH_MSG_INFO("Preparing the TRT Barrel geometry for L2: 3 layers with 32 modules each (96 modules)");
577 
578  // ========================================
579  // get all modules for TRT Barrel Level 2 alignment
580  // Level 2 in the barrel is 3 layers with 32 phi modules each
581  // i.e. 96 AlignModules in total
582 
583  // define modules
584  // we'll stick with the base AlignModule here since we don't want to
585  // do shifting for the moment but we might need to extend AlignModule
586  // in the future
587 
588  // TRT detector element positions are stored in the DB in global frame
589  // so the DB frame to global frame transform is identity
590  Amg::Transform3D transform = Amg::Transform3D::Identity();
591 
592  // get maximum number of elements from the helper
593  unsigned int maxHash = 0;
594  if(m_alignLevelEndcaps==3)
595  maxHash = m_idHelper->straw_hash_max();
596  else
597  maxHash = m_idHelper->straw_layer_hash_max();
598  ATH_MSG_DEBUG("maxHash for the TRT "<<maxHash);
599 
601  m_idHashToAlignModuleMapsPtr->at(Trk::AlignModule::TRT) = new Trk::AlignModuleList((size_t)maxHash,nullptr);
603 
604  // for the alignment frame we would like to use something like
605  // the 'center-of-gravity' (cog) of the module and the rotation
606  // of the strawlayer planes. the main problem here is that the
607  // planes are not entirely parallel. for the definition of the
608  // alignment of the module this is all irrelevant, but we would
609  // like to give the twist some meaning, like 'the rotation
610  // around the most central straw': since strawlayer planes are
611  // even and straws as well, there is no such thing as a really
612  // central straw. we'll do something that brings us as close as
613  // possible: for the central plane take strawlayer that is at
614  // (N+1)/2, where N is the maximum strawlayer. (strawlayers
615  // start counting at 0). The reason to pick the outer of the two
616  // central strawlayers is that there are more straws per layer
617  // in the outer layers and that the outer layers are also
618  // further apart, so this is closer to the 'real' cog.
619 
620  for (unsigned int iPhiModule = 0; iPhiModule < m_trtDetManager->getNumerology()->getNBarrelPhi(); iPhiModule++) { // modules in phi
621  for (unsigned int iLayer = 0; iLayer < m_trtDetManager->getNumerology()->getNBarrelRings(); iLayer++) {// barrel layers
622  // create the AlignModule
623  Trk::AlignModule * mod = new Trk::AlignModule(this);
624  mod->setIdHash(getNextIDHash());
625  mod->setIdentifier(m_idHelper->module_id(-1, iPhiModule, iLayer));
626 
627  std::stringstream name;
628  name<<"TRT/Barrel/Module_-1_"<<iPhiModule<<"_"<<iLayer;
629  mod->setName(name.str());
630 
631  if(!moduleSelected(mod) || !moduleSelectedBarrel(iLayer,iPhiModule)) {
632  ATH_MSG_DEBUG("Module "<<mod->name()<<" NOT selected");
633  delete mod;
634  continue;
635  }
636 
637  ATH_MSG_DEBUG("Building module "<<mod->name());
638 
639  // create the collection of central layers for cog and transform calculation
640  std::vector<const Trk::TrkDetElementBase *> centralLayers;
641 
642  int maxstrawlayer = m_trtDetManager->getNumerology()->getNBarrelLayers(iLayer);
643  ATH_MSG_DEBUG("maxstrawlayer "<<maxstrawlayer);
644  for (int iStrawLayer = 0; iStrawLayer < maxstrawlayer; iStrawLayer++) { // straw layers inside one phi module
645  ATH_MSG_DEBUG("iStrawLayer "<<iStrawLayer);
646  for (int iSide = 0; iSide < 2; iSide++) { // side of the straw
647  ATH_MSG_DEBUG("iSide "<<iSide);
648  const TRT_BarrelElement * element = m_trtDetManager->getBarrelElement(iSide, iLayer, iPhiModule, iStrawLayer);
649  if (element) {
650  // get element location for debugging
651 // HepGeom::Point3D<double> center = element->transform() * HepGeom::Point3D<double>();
652 // ATH_MSG_DEBUG(" TRTDetectorElement id: " << element->identify() << " with center = " << center);
653 
654  // update maximum straw layer
655  maxstrawlayer = std::max(maxstrawlayer,m_idHelper->straw_layer(element->identify()));
656 
657  // add element to respective AlignModule
658  mod->addDetElement(Trk::AlignModule::TRT,element,transform);
659 
660  // and fill the corresponding map
661  (*trtIdHashMap)[element->identifyHash()] = mod;
662 
663  // add central layers to centralLayers collection
664  // maxstrawlayer is probably odd (if there is an even number
665  // of strawlayers), but I could be wrong, so let's make this always work:
666  // if maxstrawlayer==23, we want to pick strawlayer 12
667  // if maxstrawlayer==24, we still want to pick strawlayer 12
668  if( iStrawLayer == maxstrawlayer/2 ) {
669  //Amg::Vector3D center = element->transform() * Amg::Vector3D(0,0,0);
670  centralLayers.push_back(element);
671  }
672  }
673  else
674  ATH_MSG_DEBUG("No TRT_BarrelElement with side-layer-phi-strawLayer:" <<iSide<<"-"<<iLayer<<"-"<<iPhiModule<<"-"<<iStrawLayer);
675  }
676  }
677 
678  // This is how the frames line up for a bec=-1 module at global
679  // position (0,R,-360):
680  //
681  // global straw det-element
682  // x +x -x
683  // y +y +z
684  // z +z +y
685  //
686  // For other bec=-1 modules you just need to rotate around
687  // global y. For bec=+1 modules it looks like this:
688  //
689  // global straw det-element
690  // x -x -x
691  // y +y +z
692  // z -z +y
693  // So that just involves one rotation around local-y for the strawreference frame.
694  //
695  std::vector<std::vector<const Trk::TrkDetElementBase *> *> centralLayersVec;
696  centralLayersVec.push_back(&centralLayers);
697 
698  Amg::Translation3D translation(mod->centerOfGravity(centralLayersVec));
699  // for the rotation, we choose the element on the '-1' side.
700  Amg::RotationMatrix3D rotation = ( m_idHelper->barrel_ec(centralLayers.front()->identify()) == -1 ) ?
701  centralLayers.front()->transform().rotation() : centralLayers.back()->transform().rotation();
702  Amg::Transform3D localToGlobal = translation * rotation;
703 
704 
705 
706  ATH_MSG_DEBUG("centerOfGravity "<< mod->centerOfGravity(centralLayersVec));
707  ATH_MSG_DEBUG("Prepared local to global transform : "<<std::setprecision(12)<<localToGlobal.translation()<<" "<<localToGlobal.rotation());
708 
709  mod->setGlobalFrameToAlignFrameTransform(localToGlobal.inverse());
710 
711  // add AlignModule to the geometry
712  m_alignModuleListPtr->push_back(mod);
713  }
714  }
715 
716  return;
717 }
718 
719 
720 //_______________________________________________________________________
722 {
723  // ===========================
724  // ENDCAPs
725  // ===========================
726  ATH_MSG_INFO("Preparing the TRT Endcap geometry for L2: 2 x 40 rings");
727 
728  // ========================================
729  // get all modules for TRT Endcap Level 2 alignment
730  // Level 2 in the endcaps is 40 rings per endcap
731  // i.e. 40 AlignModules in total
732 
733  // define modules
734  // we'll stick with the base AlignModule here since we don't want to
735  // do shifting for the moment but we might need to extend AlignModule
736  // in the future
737 
738  // TRT detector element positions are stored in the DB in global frame
739  // so the DB frame to global frame transform is identity
740  Amg::Transform3D transform = Amg::Transform3D::Identity();
741 
742  // get maximum number of elements from the helper
743  unsigned int maxHash = 0;
744  if(m_alignLevelBarrel==3)
745  maxHash = m_idHelper->straw_hash_max();
746  else
747  maxHash = m_idHelper->straw_layer_hash_max();
748  ATH_MSG_DEBUG("maxHash for the TRT "<<maxHash);
749 
751  m_idHashToAlignModuleMapsPtr->at(Trk::AlignModule::TRT) = new Trk::AlignModuleList((size_t)maxHash,nullptr);
753 
754  for (int iSide = 0; iSide < 2; iSide++) {
755  int idSide = iSide ? 2 : -2;
756  ATH_MSG_DEBUG("Side : "<<iSide<<" , idSide : "<<idSide);
757  if( m_endcap!=idSide && m_endcap!=0 ) {
758  ATH_MSG_DEBUG("Endcap "<<idSide<<" NOT aligned");
759  continue;
760  }
761 
762  int iRing(-1);
763  Trk::AlignModule * mod = nullptr;
764  for (unsigned int iWheel = 0; iWheel < m_trtDetManager->getNumerology()->getNEndcapWheels(); iWheel++) {
765  ATH_MSG_DEBUG("Wheel : "<<iWheel);
766  for (unsigned int iStrawLayer = 0; iStrawLayer < m_trtDetManager->getNumerology()->getNEndcapLayers(iWheel); iStrawLayer++) {
767  ATH_MSG_DEBUG("StrawLayer : "<<iStrawLayer);
768 
769  if(iStrawLayer%4==0) {
770 
771  if(iRing >= 0) {
772  // before creating module for new ring we set the alignment
773  // frame for the previous one and add it to the list of modules
774  ATH_MSG_DEBUG("Setting frame for ring : "<<iRing);
775 
776  // for endcap we move the CoG with no additional rotation
777  Amg::Translation3D translation(mod->centerOfGravity());
778 
779  Amg::Transform3D localToGlobal = translation * Amg::RotationMatrix3D::Identity();
780 
781  mod->setGlobalFrameToAlignFrameTransform(localToGlobal.inverse());
782 
783  // add AlignModule to the geometry
784  m_alignModuleListPtr->push_back(mod);
785  }
786 
787  // new ring
788  iRing++;
789 
790  ATH_MSG_DEBUG("Ring : "<<iRing);
791  // create the AlignModule
792  mod = new Trk::AlignModule(this);
793  mod->setIdHash(getNextIDHash());
794  // Identifier for a ring is the Identifier for the first Straw layer in that ring
795  // one ring has 4 straw layers
796  int strawLayerForRing = (iStrawLayer/4) * 4;
797  mod->setIdentifier(m_idHelper->layer_id((iSide ? 2:-2),0,iWheel,strawLayerForRing));
798 
799  std::stringstream name;
800  name<<"TRT/Endcap/Module_"<<(iSide ? 2:-2)<<"_"<<iRing;
801  mod->setName(name.str());
802 
803  if(!moduleSelected(mod)) {
804  ATH_MSG_DEBUG("Module "<<mod->name()<<" NOT selected");
805  delete mod;
806  mod=nullptr;
807  continue;
808  }
809 
810  ATH_MSG_DEBUG("Building module "<<mod->name());
811  }
812 
813  for(unsigned int iPhi = 0; iPhi < m_trtDetManager->getNumerology()->getNEndcapPhi(); iPhi++) {
814  const TRT_EndcapElement * element = m_trtDetManager->getEndcapElement(iSide, iWheel, iStrawLayer, iPhi);
815  if (element) {
816  // get element location for debugging
817 // HepGeom::Point3D<double> center = element->transform() * HepGeom::Point3D<double>();
818 // ATH_MSG_DEBUG(" TRTDetectorElement id: " << id << " with center = " << center);
819 
820  // add element to respective AlignModule
821  mod->addDetElement(Trk::AlignModule::TRT,element,transform);
822 
823  // and fill the corresponding map
824  (*trtIdHashMap)[element->identifyHash()] = mod;
825  }
826  else
827  ATH_MSG_DEBUG("No TRT_EndcapElement with side-wheel-strawLayer-phi:" <<iSide<<"-"<<iWheel<<"-"<<iStrawLayer<<"-"<<iPhi);
828  }
829  }
830  }
831 
832  if (!mod) throw std::logic_error("No AlignmentModule");
833 
834  // for the last ring we have to explicitly set the alignment
835  // frame add it to the list of modules here, at the end of
836  // loop over wheels
837  ATH_MSG_DEBUG("Setting frame for ring : "<<iRing);
838 
839  // for endcap we move the CoG with no additional rotation
840  Amg::Translation3D translation(mod->centerOfGravity());
841  Amg::Transform3D localToGlobal = translation * Amg::RotationMatrix3D::Identity();
842 
843  mod->setGlobalFrameToAlignFrameTransform(localToGlobal.inverse());
844 
845  // add AlignModule to the geometry
846  m_alignModuleListPtr->push_back(mod);
847  }
848 }
849 
850 
851 //_______________________________________________________________________
853 {
854  // !!!! WARNING !!!!
855  // !!!! This method sets up the TRT Endcap level 2 geometry which
856  // !!!! is now obsolete. The method buildL2Endcap() should be used
857  // !!!! instead !!!
858 
859  // ===========================
860  // ENDCAPs
861  // ===========================
862  ATH_MSG_INFO("Preparing the _OLD_ TRT Endcap geometry for L2: 2 x 14 wheels");
863 
864  // ========================================
865  // get all modules for TRT Endcap Level 2 alignment
866  // Level 2 in the endcaps is 14 wheels per endcap
867  // i.e. 28 AlignModules in total
868 
869  // define modules
870  // we'll stick with the base AlignModule here since we don't want to
871  // do shifting for the moment but we might need to extend AlignModule
872  // in the future
873 
874  // TRT detector element positions are stored in the DB in global frame
875  // so the DB frame to global frame transform is identity
876  Amg::Transform3D transform = Amg::Transform3D::Identity();
877 
878  // get maximum number of elements from the helper
879  unsigned int maxHash = 0;
880  if(m_alignLevelBarrel==3)
881  maxHash = m_idHelper->straw_hash_max();
882  else
883  maxHash = m_idHelper->straw_layer_hash_max();
884  ATH_MSG_DEBUG("maxHash for the TRT "<<maxHash);
885 
887  m_idHashToAlignModuleMapsPtr->at(Trk::AlignModule::TRT) = new Trk::AlignModuleList((size_t)maxHash,nullptr);
889 
890  for (int iSide = 0; iSide < 2; iSide++) {
891  int idSide = iSide ? 2 : -2;
892  ATH_MSG_DEBUG("Side : "<<iSide<<" , idSide : "<<idSide);
893  if( m_endcap!=idSide && m_endcap!=0 ) {
894  ATH_MSG_DEBUG("Endcap "<<idSide<<" NOT aligned");
895  continue;
896  }
897 
898  for (unsigned int iWheel = 0; iWheel < m_trtDetManager->getNumerology()->getNEndcapWheels(); iWheel++) {
899  // create the AlignModule
900  Trk::AlignModule * mod = new Trk::AlignModule(this);
901  mod->setIdHash(getNextIDHash());
902  mod->setIdentifier(m_idHelper->module_id(idSide,0,iWheel));
903 
904  std::stringstream name;
905  name<<"TRT/Endcap/Module_"<<idSide<<"_"<<iWheel;
906  mod->setName(name.str());
907 
908  if(!moduleSelected(mod)) {
909  ATH_MSG_DEBUG("Module "<<mod->name()<<" NOT selected");
910  delete mod;
911  continue;
912  }
913 
914  ATH_MSG_DEBUG("Building module "<<mod->name());
915 
916  for (unsigned int iStrawLayer = 0; iStrawLayer < m_trtDetManager->getNumerology()->getNEndcapLayers(iWheel); iStrawLayer++) {
917  for(unsigned int iPhi = 0; iPhi < m_trtDetManager->getNumerology()->getNEndcapPhi(); iPhi++) {
918  const TRT_EndcapElement * element = m_trtDetManager->getEndcapElement(iSide, iWheel, iStrawLayer, iPhi);
919  if (element) {
920  // get element location for debugging
921 // HepGeom::Point3D<double> center = element->transform() * HepGeom::Point3D<double>();
922 // ATH_MSG_DEBUG(" TRTDetectorElement id: " << id << " with center = " << center);
923 
924  // add element to respective AlignModule
925  mod->addDetElement(Trk::AlignModule::TRT,element,transform);
926 
927  // and fill the corresponding map
928  (*trtIdHashMap)[element->identifyHash()] = mod;
929  }
930  else
931  ATH_MSG_DEBUG("No TRT_EndcapElement with side-wheel-strawLayer-phi:" <<iSide<<"-"<<iWheel<<"-"<<iStrawLayer<<"-"<<iPhi);
932  }
933  }
934 
935  // for endcap we move the CoG with no additional rotation
936  Amg::Translation3D translation(mod->centerOfGravity());
937  Amg::Transform3D localtoglobal = translation * Amg::RotationMatrix3D::Identity();
938 
939  mod->setGlobalFrameToAlignFrameTransform(localtoglobal.inverse());
940 
941  // add AlignModule to the geometry
942  m_alignModuleListPtr->push_back(mod);
943  }
944  }
945 
946  return;
947 }
948 
949 
950 //_______________________________________________________________________
952 {
953  // ===========================
954  // BARREL Level 3
955  // ===========================
956  ATH_MSG_INFO("Preparing the TRT Barrel geometry for L3");
957 
958  // ========================================
959  // get all modules for TRT Barrel Level 3 alignment
960  // Level 3 is one AlignModule per straw
961 
962  // define modules
963  // we'll stick with the base AlignModule here since we don't want to
964  // do shifting for the moment but we might need to extend AlignModule
965  // in the future
966 
967  // TRT detector element positions are stored in the DB in global frame
968  // so the DB frame to global frame transform is identity
969  Amg::Transform3D transform = Amg::Transform3D::Identity();
970 
971  // get maximum number of elements from the helper
972  unsigned int maxHash = m_idHelper->straw_hash_max();
973  ATH_MSG_DEBUG("maxHash for the TRT "<<maxHash);
974 
976  m_idHashToAlignModuleMapsPtr->at(Trk::AlignModule::TRT) = new Trk::AlignModuleList((size_t)maxHash,nullptr);
978 
979  for (unsigned int iPhiModule = 0; iPhiModule < m_trtDetManager->getNumerology()->getNBarrelPhi(); iPhiModule++) { // modules in phi
980  ATH_MSG_DEBUG("iPhiModule "<<iPhiModule);
981  for (unsigned int iLayer = 0; iLayer < m_trtDetManager->getNumerology()->getNBarrelRings(); iLayer++) {// barrel layers
982  ATH_MSG_DEBUG("iLayer "<<iLayer);
983 
984  if(!moduleSelectedBarrel(iLayer,iPhiModule)) {
985  ATH_MSG_INFO("Skipping barrel layer "<<iLayer<<" phi sector "<<iPhiModule);
986  continue;
987  }
988 
989  for (unsigned int iStrawLayer = 0; iStrawLayer < m_trtDetManager->getNumerology()->getNBarrelLayers(iLayer); iStrawLayer++) { // straw layers inside one phi module
990  ATH_MSG_DEBUG("iStrawLayer "<<iStrawLayer);
991  for (int iSide = 0; iSide < 2; iSide++) { // side of the straw
992  ATH_MSG_DEBUG("iSide "<<iSide);
993  int idSide = iSide ? 1 : -1;
994 
995  const TRT_BarrelElement * element = m_trtDetManager->getBarrelElement(iSide, iLayer, iPhiModule, iStrawLayer);
996  if(element) {
997  for (unsigned int iStraw = 0; iStraw< element->nStraws(); iStraw++)
998  {
999  ATH_MSG_DEBUG("iStraw "<<iStraw);
1000 
1001  // create the AlignModule
1002  Trk::AlignModule * mod = new Trk::AlignModule(this);
1003  mod->setIdHash(getNextIDHash());
1004  Identifier moduleId = m_idHelper->straw_id(idSide,iPhiModule,iLayer,iStrawLayer,iStraw);
1005  mod->setIdentifier(moduleId);
1006 
1007  std::stringstream name;
1008  name<<"TRT/Barrel/Straw_"<<idSide<<"_"<<iPhiModule<<"_"<<iLayer<<"_"<<iStrawLayer<<"_"<<iStraw;
1009  mod->setName(name.str());
1010 
1011  if(!moduleSelected(mod)) {
1012  ATH_MSG_DEBUG("Module "<<mod->name()<<" NOT selected");
1013  delete mod;
1014  mod=nullptr;
1015  continue;
1016  }
1017 
1018  ATH_MSG_DEBUG("Building module "<<mod->name());
1019 
1020  // add element to respective AlignModule
1021  mod->addDetElement(Trk::AlignModule::TRT, element, transform, moduleId);
1022 
1023  // and fill the corresponding map
1024  (*trtIdHashMap)[m_idHelper->straw_hash(moduleId)] = mod;
1025 
1026  // set the align frame transform
1027  Amg::Transform3D localToGlobal = element->strawTransform(iStraw);
1028  Amg::RotationMatrix3D lgrot = localToGlobal.rotation();
1029  ATH_MSG_DEBUG("Prepared local to global transform : "<<std::setprecision(12)
1030  <<localToGlobal.translation()<<" "<<localToGlobal.rotation());
1031  ATH_MSG_DEBUG(" rotation = (" << lgrot(2,1) << "," << lgrot(0,2) << "," << lgrot(1,0) << ")");
1032 
1033  mod->setGlobalFrameToAlignFrameTransform(localToGlobal.inverse());
1034 
1035  Amg::Transform3D aatr = element->transform();
1036  Amg::RotationMatrix3D aarot = aatr.rotation();
1037 
1038  ATH_MSG_DEBUG("Straw layer transform : "<<std::setprecision(12)
1039  <<aatr.translation()<<" "<<aatr.rotation());
1040  ATH_MSG_DEBUG(" rotation = (" << aarot(2,1) << "," << aarot(0,2) << "," << aarot(1,0) << ")");
1041 
1042  // add AlignModule to the geometry
1043  m_alignModuleListPtr->push_back(mod);
1044  }
1045  }
1046  else
1047  ATH_MSG_DEBUG("No TRT_BarrelElement with side-layer-phi-strawLayer:" <<iSide<<"-"<<iLayer<<"-"<<iPhiModule<<"-"<<iStrawLayer);
1048  }
1049  }
1050  }
1051  }
1052 
1053  return;
1054 }
1055 
1056 //_______________________________________________________________________
1058 {
1059  // ===========================
1060  // ENDCAP Level 3
1061  // ===========================
1062  ATH_MSG_INFO("Preparing the TRT Endcap geometry for L3");
1063 
1064  // ========================================
1065  // get all modules for TRT Endcap Level 3 alignment
1066  // Level 3 is one AlignModule per straw
1067 
1068  // define modules
1069  // we'll stick with the base AlignModule here since we don't want to
1070  // do shifting for the moment but we might need to extend AlignModule
1071  // in the future
1072 
1073  // TRT detector element positions are stored in the DB in the local frame
1074  // so the DB frame to local frame transform is identity
1075  Amg::Transform3D transform = Amg::Transform3D::Identity();
1076 
1077  // get maximum number of elements from the helper
1078  unsigned int maxHash = m_idHelper->straw_hash_max();
1079  ATH_MSG_DEBUG("maxHash for the TRT "<<maxHash);
1080 
1082  m_idHashToAlignModuleMapsPtr->at(Trk::AlignModule::TRT) = new Trk::AlignModuleList((size_t)maxHash,nullptr);
1084 
1085 
1086  for (int iSide = 0; iSide < 2; iSide++) { // endcap
1087  int idSide = iSide ? 2 : -2;
1088  ATH_MSG_DEBUG("Side : "<<iSide<<" , idSide : "<<idSide);
1089  if( m_endcap!=idSide && m_endcap!=0 ) {
1090  ATH_MSG_DEBUG("Endcap "<<idSide<<" NOT aligned");
1091  continue;
1092  }
1093 
1094  // wheels in Z
1095  for (unsigned int iWheel = 0; iWheel < m_trtDetManager->getNumerology()->getNEndcapWheels(); iWheel++) {
1096  ATH_MSG_DEBUG("iWheel "<<iWheel);
1097 
1098  // sectors in Phi
1099  for (unsigned int iPhiModule = 0; iPhiModule < m_trtDetManager->getNumerology()->getNEndcapPhi(); iPhiModule++) {
1100 
1101  ATH_MSG_DEBUG("iPhiModule "<<iPhiModule);
1102 
1103  if(!moduleSelectedEndcap(iWheel,iPhiModule)) {
1104  ATH_MSG_INFO("Skipping endcap wheel "<<iWheel<<" phi sector "<<iPhiModule);
1105  continue;
1106  }
1107 
1108  // endcap straw layers in z (with in a wheel)
1109  for (unsigned int iStrawLayer = 0; iStrawLayer < m_trtDetManager->getNumerology()->getNEndcapLayers(iWheel); iStrawLayer++) {
1110 
1111  const TRT_EndcapElement * element = m_trtDetManager->getEndcapElement(iSide, iWheel, iStrawLayer, iPhiModule);
1112 
1113  if(element) {
1114  for (unsigned int iStraw = 0; iStraw< element->nStraws(); iStraw++) {
1115  ATH_MSG_DEBUG("iStraw "<<iStraw);
1116 
1117  // create the AlignModule
1118  Trk::AlignModule * mod = new Trk::AlignModule(this);
1119  mod->setIdHash(getNextIDHash());
1120  Identifier moduleId = m_idHelper->straw_id(idSide,iPhiModule,iWheel,iStrawLayer,iStraw);
1121  mod->setIdentifier(moduleId);
1122 
1123  std::stringstream name;
1124  name<<"TRT/Endcap/Straw_"<<idSide<<"_"<<iPhiModule<<"_"<<iWheel<<"_"<<iStrawLayer<<"_"<<iStraw;
1125  mod->setName(name.str());
1126 
1127  if(!moduleSelected(mod)) {
1128  ATH_MSG_DEBUG("Module "<<mod->name()<<" NOT selected");
1129  delete mod;
1130  mod=nullptr;
1131  continue;
1132  }
1133 
1134  ATH_MSG_DEBUG("Building module "<<mod->name());
1135 
1136  // add element to respective AlignModule
1137  mod->addDetElement(Trk::AlignModule::TRT, element, transform, moduleId);
1138 
1139  // and fill the corresponding map
1140  (*trtIdHashMap)[m_idHelper->straw_hash(moduleId)] = mod;
1141 
1142  // set the align frame transform
1143  Amg::Transform3D localToGlobal = element->strawTransform(iStraw);
1144  Amg::RotationMatrix3D lgrot = localToGlobal.rotation();
1145 
1146  ATH_MSG_DEBUG("Prepared local to global transform : "<<std::setprecision(12)
1147  <<localToGlobal.translation()<<" "<<localToGlobal.rotation());
1148 
1149  ATH_MSG_DEBUG(" rotation = (" << lgrot(2,1) << "," << lgrot(0,2) << "," << lgrot(1,0) << ")");
1150 
1151  mod->setGlobalFrameToAlignFrameTransform(localToGlobal.inverse());
1152 
1153  Amg::Transform3D aatr = element->transform();
1154  Amg::RotationMatrix3D aarot = aatr.rotation();
1155 
1156  ATH_MSG_DEBUG("Straw layer transform : "<<std::setprecision(12)
1157  <<aatr.translation()<<" "<<aatr.rotation());
1158  ATH_MSG_DEBUG(" rotation = (" << aarot(2,1) << "," << aarot(0,2) << "," << aarot(1,0) << ")");
1159 
1160  // add AlignModule to the geometry
1161  m_alignModuleListPtr->push_back(mod);
1162  }// Straws
1163  }// if the EndcapElement Exists
1164  else
1165  ATH_MSG_DEBUG("No TRT_EndcapElement with endcap-wheel-strawLayer-phi:" <<iSide<<"-"<<iWheel<<"-"<<iStrawLayer<<"-"<<iPhiModule);
1166  }// StrawLayer
1167  }// PhiModule
1168  }// Wheel
1169  }// Endcap
1170 
1171  return;
1172 }
1173 
1174 //________________________________________________________________________
1176 {
1177  // prepare all parameters
1185 
1186  // set sigmas
1187  setSigmas(module,fullModPars);
1188 
1189  // select active parameters based on jobOption properties
1191  for(unsigned int ipar=0;ipar<fullModPars->size();++ipar) {
1192 
1193  Identifier modID = module->identify();
1194 
1195  if(m_idHelper->is_barrel(modID)) {
1196  ATH_MSG_DEBUG("Barrel module with id "<<modID);
1197  if( (fullModPars->at(ipar)->paramType() == Trk::AlignModule::TransX && m_alignBarrelX)
1198  || (fullModPars->at(ipar)->paramType() == Trk::AlignModule::TransY && m_alignBarrelY)
1199  || (fullModPars->at(ipar)->paramType() == Trk::AlignModule::TransZ && m_alignBarrelZ)
1200  || (fullModPars->at(ipar)->paramType() == Trk::AlignModule::RotX && m_alignBarrelRotX)
1201  || (fullModPars->at(ipar)->paramType() == Trk::AlignModule::RotY && m_alignBarrelRotY)
1202  || (fullModPars->at(ipar)->paramType() == Trk::AlignModule::RotZ && m_alignBarrelRotZ) ) {
1203  ATH_MSG_DEBUG("parameter type "<<fullModPars->at(ipar)->paramType()<<" is now active");
1204  activeModPars->push_back(fullModPars->at(ipar));
1205  }
1206  else
1207  ATH_MSG_DEBUG("parameter type "<<fullModPars->at(ipar)->paramType()<<" is NOT active");
1208  }
1209  else {
1210  ATH_MSG_DEBUG("Endcap module with id "<<modID);
1211  if( (fullModPars->at(ipar)->paramType() == Trk::AlignModule::TransX && m_alignEndcapX)
1212  || (fullModPars->at(ipar)->paramType() == Trk::AlignModule::TransY && m_alignEndcapY)
1213  || (fullModPars->at(ipar)->paramType() == Trk::AlignModule::TransZ && m_alignEndcapZ)
1214  || (fullModPars->at(ipar)->paramType() == Trk::AlignModule::RotX && m_alignEndcapRotX)
1215  || (fullModPars->at(ipar)->paramType() == Trk::AlignModule::RotY && m_alignEndcapRotY)
1216  || (fullModPars->at(ipar)->paramType() == Trk::AlignModule::RotZ && m_alignEndcapRotZ) ) {
1217  ATH_MSG_DEBUG("parameter type "<<fullModPars->at(ipar)->paramType()<<" is now active");
1218  activeModPars->push_back(fullModPars->at(ipar));
1219  }
1220  else
1221  ATH_MSG_DEBUG("parameter type "<<fullModPars->at(ipar)->paramType()<<" is NOT active");
1222  }
1223  }
1224 
1225  // add to parameter lists
1226  allFullModPars->push_back(fullModPars);
1227  allActiveModPars->push_back(activeModPars);
1228 }
1229 
1230 
1231 //________________________________________________________________________
1233 {
1234  for(unsigned int ipar=0;ipar<modPars->size();++ipar) {
1235  // barrel
1236  if(m_idHelper->is_barrel(module->identify()))
1237  switch(modPars->at(ipar)->paramType()) {
1239  modPars->at(ipar)->setSigma(m_sigmaBarrelX);
1240  modPars->at(ipar)->setSoftCut(m_softcutBarrelX);
1241  break;
1243  modPars->at(ipar)->setSigma(m_sigmaBarrelY);
1244  modPars->at(ipar)->setSoftCut(m_softcutBarrelY);
1245  break;
1247  modPars->at(ipar)->setSigma(m_sigmaBarrelZ);
1248  modPars->at(ipar)->setSoftCut(m_softcutBarrelZ);
1249  break;
1251  modPars->at(ipar)->setSigma(m_sigmaBarrelRotX);
1252  modPars->at(ipar)->setSoftCut(m_softcutBarrelRotX);
1253  break;
1255  modPars->at(ipar)->setSigma(m_sigmaBarrelRotY);
1256  modPars->at(ipar)->setSoftCut(m_softcutBarrelRotY);
1257  break;
1259  modPars->at(ipar)->setSigma(m_sigmaBarrelRotZ);
1260  modPars->at(ipar)->setSoftCut(m_softcutBarrelRotZ);
1261  break;
1262  default:
1263  break;
1264  }
1265  // end-caps
1266  else
1267  switch(modPars->at(ipar)->paramType()) {
1269  modPars->at(ipar)->setSigma(m_sigmaEndcapX);
1270  modPars->at(ipar)->setSoftCut(m_softcutEndcapX);
1271  break;
1273  modPars->at(ipar)->setSigma(m_sigmaEndcapY);
1274  modPars->at(ipar)->setSoftCut(m_softcutEndcapY);
1275  break;
1277  modPars->at(ipar)->setSigma(m_sigmaEndcapZ);
1278  modPars->at(ipar)->setSoftCut(m_softcutEndcapZ);
1279  break;
1281  modPars->at(ipar)->setSigma(m_sigmaEndcapRotX);
1282  modPars->at(ipar)->setSoftCut(m_softcutEndcapRotX);
1283  break;
1285  modPars->at(ipar)->setSigma(m_sigmaEndcapRotY);
1286  modPars->at(ipar)->setSoftCut(m_softcutEndcapRotY);
1287  break;
1289  modPars->at(ipar)->setSigma(m_sigmaEndcapRotZ);
1290  modPars->at(ipar)->setSoftCut(m_softcutEndcapRotZ);
1291  break;
1292  default:
1293  break;
1294  }
1295  }
1296 }
1297 
1298 
1299 //________________________________________________________________________
1300 bool TRTGeometryManagerTool::moduleSelected(unsigned long long id)
1301 {
1302  if(!m_doModuleSelection)
1303  return true;
1304 
1305  int nsel = m_moduleSelection.size();
1306  for(int i=0;i<nsel;++i)
1307  if(m_moduleSelection.at(i) == id)
1308  return true;
1309 
1310  return false;
1311 }
1312 
1313 
1314 //________________________________________________________________________
1316 {
1317  return moduleSelected(mod->identify().get_compact());
1318 }
1319 
1320 
1321 //________________________________________________________________________
1322 bool TRTGeometryManagerTool::moduleSelectedBarrel(unsigned int ilayer, unsigned int iphi)
1323 {
1324  bool select = true;
1325  if(m_barrelLayers.size()) {
1326  select = false;
1327  for(unsigned int i=0;i<m_barrelLayers.size();i++) {
1328  if(m_barrelLayers[i] == (int)ilayer) {
1329  select = true;
1330  break;
1331  }
1332  }
1333  }
1334 
1335  if(!select)
1336  return false;
1337 
1338  if(m_barrelPhiSectors.size()) {
1339  select = false;
1340  for(unsigned int i=0;i<m_barrelPhiSectors.size();i++) {
1341  if(m_barrelPhiSectors[i] == (int)iphi) {
1342  select = true;
1343  break;
1344  }
1345  }
1346  }
1347 
1348  return select;
1349 }
1350 
1351 //________________________________________________________________________
1352 bool TRTGeometryManagerTool::moduleSelectedEndcap(unsigned int iwheel, unsigned int iphi)
1353 {
1354  bool select = true;
1355  if(m_endcapWheels.size()) {
1356  select = false;
1357  for(unsigned int i=0;i<m_endcapWheels.size();++i) {
1358  if(m_endcapWheels[i] == (int)iwheel) {
1359  select = true;
1360  break;
1361  }
1362  }
1363  }
1364 
1365  if(!select)
1366  return false;
1367 
1368  if(m_endcapPhiSectors.size()) {
1369  select = false;
1370  for(unsigned int i=0;i<m_endcapPhiSectors.size();i++) {
1371  if(m_endcapPhiSectors[i] == (int)iphi) {
1372  select = true;
1373  break;
1374  }
1375  }
1376  }
1377 
1378  return select;
1379 }
1380 
1381 
1382 //________________________________________________________________________
1384 {
1385  ATH_MSG_INFO("---------------------------------------------------");
1386  ATH_MSG_INFO("Summary of the alignment geometry");
1387  ATH_MSG_INFO("Number of alignable objects: "<<m_alignModuleList.size());
1388  ATH_MSG_INFO("Total number of aligment DoFs: "<<m_alignModuleTool->nAlignParameters());
1389 
1390  for(unsigned int i=0;i<m_alignModuleList.size();i++) {
1392  //ATH_MSG_DEBUG(i<<". "<< module->name());
1393  //ATH_MSG_DEBUG(" - identifier: "<<module->identify());
1394  //ATH_MSG_DEBUG(" - has "<<module->detElementCollection(Trk::AlignModule::TRT)->size()<<" TRT modules");
1395 
1396  Amg::Transform3D localtoglobal = (module->globalFrameToAlignFrame()).inverse();
1397  ATH_MSG_DEBUG(" - local to global : "<<std::setprecision(12)<<localtoglobal.translation()<<" "<<localtoglobal.rotation());
1398 
1400  int npars = pars->size();
1401  ATH_MSG_DEBUG(" - number of active transform parameters: "<<npars);
1402  for(int j=0;j<npars;j++)
1403  ATH_MSG_DEBUG(" * par "<<j<<" \'"<<(*pars)[j]->dumpType()<<"\' : sigma = "<<(*pars)[j]->sigma()<<" , softCut = "<<(*pars)[j]->softCut());
1404  }
1405  ATH_MSG_INFO("---------------------------------------------------");
1406 }
1407 
1408 } // end namespace
1409 
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
make_hlt_rep.pars
pars
Definition: make_hlt_rep.py:90
Trk::IGeometryManagerTool::m_alignLevelBarrel
int m_alignLevelBarrel
alignment level
Definition: IGeometryManagerTool.h:116
InDet::TRTGeometryManagerTool::m_softcutEndcapRotY
double m_softcutEndcapRotY
Definition: TRTGeometryManagerTool.h:187
TRT_ID::layer_id
Identifier layer_id(int barrel_ec, int phi_module, int layer_or_wheel, int straw_layer) const
For an individual straw layer.
Definition: TRT_ID.h:500
InDet::TRTGeometryManagerTool::m_sigmaBarrelX
double m_sigmaBarrelX
Definition: TRTGeometryManagerTool.h:162
InDet::TRTGeometryManagerTool::m_softcutBarrelRotY
double m_softcutBarrelRotY
Definition: TRTGeometryManagerTool.h:180
InDetDD::TRT_BarrelElement
Definition: TRT_BarrelElement.h:44
InDet::TRTGeometryManagerTool::m_sigmaBarrelZ
double m_sigmaBarrelZ
Definition: TRTGeometryManagerTool.h:164
pdg_comparison.sigma
sigma
Definition: pdg_comparison.py:324
Trk::AlignModule::TRT
@ TRT
Definition: AlignModule.h:57
max
#define max(a, b)
Definition: cfImp.cxx:41
Trk::AlignModule::TransZ
@ TransZ
Definition: AlignModule.h:54
InDet::TRTGeometryManagerTool::m_fullAlignParList
DataVector< DataVector< Trk::AlignPar > > * m_fullAlignParList
Definition: TRTGeometryManagerTool.h:143
InDet::TRTGeometryManagerTool::buildL3Endcap
void buildL3Endcap()
builds geometry for L3 TRT Endcap alignment Creates many modules - one module per straw
Definition: TRTGeometryManagerTool.cxx:1057
InDet::TRTGeometryManagerTool::checkAlignLevelBarrel
bool checkAlignLevelBarrel()
check whether the Barrel alignment level is correct
Definition: TRTGeometryManagerTool.cxx:209
python.Constants.FATAL
int FATAL
Definition: Control/AthenaCommon/python/Constants.py:19
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
TRT_ID::straw_hash
IdentifierHash straw_hash(Identifier straw_id) const
straw hash from id - optimized
Definition: TRT_ID.h:768
TRT_DetectorManager.h
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
Trk::AlignModuleList
std::vector< AlignModule * > AlignModuleList
Definition: AlignModuleList.h:37
InDet::TRTGeometryManagerTool::checkAlignLevelEndcaps
bool checkAlignLevelEndcaps()
check whether the Endcap alignment level is correct
Definition: TRTGeometryManagerTool.cxx:226
SG::VIEW_ELEMENTS
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Definition: OwnershipPolicy.h:18
Trk::IGeometryManagerTool::m_hashCounter
int m_hashCounter
variable for setting the idHash of the AlignModules
Definition: IGeometryManagerTool.h:111
index
Definition: index.py:1
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
InDetDD::TRT_DetectorManager::getBarrelElement
const TRT_BarrelElement * getBarrelElement(unsigned int positive, unsigned int moduleIndex, unsigned int phiIndex, unsigned int strawLayerIndex) const
Access Barrel Elements:---------------—(Fast)-------------------------—.
Definition: TRT_DetectorManager.cxx:113
InDet
DUMMY Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
TRT_ID::straw_layer_hash_max
size_type straw_layer_hash_max(void) const
Definition: TRT_ID.h:920
InDet::TRTGeometryManagerTool::dumpGeometry
void dumpGeometry()
print basic geometry info to screen
Definition: TRTGeometryManagerTool.cxx:1383
InDet::TRTGeometryManagerTool::m_alignEndcapZ
bool m_alignEndcapZ
Definition: TRTGeometryManagerTool.h:157
InDet::TRTGeometryManagerTool::m_alignBarrelX
bool m_alignBarrelX
Definition: TRTGeometryManagerTool.h:148
InDetDD::TRT_BaseElement::nStraws
unsigned int nStraws() const
Number of straws in the element.
InDet::TRTGeometryManagerTool::m_sigmaEndcapY
double m_sigmaEndcapY
Definition: TRTGeometryManagerTool.h:170
InDet::TRTGeometryManagerTool::m_barrelLayers
std::vector< int > m_barrelLayers
list of barrel layers to align (if empty, align everything)
Definition: TRTGeometryManagerTool.h:191
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
InDet::TRTGeometryManagerTool::moduleSelectedBarrel
bool moduleSelectedBarrel(unsigned int iLayer, unsigned int iPhi)
check wheather barrel module is selected by layer and phi
Definition: TRTGeometryManagerTool.cxx:1322
InDet::TRTGeometryManagerTool::buildGeometry
void buildGeometry()
builds geometry for TRT alignment
Definition: TRTGeometryManagerTool.cxx:285
InDet::TRTGeometryManagerTool::m_alignEndcaps
bool m_alignEndcaps
Definition: TRTGeometryManagerTool.h:146
TRT_ID.h
This is an Identifier helper class for the TRT subdetector. This class is a factory for creating comp...
InDet::TRTGeometryManagerTool::m_alignBarrelY
bool m_alignBarrelY
Definition: TRTGeometryManagerTool.h:149
InDetDD::TRT_EndcapElement
Definition: TRT_EndcapElement.h:44
InDet::TRTGeometryManagerTool::buildL2Endcaps
void buildL2Endcaps()
builds geometry for L2 TRT Endcapalignment Creates 80 modules - 40 rings per endcap
Definition: TRTGeometryManagerTool.cxx:721
InDet::TRTGeometryManagerTool::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: TRTGeometryManagerTool.cxx:1175
Trk::AlignModule
Definition: AlignModule.h:45
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
Trk::IGeometryManagerTool::m_alignLevelEndcaps
int m_alignLevelEndcaps
alignment level
Definition: IGeometryManagerTool.h:117
InDet::TRTGeometryManagerTool::setAlignLevel
void setAlignLevel(int level)
set alignment level
Definition: TRTGeometryManagerTool.cxx:174
InDet::TRTGeometryManagerTool::buildL1Barrel
void buildL1Barrel()
builds geometry for L1 TRT Barrel alignment Creates single module for barrel
Definition: TRTGeometryManagerTool.cxx:410
InDet::TRTGeometryManagerTool::buildL1Endcaps
void buildL1Endcaps()
builds geometry for L1 TRT Endcap alignment Creates 2 modules, one for each endcap
Definition: TRTGeometryManagerTool.cxx:485
TRT_ID::barrel_ec_id
Identifier barrel_ec_id(int barrel_ec) const
For +/-barrel or +/-endcap id.
Definition: TRT_ID.h:417
InDet::TRTGeometryManagerTool::m_barrelPhiSectors
std::vector< int > m_barrelPhiSectors
list of barrel phi sectors to align (if empty, align everything)
Definition: TRTGeometryManagerTool.h:190
InDet::TRTGeometryManagerTool::ReadGeometry
int ReadGeometry(int solveLevel)
read the geometry Method is called from the main AlignAlg to build the geometry based on the requeste...
Definition: TRTGeometryManagerTool.cxx:243
InDet::TRTGeometryManagerTool::m_endcap
int m_endcap
endcap_id of the endcap to align (-2 or 2 for endcap A or C, 0 for both)
Definition: TRTGeometryManagerTool.h:193
Trk::AlignPar::paramType
AlignModule::TransformParameters paramType() const
returns the type of parameter (i.e.
Definition: AlignPar.h:47
python.iconfTool.models.loaders.level
level
Definition: loaders.py:20
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
Trk::IGeometryManagerTool::m_alignLevel
int m_alignLevel
alignment level
Definition: IGeometryManagerTool.h:115
Rec::nDoF
double nDoF(const Trk::Track &track)
Definition: OutwardsCombinedMuonTrackBuilder.cxx:31
InDet::TRTGeometryManagerTool::m_softcutBarrelRotX
double m_softcutBarrelRotX
Definition: TRTGeometryManagerTool.h:179
AlignModule
AlignModule is a grouping of TrkDetElementBase objects, grouped according to the type of alignment,...
InDet::TRTGeometryManagerTool::initialize
StatusCode initialize()
Definition: TRTGeometryManagerTool.cxx:123
python.PyAthena.module
module
Definition: PyAthena.py:134
InDet::TRTGeometryManagerTool::m_sigmaEndcapRotZ
double m_sigmaEndcapRotZ
Definition: TRTGeometryManagerTool.h:174
InDet::TRTGeometryManagerTool::m_alignBarrelRotY
bool m_alignBarrelRotY
Definition: TRTGeometryManagerTool.h:152
InDet::TRTGeometryManagerTool::m_alignEndcapRotZ
bool m_alignEndcapRotZ
Definition: TRTGeometryManagerTool.h:160
InDet::TRTGeometryManagerTool::m_idHelper
const TRT_ID * m_idHelper
Definition: TRTGeometryManagerTool.h:133
TRT_EndcapElement.h
InDetDD::TRT_DetectorManager::getNumerology
TRT_Numerology * getNumerology()
Access Numerological information:---------------------------------------—.
Definition: TRT_DetectorManager.cxx:56
InDet::TRTGeometryManagerTool::m_alignModuleTool
ToolHandle< Trk::IAlignModuleTool > m_alignModuleTool
pointer to AlignModuleTool
Definition: TRTGeometryManagerTool.h:135
InDet::TRTGeometryManagerTool::m_alignEndcapRotX
bool m_alignEndcapRotX
Definition: TRTGeometryManagerTool.h:158
InDet::TRTGeometryManagerTool::m_alignEndcapY
bool m_alignEndcapY
Definition: TRTGeometryManagerTool.h:156
Trk::AlignPar::setSigma
void setSigma(double sigma)
sets sigma
Definition: AlignPar.h:87
Trk::AlignModule::setName
void setName(const std::string &name)
Set and return name of align module (i.e.
Definition: AlignModule.h:88
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
InDet::TRTGeometryManagerTool::m_alignEndcapRotY
bool m_alignEndcapRotY
Definition: TRTGeometryManagerTool.h:159
InDet::TRTGeometryManagerTool::m_sigmaEndcapZ
double m_sigmaEndcapZ
Definition: TRTGeometryManagerTool.h:171
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
InDet::TRTGeometryManagerTool::m_softcutEndcapX
double m_softcutEndcapX
Definition: TRTGeometryManagerTool.h:183
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
InDet::TRTGeometryManagerTool::m_alignBarrelRotZ
bool m_alignBarrelRotZ
Definition: TRTGeometryManagerTool.h:153
xAOD::rotation
rotation
Definition: TrackSurface_v1.cxx:15
InDet::TRTGeometryManagerTool::m_softcutEndcapZ
double m_softcutEndcapZ
Definition: TRTGeometryManagerTool.h:185
Trk::trtEndCap
@ trtEndCap
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:257
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
InDet::TRTGeometryManagerTool::m_moduleSelection
std::vector< unsigned long long > m_moduleSelection
Definition: TRTGeometryManagerTool.h:198
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
InDet::TRTGeometryManagerTool::m_softcutBarrelRotZ
double m_softcutBarrelRotZ
Definition: TRTGeometryManagerTool.h:181
Trk::AlignPar
Definition: AlignPar.h:25
test_pyathena.parent
parent
Definition: test_pyathena.py:15
InDet::TRTGeometryManagerTool::~TRTGeometryManagerTool
virtual ~TRTGeometryManagerTool()
Definition: TRTGeometryManagerTool.cxx:109
Trk::AlignModule::RotX
@ RotX
Definition: AlignModule.h:54
InDet::TRTGeometryManagerTool::m_softcutBarrelZ
double m_softcutBarrelZ
Definition: TRTGeometryManagerTool.h:178
InDet::TRTGeometryManagerTool::m_alignModuleList
Trk::AlignModuleList m_alignModuleList
Definition: TRTGeometryManagerTool.h:137
InDetDD::TRT_BaseElement::identify
virtual Identifier identify() const override final
identifier of this detector element:
InDetDD::TRT_Numerology::getNBarrelLayers
unsigned int getNBarrelLayers(unsigned int iMod) const
InDet::TRTGeometryManagerTool::moduleSelectedEndcap
bool moduleSelectedEndcap(unsigned int iwheel, unsigned int iphi)
check wheather we are aligning the different endcaps and sectors
Definition: TRTGeometryManagerTool.cxx:1352
TRT_ID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: TRT_ID.h:866
TRT_ID::straw_layer
int straw_layer(const Identifier &id) const
Definition: TRT_ID.h:893
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
AlignModuleList.h
InDetDD::TRT_BaseElement::identifyHash
virtual IdentifierHash identifyHash() const override final
identifier hash
TRT_BarrelElement.h
InDet::TRTGeometryManagerTool::m_trtDetManager
const InDetDD::TRT_DetectorManager * m_trtDetManager
pointer to TRT detector manager
Definition: TRTGeometryManagerTool.h:131
InDet::TRTGeometryManagerTool::m_sigmaEndcapRotY
double m_sigmaEndcapRotY
Definition: TRTGeometryManagerTool.h:173
Trk::AlignModule::name
const std::string & name() const
Definition: AlignModule.h:89
InDetDD::TRT_DetectorManager::getEndcapElement
const TRT_EndcapElement * getEndcapElement(unsigned int positive, unsigned int wheelIndex, unsigned int strawLayerIndex, unsigned int phiIndex) const
Access Endcap Elements:---------------—(Fast)--------------------------—.
Definition: TRT_DetectorManager.cxx:129
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
InDet::TRTGeometryManagerTool::buildL2Barrel
void buildL2Barrel()
builds geometry for L2 TRT Barrel alignment Creates 96 modules - 3 layers with 32 modules per layer
Definition: TRTGeometryManagerTool.cxx:571
InDet::TRTGeometryManagerTool::m_softcutEndcapRotZ
double m_softcutEndcapRotZ
Definition: TRTGeometryManagerTool.h:188
InDet::TRTGeometryManagerTool::m_sigmaBarrelRotX
double m_sigmaBarrelRotX
Definition: TRTGeometryManagerTool.h:165
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
InDet::TRTGeometryManagerTool::m_dumpGeometry
bool m_dumpGeometry
Definition: TRTGeometryManagerTool.h:200
InDet::TRTGeometryManagerTool::m_sigmaBarrelRotY
double m_sigmaBarrelRotY
Definition: TRTGeometryManagerTool.h:166
InDetDD::TRT_DetectorManager::getElement
const TRT_BaseElement * getElement(Identifier id) const
Access Elements Generically---------------------------------------------—.
Definition: TRT_DetectorManager.cxx:158
AlignModule.h
InDet::TRTGeometryManagerTool::moduleSelected
bool moduleSelected(Trk::AlignModule *mod)
check wheather module is selected for module pointer
Definition: TRTGeometryManagerTool.cxx:1315
InDet::TRTGeometryManagerTool::m_endcapWheels
std::vector< int > m_endcapWheels
list of endcap wheels to align (if empty, align everything)
Definition: TRTGeometryManagerTool.h:195
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
InDet::TRTGeometryManagerTool::m_softcutEndcapRotX
double m_softcutEndcapRotX
Definition: TRTGeometryManagerTool.h:186
Trk::IGeometryManagerTool::m_logStream
std::ostream * m_logStream
logfile output stream
Definition: IGeometryManagerTool.h:113
Trk::trtBarrel
@ trtBarrel
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:256
InDet::TRTGeometryManagerTool::m_sigmaBarrelRotZ
double m_sigmaBarrelRotZ
Definition: TRTGeometryManagerTool.h:167
InDet::TRTGeometryManagerTool::m_softcutEndcapY
double m_softcutEndcapY
Definition: TRTGeometryManagerTool.h:184
Trk::iPhi
@ iPhi
Definition: ParamDefs.h:53
Trk::AlignModule::setIdHash
void setIdHash(IdentifierHash id)
Definition: AlignModule.h:93
InDet::TRTGeometryManagerTool::finalize
StatusCode finalize()
Definition: TRTGeometryManagerTool.cxx:166
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
InDetDD::TRT_BaseElement::strawTransform
const Amg::Transform3D & strawTransform(unsigned int straw) const
Straw transform - fast access in array, in Tracking frame: Amg.
Definition: TRT_BaseElement.cxx:89
TRT_ID::is_barrel
bool is_barrel(const Identifier &id) const
Test for barrel.
Definition: TRT_ID.h:857
InDet::TRTGeometryManagerTool::m_alignParList
DataVector< DataVector< Trk::AlignPar > > * m_alignParList
Definition: TRTGeometryManagerTool.h:142
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
TRT_ID::straw_hash_max
size_type straw_hash_max(void) const
Definition: TRT_ID.h:929
InDetDD
Message Stream Member.
Definition: FakeTrackBuilder.h:8
Amg::RotationMatrix3D
Eigen::Matrix< double, 3, 3 > RotationMatrix3D
Definition: GeoPrimitives.h:49
Trk::AlignModule::RotY
@ RotY
Definition: AlignModule.h:54
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
InDet::TRTGeometryManagerTool::m_softcutBarrelY
double m_softcutBarrelY
Definition: TRTGeometryManagerTool.h:177
DEBUG
#define DEBUG
Definition: page_access.h:11
InDet::TRTGeometryManagerTool::m_alignBarrelRotX
bool m_alignBarrelRotX
Definition: TRTGeometryManagerTool.h:151
Amg::Translation3D
Eigen::Translation< double, 3 > Translation3D
Definition: GeoPrimitives.h:44
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
IAlignModuleTool.h
AlignPar.h
TRT_Numerology.h
InDet::TRTGeometryManagerTool::m_alignEndcapX
bool m_alignEndcapX
Definition: TRTGeometryManagerTool.h:155
TRTGeometryManagerTool.h
Trk::AlignPar::setSoftCut
void setSoftCut(double softCut)
sets soft-mode-cut
Definition: AlignPar.h:90
InDet::TRTGeometryManagerTool::buildL0
void buildL0()
builds geometry for L1 TRT alignment Creates 1 module - the whole TRT
Definition: TRTGeometryManagerTool.cxx:331
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
InDet::TRTGeometryManagerTool::buildL3Barrel
void buildL3Barrel()
builds geometry for L3 TRT Barrel alignment Creates many modules - one module per straw
Definition: TRTGeometryManagerTool.cxx:951
AthAlgTool
Definition: AthAlgTool.h:26
InDet::TRTGeometryManagerTool::m_alignBarrelZ
bool m_alignBarrelZ
Definition: TRTGeometryManagerTool.h:150
Trk::AlignModule::RotZ
@ RotZ
Definition: AlignModule.h:54
InDet::TRTGeometryManagerTool::m_endcapPhiSectors
std::vector< int > m_endcapPhiSectors
list of endcap phi sectors to align (if empty, align everything)
Definition: TRTGeometryManagerTool.h:194
DerivationFramework::ClustersInCone::select
void select(const xAOD::IParticle *particle, const float coneSize, const xAOD::CaloClusterContainer *clusters, std::vector< bool > &mask)
Definition: ClustersInCone.cxx:14
InDet::TRTGeometryManagerTool::m_sigmaBarrelY
double m_sigmaBarrelY
Definition: TRTGeometryManagerTool.h:163
InDet::TRTGeometryManagerTool::m_sigmaEndcapRotX
double m_sigmaEndcapRotX
Definition: TRTGeometryManagerTool.h:172
Trk::AlignModule::TransY
@ TransY
Definition: AlignModule.h:54
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
InDet::TRTGeometryManagerTool::m_idHashToAlignModuleMaps
std::vector< Trk::AlignModuleList * > m_idHashToAlignModuleMaps
Definition: TRTGeometryManagerTool.h:140
InDet::TRTGeometryManagerTool::m_alignBarrel
bool m_alignBarrel
Definition: TRTGeometryManagerTool.h:145
InDet::TRTGeometryManagerTool::m_sigmaEndcapX
double m_sigmaEndcapX
Definition: TRTGeometryManagerTool.h:169
InDetDD::TRT_BaseElement
Definition: TRT_BaseElement.h:57
TRT_ID::module_id
Identifier module_id(int barrel_ec, int phi_module, int layer_or_wheel) const
For an individual module phi sector.
Definition: TRT_ID.h:448
TRT_ID::straw_id
Identifier straw_id(int barrel_ec, int phi_module, int layer_or_wheel, int straw_layer, int straw) const
Three ways of getting id for a single straw:
Definition: TRT_ID.h:581
InDet::TRTGeometryManagerTool::buildL2EndcapsOLD
void buildL2EndcapsOLD()
builds geometry for L2 TRT Endcapalignment Creates 28 modules - 14 wheels per endcap
Definition: TRTGeometryManagerTool.cxx:852
InDet::TRTGeometryManagerTool::checkAlignLevel
bool checkAlignLevel()
check whether the alignment level is correct
Definition: TRTGeometryManagerTool.cxx:181
InDetDD::TRT_BaseElement::transform
virtual const Amg::Transform3D & transform() const override final
Element Surface: Get Transform of element in Tracking frame: Amg.
InDet::TRTGeometryManagerTool::m_softcutBarrelX
double m_softcutBarrelX
Definition: TRTGeometryManagerTool.h:176
InDet::TRTGeometryManagerTool::setSigmas
void setSigmas(Trk::AlignModule *mod, DataVector< Trk::AlignPar > *modPars)
sets sigmas for modules
Definition: TRTGeometryManagerTool.cxx:1232
InDet::TRTGeometryManagerTool::m_doModuleSelection
bool m_doModuleSelection
Definition: TRTGeometryManagerTool.h:197