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