ATLAS Offline Software
GeoPixelLayer.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 #include "GeoPixelLayer.h"
7 #include "GeoPixelLadder.h"
8 #include "GeoPixelTMT.h"
12 #include "GeoPixelLadderServices.h"
13 #include "GeoPixelPigtail.h"
14 #include "GeoPixelSiCrystal.h"
15 #include "GeoPixelStaveRing.h"
16 
19 
20 #include "GeoModelKernel/GeoTube.h"
21 #include "GeoModelKernel/GeoPara.h"
22 #include "GeoModelKernel/GeoSimplePolygonBrep.h"
23 #include "GeoModelKernel/GeoLogVol.h"
24 #include "GeoModelKernel/GeoNameTag.h"
25 #include "GeoModelKernel/GeoIdentifierTag.h"
26 #include "GeoModelKernel/GeoPhysVol.h"
27 #include "GeoModelKernel/GeoFullPhysVol.h"
28 #include "GeoModelKernel/GeoMaterial.h"
29 #include "GeoModelKernel/GeoTransform.h"
30 
31 #include "GeoModelKernel/GeoTubs.h"
32 #include "GaudiKernel/SystemOfUnits.h"
33 
34 #include <memory>
35 #include <sstream>
36 
39  GeoModelIO::ReadGeoModel* sqliteReader,
40  std::shared_ptr<std::map<std::string, GeoFullPhysVol*>> mapFPV,
41  std::shared_ptr<std::map<std::string, GeoAlignableTransform*>> mapAX)
42  : GeoVPixelFactory (ddmgr, mgr, sqliteReader, mapFPV, mapAX),
43  m_supportPhysA (nullptr),
44  m_supportPhysC (nullptr),
45  m_supportMidRing (nullptr),
46  m_xformSupportA (nullptr),
47  m_xformSupportC (nullptr),
48  m_xformSupportMidRing (nullptr)
49 {
50 }
51 
52 GeoVPhysVol* GeoPixelLayer::Build() {
53 
54  //
55  // create a barrel layer
56  //
57 
58  //
59  // Ladder = TMT + Modules (sometimes referred to as "active ladder" below)
60  // LadderServices = Omega, cooling tube + fluid, glue, flat part of pigtail, connectors, type 0 cables
61  //
62 
63  // Currently recognized stave layouts
64  // 0 : Standard ATLAS
65  // 1 : No ladder services
66  // 2 : No ladder services or TMT
67  // 3 : Rectangular services.
68 
69  int staveLayout = m_gmt_mgr->PixelStaveLayout();
70  // FIXME: Envelope needs to be checked.
71 
72  // Build the sensor first to use the same for all the module in the layer
73  // Likewise the TMT and the "Ladder"
74  bool isBLayer = false;
75  if(m_gmt_mgr->GetLD() == 0) isBLayer = true;
77  std::unique_ptr<GeoPixelStaveSupport> staveSupport;
78  if (staveLayout ==0 || staveLayout==1) {
79  staveSupport = std::make_unique<GeoPixelTMT>( m_DDmgr, m_gmt_mgr, m_sqliteReader, m_mapFPV, m_mapAX );
80  }
81  if (staveLayout == 3) {
82  staveSupport = std::make_unique<GeoPixelSimpleStaveSupport>( m_DDmgr, m_gmt_mgr, m_sqliteReader, m_mapFPV, m_mapAX );
83  }
84  else if (staveLayout >3 && staveLayout <7)
85  {
86  staveSupport = std::make_unique<GeoPixelDetailedStaveSupport>( m_DDmgr, m_gmt_mgr, m_sqliteReader, m_mapFPV, m_mapAX);
87  }
88 
89  if (staveLayout >3 && staveLayout <7)
90  {
93  }
94 
95  if(!staveSupport)
96  {
97  m_gmt_mgr->msg(MSG::ERROR)<<"No stave support corresponding to the staveLayout "<<staveLayout<<" could be defined "<<endmsg;
98  return nullptr;
99  }
100 
101  m_gmt_mgr->msg(MSG::INFO)<<"*** LAYER "<<m_gmt_mgr->GetLD()<<" planar/3D modules : "<< staveSupport->PixelNPlanarModule()<<" "<<staveSupport->PixelN3DModule()<<endmsg;
102 
103 
104  GeoPixelLadder pixelLadder(m_DDmgr, m_gmt_mgr, m_sqliteReader, m_mapFPV, m_mapAX, theSensor, staveSupport.get());
105 
106  //
107  // layer radius, number of sectors and tilt used in various places
108  //
109  double layerRadius = m_gmt_mgr->PixelLayerRadius();
110  double ladderTilt = m_gmt_mgr->PixelLadderTilt();
111  int nSectors = m_gmt_mgr->NPixelSectors();
112 
113  // Set numerology
116 
117  if(m_sqliteReader) {
118  bool bAddIBLStaveRings=(m_gmt_mgr->GetLD()==0&&m_gmt_mgr->ibl()&&m_gmt_mgr->PixelStaveLayout()>3&&m_gmt_mgr->PixelStaveLayout()<8);
119  for(int ii = 0; ii < nSectors; ii++) {
120  m_gmt_mgr->SetPhi(ii);
121  pixelLadder.Build();
122  }
123  if(bAddIBLStaveRings) {
124  m_gmt_mgr->msg(MSG::INFO) << "IBL stave ring support"<< endmsg;
125  GeoPixelStaveRingServices staveRingService(m_DDmgr, m_gmt_mgr, m_sqliteReader, m_mapFPV, m_mapAX, pixelLadder, *staveSupport);
126  staveRingService.Build();
127  }
128  return nullptr;
129  }
130 
131  //
132  // Calculate layerThicknessN: Thickness from layer radius to min radius of envelope
133  // Calculate layerThicknessP: Thickness from layer radius to max radius of envelope
134  //
135  double ladderHalfThickN = pixelLadder.thicknessN();
136  double ladderHalfThickP = pixelLadder.thicknessP();
137  double ladderHalfWidth = pixelLadder.width()/2;
138  //std::cout << "ladderHalfThickN, ladderHalfThickP, ladderHalfWidth, ladderTilt, layerRadius:"
139  // << ladderHalfThickN << " "<< ladderHalfThickP << " " << ladderHalfWidth
140  // << " " << ladderTilt << " " << layerRadius << std::endl;
141 
142  // Calculate distance of closest approach to a line following the surface of the ladder.
143  double grad = -1/tan(std::abs(ladderTilt)); // Gradient of this line.
144  // x1, y1 is the point on the center of ladder surface.
145  double y1 = -ladderHalfThickN*sin(std::abs(ladderTilt));
146  double x1 = -ladderHalfThickN*cos(std::abs(ladderTilt))+layerRadius;
147  // x1, y2 is the point of closest approach.
148  double y2 = (y1 - grad*x1)/(1+grad*grad);
149  double x2 = -grad*y2;
150  // dist is the distance between these two points. If this is further than the width of the ladder we
151  // can use the corner of the ladder.
152  double distToClosestPoint = sqrt((y2-y1)*(y2-y1)+(x2-x1)*(x2-x1));
153  // distance of closest approach.
154  double radClosest = (y1 - grad*x1)/(sqrt(1+grad*grad));
155 
156  //std::cout << "Distance of closest approach: " << radClosest << std::endl;
157  //std::cout << "Distance along ladder surface from center to point of closest approach: " << distToClosestPoint << std::endl;
158 
159  // Calculate the radius of the corners of the ladder.
160  GeoTrf::Vector3D ladderLowerCorner(-ladderHalfThickN, ladderHalfWidth, 0);
161  GeoTrf::Vector3D ladderUpperCorner(ladderHalfThickP, -ladderHalfWidth, 0);
162  ladderLowerCorner = GeoTrf::TranslateX3D(layerRadius) * GeoTrf::RotateZ3D(std::abs(ladderTilt)) * ladderLowerCorner;
163  ladderUpperCorner = GeoTrf::TranslateX3D(layerRadius) * GeoTrf::RotateZ3D(std::abs(ladderTilt)) * ladderUpperCorner;
164 
165  double layerThicknessN = layerRadius - ladderLowerCorner.perp();
166  double layerThicknessP = ladderUpperCorner.perp() - layerRadius; // Will be recalculated below in case of additional services
167  // std::cout<<"Max thickness : ladderhick "<<ladderHalfThickN<<" "<<ladderHalfThickP<<std::endl;
168  // std::cout<<"Max thickness : layerthick "<<layerThicknessN<<" "<<layerThicknessP<<std::endl;
169 
170  //std::cout << "Layer Envelope (using ladder corners): "
171  // << layerRadius - layerThicknessN << " to " << layerRadius + layerThicknessP <<std::endl;
172 
173  // If distance of closest approach is within the ladder width we use that instead
174  if (distToClosestPoint < ladderHalfWidth) {
175  layerThicknessN = layerRadius - radClosest;
176  }
177 
178  //std::cout << "Layer Envelope (ladder only): "
179  // << layerRadius - layerThicknessN << " to " << layerRadius + layerThicknessP <<std::endl;
180 
181  //
182  // Make ladder services and calculate envelope dimensions
183  //
184  // Variables that are used later
185  int maxLadType = 0;
186  std::vector<GeoVPhysVol *> ladderServicesArray;
187  GeoTrf::Transform3D ladderServicesTransform(GeoTrf::Transform3D::Identity());
188  GeoVPhysVol* pigtailPhysVol = nullptr;
189  GeoTrf::Transform3D transPigtail(GeoTrf::Transform3D::Identity());
190 
191  // Only make services in non IBL geometries
192  if (staveLayout == 0) {
193  //
194  // Make LadderServices
195  //
196  // This volumes only needs to built a few times.
197  // There are up to 4*2 types although we keep it general in case
198  // more types are introduced.
199  // The *2 as there are two cable orientations.
200 
201  // Get max ladder type
202  //int maxLadType = 0;
203  for(int iPhi = 0; iPhi < nSectors; iPhi++) {
205  int ladderType = m_gmt_mgr->PixelFluidOrient(m_gmt_mgr->GetLD(), iPhi);
206  maxLadType = std::max(ladderType, maxLadType);
207  }
208  // Create the GeoPixelLadderServices types that are needed.
209  // NB. vector initializes its contents to zero.
210  //std::vector<GeoVPhysVol *> ladderServicesArray(2*(maxLadType+1));
211  ladderServicesArray.resize(2*(maxLadType+1));
212  GeoPixelLadderServices *firstLadderServices = nullptr;
213  for(int iPhi = 0; iPhi < nSectors; iPhi++) {
215  int ladderType = m_gmt_mgr->PixelFluidOrient(m_gmt_mgr->GetLD(), iPhi);
216  int biStave = m_gmt_mgr->PixelBiStaveType(m_gmt_mgr->GetLD(), iPhi) % 2; // Will be 1 or 2 -> Map to 1,0
217  //int biStave = iPhi % 2; // Should only be 0 or 1
218  if (ladderType < 0) std::cout << "ERROR: Unexpected value of ladderType: " << ladderType << std::endl;
219  if (!ladderServicesArray[biStave*(maxLadType+1) + ladderType]) {
221  // build the physical volume for each type
222  ladderServicesArray[biStave*(maxLadType+1) + ladderType] = ladderServices->Build();
223  if (!firstLadderServices) {
224  // We keep one as we use it later
225  firstLadderServices = ladderServices;
226  } else {
227  // not needed once the physical volume is bult
228  delete ladderServices;
229  }
230  }
231  }
232 
233 
234  //
235  // Calculate the layer envelope dimensions
236  //
237 
238  //
239  // Calculate layerThicknessP: Thickness from layer radius to max radius of envelope
240  //
241 
242  double xCenter = 0.;
243  double yCenter = 0.;
244  if(firstLadderServices){
245 
246  // We need the dimensions of the GeoPixelLadderServices. They are all the same in this regards
247  // so any of them will do - use the first one.
248 
249  GeoTrf::Vector3D corner1 = firstLadderServices->envelopeCornerC1();
250  GeoTrf::Vector3D corner2 = firstLadderServices->envelopeCornerC2();
251  GeoTrf::Vector3D corner3 = firstLadderServices->envelopeCornerA1();
252  GeoTrf::Vector3D corner4 = firstLadderServices->envelopeCornerA2();
253 
254  // translate relative to sensor center (center of tilt rotation),
255  // then tilt then translate by radius of layer, then calculate r.
256  double xLadderServicesOffset = m_gmt_mgr->PixelLadderServicesX();
257  double yLadderServicesOffset = m_gmt_mgr->PixelLadderServicesY();
258  // xCenter, yCenter or coordinates of ladder services relative to active layer center (center of tilt rotation)
259  xCenter = (firstLadderServices->referenceX() + xLadderServicesOffset);
260  yCenter = (firstLadderServices->referenceY() + yLadderServicesOffset);
261  GeoTrf::Transform3D ladderSvcToglobal = GeoTrf::TranslateX3D(layerRadius)
262  * GeoTrf::RotateZ3D(ladderTilt)
263  * GeoTrf::Translate3D(xCenter, yCenter, 0);
264  GeoTrf::Vector3D corner1global = ladderSvcToglobal * corner1;
265  GeoTrf::Vector3D corner2global = ladderSvcToglobal * corner2;
266  GeoTrf::Vector3D corner3global = ladderSvcToglobal * corner3;
267  GeoTrf::Vector3D corner4global = ladderSvcToglobal * corner4;
268 
269  double rMaxTmp = std::max(corner1global.perp(),
270  std::max(corner2global.perp(),
271  std::max(corner3global.perp(), corner4global.perp())));
272  // Thickness from layer radius to max radius of envelope
273  layerThicknessP = std::max(layerThicknessP, rMaxTmp - m_gmt_mgr->PixelLayerRadius());
274 
275  //std::cout << rMaxTmp << std::endl;
276  //std::cout << layerThicknessP<< " "<<layerThicknessN <<std::endl;
277 
278  // No longer needed
279  delete firstLadderServices;
280 
281  }
282 
283 
284  //
285  // Determine the position of the ladders and service volume.
286  //
287  // The active ladder (tmt+modules) has its reference point at the tilt rotation point. So we do not need any extra translation
288  //
289  // The tube and cooling have there reference point
290  // In y: center of cooling tube
291  // In x: ~center of envelope (will change it to base of glue layer.)
292  ladderServicesTransform = GeoTrf::Translate3D(xCenter, yCenter, 0);
293 
294  //
295  // The Pigtail
296  //
298  pigtailPhysVol = pigtail.Build();
299  transPigtail = GeoTrf::Translate3D(m_gmt_mgr->PixelPigtailBendX() + m_gmt_mgr->PixelLadderCableOffsetX(),
301  0.);
302 
303 
304  }
305 
306  //
307  // Layer dimensions from above, etc
308  //
309  double safety = 0.01 * Gaudi::Units::mm;
310  double rmin = m_gmt_mgr->PixelLayerRadius()-layerThicknessN - safety;
311  double rmax = m_gmt_mgr->PixelLayerRadius()+layerThicknessP + safety;
312  double length = m_gmt_mgr->PixelLadderLength() + 4*m_epsilon; // Ladder has length m_gmt_mgr->PixelLadderLength() + 2*m_epsilon
313  //std::cout << "rmin = " << rmin << ", rmax = " << rmax << std::endl;
314 
315  // In case of IBL stave detailed descriptiob
316  bool bAddIBLStaveRings=false;
318  {
319  bAddIBLStaveRings=true;
320  double safety = 0.001 * Gaudi::Units::mm;
321  double outerRadius = m_gmt_mgr->IBLSupportMidRingInnerRadius();
322  rmax=outerRadius-safety;
323 
324  if(m_gmt_mgr->PixelStaveAxe()==1) {
325  double outerRadius = m_gmt_mgr->IBLSupportMidRingOuterRadius();
326  rmax=outerRadius+safety;
327  }
328  m_gmt_mgr->msg(MSG::INFO)<<"Layer IBL / stave ring : outer radius max "<<rmax<<endmsg;
329 
330  }
331 
332 //
333 // Build ladder
334 // GeoVPhysVol *ladderPhys=pixelLadder.Build();
335 //
336 // Now make the layer envelope
337 //
338 // const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
339 // std::ostringstream lname;
340 // lname << "Layer" << m_gmt_mgr->GetLD();
341 // const GeoTube* layerTube = new GeoTube(rmin,rmax,0.5*length); //solid
342 // const GeoLogVol* layerLog = new GeoLogVol(lname.str(),layerTube,air); //log volume
343 // GeoFullPhysVol* layerPhys = new GeoFullPhysVol(layerLog); // phys vol
344 
345 
346  GeoFullPhysVol* layerPhys = nullptr;
347 
348  //
349  // A few variables needed below
350  //
351  double angle=(nSectors>0)?(360./(double)nSectors)*Gaudi::Units::deg:(360.*Gaudi::Units::deg);
352  GeoTrf::Transform3D transRadiusAndTilt = GeoTrf::TranslateX3D(layerRadius)*GeoTrf::RotateZ3D(ladderTilt);
353  double phiOfModuleZero = m_gmt_mgr->PhiOfModuleZero();
354 
355  // IBL rotations are defined vs the cooling pipe center...
356  if(m_gmt_mgr->GetLD()==0&&m_gmt_mgr->ibl()&&m_gmt_mgr->PixelStaveAxe()==1)
357  {
358 
359  // Point that defines the center of the cooling pipe
360  GeoTrf::Vector3D centerCoolingPipe = m_gmt_mgr->IBLStaveRotationAxis() ;
361 
362  // Transforms
363  GeoTrf::Transform3D staveTrf = GeoTrf::RotateZ3D(ladderTilt)*GeoTrf::Translate3D(-centerCoolingPipe.x(),-centerCoolingPipe.y(),-centerCoolingPipe.z());
364  double staveRadius = m_gmt_mgr->IBLStaveRadius() ;
365 
366  transRadiusAndTilt = GeoTrf::TranslateX3D(staveRadius)*staveTrf;
367  }
368 
369  //
370  // Loop over the sectors and place everything
371  //
372  for(int ii = 0; ii < nSectors; ii++) {
373  m_gmt_mgr->SetPhi(ii);
374 
375  // Build ladder
376  GeoVPhysVol *ladderPhys=pixelLadder.Build();
377 
378  if(ii==0){
379  if(bAddIBLStaveRings)
380  {
381  const GeoSimplePolygonBrep* bRep = dynamic_cast<const GeoSimplePolygonBrep*> (ladderPhys->getLogVol()->getShape());
382  length = 2*bRep->getDZ();
383  }
384 
385  //
386  // Now make the layer envelope
387  //
388  m_gmt_mgr->msg(MSG::INFO)<<"Layer "<<m_gmt_mgr->GetLD()<<" in/out radius "<<rmin<<" "<<rmax<<endmsg;
389  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
390  std::ostringstream lname;
391  lname << "Layer" << m_gmt_mgr->GetLD();
392  const GeoTube* layerTube = new GeoTube(rmin,rmax,0.5*length); //solid
393  const GeoLogVol* layerLog = new GeoLogVol(lname.str(),layerTube,air); //log volume
394  layerPhys = new GeoFullPhysVol(layerLog); // phys vol
395  }
396 
397  double phiOfSector = phiOfModuleZero + ii*angle;
398 
399  // transform equiv RotZ(phiOfSector)*TransZ(layerRadius)*RotZ(tilt)
400  GeoTrf::Transform3D ladderTransform = GeoTrf::RotateZ3D(phiOfSector) * transRadiusAndTilt;
401 
402  //
403  // Place the active ladders
404  //
405  std::ostringstream nameTag;
406  nameTag << "Ladder" << ii;
407  GeoNameTag * tag = new GeoNameTag(nameTag.str());
408  GeoTransform* xform = new GeoTransform(ladderTransform);
409  layerPhys->add(tag);
410  layerPhys->add(new GeoIdentifierTag(ii) );
411  layerPhys->add(xform);
412  layerPhys->add(ladderPhys); //pixelLadder.Build());
413 
414  if(m_gmt_mgr->DoServicesOnLadder() && staveLayout == 0) {
415 
416  //
417  // Place the LadderServices volume (omega, tubes, connectors, cables for the layer)
418  //
419  // NB. PixelFluidOrient and PixelCableBiStave depends on phi
420  int ladderType = m_gmt_mgr->PixelFluidOrient(m_gmt_mgr->GetLD(), ii);
421  int biStave = m_gmt_mgr->PixelBiStaveType(m_gmt_mgr->GetLD(), ii) % 2; // Will be 1 or 2 -> Map to 1,0
422  //int biStave = m_gmt_mgr->PixelCableBiStave() % 2;
423  //int biStave = ii % 2;
424  //std::cout << "Layer,phiModule,fluidtype,bistavetype,index: "
425  // << m_gmt_mgr->GetLD() << ", "
426  // << ii << ", "
427  // << ladderType << ", "
428  // << m_gmt_mgr->PixelBiStaveType(m_gmt_mgr->GetLD(), ii) << ", "
429  // << biStave*(maxLadType+1) + ladderType << std::endl;
430 
431 
432  // transform equiv to RotZ(angle)*TransZ(layerRadius)*RotZ(tilt)*transTubeAndCables
433  xform = new GeoTransform(ladderTransform * ladderServicesTransform);
434  layerPhys->add(xform);
435  layerPhys->add(ladderServicesArray[biStave*(maxLadType+1) + ladderType]);
436 
437  // Place the pigtail (the curved section)
438  // transform equiv to RotZ(angle)*TransZ(layerRadius)*RotZ(tilt)*transPigtail
439  xform = new GeoTransform(ladderTransform*transPigtail);
440  layerPhys->add(xform);
441  layerPhys->add(pigtailPhysVol);
442 
443  }
444  }
445  // delete staveSupport;
446 
447  if(layerPhys==nullptr)
448  {
449  m_gmt_mgr->msg(MSG::ERROR)<<"layerPhys = 0 in GeoPixelLayer in "<<__FILE__<<endmsg;
450  std::abort();
451  }
452 
453  //
454  // Extra Material. I don't think there is much room but we provide the hooks anyway
455  //
457  xMat.add(layerPhys,"PixelLayer");
458  std::ostringstream ostr; ostr << m_gmt_mgr->GetLD();
459  xMat.add(layerPhys,"PixelLayer"+ostr.str());
460 
461 
462  //
463  // IBL stave rings area : stave ring + endblock + flex (with dogleg)
464  //
465  if(bAddIBLStaveRings)
466  {
467  m_gmt_mgr->msg(MSG::INFO) << "IBL stave ring support"<< endmsg;
468 
469  GeoPixelStaveRingServices staveRingService(m_DDmgr, m_gmt_mgr, m_sqliteReader, m_mapFPV, m_mapAX, pixelLadder, *staveSupport);
470  staveRingService.Build();
471 
472  m_supportPhysA = staveRingService.getSupportA();
473  m_supportPhysC = staveRingService.getSupportC();
474  m_supportMidRing = staveRingService.getSupportMidRing();
475 
476  m_xformSupportA = staveRingService.getSupportTrfA();
477  m_xformSupportC = staveRingService.getSupportTrfC();
478  m_xformSupportMidRing = staveRingService.getSupportTrfMidRing();
479 
480  if(m_gmt_mgr->PixelStaveAxe()==1) {
481  GeoNameTag *tagM = new GeoNameTag("Brl0M_StaveRing");
482  GeoTransform *xformSupportMidRing = new GeoTransform(GeoTrf::Transform3D::Identity());
483  GeoVPhysVol *supportPhysMidRing = getSupportMidRing();
484  layerPhys->add(tagM);
485  layerPhys->add(xformSupportMidRing);
486  layerPhys->add(supportPhysMidRing);
487  }
488 
489  }
490 
491 
492  return layerPhys;
493 }
494 
PixelGeometryManager::distortedMatManager
virtual InDetDD::DistortedMaterialManager * distortedMatManager()=0
PixelGeometryManager::PixelLadderCableOffsetY
virtual double PixelLadderCableOffsetY()=0
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
PixelGeometryManager::IBLSupportMidRingOuterRadius
virtual double IBLSupportMidRingOuterRadius()=0
GeoPixelLadderServices::envelopeCornerA2
const GeoTrf::Vector3D & envelopeCornerA2()
Definition: GeoPixelLadderServices.h:27
GeoPixelStaveRingServices::getSupportA
GeoPhysVol * getSupportA()
Definition: GeoPixelStaveRingServices.h:31
InDetDD::SiDetectorManager::numerology
const SiNumerology & numerology() const
Access Numerology.
Definition: SiDetectorManager.h:126
max
#define max(a, b)
Definition: cfImp.cxx:41
GeoPixelTMT.h
GeoPixelLayer::Build
virtual GeoVPhysVol * Build() override
Definition: GeoPixelLayer.cxx:52
PixelGeometryManager::SetIBL3DModuleNumber
virtual void SetIBL3DModuleNumber(int nb3DModule)=0
GeoPixelLayer::m_supportMidRing
GeoNodePtr< GeoVPhysVol > m_supportMidRing
Definition: GeoPixelLayer.h:35
PixelGeometryManager
Definition: PixelGeometryManager.h:28
GeoPixelLadderServices.h
PixelGeometryManager::msg
MsgStream & msg(MSG::Level lvl) const
Definition: PixelGeometryManager.h:611
GeoPixelLadderServices
Definition: GeoPixelLadderServices.h:15
GeoPixelLadder.h
GeoPixelLayer::getSupportMidRing
GeoVPhysVol * getSupportMidRing()
Definition: GeoPixelLayer.h:26
GeoPixelLadder::Build
virtual GeoVPhysVol * Build() override
Definition: GeoPixelLadder.cxx:159
PixelGeometryManager::PixelLadderServicesY
virtual double PixelLadderServicesY()=0
GeoPixelLadderServices::referenceX
double referenceX()
Definition: GeoPixelLadderServices.h:30
PixelGeometryManager::ibl
virtual bool ibl() const =0
plotBeamSpotCompare.x2
x2
Definition: plotBeamSpotCompare.py:218
PixelGeometryManager::PixelLadderServicesX
virtual double PixelLadderServicesX()=0
GeoPixelSiCrystal.h
GeoPixelLadder::thicknessN
double thicknessN() const
Definition: GeoPixelLadder.h:31
deg
#define deg
Definition: SbPolyhedron.cxx:17
GeoPixelStaveRingServices::getSupportMidRing
GeoVPhysVol * getSupportMidRing()
Definition: GeoPixelStaveRingServices.h:33
PixelGeometryManager::DoServicesOnLadder
virtual bool DoServicesOnLadder()=0
GeoPixelLayer::m_supportPhysA
GeoNodePtr< GeoPhysVol > m_supportPhysA
Definition: GeoPixelLayer.h:33
ExtraMaterial.h
GeoPixelLayer::m_supportPhysC
GeoNodePtr< GeoPhysVol > m_supportPhysC
Definition: GeoPixelLayer.h:34
GeoPixelStaveRing.h
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
PixelGeometryManager::PixelPigtailBendX
virtual double PixelPigtailBendX()=0
GeoPixelStaveSupport::PixelN3DModule
virtual int PixelN3DModule() const =0
GeoVPixelFactory::m_mapAX
std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > m_mapAX
Definition: GeoVPixelFactory.h:48
GeoVPixelFactory::m_sqliteReader
GeoModelIO::ReadGeoModel * m_sqliteReader
Definition: GeoVPixelFactory.h:46
PixelGeometryManager::IBLSupportMidRingInnerRadius
virtual double IBLSupportMidRingInnerRadius()=0
GeoPixelLadder
Definition: GeoPixelLadder.h:16
PixelGeometryManager::IBLStaveRotationAxis
virtual GeoTrf::Vector3D IBLStaveRotationAxis()=0
GeoPixelLadderServices::envelopeCornerC2
const GeoTrf::Vector3D & envelopeCornerC2()
Definition: GeoPixelLadderServices.h:29
GeoPixelStaveRingServices
Definition: GeoPixelStaveRingServices.h:18
GeoVPixelFactory::m_DDmgr
InDetDD::PixelDetectorManager * m_DDmgr
Definition: GeoVPixelFactory.h:45
makeTRTBarrelCans.y1
tuple y1
Definition: makeTRTBarrelCans.py:15
InDetDD::ExtraMaterial::add
void add(GeoPhysVol *parent, const std::string &parentName, double zPos=0)
Definition: ExtraMaterial.cxx:42
GeoVPixelFactory::m_gmt_mgr
PixelGeometryManager * m_gmt_mgr
Definition: GeoVPixelFactory.h:43
GeoPixelLayer::m_xformSupportA
GeoNodePtr< GeoTransform > m_xformSupportA
Definition: GeoPixelLayer.h:37
GeoVPixelFactory::m_mapFPV
std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > m_mapFPV
Definition: GeoVPixelFactory.h:47
GeoPixelPigtail
Definition: GeoPixelPigtail.h:11
PixelGeometryManager::NPixelSectors
virtual int NPixelSectors()=0
BchCleanup.mgr
mgr
Definition: BchCleanup.py:294
PixelGeometryManager::PixelBiStaveType
virtual int PixelBiStaveType(int layer, int phi)=0
GeoPixelSiCrystal
Definition: GeoPixelSiCrystal.h:20
GeoPrimitives.h
GeoPixelStaveRingServices::Build
virtual GeoVPhysVol * Build() override
Definition: GeoPixelStaveRingServices.cxx:46
GeoPixelDetailedStaveSupport.h
PixelDetectorManager.h
GeoPixelStaveRingServices.h
GeoPixelLadderServices::Build
virtual GeoVPhysVol * Build() override
Definition: GeoPixelLadderServices.cxx:101
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
angle
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
Definition: TRTDetectorFactory_Full.cxx:73
makeTRTBarrelCans.y2
tuple y2
Definition: makeTRTBarrelCans.py:18
PixelGeometryManager::PixelLadderTilt
virtual double PixelLadderTilt()=0
PixelGeometryManager::IBLStaveRadius
virtual double IBLStaveRadius()=0
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
PixelGeometryManager::SetPhi
virtual void SetPhi(int phi)=0
GeoPixelPigtail.h
PixelGeometryManager::PixelPigtailBendY
virtual double PixelPigtailBendY()=0
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
GeoPixelLadderServices::envelopeCornerA1
const GeoTrf::Vector3D & envelopeCornerA1()
Definition: GeoPixelLadderServices.h:26
PixelGeometryManager::PixelNModule
virtual int PixelNModule()=0
PixelGeometryManager::SetIBLPlanarModuleNumber
virtual void SetIBLPlanarModuleNumber(int nbPlanarModule)=0
InDetDD::PixelDetectorManager
Definition: PixelDetectorManager.h:47
PixelGeometryManager::PixelStaveLayout
virtual int PixelStaveLayout()=0
GeoVPixelFactory::m_epsilon
const double m_epsilon
Definition: GeoVPixelFactory.h:49
InDetDD::SiNumerology::setNumEtaModulesForLayer
void setNumEtaModulesForLayer(int layer, int nEtaModules)
Definition: SiNumerology.cxx:67
GeoPixelStaveRingServices::getSupportTrfMidRing
GeoTransform * getSupportTrfMidRing()
Definition: GeoPixelStaveRingServices.h:37
PixelGeometryManager::PixelLadderLength
virtual double PixelLadderLength()=0
GeoVPixelFactory::m_mat_mgr
InDetMaterialManager * m_mat_mgr
Definition: GeoVPixelFactory.h:44
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
PixelGeometryManager::PixelStaveAxe
virtual int PixelStaveAxe()=0
GeoPixelLadderServices::envelopeCornerC1
const GeoTrf::Vector3D & envelopeCornerC1()
Definition: GeoPixelLadderServices.h:28
Trk::iPhi
@ iPhi
Definition: ParamDefs.h:53
GeoPixelLadder::thicknessP
double thicknessP() const
Definition: GeoPixelLadder.h:30
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
GeoPixelLadderServices::referenceY
double referenceY()
Definition: GeoPixelLadderServices.h:31
PixelGeometryManager::PhiOfModuleZero
virtual double PhiOfModuleZero()=0
GeoPixelStaveRingServices::getSupportC
GeoPhysVol * getSupportC()
Definition: GeoPixelStaveRingServices.h:32
GeoPixelLayer::m_xformSupportMidRing
GeoNodePtr< GeoTransform > m_xformSupportMidRing
Definition: GeoPixelLayer.h:39
GeoPixelLayer::GeoPixelLayer
GeoPixelLayer(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, GeoModelIO::ReadGeoModel *sqliteReader, std::shared_ptr< std::map< std::string, GeoFullPhysVol * >> mapFPV, std::shared_ptr< std::map< std::string, GeoAlignableTransform * >> mapAX)
Definition: GeoPixelLayer.cxx:37
GeoPixelLadder::width
double width() const
Definition: GeoPixelLadder.h:32
GeoPixelStaveRingServices::getSupportTrfC
GeoTransform * getSupportTrfC()
Definition: GeoPixelStaveRingServices.h:36
PixelGeometryManager::PixelLayerRadius
virtual double PixelLayerRadius()=0
GeoVPixelFactory
This is the base class for all the pieces of the Pixel detector.
Definition: GeoVPixelFactory.h:31
GeoPixelPigtail::Build
virtual GeoVPhysVol * Build() override
Definition: GeoPixelPigtail.cxx:21
CaloCondBlobAlgs_fillNoiseFromASCII.tag
string tag
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:24
GeoPixelLayer::m_xformSupportC
GeoNodePtr< GeoTransform > m_xformSupportC
Definition: GeoPixelLayer.h:38
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
InDetMaterialManager::getMaterial
const GeoMaterial * getMaterial(const std::string &materialName)
Get material. First looks for locally defined material and if not found looks in GeoModel material ma...
Definition: InDetMaterialManager.cxx:96
InDetDD::ExtraMaterial
Definition: ExtraMaterial.h:23
GeoPixelSimpleStaveSupport.h
GeoPixelLayer.h
PixelGeometryManager::PixelFluidOrient
virtual int PixelFluidOrient(int layer, int phi)=0
GeoPixelStaveSupport::PixelNPlanarModule
virtual int PixelNPlanarModule() const =0
InDetDD::SiNumerology::setNumPhiModulesForLayer
void setNumPhiModulesForLayer(int layer, int nPhiModules)
Definition: SiNumerology.cxx:61
length
double length(const pvec &v)
Definition: FPGATrackSimLLPDoubletHoughTransformTool.cxx:26
GeoPixelStaveRingServices::getSupportTrfA
GeoTransform * getSupportTrfA()
Definition: GeoPixelStaveRingServices.h:35
PixelGeometryManager::PixelLadderCableOffsetX
virtual double PixelLadderCableOffsetX()=0
PixelGeometryManager::GetLD
virtual int GetLD()=0