ATLAS Offline Software
PixelDetectorDC1DC2.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // This file is basically a concatenation of all the *.cxx files.
6 // This allows one to keep a stable copy of the DC2 version and
7 // allow development of future versions.
8 
9 #include "PixelDetectorDC1DC2.h"
10 
17 
19 #include "GeoModelKernel/GeoAlignableTransform.h"
20 #include "GeoModelKernel/GeoBox.h"
21 #include "GeoModelKernel/GeoFullPhysVol.h"
22 #include "GeoModelKernel/GeoIdentifierTag.h"
23 #include "GeoModelKernel/GeoLogVol.h"
24 #include "GeoModelKernel/GeoMaterial.h"
25 #include "GeoModelKernel/GeoNameTag.h"
26 #include "GeoModelKernel/GeoPhysVol.h"
27 #include "GeoModelKernel/GeoTransform.h"
28 #include "GeoModelKernel/GeoTube.h"
29 #include "GeoModelKernel/GeoTubs.h"
30 #include "GaudiKernel/PhysicalConstants.h"
33 #include "Identifier/Identifier.h"
34 #include "StoreGate/StoreGateSvc.h"
35 #include "GaudiKernel/Bootstrap.h"
36 #include "GaudiKernel/ISvcLocator.h"
37 
40 
41 #include <memory>
42 #include <vector>
43 
44 #include "PixelGeoUtils.h"
45 
46 using namespace PixelGeoDC2;
47 
48 
49 //---------------------------------------------------//
50 // //
51 // GeoPixelBarrel //
52 // //
53 //---------------------------------------------------//
54 
55 
56 GeoVPhysVol* GeoPixelBarrel::Build( ) {
57 
58  //
59  // create the Barrel Mother volume
60  //
61  double rmin = m_gmt_mgr->PixelBarrelRMin();
62  double rmax = m_gmt_mgr->PixelBarrelRMax();
63  double halflength = m_gmt_mgr->PixelBarrelHalfLength();
64  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
65  const GeoTube* barrelTube = new GeoTube(rmin,rmax,halflength);
66  const GeoLogVol* barrelLog = new GeoLogVol("barrelLog",barrelTube,air);
67  GeoPhysVol* barrelPhys = new GeoPhysVol(barrelLog);
68 
69  // Set numerology
71 
72  //
73  // Build the layers inside
74  //
76  std::string lname[3];
77  lname[0] = "InnerLayer";
78  lname[1] = "CenterLayer";
79  lname[2] = "OuterLayer";
80  for(int ii = 0; ii < m_gmt_mgr->PixelBarrelNLayer(); ii++) {
81  //cout << "Layer" << ii << endl;
83  if(m_gmt_mgr->isLDPresent()) {
84  GeoAlignableTransform * xform = new GeoAlignableTransform(GeoTrf::Transform3D::Identity());
85  GeoVPhysVol* layerphys = layer.Build();
86  GeoNameTag *tag = new GeoNameTag(lname[ii]);
87  barrelPhys->add(tag);
88  barrelPhys->add(new GeoIdentifierTag(ii));
89  barrelPhys->add(xform);
90  barrelPhys->add(layerphys);
91 
92  // Store the transform (at level 1)
93  Identifier id = m_gmt_mgr->getIdHelper()->wafer_id(0,ii,0,0);
94  m_DDmgr->addAlignableTransform(1, id, xform, layerphys);
95  } else {
96  m_gmt_mgr->msg(MSG::DEBUG) << "Layer " << ii << " not built" << endmsg;
97  }
98  }
99  if(m_gmt_mgr->DoServices() ) {
100  //
101  // Add the services inside the barrel volume
102  //
103  GeoPixelServices brlsvc = GeoPixelServices(m_DDmgr, m_gmt_mgr, "/Pixel/PixelBarrel");
104  for(int ii =0; ii< brlsvc.NCylinders(); ii++) {
105  brlsvc.SetCylinder(ii);
106  GeoNameTag* tag = new GeoNameTag("Outside Barrel Service");
107  GeoTrf::Translate3D pos(0.,0.,brlsvc.ZPos() );
108  GeoTransform* xform = new GeoTransform(pos);
109  barrelPhys->add(tag);
110  barrelPhys->add(xform);
111  barrelPhys->add(brlsvc.Build() );
112  }
113  }
114  return barrelPhys;
115 }
116 
117 //---------------------------------------------------//
118 // //
119 // GeoPixelCable //
120 // //
121 //---------------------------------------------------//
122 
123 
124 
125 GeoVPhysVol* GeoPixelCable::Build() {
126  //
127  // Dimensions
128  //
129  double length = this->Length();
130  double thickness = this->Thickness();
131  double width = m_gmt_mgr->PixelCableWidth();
132  const GeoMaterial* cable = m_mat_mgr->getMaterial("pix::Cable");
133  const GeoBox* cableBox = new GeoBox(thickness/2.,width/2.,length/2.);
134  std::string logName = std::string("cableLog")+std::to_string(m_moduleNumber);;
135  GeoLogVol* theCable = new GeoLogVol(logName,cableBox,cable);
136  GeoPhysVol* cablePhys = new GeoPhysVol(theCable);
137  return cablePhys;
138 }
139 
140 
142  //
143  // The cable is running from the beginning of the module to which
144  // it is attached to the end of the ladder,
145  // zmax gives the end of the ladder and zmin is the begining of the module
146  // in absolute value, so the cable lenght is the difference b/w the two
147  // the TubeCables factory will have to position this cable in the correct
148  // side.
149  //
150  double zmax = m_gmt_mgr->PixelCableZMax();
152  return zmax-zmin-m_epsilon;
153 }
154 
155 double GeoPixelCable::Thickness() const {
156  //
157  // This is calculated from the Gaudi::Units::rad length of the cables and their mass
158  // I have to go back on this later when I'll have defined a material
159  // manager, for the time being I get the thickness by atlsim, using dtree
160  // anf hardwire the numbers in the code...
161  // I have to come back on the thickness using the cables recipes
162  //
163  if(m_moduleNumber == 0) return 2.*0.0028412*Gaudi::Units::cm;
164  if(m_moduleNumber == 1) return 2.*0.0056795*Gaudi::Units::cm;
165  if(m_moduleNumber == 2) return 2.*0.0056830*Gaudi::Units::cm;
166  if(m_moduleNumber == 3) return 2.*0.0056763*Gaudi::Units::cm;
167  if(m_moduleNumber == 4) return 2.*0.0056752*Gaudi::Units::cm;
168  if(m_moduleNumber == 5) return 2.*0.0057058*Gaudi::Units::cm;
169  if(m_moduleNumber == 6) return 2.*0.0056818*Gaudi::Units::cm;
170 
171  return 0.;
172 
173 }
174 
175 //---------------------------------------------------//
176 // //
177 // GeoPixelChip //
178 // //
179 //---------------------------------------------------//
180 
181 
182 //
183 // This class builds one Chip to be placed in one module
184 //
185 // The information on which layer to build is retrieved by the Geometry Manager
186 //
187 // Contained by: PixelModule_log
188 //
189 // Contains: nothing
190 //
191 
192 GeoVPhysVol* GeoPixelChip::Build() {
193  //
194  // Dimensions
195  //
196  double length = m_gmt_mgr->PixelChipLength();
197  double thickness = m_gmt_mgr->PixelChipThickness();
198  double width = m_gmt_mgr->PixelChipWidth();
199  const GeoMaterial* chipMat = m_mat_mgr->getMaterial("pix::Chip");
200  std::string LogName = "chipBrlLog";
201  //
202  // In G3 is like this...
203  //
204  if(m_gmt_mgr->isEndcap() ) {
205  chipMat = m_mat_mgr->getMaterial("std::Silicon");
206  LogName = "chipECLog";
207  }
208 
209  //std::cout << "DC1 chip thick" << thickness << std::endl;
210  const GeoBox* chipBox = new GeoBox(thickness/2.,width/2.,length/2.);
211  GeoLogVol* theChip = new GeoLogVol(LogName,chipBox,chipMat);
212  GeoPhysVol* chipPhys = new GeoPhysVol(theChip);
213  return chipPhys;
214 }
215 
216 
217 //---------------------------------------------------//
218 // //
219 // GeoPixelDisk //
220 // //
221 //---------------------------------------------------//
222 
223 
226  : GeoVPixelFactory (ddmgr, mgr)
227 {
228 
229  // Define the log volume in the constructor, so I do it only once.
230  //
231 
232  //
233  // Dimensions from class methods.
234  //
235  double rmin = RMin();
236  double rmax = RMax();
237  double halflength = Thickness()*0.5;
238  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
239  const GeoTube* diskTube = new GeoTube(rmin,rmax,halflength);
240  m_theDisk = new GeoLogVol("diskLog",diskTube,air);
241 }
242 
243 GeoVPhysVol* GeoPixelDisk::Build( ) {
244  //
245  // Define the Sensor to be used here, so it will be the same for all the disk
246  GeoPixelSiCrystal theSensor(m_DDmgr, m_gmt_mgr, false);
247  GeoFullPhysVol* diskPhys = new GeoFullPhysVol(m_theDisk);
248  //
249  // Place the disk sectors (on both sides):
250  //
251  GeoPixelSubDisk psd(m_DDmgr, m_gmt_mgr, theSensor);
252  double zpos = -m_gmt_mgr->PixelECSiDz1()/2.;
254  GeoTrf::Translation3D pos(0.,0.,zpos);
255 
256  // Set numerology
257  m_gmt_mgr->SetEta(0);
260 
261  // Even modules
262  m_gmt_mgr->SetEta(0);
263  for (int ii = 0; ii < m_gmt_mgr->PixelECNSectors1(); ii++) {
264  m_gmt_mgr->SetPhi(ii);
265  GeoTrf::Transform3D rm = GeoTrf::RotateZ3D(ii*angle+angle/2.)*GeoTrf::RotateX3D(180.*Gaudi::Units::deg);
266  GeoAlignableTransform* xform = new GeoAlignableTransform(GeoTrf::Transform3D(pos*rm));
267  GeoVPhysVol * modulePhys = psd.Build();
268  GeoNameTag* tag = new GeoNameTag("DiskSector");
269  diskPhys->add(tag);
270  diskPhys->add(new GeoIdentifierTag(getPhiId() ) );
271  diskPhys->add(xform);
272  diskPhys->add(modulePhys);
273 
274  // Now store the xform by identifier:
275  Identifier id = theSensor.getID();
276  m_DDmgr->addAlignableTransform(0,id,xform,modulePhys);
277  }
278 
279  // Odd modules
280  m_gmt_mgr->SetEta(1);
281  zpos = m_gmt_mgr->PixelECSiDz2()/2.;
282  pos = GeoTrf::Translation3D(0.,0.,zpos);
283  for (int ii = 0; ii < m_gmt_mgr->PixelECNSectors1(); ii++) {
284  m_gmt_mgr->SetPhi(ii);
285  GeoTrf::RotateZ3D rm((ii+1)*angle);
286  GeoAlignableTransform* xform = new GeoAlignableTransform(GeoTrf::Transform3D(pos*rm));
287  GeoVPhysVol * modulePhys = psd.Build();
288  GeoNameTag* tag = new GeoNameTag("DiskSector");
289  diskPhys->add(tag);
290  diskPhys->add(new GeoIdentifierTag(getPhiId() ) );
291  diskPhys->add(xform);
292  diskPhys->add(modulePhys);
293 
294  // Now store the xform by identifier:
295  Identifier id = theSensor.getID();
296  m_DDmgr->addAlignableTransform(0,id,xform,modulePhys);
297  }
298  //
299  // Place the supports for the disks:
300  //
302  for(int ii =0; ii< pds.NCylinders(); ii++) {
303  pds.SetCylinder(ii);
304  GeoTrf::Translate3D pos(0.,0.,pds.ZPos() );
305  GeoNameTag* tag = new GeoNameTag("DiskSupport");
306  GeoTransform* xform = new GeoTransform(pos);
307  diskPhys->add(tag);
308  diskPhys->add(xform);
309  diskPhys->add(pds.Build() );
310  }
311 
312  return diskPhys;
313 }
314 
316  return m_gmt_mgr->PixelECCarbonRMin("Inner");
317 }
318 
320  return m_gmt_mgr->PixelECCarbonRMax("Outer");
321 }
322 
324  //
325  // This can be calculated as the minimum thickness possible
326  // as for the layers I use a number which is enough to contain
327  // the inner part of the detector.
328  //
329  // 7-1 I switch to the minimum thickness possible as the cables are right
330  // outside this volume.
331  //
332  // return 10*Gaudi::Units::mm;
333  double tck = 2*(m_gmt_mgr->PixelBoardThickness()
336  return tck;
337 }
338 
339 
340 //
341 // This is to retrofit the convention in the pixelId
342 // \which is coming from atlsim...
343 //
345  int brl_ec=0;
346  int phimod;
347  if(m_gmt_mgr->isBarrel() ) brl_ec = 0;
348  if(m_gmt_mgr->isEndcap() ) brl_ec = 2*m_gmt_mgr->GetSide();
349  if(brl_ec == 2) {
350  phimod = m_gmt_mgr->Phi()*2 + m_gmt_mgr->Eta();
351  } else {
352  //
353  // The (eta) negative) endcap is more complicated, as there is an extra
354  // rotation of the endcap as a whole around Y
355  //
356  phimod = 48-m_gmt_mgr->Phi()*2-m_gmt_mgr->Eta()-2;
357  if (phimod == -1) phimod = 47;
358  }
359  return phimod;
360 }
361 
362 
363 //---------------------------------------------------//
364 // //
365 // GeoPixelDiskSupports //
366 // //
367 //---------------------------------------------------//
368 
369 
372  : GeoVPixelFactory (ddmgr, mgr)
373 {
374  //
375  // Initialize the vectors
376  //
377  //
378  // zpos is not needed, but it's here just in case...
379  //
380  std::string ele[3] = {"Inner", "Central", "Outer"};
381  for (int ii =0; ii<3; ii++) {
382  double rmin = m_gmt_mgr->PixelECCarbonRMin(ele[ii]);
383  double rmax = m_gmt_mgr->PixelECCarbonRMax(ele[ii]);
384  double halflength = m_gmt_mgr->PixelECCarbonThickness(ele[ii])/2.;
385  double zpos = 0.;
386  std::string mat = m_gmt_mgr->PixelECCarbonMaterial(ele[ii]);
387  m_rmin.push_back(rmin);
388  m_rmax.push_back(rmax);
389  m_zpos.push_back(zpos);
390  m_halflength.push_back(halflength);
391  m_material.push_back(mat);
392  }
393 }
394 
395 
396 
398  const GeoMaterial* supportMat = m_mat_mgr->getMaterial(m_material[m_nframe]);
399  //
400  // Dimensions: (m_nframe set with teh SetCylinder method)
401  //
402  double rmin = m_rmin[m_nframe];
403  double rmax = m_rmax[m_nframe];
404  double halflength = m_halflength[m_nframe];
405  const GeoTube* supportTube = new GeoTube(rmin,rmax,halflength);
406  std::string logName = std::string("diskSupLog")+std::to_string(m_nframe);
407  GeoLogVol* theSupport = new GeoLogVol(logName,supportTube,supportMat);
408  GeoPhysVol* supportPhys = new GeoPhysVol(theSupport);
409  return supportPhys;
410 }
411 
412 
413 //---------------------------------------------------//
414 // //
415 // GeoPixelECCable //
416 // //
417 //---------------------------------------------------//
418 
421  : GeoVPixelFactory (ddmgr, mgr)
422 {
423  //
424  // Define the log volume in the constructor, so I do it only once.
425  //
426 
427  //
428  // Dimensions
429  //
430  double rmin = m_gmt_mgr->PixelECCablesRMin();
431  double rmax = m_gmt_mgr->PixelECCablesRMax();
432  double thickness = m_gmt_mgr->PixelECCablesThickness();
433  const GeoMaterial* cableMat = m_mat_mgr->getMaterial("pix::ECCables");
434  const GeoTube* cableTube = new GeoTube(rmin,rmax,thickness*0.5);
435  m_theECCable = new GeoLogVol("ECCableLog",cableTube,cableMat);
436 }
437 
438 GeoVPhysVol* GeoPixelECCable::Build( ) {
439  GeoPhysVol* cablePhys = new GeoPhysVol(m_theECCable);
440  return cablePhys;
441 }
442 
443 
444 //---------------------------------------------------//
445 // //
446 // GeoPixelEndCap //
447 // //
448 //---------------------------------------------------//
449 
450 
451 GeoVPhysVol* GeoPixelEndCap::Build( ) {
452 
453  //
454  // create the Barrel Mother volume
455  //
456  double rmin = m_gmt_mgr->PixelEndcapRMin();
457  double rmax = m_gmt_mgr->PixelEndcapRMax();
458  double halflength = (m_gmt_mgr->PixelEndcapZMax()-m_gmt_mgr->PixelEndcapZMin())/2.;
459  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
460  const GeoTube* ecTube = new GeoTube(rmin,rmax,halflength);
461  const GeoLogVol* ecLog = new GeoLogVol("EndCapLog",ecTube,air);
462  GeoPhysVol* ecPhys = new GeoPhysVol(ecLog);
463 
464  // Set numerology
466 
467  //
468  // Place the disks and cables on both sides
469  //
472  for(int ii = 0; ii < m_gmt_mgr->PixelEndcapNDisk(); ii++) {
473  m_gmt_mgr->SetCurrentLD(ii);
474  if(m_gmt_mgr->isLDPresent()) {
475  //
476  // The position is given w.r.t to the center of the detector!
477  //
478  // position of the endcap
479  double ecz = (m_gmt_mgr->PixelEndcapZMax()+m_gmt_mgr->PixelEndcapZMin())/2.;
480  //position of the disk
481  double zdisk = m_gmt_mgr->PixelDiskPosition()-ecz;
482  // place the disk
483  GeoTrf::Translate3D pos(0.,0.,zdisk);
484  GeoNameTag* tag = new GeoNameTag("Disk");
485  GeoAlignableTransform* xform = new GeoAlignableTransform(pos);
486  GeoVPhysVol * diskPhys = pd.Build();
487  ecPhys->add(tag);
488  ecPhys->add(new GeoIdentifierTag(ii));
489  ecPhys->add(xform);
490  ecPhys->add(diskPhys);
491 
492  // Store the alignable transform
493  int brl_ec = 2*m_gmt_mgr->GetSide();
494  Identifier id = m_gmt_mgr->getIdHelper()->wafer_id(brl_ec,ii,0,0);
495  m_DDmgr->addAlignableTransform(1, id, xform, diskPhys);
496 
497  //
498  // place the cables twice for the two active parts
499  //
500  double dz = pd.Thickness()/2. + m_gmt_mgr->PixelECCablesDistance() ;
501  pos = GeoTrf::Translate3D(0.,0.,zdisk+dz);
502  tag = new GeoNameTag("ECCables");
503  GeoTransform * xformCablesPlus = new GeoTransform(pos);
504  ecPhys->add(tag);
505  ecPhys->add(xformCablesPlus);
506  ecPhys->add(pecc.Build() );
507  pos = GeoTrf::Translate3D(0.,0.,zdisk-dz);
508  tag = new GeoNameTag("ECCables");
509  GeoTransform * xformCablesMinus = new GeoTransform(pos);
510  ecPhys->add(tag);
511  ecPhys->add(xformCablesMinus);
512  ecPhys->add(pecc.Build() );
513  } else {
514  if(m_gmt_mgr->msgLvl(MSG::DEBUG)) m_gmt_mgr->msg(MSG::DEBUG) << "Disk " << ii << " not built" << endmsg;
515 
516  }
517  }
518  if(m_gmt_mgr->DoServices() ) {
519  //
520  // Add the Endcap services inide the EC volume
521  //
522  GeoPixelServices ecsvc = GeoPixelServices(m_DDmgr, m_gmt_mgr, "/Pixel/PixelEndcap");
523  for(int ii =0; ii< ecsvc.NCylinders(); ii++) {
524  ecsvc.SetCylinder(ii);
525  GeoNameTag* tag = new GeoNameTag("Outside Endcap Service");
526  GeoTrf::Translate3D pos(0.,0.,ecsvc.ZPos() );
527  GeoTransform* xform = new GeoTransform(pos);
528  ecPhys->add(tag);
529  ecPhys->add(xform);
530  ecPhys->add(ecsvc.Build() );
531  }
532  }
533  return ecPhys;
534 }
535 
536 //---------------------------------------------------//
537 // //
538 // GeoPixelEnvelope //
539 // //
540 //---------------------------------------------------//
541 
542 
543 GeoVPhysVol* GeoPixelEnvelope::Build( ) {
544  //
545  // create the External volume where I'll put all the pixel detector
546  //
547  double rmin = m_gmt_mgr->PixelRMin();
548  double rmax = m_gmt_mgr->PixelRMax();
549  double halflength = m_gmt_mgr->PixelHalfLength();
550  //std::cout << "Material Manager " << m_mat_mgr << std::endl;
551  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
552  const GeoTube* envelopeTube = new GeoTube(rmin,rmax,halflength);
553  const GeoLogVol* envelopeLog = new GeoLogVol("Pixel",envelopeTube,air);
554  GeoFullPhysVol* envelopePhys = new GeoFullPhysVol(envelopeLog);
555  //
556  // Add the Barrel:
557  //
559  m_gmt_mgr->SetBarrel();
561  GeoNameTag* tag = new GeoNameTag("Barrel");
562  GeoVPhysVol* barrelPhys = brl.Build() ;
563  envelopePhys->add(tag);
564  envelopePhys->add(new GeoIdentifierTag(0));
565  envelopePhys->add(barrelPhys );
566  if(m_gmt_mgr->DoServices() ) {
567  //
568  // Add the Barrel services outside the barrel volume
569  //
570  GeoPixelServices brlsvc = GeoPixelServices(m_DDmgr, m_gmt_mgr, "/Pixel");
571  for(int ii =0; ii< brlsvc.NCylinders(); ii++) {
572  brlsvc.SetCylinder(ii);
573  GeoNameTag* tag = new GeoNameTag("Outside Barrel Service");
574  GeoTrf::Translate3D pos(0.,0.,brlsvc.ZPos() );
575  GeoTransform* xform = new GeoTransform(pos);
576  envelopePhys->add(tag);
577  envelopePhys->add(new GeoIdentifierTag(ii) );
578  envelopePhys->add(xform);
579  envelopePhys->add(brlsvc.Build() );
580  }
581  }
582  //
583  // Add the EndCaps
584  //
587  m_gmt_mgr->SetEndcap();
588  m_gmt_mgr->SetPos();
590  double zpos = (m_gmt_mgr->PixelEndcapZMax()+m_gmt_mgr->PixelEndcapZMin())/2.;
591  GeoTrf::Translate3D pos(0.,0.,zpos);
592  GeoTransform* xform = new GeoTransform(pos);
593  tag = new GeoNameTag("EndCap 1");
594  envelopePhys->add(tag);
595  envelopePhys->add(new GeoIdentifierTag(2));
596  envelopePhys->add(xform);
597  envelopePhys->add(pec.Build() );
598  m_gmt_mgr->SetNeg();
599  GeoTrf::RotateX3D rm(180.*Gaudi::Units::deg);
600  xform = new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translation3D(0.,0.,-zpos)*rm));
601  tag = new GeoNameTag("EndCap 2");
602  envelopePhys->add(tag);
603  envelopePhys->add(new GeoIdentifierTag(-2));
604  envelopePhys->add(xform);
605  envelopePhys->add(pec.Build() );
606  if(m_gmt_mgr->DoServices() ) {
607  //
608  // Add the Endcap services outside the EC volume
609  //
611  for(int ii =0; ii< ecsvc.NCylinders(); ii++) {
612  ecsvc.SetCylinder(ii);
613  GeoNameTag* tag = new GeoNameTag("Outside Endcap Service");
614  GeoTrf::Translate3D pos(0.,0.,ecsvc.ZPos() );
615  GeoTransform* xform = new GeoTransform(pos);
616  envelopePhys->add(tag);
617  envelopePhys->add(xform);
618  envelopePhys->add(new GeoIdentifierTag(ii) );
619  envelopePhys->add(ecsvc.Build() );
620  }
621  }
622  return envelopePhys;
623 
624  //
625  // Want other stuff?
626  //
627  // GeoPixelLadder brl;
628  // GeoPixelTubeCables brl;
629  // GeoPixelModule brl;
630 
631 
632 }
633 
634 
635 //---------------------------------------------------//
636 // //
637 // GeoPixelHybrid //
638 // //
639 //---------------------------------------------------//
640 
641 //
642 // This class builds one Hybrid to be placed in one module
643 //
644 // The information on which layer to build is retrieved by the Geometry Manager
645 //
646 // Contained by: PixelModule_log
647 //
648 // Contains: nothing
649 //
650 
651 GeoVPhysVol* GeoPixelHybrid::Build() {
652  //
653  // Dimensions
654  //
655  double length = m_gmt_mgr->PixelHybridLength();
656  double thickness = m_gmt_mgr->PixelHybridThickness();
657  double width = m_gmt_mgr->PixelHybridWidth();
658  const GeoMaterial* hybridMat = m_mat_mgr->getMaterial("pix::Hybrid");
659  if(m_gmt_mgr->isEndcap() )hybridMat = m_mat_mgr->getMaterial("std::Silicon");
660  const GeoBox* hybridBox = new GeoBox(thickness/2.,width/2.,length/2.);
661  std::string logName = "hybridECLog";
662  if(m_gmt_mgr->isBarrel() ) logName = "hybridBrlLog";
663  GeoLogVol* theHybrid = new GeoLogVol(logName,hybridBox,hybridMat);
664  GeoPhysVol* hybridPhys = new GeoPhysVol(theHybrid);
665  return hybridPhys;
666 }
667 
668 //---------------------------------------------------//
669 // //
670 // GeoPixelLadder //
671 // //
672 //---------------------------------------------------//
673 
674 
677  GeoPixelSiCrystal& theSensor)
678  : GeoVPixelFactory (ddmgr, mgr),
679  m_theSensor(theSensor)
680 {
681  using std::max;
682 
683  //
684  // Define the log volume in the constructor, so I do it only once.
685  //
686 
687  //
688  // Length of the ladder is in the db
689  //
690  double halflength = m_gmt_mgr->PixelLadderHalfLength();
691  //
692  // The width is the maximum among the componenst widths
693  //
694  double width = max( max(
698  //
699  // The thickness has to be calculated
700  //
701  double thickness = this->Thickness();
702  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
703  const GeoBox* ladderBox = new GeoBox(thickness*0.5,width*0.5,halflength);
704  m_theLadder = new GeoLogVol("ladderLog",ladderBox,air);
705 }
706 
707 GeoVPhysVol* GeoPixelLadder::Build( ) {
708  GeoPhysVol* ladderPhys = new GeoPhysVol(m_theLadder);
709  //
710  // Place the Modules
711  //
713  int HalfNModule = m_gmt_mgr->PixelNModule()/2;
714  for(int ii = 0; ii < m_gmt_mgr->PixelNModule(); ii++) {
715  //
716  // Which of the two sides is it?
717  //
718  float side = 1.;
719  int jj = ii-HalfNModule;
720  m_gmt_mgr->SetEta(jj);
721  if(jj < 0) {
722  side = -1.;
723  jj = -jj;
724  }
725 //
726 // Shift down the central module, as its flag (from NOVA) is -1.
727 //
729 //
730 // Get the z position from the db
731 //
732  float zpos = m_gmt_mgr->PixelModulePosition(jj)*side;
733  GeoTrf::Translation3D modulepos(xpos,0.,zpos);
734 //
735 //
736 //
737  //
738  // again change sign w.r.t. g4
739  //
740  GeoTrf::RotateY3D rm(m_gmt_mgr->PixelModuleAngle()*m_gmt_mgr->PixelModuleAngleSign(ii) );
741 //
742 // Place the Module
743 //
744  GeoVPhysVol* modulephys = pm.Build() ;
745  GeoNameTag *tag = new GeoNameTag("Module");
746  GeoAlignableTransform* xform;
747  // OLD EXAMPLE FOR ALIGNEMENT!!
748  // if(m_gmt_mgr->IsAlign() ) {
749  // xform = new GeoSiAlTransform(GeoTrf::Transform3D(rm,modulepos), pm.getID() );
750  // } else {
751  // xform = new GeoTransform(GeoTrf::Transform3D(rm,modulepos));
752  // }
753  xform = new GeoAlignableTransform(GeoTrf::Transform3D(modulepos*rm));
754  ladderPhys->add(tag);
755  ladderPhys->add(new GeoIdentifierTag(m_gmt_mgr->Eta() ) );
756  ladderPhys->add(xform);
757  ladderPhys->add(modulephys );
758 
759  // Now store the xform by identifier:
761  m_DDmgr->addAlignableTransform(0,id,xform,modulephys);
762 
763  }
764  return ladderPhys;
765 }
766 
767 
769  //
770  // The thickness of the ladderis calculated starting from the thickness of
771  // its components: Board + Hybrid+Chips
772  // then the distance of the modules from the center is added and
773  // a factor is added to account for the tilt of ~1degree given to
774  // have a z overlap of the single modules
775  //
776  double tckincl = (m_gmt_mgr->PixelBoardLength()+m_gmt_mgr->PixelBalcony())*
778  double thick = m_gmt_mgr->PixelBoardThickness()+
782  tckincl;
783  return thick;
784 }
785 
786 
787 //---------------------------------------------------//
788 // //
789 // GeoPixelLadderStruct //
790 // //
791 //---------------------------------------------------//
792 
793 
795  //
796  // create the structure to hold the ladder
797  //
798  //
799  // Dimensions
800  //
801  double halflength = m_gmt_mgr->PixelLadderHalfLength();
802  double thickness = m_gmt_mgr->PixelLadderThickness();
803  double width = m_gmt_mgr->PixelLadderWidth();
804  //
805  // This is ladder material
806  //
807  const GeoMaterial* ladderMat = m_mat_mgr->getMaterial("pix::Ladder");
808  const GeoBox* ladderStructBox = new GeoBox(thickness/2.,width/2.,halflength);
809  const GeoLogVol* ladderStructLog = new GeoLogVol("ladderStructLog",ladderStructBox,ladderMat);
810  GeoPhysVol* ladderStructPhys = new GeoPhysVol(ladderStructLog);
811  return ladderStructPhys;
812 }
813 
814 
815 //---------------------------------------------------//
816 // //
817 // GeoPixelLayer //
818 // //
819 //---------------------------------------------------//
820 
821 
822 GeoVPhysVol* GeoPixelLayer::Build() {
823 
824  //
825  // create the three barrel layers
826  // Build the sensor first to use the same for all the module in the layer
827  bool isBLayer = false;
828  if(m_gmt_mgr->GetLD() == 0) isBLayer = true;
829  GeoPixelSiCrystal theSensor(m_DDmgr, m_gmt_mgr, isBLayer);
830  //
831  // This is the maximum possible w/o going out of the mother volume!
832  //
833  double LayerThickness = 8.499*Gaudi::Units::mm;
834  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
835  //
836  // Layer dimensions from the geometry manager
837  //
838  double rmin = m_gmt_mgr->PixelLayerRadius()-LayerThickness;
839  double rmax = m_gmt_mgr->PixelLayerRadius()+LayerThickness;
840  double halflength = m_gmt_mgr->PixelLadderHalfLength() + m_epsilon;
841  std::string lname[3];
842  lname[0] = "InnerLayerLog";
843  lname[1] = "CenterLayerLog";
844  lname[2] = "OuterLayerLog";
845  const GeoTube* layerTube = new GeoTube(rmin,rmax,halflength); //solid
846  const GeoLogVol* layerLog = new GeoLogVol(lname[m_gmt_mgr->GetLD()],layerTube,air); //log volume
847  GeoFullPhysVol* layerPhys = new GeoFullPhysVol(layerLog); // phys vol
848  //
849  // Place the ladders:
850  //
851  GeoPixelLadder pl(m_DDmgr, m_gmt_mgr, theSensor);
853  int nsectors = m_gmt_mgr->NPixelSectors();
854  double angle=360./nsectors*Gaudi::Units::deg;
855  double layerradius = m_gmt_mgr->PixelLayerRadius();
856  double xcblpos = layerradius + (pl.Thickness()/2.+ptc.Thickness()/2)/cos(m_gmt_mgr->PixelLadderTilt());
857  GeoTrf::Vector3D posladder(layerradius, 0.,0.);
858  posladder = GeoTrf::RotateZ3D(angle/2.)*posladder;
859  GeoTrf::Vector3D postubecables(xcblpos, 0.,0.);
860  postubecables = GeoTrf::RotateZ3D(angle/2.)*postubecables;
861 
862  // Set numerology
865 
866  //
867  // Place the volumes by rotation.
868  //
869  for(int ii = 0; ii < nsectors; ii++) {
870  m_gmt_mgr->SetPhi(ii);
871  //
872  // change the sign w.r.t G4 (same sign as G3)
873  //
874  GeoTrf::RotateZ3D rm(( +(float) ii+0.5)*angle+m_gmt_mgr->PixelLadderTilt() );
875  //
876  // Place the ladders
877  //
878  GeoNameTag *tag = new GeoNameTag("Ladder");
879  GeoTransform* xform = new GeoTransform(GeoTrf::Translate3D(posladder.x(),posladder.y(),posladder.z())*rm);
880  layerPhys->add(tag);
881  layerPhys->add(new GeoIdentifierTag(ii) );
882  layerPhys->add(xform);
883  GeoVPhysVol* ladderphys = pl.Build() ;
884  layerPhys->add(ladderphys );
885  posladder = GeoTrf::RotateZ3D(angle)*posladder;
886  if(m_gmt_mgr->DoServices() ) {
887  //
888  // Place the box w/ the tubes and cables for the layer
889  //
890  tag = new GeoNameTag("TubesAndCables");
891  xform = new GeoTransform(GeoTrf::Translate3D(postubecables.x(),postubecables.y(),postubecables.z())*rm);
892  layerPhys->add(tag);
893  layerPhys->add(xform);
894  GeoVPhysVol* TCphys = ptc.Build() ;
895  layerPhys->add(TCphys );
896  postubecables = GeoTrf::RotateZ3D(angle)*postubecables;
897  }
898  }
899  return layerPhys;
900 }
901 
902 
903 //---------------------------------------------------//
904 // //
905 // GeoPixelModule //
906 // //
907 //---------------------------------------------------//
908 
909 
912  GeoPixelSiCrystal& theSensor) :
913  GeoVPixelFactory (ddmgr, mgr),
914  m_theSensor(theSensor)
915 {
916  //
917  // Define the log volume in the constructor, so I do it only once.
918  //
919  //
920  // The Dimensions are in separate routines
921  //
922  double length = this->Length();
923  double thickness = this->Thickness();
924  double width = this->Width();
925  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
926  const GeoBox* moduleBox = new GeoBox(thickness*0.5,width*0.5,length*0.5);
927  m_theModule = new GeoLogVol("moduleLog",moduleBox,air);
928 
929 }
930 
931 GeoVPhysVol* GeoPixelModule::Build( ) {
932  GeoFullPhysVol* modulePhys = new GeoFullPhysVol(m_theModule);
933  //
934  // Place the Si Crystal
935  //
936  GeoVPhysVol *theSi = m_theSensor.Build();
937  m_id = m_theSensor.getID();
938  GeoNameTag *tag = new GeoNameTag("Si Crystal");
939  GeoTransform *xformsi = new GeoTransform(GeoTrf::Transform3D::Identity());
940  modulePhys->add(tag);
941  modulePhys->add(new GeoIdentifierTag(100) );
942  modulePhys->add(xformsi);
943  modulePhys->add(theSi );
944  //
945  // Place the Hybrid
946  //
948  double xpos = -0.5*(m_gmt_mgr->PixelBoardThickness()+m_gmt_mgr->PixelHybridThickness());
949  GeoTrf::Translate3D hybpos(xpos,0.,0.);
950  GeoTransform* xform = new GeoTransform(hybpos);
951  tag = new GeoNameTag("Hybrid");
952  modulePhys->add(tag);
953  modulePhys->add(xform);
954  modulePhys->add(ph.Build() );
955  //
956  // Place the Chip
957  //
960  GeoTrf::Translate3D chippos(xpos,0.,0.);
961  xform = new GeoTransform(chippos);
962  tag = new GeoNameTag("Chip");
963  modulePhys->add(tag);
964  modulePhys->add(xform);
965  modulePhys->add(pc.Build() );
966  //
967  // Add the silicon element to the list of detector elements...
968  //
969  return modulePhys;
970 }
971 
972 
974  using std::max;
975  //
976  // The thickness of the module is given by the board thickness
977  // plus the maximum b/w the hybrid and the chip+gap
978  //
979  double thick = m_gmt_mgr->PixelBoardThickness()+
982  //
983  // Don't understand why....
984  //
985  return thick+.01;
986 }
987 
989  using std::max;
990  double width = max( max(
994  return width;
995 }
997  using std::max;
998  double length = max( max( max(
1001  2*m_gmt_mgr->PixelBalcony()),
1003 
1004  return length;
1005 }
1006 
1008  return m_id;
1009 }
1010 
1011 //---------------------------------------------------//
1012 // //
1013 // GeoPixelServices //
1014 // //
1015 //---------------------------------------------------//
1016 
1017 //
1018 // This class builds the Services as Cylinders
1019 //
1020 // The services are grouped in 4 groups (as in G3)
1021 // I keep this grouping as it natural in the database.
1022 // They are Barrel-Inside tracking volume
1023 // Barrel-Outside tracking volume
1024 // Endcap-Inside tracking volume
1025 // Edncap-Outside tracking volume
1026 //
1027 // The elements for each group are defined in initialize,
1028 // with Barrel/endcap coming from the geometry manager and inside oputside,
1029 // from the mother volume name.
1030 // This class builds the n-th service element, with n defined in SetCylinder
1031 //
1032 //
1033 //
1034 // The information on which layer to build is retrieved by the Geometry Manager
1035 //
1036 // Contained by: passed by argument
1037 //
1038 // Contains: nothing
1039 //
1040 
1041 
1044  const std::string& root)
1045  : GeoVPixelFactory (ddmgr, mgr)
1046 {
1047  //
1048  // Initialize the service geometry properly accordning to the
1049  // mother volume where it goes.
1050  // Of course services cannot be placed in other volumes.
1051  if(root == "/Pixel") {
1052  initialize("Outside");
1053  m_zone = "Out";
1054  } else if (root == "/Pixel/PixelBarrel" || root == "/Pixel/PixelEndcap" ) {
1055  initialize("Inside");
1056  m_zone = "In";
1057  } else {
1058  std::cerr << "Services can not be placed in this volume!!!! " << root << std::endl;
1059  }
1060  m_nframe = 0;
1061 }
1062 
1063 void GeoPixelServices::initialize(const std::string& a)
1064 {
1065  //
1066  // Here I inizialize the geometry information contained in the vectors
1067  //
1068 
1069  //
1070  // Loop over the service elements:
1071  //
1072  int NServices = m_gmt_mgr->PixelServiceNFrame(a);
1073  for(int ii = 0; ii<NServices ; ii++) {
1074  //
1075  // If the element is attached to a layer/disk check if the LD is present.
1076  //
1077  int LD = m_gmt_mgr->PixelServiceLD(a, ii);
1078  //
1079  // C counts from zero. So the LDs are 0,1,2. -1 correspond to a
1080  // service which is not attached to any LD.
1081  //
1082  if(LD != -1) m_gmt_mgr->SetCurrentLD(LD);
1083  if(LD ==-1 || m_gmt_mgr->isLDPresent()) {
1084  double zpos,halflength;
1085 //
1086 // Retrieve/calculate the parameters for the volume.
1087 //
1088 // Here the atlsim logic has to be interpreted, as this is going into
1089 // the structure of the PBOI bank that I'm using
1090 //
1091  std::string mat = m_gmt_mgr->PixelServiceMaterial(a, ii);
1092  double* r = m_gmt_mgr->PixelServiceR(a, ii);
1093  double* z = m_gmt_mgr->PixelServiceZ(a, ii);
1094  //
1095  // If zin is 0... (within 10^-5) this is a volume symmetric around
1096  // the origin
1097  //
1098  if(fabs(z[0]) < 0.000001) {
1099  zpos = 0.;
1100  halflength = fabs(z[1])-m_epsilon;
1101  } else {
1102  halflength = fabs(z[1]-z[0])/2.-m_epsilon;
1103  zpos = (z[1]+z[0])/2.+m_epsilon/2.;
1104  }
1105  //
1106  // Push the object into the vectors: (twice if needed)
1107  //
1108  //
1109  //
1110  bool twovolumes;
1111  twovolumes = zpos > 0.00001 && r[0] >0.;
1112  // only once for the inside endcaps as I already have two endcaps!
1113  if(m_gmt_mgr->isEndcap() && a == "Inside") twovolumes = false;
1114  m_rmin.push_back(fabs(r[0]));
1115  m_rmax.push_back(r[1]);
1116  m_zpos.push_back(zpos);
1117  m_halflength.push_back(halflength);
1118  m_material.push_back(mat);
1119  if(twovolumes) {
1120  m_rmin.push_back(fabs(r[0]));
1121  m_rmax.push_back(r[1]);
1122  m_zpos.push_back(-zpos);
1123  m_halflength.push_back(halflength);
1124  m_material.push_back(mat);
1125  }
1126  delete[] r;
1127  delete[] z;
1128  }
1129  //
1130  // Delete r and z...
1131  //
1132  }
1133 }
1134 
1135 GeoVPhysVol* GeoPixelServices::Build( ) {
1136  const GeoMaterial* serviceMat = m_mat_mgr->getMaterial(m_material[m_nframe]);
1137  //
1138  // Dimensions: (m_nframe set with teh SetCylinder method)
1139  //
1140  double rmin = m_rmin[m_nframe];
1141  double rmax = m_rmax[m_nframe];
1142  double halflength = m_halflength[m_nframe];
1143  const GeoTube* serviceTube = new GeoTube(rmin,rmax,halflength);
1144  std::string logName;
1145  if(m_gmt_mgr->isBarrel() ) logName = m_zone+"Brl";
1146  else logName = m_zone+"EC";
1147  logName = logName+std::to_string(m_nframe);
1148  GeoLogVol* theService = new GeoLogVol(logName,serviceTube,serviceMat);
1149  GeoPhysVol* servicePhys = new GeoPhysVol(theService);
1150  return servicePhys;
1151 }
1152 
1153 //---------------------------------------------------//
1154 // //
1155 // GeoPixelSiCrystal //
1156 // //
1157 //---------------------------------------------------//
1158 
1159 //
1160 // This class builds one Si Crystal to be placed in one module
1161 //
1162 // The information on which layer to build is retrieved by the Geometry Manager
1163 //
1164 // Contained by: PixelModule_log
1165 //
1166 // Contains: nothing
1167 //
1168 
1169 using namespace InDetDD;
1170 
1173  bool isBLayer)
1174  : GeoVPixelFactory (ddmgr, mgr)
1175 {
1176  //
1177  //Builds the design for this crystal
1178  m_isBLayer = isBLayer;
1179  //SiDetectorDesign::Axis etaAxis = SiDetectorDesign::zAxis;
1180  //SiDetectorDesign::Axis phiAxis = SiDetectorDesign::yAxis;
1181  //SiDetectorDesign::Axis depthAxis = SiDetectorDesign::xAxis;
1182  double thickness = m_gmt_mgr->PixelBoardThickness();
1183  int circuitsPerEta = m_gmt_mgr->DesignCircuitsPerColumn();
1184  int circuitsPerPhi = m_gmt_mgr->DesignCircuitsPerRow();
1185  int CellRowPerCirc = m_gmt_mgr->DesignCellRowsPerCircuit(isBLayer);
1186  int CellColPerCirc = m_gmt_mgr->DesignCellColumnsPerCircuit(isBLayer);
1187  int rowsPerCircuit = m_gmt_mgr->DesignDiodeRowsPerCircuit(isBLayer);
1188  int columnsPerCircuit = m_gmt_mgr->DesignDiodeColumnsPerCircuit(isBLayer);
1189 
1190  // Add the matrix in the same way as from AGDD...
1191  //
1192  //double startRP = -m_gmt_mgr->DesignRPActiveArea()/2.;
1193  //double startZ = -m_gmt_mgr->DesignZActiveArea()/2.;
1194  //double ColSize = m_gmt_mgr->DesignZActiveArea()/m_gmt_mgr->DesignCircuitsPerRow();
1195  double pitchEtaBig = m_gmt_mgr->DesignPitchZ(isBLayer) + m_gmt_mgr->DesignGapZ()/2;
1196  double pitchPhi = m_gmt_mgr->DesignPitchRP(isBLayer);
1197  double pitchEta = m_gmt_mgr->DesignPitchZ(isBLayer);
1198 
1199  // assumed layout
1200  // circuit :
1202  // | .
1203  // | .
1204  // | .
1205  // +---> local-y / eta/ column
1206  //
1207  // full matrix : matrix of n-circuits n | ... | N/2
1208  // with 2 rows ----------------
1209  // 0 | ... | N/2-1
1210 
1211  constexpr auto readoutTechnology = InDetDD::PixelReadoutTechnology::FEI3;
1215  readoutTechnology,
1216  std::array<int,kNDirections>{circuitsPerPhi,circuitsPerEta}, // [0]=phi/row, [1]=eta/column
1217  std::array<int,kNDirections>{rowsPerCircuit,columnsPerCircuit}, // [0]=phi/row, [1]=eta/column
1218  std::array<std::array<double,kNDirections>,kNPixelLocations>{ // regular/central,longEnd/outer,long/inner
1219  std::array<double,kNDirections>{pitchPhi,pitchEta},
1220  std::array<double,kNDirections>{0.,pitchEtaBig},
1221  std::array<double,kNDirections>{0.,pitchEtaBig}});
1222 
1223  std::unique_ptr<PixelModuleDesign> p_barrelDesign2 = std::make_unique<PixelModuleDesign>(thickness,
1224  circuitsPerEta,
1225  circuitsPerPhi,
1226  CellColPerCirc,
1227  CellRowPerCirc,
1228  columnsPerCircuit,
1229  rowsPerCircuit,
1230  std::move(diode_tree),
1232  -1, /* readout side */
1233  false, /* 3D */
1234  InDetDD::Undefined, /* detector type */
1235  readoutTechnology);
1236 
1237  // Multiple connections (ganged pixels)
1238  if (m_gmt_mgr->NumberOfEmptyRows() > 0) {
1239  int minRow = m_gmt_mgr->EmptyRows(0);
1240  int maxRow = minRow;
1241 
1242 
1243  for (int iConnect = 0; iConnect < m_gmt_mgr->NumberOfEmptyRows(); iConnect++){
1244  minRow = std::min(minRow, m_gmt_mgr->EmptyRows(iConnect));
1245  minRow = std::min(minRow, m_gmt_mgr->EmptyRowConnections(iConnect));
1246  maxRow = std::max(maxRow, m_gmt_mgr->EmptyRows(iConnect));
1247  maxRow = std::max(minRow, m_gmt_mgr->EmptyRowConnections(iConnect));
1248  }
1249 
1250  std::vector <int> connections(maxRow-minRow+1);
1251 
1252  // We fill them all with a one to one correspondence first.
1253  for (unsigned int iRow = 0; iRow < connections.size(); iRow++){
1254  connections[iRow] = iRow + minRow;
1255  }
1256 
1257  // Now make the connections.
1258  for (int iConnect = 0; iConnect < m_gmt_mgr->NumberOfEmptyRows(); iConnect++){
1259  connections[m_gmt_mgr->EmptyRows(iConnect)-minRow] = m_gmt_mgr->EmptyRowConnections(iConnect);
1260  }
1261 
1262  //std::cout << "MinRow = " << minRow << std::endl;
1263  //std::cout << "MaxRow = " << maxRow << std::endl;
1264  //for (unsigned int iRow = 0; iRow < connections.size(); iRow++){
1265  // std::cout << iRow << " " << connections[iRow] << std::endl;
1266  //}
1267 
1268  p_barrelDesign2->addMultipleRowConnection(minRow, connections);
1269 
1270  } else {
1271  // No empty rows.
1272  std::cout << "GeoPixelSiCrystal: Warning - No ganged pixels" << std::endl;
1273  }
1274 
1275 
1276  m_design = m_DDmgr->addDesign(std::move(p_barrelDesign2));
1277 
1278 }
1280  //
1281  // Dimensions
1282  //
1283  double length = m_gmt_mgr->PixelBoardLength();
1284  double thickness = m_gmt_mgr->PixelBoardThickness();
1285  double width = m_gmt_mgr->PixelBoardWidth();
1286  const GeoMaterial* siMat = m_mat_mgr->getMaterial("std::Silicon");
1287  const GeoBox* siBox = new GeoBox(thickness/2.,width/2.,length/2.);
1288  std::string logname;
1289  if(m_isBLayer) logname = "siBLayLog";
1290  else logname = "siLog";
1291  GeoLogVol* theSi = new GeoLogVol(logname,siBox,siMat);
1292  GeoFullPhysVol* siPhys = new GeoFullPhysVol(theSi);
1293  //
1294  // Add this to the list of detector elements:
1295  //
1296  int brl_ec=0;
1297  //
1298  // Build the Identifier for the silicon:
1299  //
1300  if(m_gmt_mgr->isBarrel() ) brl_ec = 0;
1301  if(m_gmt_mgr->isEndcap() ) brl_ec = 2*m_gmt_mgr->GetSide();
1302  const PixelID *ppp = m_gmt_mgr->getIdHelper();
1303  Identifier idwafer;
1304  if(brl_ec == 0) {
1305  idwafer = ppp->wafer_id(brl_ec,m_gmt_mgr->GetLD(),m_gmt_mgr->Phi(),m_gmt_mgr->Eta());
1306  } else {
1307  int phimod;
1308  //
1309  // This is evaluating the phimod. It's a bit complicated as I have to
1310  // assign the numbers corresponding to a counter-clockwise rotation
1311  // in the disk reference frame. For the (eta) positive endcap I just
1312  // have to match the start position with the start of the rotation.
1313  //
1314  if(brl_ec == 2) {
1315  phimod = m_gmt_mgr->Phi()*2 + m_gmt_mgr->Eta();
1316  } else {
1317  //
1318  // The (eta) negative) endcap is more complicated, as there is an extra
1319  // rotation of the endcap as a whole around Y
1320  //
1321  phimod = 48-m_gmt_mgr->Phi()*2-m_gmt_mgr->Eta()-2;
1322  if (phimod == -1) phimod = 47;
1323  }
1324 
1325  idwafer = ppp->wafer_id(brl_ec,m_gmt_mgr->GetLD(),phimod,0);
1326  }
1327  m_id=idwafer;
1328 
1329  SiDetectorElement * element = new SiDetectorElement(idwafer, m_design, siPhys, m_gmt_mgr->commonItems());
1330  // Add conditions: (do it here as eventually they will come from the cond DB)
1331  //SiliconConditions conditions(m_gmt_mgr->Temperature(m_isBLayer), m_gmt_mgr->Voltage(m_isBLayer), 0.);
1332  //element->setSiliconConditions(conditions);
1333  // Pass on G3ComptibleDigits option.
1334  // NO LONGER POSSIBLE. DC1 not supported anyway.
1335  // element->setG3CompatibleOrientation(m_gmt_mgr->G3CompatibleDigits());
1336  // add the element to the manager
1337  m_DDmgr->addDetectorElement(element);
1338  return siPhys;
1339 }
1340 
1341 //---------------------------------------------------//
1342 // //
1343 // GeoPixelSubDisk //
1344 // //
1345 //---------------------------------------------------//
1346 
1347 
1350  GeoPixelSiCrystal & theSensor)
1351  : GeoVPixelFactory (ddmgr, mgr),
1352  m_theSensor(theSensor)
1353 {
1354  //
1355  // Define the log volume in the constructor, so I do it only once.
1356  //
1357 
1358  //
1359  // Dimensions from class methods.
1360  //
1361  double rmin = RMin();
1362  double rmax = RMax();
1363  double halflength = Thickness()/2.;
1364  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
1365  const GeoTubs* SDTubs = new GeoTubs(rmin,rmax,halflength,-180.*Gaudi::Units::deg/m_gmt_mgr->PixelECNSectors1()+0.000005,360.*Gaudi::Units::deg/m_gmt_mgr->PixelECNSectors1()-0.00001);
1366  m_theSubDisk = new GeoLogVol("SubDiskLog",SDTubs,air);
1367 
1368 }
1369 
1370 
1371 GeoVPhysVol* GeoPixelSubDisk::Build( ) {
1372  GeoFullPhysVol* SDPhys = new GeoFullPhysVol(m_theSubDisk);
1373  //
1374  // Place the Si Crystal
1375  //
1376  double xpos = RMin()+m_gmt_mgr->PixelBoardLength()/2.;
1377  GeoNameTag* tag = new GeoNameTag("SiCrystal");
1378  GeoTrf::Transform3D rm = GeoTrf::RotateX3D(180.*Gaudi::Units::deg)*GeoTrf::RotateY3D(90.*Gaudi::Units::deg);
1379  GeoTrf::Translation3D pos(xpos,0.,0.);
1380  GeoAlignableTransform* xformsi = new GeoAlignableTransform(GeoTrf::Transform3D(pos*rm));
1381  SDPhys->add(tag);
1382  SDPhys->add(new GeoIdentifierTag(200) );
1383  SDPhys->add(xformsi);
1384  SDPhys->add(m_theSensor.Build() );
1385  //
1386  // Place the Hybrid
1387  //
1389  tag = new GeoNameTag("Hybrid");
1391  pos = GeoTrf::Translation3D(xpos,0.,zpos);
1392  GeoTransform* xform = new GeoTransform(GeoTrf::Transform3D(pos*rm) );
1393  SDPhys->add(tag);
1394  SDPhys->add(xform);
1395  SDPhys->add(ph.Build() );
1396 //
1397 // Place the Chip
1398 //
1400  tag = new GeoNameTag("Chip");
1402  pos = GeoTrf::Translation3D(xpos,0.,zpos);
1403  xform = new GeoTransform(GeoTrf::Transform3D(pos*rm) );
1404  SDPhys->add(tag);
1405  SDPhys->add(xform);
1406  SDPhys->add(pc.Build() );
1407  return SDPhys;
1408 }
1409 
1410 
1413 }
1414 
1416  return RMin()+sqrt(pow(m_gmt_mgr->PixelBoardLength(),2)+pow(m_gmt_mgr->PixelBoardWidth(),2));
1417 }
1418 
1420  //
1421  // This is the sum of the Thickness of the board + twice the maximum
1422  // b/w the thickness of the hybrid and that of the electronics
1423  // twice for symmetric placement.
1424  //
1425 
1427 }
1428 
1429 //---------------------------------------------------//
1430 // //
1431 // GeoPixelTubeCables //
1432 // //
1433 //---------------------------------------------------//
1434 
1435 
1438  : GeoVPixelFactory (ddmgr, mgr)
1439 {
1440  //
1441  // Define the log volume in the constructor, so I do it only once.
1442  //
1443 
1444  //
1445  // Length is in the db
1446  //
1447  double halflength = m_gmt_mgr->PixelLadderHalfLength();
1448  //
1449  // The width is the maximum among the componenst widths
1450  //
1453  //
1454  // The thickness has to be calculated
1455  //
1456  double thickness = this->Thickness();
1457  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
1458  const GeoBox* solBox = new GeoBox(thickness*0.5,width*0.5,halflength+m_epsilon);
1459  m_theBox = new GeoLogVol("TubeCablesLog",solBox,air);
1460 
1461 }
1462 
1463 
1464 GeoVPhysVol* GeoPixelTubeCables::Build( ) {
1465  GeoPhysVol* TCPhys = new GeoPhysVol(m_theBox);
1466  //
1467  // Place the Ladder Structure. Don't understand why this is going in the
1468  // tube & cables section...
1469  //
1471  GeoNameTag* tag = new GeoNameTag("LadderStructure");
1472  GeoVPhysVol* ladderstructPhys = pls.Build() ;
1473  double xpos = 0.5*(-this->Thickness()+m_gmt_mgr->PixelLadderThickness());
1474  GeoTrf::Translate3D pos(xpos,0.,0.);
1475  GeoTransform* xform = new GeoTransform(pos);
1476  TCPhys->add(tag);
1477  TCPhys->add(xform);
1478  TCPhys->add(ladderstructPhys);
1479  //
1480  // Place the cables... ouch!
1481  //
1482  // I do it in a symmetric way, assuming that the routing of the
1483  // central module is done half on the right and half on the left.
1484  // thus I have 7 cables running on each side.
1485  //
1487  double xcabshift = 0.;
1488  for(int ii = 0; ii <= m_gmt_mgr->PixelNModule()/2; ii++) {
1489  pc.SetModuleNumber(ii);
1490  double zcabpos = m_gmt_mgr->PixelCableZMax()-pc.Length()/2.+m_epsilon/2.;
1491  xcabshift += pc.Thickness()/2.;
1492  double xcabpos = - this->Thickness()/2. + m_gmt_mgr->PixelLadderThickness()+xcabshift;
1493  //
1494  // Place the cables on both sides.
1495  // piling them up. this is slightly different from what in G3
1496  // where the cables are not piled up, I don't see a good reason for
1497  // that. In G3 there is an empty space b/w the cable from the center
1498  // and the cable from the first module, as the shift is not calculated
1499  // in the same way.
1500  //
1501  xcabshift += pc.Thickness()/2.;
1502  GeoTrf::Translate3D cablepos(xcabpos,0.,zcabpos);
1503  GeoTransform* xform = new GeoTransform(cablepos);
1504  GeoNameTag *tag = new GeoNameTag("Cable");
1505  //
1506  // Left side
1507  //
1508  GeoVPhysVol *cablePhys1 = pc.Build();
1509  TCPhys->add(tag);
1510  TCPhys->add(xform);
1511  // TCPhys->add(new GeoIdentifierTag(ii) );
1512  TCPhys->add(cablePhys1);
1513  //
1514  // Right side
1515  //
1516  GeoVPhysVol *cablePhys2 = pc.Build();
1517  cablepos = GeoTrf::Translate3D(xcabpos,0.,-zcabpos);
1518  xform = new GeoTransform(cablepos);
1519  TCPhys->add(tag);
1520  TCPhys->add(xform);
1521  // TCPhys->add(new GeoIdentifierTag(ii+100) );
1522  TCPhys->add(cablePhys2);
1523  }
1524 
1525  return TCPhys;
1526 }
1527 
1528 
1530  //
1531  // The thickness of the box is calculated starting from the thickness of
1532  // its components: Ladder + cables
1533  //
1534  double thick = m_gmt_mgr->PixelLadderThickness()+
1536  return thick;
1537 }
1538 
1539 
1540 
1541 
1542 //---------------------------------------------------//
1543 // //
1544 // GeoVPixelFactor //
1545 // //
1546 //---------------------------------------------------//
1547 
1549 
1552  m_gmt_mgr (mgr),
1553  m_mat_mgr (m_gmt_mgr->getMaterialManager()),
1554  m_DDmgr (ddmgr),
1555  m_epsilon(0.0001)
1556 {
1557 }
1558 
1560 {}
1561 
1562 
1563 //---------------------------------------------------//
1564 // //
1565 // OraclePixGeoManager //
1566 // //
1567 //---------------------------------------------------//
1568 
1569 
1571 
1572 
1573 using namespace std;
1574 
1576  : m_eta(0),
1577  m_phi(0),
1578  m_currentLD(0),
1579  m_BarrelEndcap(0),
1580  m_side(0),
1581  m_services(true),
1582  m_g3CompatibleDigits(false),
1583  m_initialLayout(false),
1584  m_dc1Geometry(false),
1585  m_alignable(true),
1586  m_commonItems(nullptr),
1587  m_pDDmgr(nullptr),
1588  m_pMatMgr(nullptr)
1589 {
1590 
1591 
1592  // Get service locator from Bootstrap
1593  ISvcLocator* svcLocator = Gaudi::svcLocator(); // from Bootstrap
1594 
1595  ATH_MSG_DEBUG("Using ORACLE PIXEL GEOMETRY MANAGER");
1596 
1597  // Get the DetStore
1598  SmartIF<StoreGateSvc> detStore{svcLocator->service("DetectorStore")};
1599  if (!detStore.isValid()) ATH_MSG_FATAL("Could not locate DetectorStore");
1600  m_pDetStore = detStore.get();
1601 
1602  SmartIF<IRDBAccessSvc> rdbSvc{svcLocator->service("RDBAccessSvc")};
1603  if (!rdbSvc.isValid()) ATH_MSG_FATAL("Could not locate RDBAccessSvc");
1604 
1605 
1606  // Get version tag and node for Pixel.
1607  DecodeVersionKey versionKey("Pixel");
1608  const std::string& detectorKey = versionKey.tag();
1609  const std::string& detectorNode = versionKey.node();
1610 
1611  m_versionTag = rdbSvc->getChildTag("Pixel", versionKey.tag(), versionKey.node());
1612 
1613 
1615 //
1616 // Gets the structures from the det store
1617 //
1619 
1620  ATH_MSG_INFO("Retrieving Record Sets from database ...");
1621 
1622  DecodeVersionKey versionKeyAtlas("Pixel");
1623  m_atls = rdbSvc->getRecordsetPtr("AtlasMother",versionKeyAtlas.tag(), versionKeyAtlas.node());
1624  m_PixelBarrelGeneral = rdbSvc->getRecordsetPtr("PixelBarrelGeneral", detectorKey, detectorNode);
1625  m_PixelBarrelService = rdbSvc->getRecordsetPtr("PixelBarrelService", detectorKey, detectorNode);
1626  m_PixelCommon = rdbSvc->getRecordsetPtr("PixelCommon", detectorKey, detectorNode);
1627  m_PixelDisk = rdbSvc->getRecordsetPtr("PixelDisk", detectorKey, detectorNode);
1628  m_PixelEndcapGeneral = rdbSvc->getRecordsetPtr("PixelEndcapGeneral", detectorKey, detectorNode);
1629  m_PixelEndcapService = rdbSvc->getRecordsetPtr("PixelEndcapService", detectorKey, detectorNode);
1630  m_PixelLayer = rdbSvc->getRecordsetPtr("PixelLayer", detectorKey, detectorNode);
1631  m_PixelModule = rdbSvc->getRecordsetPtr("PixelModule", detectorKey, detectorNode);
1632  m_PixelStave = rdbSvc->getRecordsetPtr("PixelStave", detectorKey, detectorNode);
1633 
1634 
1635  // These are for the design
1636  m_pxbi = rdbSvc->getRecordsetPtr("PXBI", detectorKey, detectorNode);
1637  m_pxei = rdbSvc->getRecordsetPtr("PXEI", detectorKey, detectorNode);
1638  m_pdch = rdbSvc->getRecordsetPtr("PDCH", detectorKey, detectorNode);
1639  m_pxbd = rdbSvc->getRecordsetPtr("PXBD", detectorKey, detectorNode);
1640  m_plor = rdbSvc->getRecordsetPtr("PLOR", detectorKey, detectorNode);
1641  m_plrn = rdbSvc->getRecordsetPtr("PLRN", detectorKey, detectorNode);
1642 
1643  ATH_MSG_INFO("... Record Sets retrieved.");
1644 
1645  // cache the number of inner frames
1646 
1647  m_barrelInFrames = (*m_PixelBarrelGeneral)[0]->getInt("NFRAMEIN");
1648  m_endcapInFrames = (*m_PixelEndcapGeneral)[0]->getInt("NFRAMEIN");
1649  //
1650  // Get the mat manager from the store:
1651  //
1652  StoredMaterialManager* materialManager = nullptr;
1653  if (StatusCode::SUCCESS == m_pDetStore->retrieve(materialManager, std::string("MATERIALS"))) {
1654  m_pMatMgr = materialManager;
1655  }
1656  //
1657  // Print the version number for the barrel and endcap geometry (from NOVA)
1658  //
1659  //cout << "Instantiating Pixel Detector" << endl;
1660  //cout << "Barrel Version " << this->PixelBarrelMajorVersion() << "." << this->PixelBarrelMinorVersion() << endl;
1661  //cout << "Endcap Version " << this->PixelEndcapMajorVersion() << "." << this->PixelEndcapMinorVersion() << endl;
1662 }
1663 
1665 {
1666  return m_pMatMgr;
1667 }
1668 
1669 
1671 //
1672 // Setting of Layer/Disk and Barrel/EndCap
1673 //
1676 {
1677  if(isBarrel() ) {
1678  if(i <= PixelBarrelNLayer()) {
1679  m_currentLD=i;
1680  } else {
1681  cout << "Layer set out of bounds, defaulting it to 0" << endl;
1682  m_currentLD = 0;
1683  std::cout<<" Current layer set to "<<i<<std::endl;
1684  }
1685  }
1686  if(isEndcap() ) {
1687  if (i<= PixelEndcapNDisk() ) {
1688  m_currentLD=i;
1689  } else {
1690  cout << "Disk set out of bounds, defaulting it to 0" << endl;
1691  m_currentLD = 0;
1692  std::cout<<" Current disk set to "<<i<<std::endl;
1693  }
1694  }
1695 }
1696 
1697 
1698 
1700  //cout << "Setting Barrel" << endl;
1701  m_BarrelEndcap = 0;
1702 }
1704  m_BarrelEndcap = 1;
1705  //cout << "Setting Endcap" << endl;
1706 }
1708 //
1709 // Check if the current layer/disk has to be retrieved
1710 // By default in MySQL all the three layers have to be retrieved
1711 // If m_initialLayout is true we ignore NOVA for layer/disk 1.
1712 // For initial layout layer=1 and disk=1 (2nd layer and disk) is missing.
1713 //
1716  const std::string uscore("_");
1717  if(isBarrel()) {
1718  if (m_initialLayout && m_currentLD == 1) return false;
1719  std::string a=uscore+std::to_string(m_currentLD);
1720  return (*m_PixelBarrelGeneral)[0]->getInt("USELAYER"+a) == 1;
1721  }
1722  if(isEndcap() ) {
1723  if (m_initialLayout && m_currentLD == 1) return false;
1724  std::string a=uscore+std::to_string(m_currentLD);
1725  return (*m_PixelEndcapGeneral)[0]->getInt("USEDISK"+a) == 1;
1726  }
1727  return false;
1728 }
1729 
1730 
1732  return m_BarrelEndcap == 0;
1733 }
1735  return m_BarrelEndcap == 1;
1736  return false;
1737 }
1739 //
1740 // Calculate Thickness. This is used for the materials
1741 // which thickness is given in % of r.l.
1742 //
1744 double OraclePixGeoManager::CalculateThickness(double tck,const string& mat) {
1745  GeoIntrusivePtr<const GeoMaterial> material{m_pMatMgr->getMaterial(mat)};
1746  double rl = material->getRadLength();
1747  return -1.*rl*tck/100.;
1748 }
1750 //
1751 // Si Boards Parameters:
1752 //
1755 {
1756  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("BOARDWIDTH")*Gaudi::Units::cm;
1757  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("BOARDWIDTH")*Gaudi::Units::cm;
1758  return 0.;
1759 }
1761 {
1762  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("BOARDLENGTH")*Gaudi::Units::cm;
1763  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("BOARDLENGTH")*Gaudi::Units::cm;
1764  return 0.;
1765 }
1767 {
1768  if (m_dc1Geometry && isBarrel() && (m_currentLD == 0)) {
1769  return 200*Gaudi::Units::micrometer;
1770  }
1771  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("BOARDTHICK")*Gaudi::Units::cm;
1772  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("BOARDTHICK")*Gaudi::Units::cm;
1773  return 0.;
1774 }
1776 {
1777  if(isEndcap()) return (*m_pxei)[m_currentLD]->getDouble("DRACTIVE")*Gaudi::Units::cm;
1778  if(isBarrel()) return (*m_pxbi)[m_currentLD]->getDouble("DZELEB")*Gaudi::Units::cm;
1779  return 0.;
1780 }
1782 //
1783 // Hybrid Parameters:
1784 //
1787 {
1788  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("HYBRIDWIDTH")*Gaudi::Units::cm;
1789  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("HYBRIDWIDTH")*Gaudi::Units::cm;
1790  return 0.;
1791 }
1793 {
1794  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("HYBRIDLENGTH")*Gaudi::Units::cm;
1795  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("HYBRIDLENGTH")*Gaudi::Units::cm;
1796  return 0.;
1797 }
1799 {
1800  double thick=0.;
1801  string mat;
1802  if(isBarrel()){
1803  // bad data name in db; here is worked around. Should be DXHYBR
1804  thick =(*m_PixelModule)[m_currentLD]->getDouble("HYBRIDTHICK");
1805  mat = "pix::Hybrid";
1806  }
1807  if(isEndcap()){
1808  thick =(*m_PixelModule)[m_currentLD+3]->getDouble("HYBRIDTHICK");
1809  mat = "std::Silicon";
1810  }
1811  // if it is negative is given in % of r.l.
1812  if(thick > 0.) {
1813  return thick*Gaudi::Units::cm;
1814  }
1815  return CalculateThickness(thick,mat);
1816 
1817 }
1819 //
1820 // Chip Parameters:
1821 //
1823 
1825 {
1826  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("CHIPWIDTH")*Gaudi::Units::cm;
1827  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("CHIPWIDTH")*Gaudi::Units::cm;
1828  return 0.;
1829 }
1831 {
1832  if(isBarrel())return (*m_PixelModule)[m_currentLD]->getDouble("CHIPLENGTH")*Gaudi::Units::cm;
1833  if(isEndcap())return (*m_PixelModule)[m_currentLD+3]->getDouble("CHIPLENGTH")*Gaudi::Units::cm;
1834  return 0.;
1835 }
1837 {
1838  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("CHIPGAP")*Gaudi::Units::cm;
1839  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("CHIPGAP")*Gaudi::Units::cm;
1840  return 0.;
1841 }
1843  double thick=0.;
1844  string mat;
1845  if(isBarrel()){
1846  thick =(*m_PixelModule)[m_currentLD]->getDouble("CHIPTHICK");
1847  mat = "pix::Chip";
1848  }
1849  if(isEndcap()){
1850  thick =(*m_PixelModule)[m_currentLD+3]->getDouble("CHIPTHICK");
1851  mat = "std::Silicon";
1852  }
1853  // if it is negative is given in % of r.l.
1854  if(thick > 0.) {
1855  return thick*Gaudi::Units::cm;
1856  }
1857  return CalculateThickness(thick,mat);
1858 
1859 }
1860 
1862 //
1863 // Pixel Disks carbon structure
1864 //
1867  if(a == "Inner") {
1868  return (*m_PixelDisk)[m_currentLD]->getDouble("SUP1RMIN")*Gaudi::Units::cm;
1869  } else if (a == "Central") {
1870  return (*m_PixelDisk)[m_currentLD]->getDouble("SUP2RMIN")*Gaudi::Units::cm;
1871  }
1872  return (*m_PixelDisk)[m_currentLD]->getDouble("SUP3RMIN")*Gaudi::Units::cm;
1873 }
1874 
1876  if(a == "Inner") {
1877  return (*m_PixelDisk)[m_currentLD]->getDouble("SUP1RMAX")*Gaudi::Units::cm;
1878  } else if (a == "Central") {
1879  return (*m_PixelDisk)[m_currentLD]->getDouble("SUP2RMAX")*Gaudi::Units::cm;
1880  } else {
1881  return (*m_PixelDisk)[m_currentLD]->getDouble("SUP3RMAX")*Gaudi::Units::cm;
1882  }
1883 }
1884 
1886  double tck;
1887  int imat;
1888  string mat[4] = {"std::Berillia","std::Carbon","pix::ECSevices","pix::Disk"} ;
1889  if(a == "Inner") {
1890  tck = (*m_PixelDisk)[m_currentLD]->getDouble("SUP1THICK");
1891  imat =(*m_PixelDisk)[m_currentLD]->getInt("SUP1MAT")-1;
1892  } else if (a == "Central") {
1893  tck = (*m_PixelDisk)[m_currentLD]->getDouble("SUP2THICK");
1894  imat =(*m_PixelDisk)[m_currentLD]->getInt("SUP2MAT")-1;
1895  } else {
1896  tck = (*m_PixelDisk)[m_currentLD]->getDouble("SUP3THICK");
1897  imat =(*m_PixelDisk)[m_currentLD]->getInt("SUP3MAT")-1;
1898  }
1899  if(tck>0.) {
1900  return tck*Gaudi::Units::cm;
1901  }
1902  return CalculateThickness(tck,mat[imat]);
1903 }
1905  string mat[4] = {"std::Berillia","std::Carbon","pix::ECSevices","pix::Disk"} ;
1906  int imat;
1907  if(a == "Inner") {
1908  imat = (*m_PixelDisk)[m_currentLD]->getInt("SUP1MAT")-1;
1909  } else if (a == "Central") {
1910  imat = (*m_PixelDisk)[m_currentLD]->getInt("SUP2MAT")-1;
1911  } else {
1912  imat = (*m_PixelDisk)[m_currentLD]->getInt("SUP3MAT")-1;
1913  }
1914  return mat[imat];
1915 }
1916 
1917 
1919 //
1920 // Central Services (PBOI)
1921 //
1923 //
1924 // This is complicated in the DB...
1925 // If Rmin < 0 this means that the cylinder has to be placed only once
1926 // So I return RMin with its sign, for further processing by the service
1927 // methods.
1928 // If RMax is <0 the thickness is given in % of r.l. which have to be
1929 // calculated by the method calculatethickness
1930 //
1931 // If Zmin and Zmax have DIFFERENT sign, then the thickness is given in
1932 // % of r.l....
1933 //
1934 
1936  if(isBarrel() ) {
1937  if(a == "Inside") return (*m_PixelBarrelGeneral)[0]->getInt("NFRAMEIN");
1938  if(a == "Outside") return (*m_PixelBarrelGeneral)[0]->getInt("NFRAMEOUT");
1939  }
1940  if(isEndcap() ) {
1941  if(a == "Inside") return (*m_PixelEndcapGeneral)[0]->getInt("NFRAMEIN");
1942  if(a == "Outside") return (*m_PixelEndcapGeneral)[0]->getInt("NFRAMEOUT");
1943  }
1944  return 0;
1945 }
1946 
1948  double rmin=0.;
1949  double rmax=0.;
1950  double *r = new double[2];
1951  if(isBarrel()) {
1952  if(a == "Inside") {
1953  rmin = (*m_PixelBarrelService)[n]->getDouble("RIN");
1954  rmax = (*m_PixelBarrelService)[n]->getDouble("ROUT");
1955  }
1956  else {
1957  rmin = (*m_PixelBarrelService)[n+m_barrelInFrames]->getDouble("RIN");
1958  rmax = (*m_PixelBarrelService)[n+m_barrelInFrames]->getDouble("ROUT");
1959  }
1960  }
1961  if(isEndcap()) {
1962  if(a == "Inside") {
1963  rmin = (*m_PixelEndcapService)[n]->getDouble("RIN");
1964  rmax = (*m_PixelEndcapService)[n]->getDouble("ROUT");
1965  }
1966  else {
1967  rmin = (*m_PixelEndcapService)[n+m_endcapInFrames]->getDouble("RIN");
1968  rmax = (*m_PixelEndcapService)[n+m_endcapInFrames]->getDouble("ROUT");
1969  }
1970  }
1971  // If this is negative this is the thickness of the cyl in % of r.l.
1972  r[0] = rmin*Gaudi::Units::cm;
1973  if(rmax > 0) {
1974  r[1] = rmax*Gaudi::Units::cm;
1975  } else {
1976  string material = PixelServiceMaterial(a,n);
1977  r[1] = fabs(rmin*Gaudi::Units::cm)+CalculateThickness(rmax,material);
1978  }
1979  return r;
1980 }
1981 
1982 
1984  double* z = new double[2];
1985  if(isBarrel()) {
1986  if(a == "Inside") {
1987  z[0] = (*m_PixelBarrelService)[n]->getDouble("ZIN");
1988  z[1] = (*m_PixelBarrelService)[n]->getDouble("ZOUT");
1989  }
1990  else {
1991  z[0] = (*m_PixelBarrelService)[n+m_barrelInFrames]->getDouble("ZIN");
1992  z[1] = (*m_PixelBarrelService)[n+m_barrelInFrames]->getDouble("ZOUT");
1993  }
1994  }
1995  if(isEndcap()) {
1996  if(a == "Inside") {
1997  z[0] = (*m_PixelEndcapService)[n]->getDouble("ZIN");
1998  z[1] = (*m_PixelEndcapService)[n]->getDouble("ZOUT");
1999  }
2000  else {
2001  z[0] = (*m_PixelEndcapService)[n+m_endcapInFrames]->getDouble("ZIN");
2002  z[1] = (*m_PixelEndcapService)[n+m_endcapInFrames]->getDouble("ZOUT");
2003  }
2004  }
2005  z[0] = z[0] *Gaudi::Units::cm;
2006  if(z[0]*(z[1]) > -0.000000001) { // same sign and z[0] > 0.
2007  z[1] = z[1] *Gaudi::Units::cm;
2008  } else {
2009  string material = PixelServiceMaterial(a,n);
2010  z[1] = z[0] * (1 + CalculateThickness(z[1],material)/fabs(z[0]));
2011  }
2012  if(isEndcap() && a == "Inside" ) { // Translate to the ecnter of EndCap
2013  double center = ((*m_PixelEndcapGeneral)[0]->getDouble("ZMAX")+(*m_PixelEndcapGeneral)[0]->getDouble("ZMIN"))/2.*Gaudi::Units::cm;
2014  z[0] = z[0]-center;
2015  z[1] = z[1]-center;
2016  }
2017  return z;
2018 }
2019 
2020 
2022  if(isBarrel()) {
2023  if(a == "Inside") {return (*m_PixelBarrelService)[n]->getInt("LAYERNUM")-1;}
2024  else {return (*m_PixelBarrelService)[n+m_barrelInFrames]->getInt("LAYERNUM")-1;}
2025  }
2026  if(isEndcap()) {
2027  if(a == "Inside") {return (*m_PixelEndcapService)[n]->getInt("LAYERNUM")-1;}
2028  else {return (*m_PixelEndcapService)[n+m_endcapInFrames]->getInt("LAYERNUM")-1;}
2029  }
2030  return 0;
2031 }
2032 
2034  int imat;
2035  if(isBarrel()) {
2036  string mat[11] = {
2037  "std::Berillia",
2038  "std::Carbon",
2039  "pix::Services",
2040  "pix::Titanium",
2041  "pix::MatPP11",
2042  "pix::MatPP12",
2043  "pix::MatPP13",
2044  "pix::MatPP14",
2045  "pix::MatPP15",
2046  "pix::MatPP16",
2047  "pix::MatPP17"};
2048  if(a == "Inside") {imat = (*m_PixelBarrelService)[n]->getInt("MATERIAL")-1;}
2049  else {imat = (*m_PixelBarrelService)[n+m_barrelInFrames]->getInt("MATERIAL")-1;}
2050  return mat[imat];
2051  }
2052  if(isEndcap()) {
2053  string mat[4] = {"std::Berillia","std::Carbon","pix::ECServices","pix::Disk"};
2054  if(a == "Inside") {imat = (*m_PixelEndcapService)[n]->getInt("MATERIAL")-1;}
2055  else {imat =(*m_PixelEndcapService)[n+m_endcapInFrames]->getInt("MATERIAL")-1;}
2056  return mat[imat];
2057  }
2058  return "None";
2059 }
2061  return m_services;
2062 }
2063 
2065  return m_g3CompatibleDigits;
2066 }
2067 
2069  return m_initialLayout;
2070 }
2071 
2073  return m_dc1Geometry;
2074 }
2075 
2077  return m_alignable;
2078 }
2079 
2080 
2082  if(m_pDDmgr == nullptr) {
2083  //
2084  // retrieve the pointer to the DD manager
2085  //
2086  StatusCode sc = m_pDetStore->retrieve(m_pDDmgr);
2087  if (sc.isFailure()) {
2088  std::cout << "Cannot retrieve PixelDetectorManager" << std::endl;
2089  }
2090  }
2091  return m_pDDmgr;
2092 }
2093 
2094 
2097 }
2098 
2100  return m_elementsObjectName;
2101 }
2102 
2105 }
2106 
2108  return m_designsObjectName;
2109 }
2110 
2113 }
2114 
2116  return m_barrelDesignName;
2117 }
2118 
2121 }
2122 
2124  return m_endcapDesignName;
2125 }
2126 
2129 }
2130 
2132  return m_blayerDesignName;
2133 }
2134 
2135 
2137 {
2138  double tck = (*m_PixelStave)[0]->getDouble("SUPPORTTHICK");
2139  if( tck > 0.) {
2140  return tck*Gaudi::Units::cm;
2141  } else {
2142  return CalculateThickness(tck,"pix::Ladder");
2143  }
2144 }
2145 
2147 {
2148  double tck = (*m_PixelDisk)[m_currentLD]->getDouble("CABLETHICK");
2149  if( tck > 0.) {
2150  return tck*Gaudi::Units::cm;
2151  } else {
2152  return CalculateThickness(tck,"pix::ECCables");
2153  }
2154 }
2155 
2157 {
2158  double ActiveArea = DesignRPActiveArea();
2159  double GapRP = DesignGapRP();
2160  double pitchRP = DesignPitchRP(isBLayer);
2161  return static_cast<int>((ActiveArea - GapRP)/pitchRP + 0.5);
2162 }
2163 
2165 {
2166  double ActiveArea = DesignZActiveArea();
2167  double GapZ = DesignGapZ();
2168  double pitchZ = DesignPitchZ(isBLayer);
2169  int CPR = DesignCircuitsPerRow();
2170  return static_cast<int>((ActiveArea - GapZ*CPR)/(CPR*pitchZ) + 0.5);
2171 }
2172 
2174 {
2175  double ActiveArea = DesignRPActiveArea();
2176  double pitchRP = DesignPitchRP(isBLayer);
2177  return static_cast<int>((ActiveArea)/pitchRP + 0.5);
2178 }
2179 
2181 {
2182  double ActiveArea = DesignZActiveArea();
2183  double GapZ = DesignGapZ();
2184  double pitchZ = DesignPitchZ(isBLayer) ;
2185  int CPR = DesignCircuitsPerRow();
2186  return static_cast<int>((ActiveArea - GapZ*CPR)/(CPR*pitchZ) + 0.5);
2187 }
2188 
2189  // Ganged Pixels
2191 {
2192  return static_cast<int>((*m_pdch)[0]->getInt("NYCONNEC"));
2193 }
2194 
2196 {
2197  const std::string a=std::string("_")+std::to_string(index);
2198  return static_cast<int>((*m_pdch)[0]->getInt("JYEMPTY"+a)) - 1;
2199 }
2200 
2202 {
2203  const std::string a=std::string("_")+std::to_string(index);
2204  return static_cast<int>((*m_pdch)[0]->getInt("JYCONNEC"+a)) - 1;
2205 }
2206 
2207 double OraclePixGeoManager::Voltage(bool isBLayer){
2208  // override B-layer voltage for DC1 geometry by
2209  // value in old DB (approx ratio of thicknesses (200/250 = 0.8)
2210  // 97.1*0.8 = 77.68. In Nova its 77.7.
2211  if (isBLayer && m_dc1Geometry) return 77.7*Gaudi::Units::volt;
2212  if(isBLayer) { return (*m_plor)[0]->getDouble("VOLTAGE")*Gaudi::Units::volt;}
2213  return (*m_plor)[1]->getDouble("VOLTAGE")*Gaudi::Units::volt;
2214 }
2215 
2216 double OraclePixGeoManager::Temperature(bool isBLayer){
2217  if(isBLayer) { return (*m_plor)[0]->getDouble("TEMPC")*Gaudi::Units::kelvin+Gaudi::Units::STP_Temperature;}
2218  return (*m_plor)[1]->getDouble("TEMPC")*Gaudi::Units::kelvin+Gaudi::Units::STP_Temperature;
2219 }
2220 
2223 {
2224  return m_commonItems;
2225 }
2226 
2227 
2228 const InDetDD::SiCommonItems *
2230 {
2231  return m_commonItems;
2232 }
2233 
2234 
2235 void
2237 {
2239 }
2240 
2241 const PixelID *
2243 {
2244  return dynamic_cast<const PixelID *>(m_commonItems->getIdHelper());
2245 }
2246 
2247 
2248 //---------------------------------------------------//
2249 // //
2250 // PixelGeometryManager //
2251 // //
2252 //---------------------------------------------------//
2253 
2254 using namespace std;
2255 
2257  AthMessaging("PixelGeometryManager")
2258 {
2259 }
2261 {
2262 }
PixelGeoDC2::OraclePixGeoManager::SetEndcap
virtual void SetEndcap() override
Definition: PixelDetectorDC1DC2.cxx:1703
InDetDD::SiNumerology::setNumRingsForDisk
void setNumRingsForDisk(int disk, int nRings)
Definition: SiNumerology.cxx:48
PixelGeoDC2::PixelGeometryManager::DoServices
virtual bool DoServices()=0
PixelID.h
This is an Identifier helper class for the Pixel subdetector. This class is a factory for creating co...
PixelGeoDC2::OraclePixGeoManager::GetDetElementName
virtual std::string GetDetElementName() override
Definition: PixelDetectorDC1DC2.cxx:2099
PixelGeoDC2::OraclePixGeoManager::NumberOfEmptyRows
virtual int NumberOfEmptyRows() override
Definition: PixelDetectorDC1DC2.cxx:2190
PixelGeoDC2::OraclePixGeoManager::PixelChipGap
virtual double PixelChipGap() override
Definition: PixelDetectorDC1DC2.cxx:1836
beamspotman.r
def r
Definition: beamspotman.py:674
PixelGeoDC2::PixelGeometryManager::PixelEndcapRMin
virtual double PixelEndcapRMin()=0
PixelGeoDC2::GeoPixelCable::m_moduleNumber
int m_moduleNumber
Definition: PixelDetectorDC1DC2.h:94
PixelGeoDC2::PixelGeometryManager::PixelChipGap
virtual double PixelChipGap()=0
PixelGeoDC2::GeoPixelServices::m_nframe
int m_nframe
Definition: PixelDetectorDC1DC2.h:298
PixelGeoDC2::GeoPixelSiCrystal
Definition: PixelDetectorDC1DC2.h:310
python.SystemOfUnits.volt
float volt
Definition: SystemOfUnits.py:222
InDetDD::PixelDiodeTree
Tree structure to find the position, index or pitch of a pixel on a semi-regular grid The grid is con...
Definition: PixelDiodeTree.h:33
PixelGeoDC2::OraclePixGeoManager::DesignGapRP
virtual double DesignGapRP() override
Definition: PixelDetectorDC1DC2.h:1121
PixelGeoDC2::GeoVPixelFactory::m_gmt_mgr
PixelGeometryManager * m_gmt_mgr
Definition: PixelDetectorDC1DC2.h:51
PixelGeoDC2::PixelGeometryManager::EmptyRows
virtual int EmptyRows(int index)=0
PixelGeoDC2::OraclePixGeoManager::m_initialLayout
bool m_initialLayout
Definition: PixelDetectorDC1DC2.h:658
PixelGeoDC2::PixelGeometryManager::PixelLadderThickness
virtual double PixelLadderThickness()=0
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
PixelGeoDC2::PixelGeometryManager::DesignCellColumnsPerCircuit
virtual int DesignCellColumnsPerCircuit(bool isBLayer)=0
PixelGeoDC2::OraclePixGeoManager::PixelChipThickness
virtual double PixelChipThickness() override
Definition: PixelDetectorDC1DC2.cxx:1842
PixelGeoDC2::PixelGeometryManager::DesignCircuitsPerRow
virtual int DesignCircuitsPerRow()=0
InDetDD::SiDetectorManager::numerology
const SiNumerology & numerology() const
Access Numerology.
Definition: SiDetectorManager.h:128
PixelGeoDC2::GeoPixelModule::Thickness
double Thickness()
Definition: PixelDetectorDC1DC2.cxx:973
python.SystemOfUnits.mm
float mm
Definition: SystemOfUnits.py:98
PixelGeoDC2::OraclePixGeoManager::isEndcap
virtual bool isEndcap() override
Definition: PixelDetectorDC1DC2.cxx:1734
PixelGeoDC2::GeoPixelCable::Length
double Length()
Definition: PixelDetectorDC1DC2.cxx:141
PixelGeoDC2::GeoVPixelFactory::m_DDmgr
InDetDD::PixelDetectorManager * m_DDmgr
Definition: PixelDetectorDC1DC2.h:53
PixelGeoDC2::OraclePixGeoManager::m_PixelEndcapGeneral
IRDBRecordset_ptr m_PixelEndcapGeneral
Definition: PixelDetectorDC1DC2.h:621
PixelGeoDC2::OraclePixGeoManager::EmptyRowConnections
virtual int EmptyRowConnections(int index) override
Definition: PixelDetectorDC1DC2.cxx:2201
PixelGeoDC2::OraclePixGeoManager::m_plrn
IRDBRecordset_ptr m_plrn
Definition: PixelDetectorDC1DC2.h:641
PixelGeoDC2::GeoVPixelFactory::m_epsilon
const double m_epsilon
Definition: PixelDetectorDC1DC2.h:54
PixelGeoDC2::PixelGeometryManager::PixelServiceLD
virtual int PixelServiceLD(std::string, int)=0
PixelGeoDC2::PixelGeometryManager::PixelECCarbonMaterial
virtual std::string PixelECCarbonMaterial(std::string)=0
PixelGeoDC2::GeoPixelSiCrystal::getID
Identifier getID()
Definition: PixelDetectorDC1DC2.h:326
PixelGeoDC2::PixelGeometryManager::PixelServiceMaterial
virtual std::string PixelServiceMaterial(std::string, int)=0
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
PixelGeoDC2::GeoPixelSubDisk::Thickness
double Thickness()
Definition: PixelDetectorDC1DC2.cxx:1419
PixelGeoDC2::PixelGeometryManager::PixelModuleDrDistance
virtual double PixelModuleDrDistance()=0
PixelGeoDC2::OraclePixGeoManager::PixelBoardThickness
virtual double PixelBoardThickness() override
Definition: PixelDetectorDC1DC2.cxx:1766
python.PhysicalConstants.STP_Temperature
float STP_Temperature
Definition: PhysicalConstants.py:131
PixelGeoDC2::OraclePixGeoManager::EmptyRows
virtual int EmptyRows(int index) override
Definition: PixelDetectorDC1DC2.cxx:2195
PixelGeoDC2::PixelGeometryManager::PixelLadderHalfLength
virtual double PixelLadderHalfLength()=0
PixelGeoDC2::GeoPixelLadderStruct
Definition: PixelDetectorDC1DC2.h:235
PixelGeoDC2::GeoPixelModule::m_id
Identifier m_id
Definition: PixelDetectorDC1DC2.h:275
PixelGeoDC2::GeoPixelServices::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:1135
PixelGeoDC2::GeoPixelSiCrystal::m_isBLayer
bool m_isBLayer
Definition: PixelDetectorDC1DC2.h:320
PixelGeoDC2::OraclePixGeoManager::m_endcapDesignName
std::string m_endcapDesignName
Definition: PixelDetectorDC1DC2.h:684
PixelGeoDC2::GeoVPixelFactory::GeoVPixelFactory
GeoVPixelFactory(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr)
Definition: PixelDetectorDC1DC2.cxx:1550
PixelGeoDC2::PixelGeometryManager::EmptyRowConnections
virtual int EmptyRowConnections(int index)=0
PixelGeoDC2::GeoPixelServices::m_material
std::vector< std::string > m_material
Definition: PixelDetectorDC1DC2.h:296
InDetDD::SiCommonItems::getIdHelper
const AtlasDetectorID * getIdHelper() const
Definition: SiCommonItems.h:83
InDetDD::SiNumerology::setNumLayers
void setNumLayers(int nLayers)
Definition: SiNumerology.cxx:27
PixelAthClusterMonAlgCfg.zmin
zmin
Definition: PixelAthClusterMonAlgCfg.py:169
index
Definition: index.py:1
PixelGeoDC2::PixelGeometryManager::PixelModuleShiftFlag
virtual double PixelModuleShiftFlag(int)=0
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
PixelGeoDC2::OraclePixGeoManager::getMaterialManager
virtual StoredMaterialManager * getMaterialManager() override
Definition: PixelDetectorDC1DC2.cxx:1664
InDetDD::detail::kNPixelLocations
@ kNPixelLocations
Definition: PixelGeoUtils.h:19
PixelGeoDC2::GeoPixelDiskSupports::m_zpos
std::vector< double > m_zpos
Definition: PixelDetectorDC1DC2.h:146
PixelGeoDC2
Definition: PixelDetectorDC1DC2.h:31
mat
GeoMaterial * mat
Definition: LArDetectorConstructionTBEC.cxx:55
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
InDetDD::SiNumerology::addEndcap
void addEndcap(int id)
Definition: SiNumerology.cxx:102
PixelDetectorDC1DC2.h
PixelGeoDC2::OraclePixGeoManager::PixelEndcapNDisk
int PixelEndcapNDisk() override
Definition: PixelDetectorDC1DC2.h:1052
PixelGeoDC2::OraclePixGeoManager::m_currentLD
int m_currentLD
Definition: PixelDetectorDC1DC2.h:645
PixelGeoDC2::PixelGeometryManager::PixelECCablesDistance
virtual double PixelECCablesDistance()=0
PixelGeoDC2::PixelGeometryManager::PixelHybridLength
virtual double PixelHybridLength()=0
PixelGeoDC2::GeoPixelDiskSupports::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:397
PixelGeoDC2::OraclePixGeoManager::m_endcapInFrames
int m_endcapInFrames
Definition: PixelDetectorDC1DC2.h:649
PixelGeoDC2::OraclePixGeoManager::GetDesignName
virtual std::string GetDesignName() override
Definition: PixelDetectorDC1DC2.cxx:2107
PixelGeoDC2::GeoPixelSiCrystal::GeoPixelSiCrystal
GeoPixelSiCrystal(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, bool isBLayer)
Definition: PixelDetectorDC1DC2.cxx:1171
PixelGeoDC2::OraclePixGeoManager::DesignCellColumnsPerCircuit
virtual int DesignCellColumnsPerCircuit(bool isBLayer) override
Definition: PixelDetectorDC1DC2.cxx:2164
PixelGeoDC2::OraclePixGeoManager::m_services
bool m_services
Definition: PixelDetectorDC1DC2.h:652
PixelGeoDC2::OraclePixGeoManager::PixelChipWidth
virtual double PixelChipWidth() override
Definition: PixelDetectorDC1DC2.cxx:1824
PixelGeoDC2::GeoPixelSubDisk::GeoPixelSubDisk
GeoPixelSubDisk(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, GeoPixelSiCrystal &theSensor)
Definition: PixelDetectorDC1DC2.cxx:1348
deg
#define deg
Definition: SbPolyhedron.cxx:17
PixelGeoDC2::GeoVPixelFactory::m_mat_mgr
StoredMaterialManager * m_mat_mgr
Definition: PixelDetectorDC1DC2.h:52
PixelGeoDC2::GeoPixelDisk::m_theDisk
GeoIntrusivePtr< GeoLogVol > m_theDisk
Definition: PixelDetectorDC1DC2.h:127
PixelGeoDC2::OraclePixGeoManager::PixelBarrelNLayer
virtual int PixelBarrelNLayer() override
Definition: PixelDetectorDC1DC2.h:956
InDetDD::PixelReadoutTechnology::FEI3
@ FEI3
PixelGeoDC2::PixelGeometryManager::SetPhi
virtual void SetPhi(int phi)=0
InDetDD::SiDetectorManager::addDesign
const SiDetectorDesign * addDesign(std::unique_ptr< const SiDetectorDesign > &&)
Access to module design; returns an observer pointer.
Definition: SiDetectorManager.cxx:134
PixelGeoDC2::PixelGeometryManager::PixelHybridWidth
virtual double PixelHybridWidth()=0
PixelGeoDC2::OraclePixGeoManager::SetDesignName
virtual void SetDesignName(std::string) override
Definition: PixelDetectorDC1DC2.cxx:2103
PixelGeoDC2::GeoPixelModule::GeoPixelModule
GeoPixelModule(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, GeoPixelSiCrystal &theSensor)
Definition: PixelDetectorDC1DC2.cxx:910
makeDTCalibBlob_pickPhase.pd
pd
Definition: makeDTCalibBlob_pickPhase.py:342
DecodeVersionKey::node
const std::string & node() const
Return the version node.
Definition: DecodeVersionKey.cxx:97
PixelGeoDC2::GeoPixelLayer::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:822
PixelGeoDC2::OraclePixGeoManager::DesignPitchRP
virtual double DesignPitchRP(bool isBLayer) override
Definition: PixelDetectorDC1DC2.h:1102
PixelGeoDC2::PixelGeometryManager::PixelECCablesRMin
virtual double PixelECCablesRMin()=0
PixelGeoDC2::GeoPixelSubDisk
Definition: PixelDetectorDC1DC2.h:334
PixelGeoDC2::PixelGeometryManager::PixelEndcapNDisk
virtual int PixelEndcapNDisk()=0
sendEI_SPB.root
root
Definition: sendEI_SPB.py:34
PixelGeoDC2::PixelGeometryManager::PixelLadderTilt
virtual double PixelLadderTilt()=0
PixelGeoDC2::OraclePixGeoManager::m_pdch
IRDBRecordset_ptr m_pdch
Definition: PixelDetectorDC1DC2.h:638
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
PixelGeoDC2::OraclePixGeoManager::m_PixelEndcapService
IRDBRecordset_ptr m_PixelEndcapService
Definition: PixelDetectorDC1DC2.h:622
PixelGeoDC2::OraclePixGeoManager::isBarrel
virtual bool isBarrel() override
Definition: PixelDetectorDC1DC2.cxx:1731
PixelGeoDC2::GeoPixelDisk::GeoPixelDisk
GeoPixelDisk(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr)
Definition: PixelDetectorDC1DC2.cxx:224
PixelGeoDC2::PixelGeometryManager::PixelServiceR
virtual double * PixelServiceR(std::string, int)=0
PixelGeoDC2::OraclePixGeoManager::DC1Geometry
virtual bool DC1Geometry() const override
Definition: PixelDetectorDC1DC2.cxx:2072
PixelGeoDC2::PixelGeometryManager::~PixelGeometryManager
virtual ~PixelGeometryManager()
Definition: PixelDetectorDC1DC2.cxx:2260
PixelGeoDC2::OraclePixGeoManager::m_versionTag
std::string m_versionTag
Definition: PixelDetectorDC1DC2.h:688
PixelGeoDC2::PixelGeometryManager::PixelBarrelRMin
virtual double PixelBarrelRMin()=0
PixelGeoDC2::GeoPixelSiCrystal::m_design
const InDetDD::SiDetectorDesign * m_design
Definition: PixelDetectorDC1DC2.h:319
PixelGeoDC2::OraclePixGeoManager::PixelServiceNFrame
virtual int PixelServiceNFrame(std::string) override
Definition: PixelDetectorDC1DC2.cxx:1935
PixelGeoDC2::PixelGeometryManager::commonItems
virtual InDetDD::SiCommonItems * commonItems()=0
PixelGeoDC2::OraclePixGeoManager::m_pxbi
IRDBRecordset_ptr m_pxbi
Definition: PixelDetectorDC1DC2.h:627
PixelGeoDC2::GeoPixelDisk::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:243
PixelGeoDC2::PixelGeometryManager::isEndcap
virtual bool isEndcap()=0
PixelGeoDC2::OraclePixGeoManager::m_PixelBarrelService
IRDBRecordset_ptr m_PixelBarrelService
Definition: PixelDetectorDC1DC2.h:618
PixelGeoDC2::GeoPixelEndCap::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:451
PixelGeoDC2::PixelGeometryManager::SetCurrentLD
virtual void SetCurrentLD(int i)=0
PixelID::wafer_id
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module) const
For a single crystal.
Definition: PixelID.h:360
PixelGeoDC2::OraclePixGeoManager::m_g3CompatibleDigits
bool m_g3CompatibleDigits
Definition: PixelDetectorDC1DC2.h:655
PixelGeoDC2::PixelGeometryManager::Phi
virtual int Phi()=0
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
PixelGeoDC2::PixelGeometryManager::DesignPitchRP
virtual double DesignPitchRP(bool isBLayer)=0
PixelGeoDC2::OraclePixGeoManager::PixelECCarbonRMin
virtual double PixelECCarbonRMin(std::string) override
Definition: PixelDetectorDC1DC2.cxx:1866
PixelGeoDC2::GeoPixelDiskSupports::m_nframe
int m_nframe
Definition: PixelDetectorDC1DC2.h:148
PixelGeoDC2::OraclePixGeoManager::m_alignable
bool m_alignable
Definition: PixelDetectorDC1DC2.h:664
PixelGeoDC2::OraclePixGeoManager::GetLayer0ModuleName
virtual std::string GetLayer0ModuleName() override
Definition: PixelDetectorDC1DC2.cxx:2131
PixelGeoDC2::GeoPixelServices::m_zone
std::string m_zone
Definition: PixelDetectorDC1DC2.h:297
PixelGeoDC2::GeoPixelDiskSupports::m_rmax
std::vector< double > m_rmax
Definition: PixelDetectorDC1DC2.h:146
TRT::Hit::side
@ side
Definition: HitInfo.h:83
PixelGeoDC2::GeoPixelTubeCables::Thickness
double Thickness()
Definition: PixelDetectorDC1DC2.cxx:1529
PixelGeoDC2::OraclePixGeoManager::m_pxei
IRDBRecordset_ptr m_pxei
Definition: PixelDetectorDC1DC2.h:632
PixelGeoDC2::PixelGeometryManager::PixelECSiDz1
virtual double PixelECSiDz1()=0
BchCleanup.mgr
mgr
Definition: BchCleanup.py:294
PixelGeoDC2::PixelGeometryManager::PixelServiceZ
virtual double * PixelServiceZ(std::string, int)=0
PixelGeoDC2::GeoPixelSiCrystal::m_id
Identifier m_id
Definition: PixelDetectorDC1DC2.h:318
PixelGeoDC2::OraclePixGeoManager::PixelBoardWidth
virtual double PixelBoardWidth() override
Definition: PixelDetectorDC1DC2.cxx:1754
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
PixelGeoDC2::PixelGeometryManager::GetSide
virtual int GetSide()=0
PixelGeoDC2::OraclePixGeoManager::Temperature
virtual double Temperature(bool isBLayer) override
Definition: PixelDetectorDC1DC2.cxx:2216
PixelGeoDC2::PixelGeometryManager::isLDPresent
virtual bool isLDPresent()=0
PixelGeoDC2::PixelGeometryManager::PixelBarrelRMax
virtual double PixelBarrelRMax()=0
PixelGeoDC2::OraclePixGeoManager::getIdHelper
const PixelID * getIdHelper() override
Definition: PixelDetectorDC1DC2.cxx:2242
PixelGeoDC2::PixelGeometryManager::PixelCableWidth
virtual double PixelCableWidth()=0
PixelGeoDC2::PixelGeometryManager::PixelBarrelHalfLength
virtual double PixelBarrelHalfLength()=0
PixelGeoDC2::OraclePixGeoManager::m_PixelStave
IRDBRecordset_ptr m_PixelStave
Definition: PixelDetectorDC1DC2.h:625
PixelGeoDC2::GeoPixelHybrid
Definition: PixelDetectorDC1DC2.h:200
PixelGeoDC2::OraclePixGeoManager::m_PixelCommon
IRDBRecordset_ptr m_PixelCommon
Definition: PixelDetectorDC1DC2.h:619
PixelGeoDC2::PixelGeometryManager::PixelBoardLength
virtual double PixelBoardLength()=0
PixelGeoDC2::OraclePixGeoManager::DesignCircuitsPerRow
virtual int DesignCircuitsPerRow() override
Definition: PixelDetectorDC1DC2.h:1137
InDetDD_Defs.h
PixelGeoDC2::OraclePixGeoManager::SetEndcapModuleName
virtual void SetEndcapModuleName(std::string) override
Definition: PixelDetectorDC1DC2.cxx:2119
PixelDetectorManager.h
PixelGeoDC2::PixelGeometryManager::PixelBoardWidth
virtual double PixelBoardWidth()=0
PixelGeoUtils.h
PixelGeoDC2::OraclePixGeoManager::SetLayer0ModuleName
virtual void SetLayer0ModuleName(std::string) override
Definition: PixelDetectorDC1DC2.cxx:2127
PixelGeoDC2::OraclePixGeoManager::DesignRPActiveArea
virtual double DesignRPActiveArea() override
Definition: PixelDetectorDC1DC2.h:1095
PixelGeoDC2::GeoPixelTubeCables
Definition: PixelDetectorDC1DC2.h:357
AthMessaging::msgLvl
bool msgLvl(const MSG::Level lvl) const
Test the output level.
Definition: AthMessaging.h:151
PixelGeoDC2::GeoPixelModule::m_theSensor
GeoPixelSiCrystal & m_theSensor
Definition: PixelDetectorDC1DC2.h:276
PixelGeoDC2::PixelGeometryManager::SetNeg
virtual void SetNeg()=0
PixelGeoDC2::GeoPixelSubDisk::RMax
double RMax()
Definition: PixelDetectorDC1DC2.cxx:1415
PixelGeoDC2::PixelGeometryManager::DesignGapZ
virtual double DesignGapZ()=0
PixelGeoDC2::OraclePixGeoManager::DesignCellRowsPerCircuit
virtual int DesignCellRowsPerCircuit(bool isBLayer) override
Definition: PixelDetectorDC1DC2.cxx:2156
lumiFormat.i
int i
Definition: lumiFormat.py:85
PixelGeoDC2::OraclePixGeoManager::PixelHybridWidth
virtual double PixelHybridWidth() override
Definition: PixelDetectorDC1DC2.cxx:1786
z
#define z
CaloSwCorrections.phimod
def phimod(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:203
PixelGeoDC2::OraclePixGeoManager::DesignDiodeRowsPerCircuit
virtual int DesignDiodeRowsPerCircuit(bool isBLayer) override
Definition: PixelDetectorDC1DC2.cxx:2173
PixelGeoDC2::OraclePixGeoManager::PixelECCablesThickness
virtual double PixelECCablesThickness() override
Definition: PixelDetectorDC1DC2.cxx:2146
PixelGeoDC2::GeoPixelDiskSupports::m_material
std::vector< std::string > m_material
Definition: PixelDetectorDC1DC2.h:147
beamspotman.n
n
Definition: beamspotman.py:729
python.SystemOfUnits.micrometer
float micrometer
Definition: SystemOfUnits.py:80
PixelGeoDC2::GeoPixelDiskSupports::m_halflength
std::vector< double > m_halflength
Definition: PixelDetectorDC1DC2.h:146
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
SiCommonItems.h
PixelGeoDC2::GeoPixelDiskSupports
Definition: PixelDetectorDC1DC2.h:137
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
PixelGeoDC2::PixelGeometryManager::getIdHelper
virtual const PixelID * getIdHelper()=0
angle
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
Definition: TRTDetectorFactory_Full.cxx:68
PixelGeoDC2::GeoPixelSubDisk::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:1371
PixelGeoDC2::GeoPixelModule::getID
Identifier getID()
Definition: PixelDetectorDC1DC2.cxx:1007
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
PixelGeoDC2::PixelGeometryManager::PixelECCablesRMax
virtual double PixelECCablesRMax()=0
PixelGeoDC2::PixelGeometryManager::SetPos
virtual void SetPos()=0
DecodeVersionKey
This is a helper class to query the version tags from GeoModelSvc and determine the appropriate tag a...
Definition: DecodeVersionKey.h:18
PixelGeoDC2::PixelGeometryManager::PixelDiskRMin
virtual double PixelDiskRMin()=0
PixelGeoDC2::PixelGeometryManager::SetBarrel
virtual void SetBarrel()=0
PixelGeoDC2::OraclePixGeoManager::GetEndcapModuleName
virtual std::string GetEndcapModuleName() override
Definition: PixelDetectorDC1DC2.cxx:2123
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
PixelGeoDC2::OraclePixGeoManager::SetDetElementName
virtual void SetDetElementName(std::string) override
Definition: PixelDetectorDC1DC2.cxx:2095
PixelGeoDC2::PixelGeometryManager::DesignCircuitsPerColumn
virtual int DesignCircuitsPerColumn()=0
PixelGeoDC2::GeoPixelSubDisk::RMin
double RMin()
Definition: PixelDetectorDC1DC2.cxx:1411
PixelGeoDC2::OraclePixGeoManager::PixelECCarbonMaterial
virtual std::string PixelECCarbonMaterial(std::string) override
Definition: PixelDetectorDC1DC2.cxx:1904
PixelGeoDC2::PixelGeometryManager::SetEndcap
virtual void SetEndcap()=0
PixelGeoDC2::GeoPixelECCable::m_theECCable
GeoIntrusivePtr< GeoLogVol > m_theECCable
Definition: PixelDetectorDC1DC2.h:167
PixelGeoDC2::GeoPixelChip
Definition: PixelDetectorDC1DC2.h:103
PixelGeoDC2::GeoPixelDiskSupports::SetCylinder
void SetCylinder(int n)
Definition: PixelDetectorDC1DC2.h:143
PixelGeoDC2::OraclePixGeoManager::m_dc1Geometry
bool m_dc1Geometry
Definition: PixelDetectorDC1DC2.h:661
PixelAthClusterMonAlgCfg.zmax
zmax
Definition: PixelAthClusterMonAlgCfg.py:169
DecodeVersionKey::tag
const std::string & tag() const
Return version tag.
Definition: DecodeVersionKey.cxx:91
PixelGeoDC2::PixelGeometryManager::PixelModuleAngleSign
virtual double PixelModuleAngleSign(int)=0
PixelGeoDC2::GeoPixelCable::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:125
PixelGeoDC2::OraclePixGeoManager::m_designsObjectName
std::string m_designsObjectName
Definition: PixelDetectorDC1DC2.h:680
AthMessaging
Class to provide easy MsgStream access and capabilities.
Definition: AthMessaging.h:55
PixelGeoDC2::GeoPixelLadder::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:707
PixelGeoDC2::PixelGeometryManager::GetLD
virtual int GetLD()=0
PixelGeoDC2::GeoPixelDisk::RMax
double RMax()
Definition: PixelDetectorDC1DC2.cxx:319
PixelGeoDC2::OraclePixGeoManager::PixelECCarbonRMax
virtual double PixelECCarbonRMax(std::string) override
Definition: PixelDetectorDC1DC2.cxx:1875
PixelGeoDC2::OraclePixGeoManager::PixelHybridLength
virtual double PixelHybridLength() override
Definition: PixelDetectorDC1DC2.cxx:1792
PixelGeoDC2::OraclePixGeoManager::m_PixelLayer
IRDBRecordset_ptr m_PixelLayer
Definition: PixelDetectorDC1DC2.h:623
PixelGeoDC2::OraclePixGeoManager::m_pMatMgr
StoredMaterialManager * m_pMatMgr
Definition: PixelDetectorDC1DC2.h:673
PixelGeoDC2::OraclePixGeoManager::m_plor
IRDBRecordset_ptr m_plor
Definition: PixelDetectorDC1DC2.h:640
PixelGeoDC2::PixelGeometryManager::PixelECCarbonRMin
virtual double PixelECCarbonRMin(std::string)=0
PixelGeoDC2::GeoPixelServices::GeoPixelServices
GeoPixelServices(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, const std::string &)
Definition: PixelDetectorDC1DC2.cxx:1042
PixelGeoDC2::OraclePixGeoManager::PixelServiceZ
virtual double * PixelServiceZ(std::string, int) override
Definition: PixelDetectorDC1DC2.cxx:1983
PixelGeoDC2::PixelGeometryManager::PixelECCarbonRMax
virtual double PixelECCarbonRMax(std::string)=0
PixelGeoDC2::PixelGeometryManager::PixelModulePosition
virtual double PixelModulePosition(int)=0
PixelGeoDC2::PixelGeometryManager::PixelEndcapZMin
virtual double PixelEndcapZMin()=0
PixelGeoDC2::OraclePixGeoManager::m_PixelBarrelGeneral
IRDBRecordset_ptr m_PixelBarrelGeneral
Definition: PixelDetectorDC1DC2.h:617
PixelGeoDC2::OraclePixGeoManager::m_atls
IRDBRecordset_ptr m_atls
Definition: PixelDetectorDC1DC2.h:616
PixelGeoDC2::PixelGeometryManager::DesignCellRowsPerCircuit
virtual int DesignCellRowsPerCircuit(bool isBLayer)=0
PixelGeoDC2::OraclePixGeoManager::PixelServiceMaterial
virtual std::string PixelServiceMaterial(std::string, int) override
Definition: PixelDetectorDC1DC2.cxx:2033
PixelGeoDC2::PixelGeometryManager
Definition: PixelDetectorDC1DC2.h:376
AthMessaging::msg
MsgStream & msg() const
The standard message stream.
Definition: AthMessaging.h:164
PixelGeoDC2::GeoPixelServices::m_zpos
std::vector< double > m_zpos
Definition: PixelDetectorDC1DC2.h:295
PixelGeoDC2::GeoPixelModule::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:931
PixelGeoDC2::GeoPixelDisk::RMin
double RMin()
Definition: PixelDetectorDC1DC2.cxx:315
InDetDD::PixelDetectorManager::addAlignableTransform
virtual void addAlignableTransform(int level, const Identifier &id, GeoAlignableTransform *xf, const GeoVFullPhysVol *child)
Add alignable transforms.
Definition: PixelDetectorManager.cxx:274
PixelGeoDC2::GeoPixelLadder::m_theSensor
GeoPixelSiCrystal & m_theSensor
Definition: PixelDetectorDC1DC2.h:225
PixelGeoDC2::OraclePixGeoManager::DesignDiodeColumnsPerCircuit
virtual int DesignDiodeColumnsPerCircuit(bool isBLayer) override
Definition: PixelDetectorDC1DC2.cxx:2180
PixelGeoDC2::OraclePixGeoManager::m_PixelDisk
IRDBRecordset_ptr m_PixelDisk
Definition: PixelDetectorDC1DC2.h:620
PixelGeoDC2::GeoPixelCable
Definition: PixelDetectorDC1DC2.h:79
PixelGeoDC2::GeoPixelECCable::GeoPixelECCable
GeoPixelECCable(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr)
Definition: PixelDetectorDC1DC2.cxx:419
InDetDD::SiNumerology::setNumDisks
void setNumDisks(int nDisks)
Definition: SiNumerology.cxx:41
PixelGeoDC2::GeoPixelBarrel
Definition: PixelDetectorDC1DC2.h:68
PixelGeoDC2::PixelGeometryManager::PixelECCarbonThickness
virtual double PixelECCarbonThickness(std::string)=0
PixelGeoDC2::PixelGeometryManager::NPixelSectors
virtual int NPixelSectors()=0
PixelGeoDC2::OraclePixGeoManager::PixelServiceLD
virtual int PixelServiceLD(std::string, int) override
Definition: PixelDetectorDC1DC2.cxx:2021
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
PixelGeoDC2::OraclePixGeoManager::DesignGapZ
virtual double DesignGapZ() override
Definition: PixelDetectorDC1DC2.h:1125
PixelGeoDC2::GeoPixelLadder::Thickness
double Thickness()
Definition: PixelDetectorDC1DC2.cxx:768
PixelGeoDC2::GeoPixelServices::NCylinders
int NCylinders()
Definition: PixelDetectorDC1DC2.h:290
InDetDD::PixelDetectorManager
Definition: PixelDetectorManager.h:47
PixelGeoDC2::GeoPixelECCable::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:438
PixelGeoDC2::GeoPixelTubeCables::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:1464
PixelGeoDC2::OraclePixGeoManager::DoServices
virtual bool DoServices() override
Definition: PixelDetectorDC1DC2.cxx:2060
InDetDD::SiNumerology::setNumPhiModulesForDiskRing
void setNumPhiModulesForDiskRing(int disk, int ring, int nPhiModules)
Definition: SiNumerology.cxx:55
PixelGeoDC2::OraclePixGeoManager::SetCurrentLD
virtual void SetCurrentLD(int i) override
Definition: PixelDetectorDC1DC2.cxx:1675
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
PixelGeoDC2::OraclePixGeoManager::OraclePixGeoManager
OraclePixGeoManager()
Definition: PixelDetectorDC1DC2.cxx:1575
InDetDD::SiCommonItems
Definition: SiCommonItems.h:45
PixelGeoDC2::GeoPixelModule
Definition: PixelDetectorDC1DC2.h:260
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
StoredMaterialManager.h
InDetDD::SiNumerology::setNumEtaModulesForLayer
void setNumEtaModulesForLayer(int layer, int nEtaModules)
Definition: SiNumerology.cxx:67
PixelGeoDC2::GeoPixelServices::ZPos
double ZPos()
Definition: PixelDetectorDC1DC2.h:292
PixelGeoDC2::GeoPixelSiCrystal::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:1279
PixelGeoDC2::OraclePixGeoManager::commonItems
virtual InDetDD::SiCommonItems * commonItems() override
Definition: PixelDetectorDC1DC2.cxx:2222
PixelGeoDC2::PixelGeometryManager::PixelRMax
virtual double PixelRMax()=0
PixelGeoDC2::GeoPixelChip::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:192
PixelGeoDC2::PixelGeometryManager::PixelECCablesThickness
virtual double PixelECCablesThickness()=0
PixelGeoDC2::PixelGeometryManager::PixelCableZMin
virtual double PixelCableZMin()=0
PixelGeoDC2::PixelGeometryManager::PixelModuleAngle
virtual double PixelModuleAngle()=0
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
PixelGeoDC2::GeoPixelServices::m_halflength
std::vector< double > m_halflength
Definition: PixelDetectorDC1DC2.h:295
PixelGeoDC2::PixelGeometryManager::PixelLadderWidth
virtual double PixelLadderWidth()=0
PixelGeoDC2::OraclePixGeoManager::isLDPresent
virtual bool isLDPresent() override
Definition: PixelDetectorDC1DC2.cxx:1715
PixelGeoDC2::GeoPixelDiskSupports::GeoPixelDiskSupports
GeoPixelDiskSupports(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr)
Definition: PixelDetectorDC1DC2.cxx:370
PixelGeoDC2::OraclePixGeoManager::PixelECCarbonThickness
virtual double PixelECCarbonThickness(std::string) override
Definition: PixelDetectorDC1DC2.cxx:1885
PixelGeoDC2::PixelGeometryManager::PixelServiceNFrame
virtual int PixelServiceNFrame(std::string)=0
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
PixelGeoDC2::GeoPixelCable::Thickness
double Thickness() const
Definition: PixelDetectorDC1DC2.cxx:155
DecodeVersionKey.h
PixelGeoDC2::PixelGeometryManager::DesignDiodeRowsPerCircuit
virtual int DesignDiodeRowsPerCircuit(bool isBLayer)=0
PixelGeoDC2::PixelGeometryManager::PixelBoardActiveLen
virtual double PixelBoardActiveLen()=0
PixelGeoDC2::OraclePixGeoManager::m_BarrelEndcap
int m_BarrelEndcap
Definition: PixelDetectorDC1DC2.h:646
PixelGeoDC2::OraclePixGeoManager::m_barrelDesignName
std::string m_barrelDesignName
Definition: PixelDetectorDC1DC2.h:683
SiDetectorElement.h
PixelGeoDC2::GeoPixelDisk::getPhiId
int getPhiId()
Definition: PixelDetectorDC1DC2.cxx:344
PixelGeoDC2::GeoPixelDisk::Thickness
double Thickness()
Definition: PixelDetectorDC1DC2.cxx:323
PixelGeoDC2::PixelGeometryManager::Eta
virtual int Eta()=0
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:16
PlotCalibFromCool.rl
rl
Definition: PlotCalibFromCool.py:529
PixelGeoDC2::GeoPixelDiskSupports::ZPos
double ZPos()
Definition: PixelDetectorDC1DC2.h:144
PixelGeoDC2::PixelGeometryManager::PixelBarrelNLayer
virtual int PixelBarrelNLayer()=0
PixelGeoDC2::GeoPixelSubDisk::m_theSensor
GeoPixelSiCrystal & m_theSensor
Definition: PixelDetectorDC1DC2.h:347
PixelGeoDC2::PixelGeometryManager::NumberOfEmptyRows
virtual int NumberOfEmptyRows()=0
PixelGeoDC2::PixelGeometryManager::PixelChipThickness
virtual double PixelChipThickness()=0
PixelGeoDC2::OraclePixGeoManager::Voltage
virtual double Voltage(bool isBLayer) override
Definition: PixelDetectorDC1DC2.cxx:2207
PixelGeoDC2::OraclePixGeoManager::PixelLadderThickness
virtual double PixelLadderThickness() override
Definition: PixelDetectorDC1DC2.cxx:2136
python.SystemOfUnits.kelvin
float kelvin
Definition: SystemOfUnits.py:262
PixelGeoDC2::GeoPixelLayer
Definition: PixelDetectorDC1DC2.h:247
PixelGeoDC2::GeoPixelTubeCables::GeoPixelTubeCables
GeoPixelTubeCables(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr)
Definition: PixelDetectorDC1DC2.cxx:1436
PixelGeoDC2::OraclePixGeoManager::m_pxbd
IRDBRecordset_ptr m_pxbd
Definition: PixelDetectorDC1DC2.h:639
a
TList * a
Definition: liststreamerinfos.cxx:10
PixelGeoDC2::GeoPixelLadder
Definition: PixelDetectorDC1DC2.h:213
PixelGeoDC2::PixelGeometryManager::PixelECNSectors1
virtual int PixelECNSectors1()=0
PixelGeoDC2::PixelGeometryManager::PixelBoardThickness
virtual double PixelBoardThickness()=0
PixelGeoDC2::GeoPixelDisk
Definition: PixelDetectorDC1DC2.h:115
PixelGeoDC2::OraclePixGeoManager::m_elementsObjectName
std::string m_elementsObjectName
Definition: PixelDetectorDC1DC2.h:679
Base_Fragment.width
width
Definition: Sherpa_i/share/common/Base_Fragment.py:59
PixelGeoDC2::PixelGeometryManager::PixelHybridThickness
virtual double PixelHybridThickness()=0
PixelGeoDC2::OraclePixGeoManager::GetPixelDDManager
virtual InDetDD::PixelDetectorManager * GetPixelDDManager() override
Definition: PixelDetectorDC1DC2.cxx:2081
PixelGeoDC2::OraclePixGeoManager::PixelHybridThickness
virtual double PixelHybridThickness() override
Definition: PixelDetectorDC1DC2.cxx:1798
InDetDD
Message Stream Member.
Definition: FakeTrackBuilder.h:8
PixelGeoDC2::GeoPixelECCable
Definition: PixelDetectorDC1DC2.h:158
PixelModuleDesign.h
PixelGeoDC2::OraclePixGeoManager::CalculateThickness
double CalculateThickness(double, const std::string &)
Definition: PixelDetectorDC1DC2.cxx:1744
PixelGeoDC2::GeoPixelModule::Width
double Width()
Definition: PixelDetectorDC1DC2.cxx:988
PixelGeoDC2::GeoPixelHybrid::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:651
PixelGeoDC2::OraclePixGeoManager::m_pDetStore
StoreGateSvc * m_pDetStore
Definition: PixelDetectorDC1DC2.h:676
PixelGeoDC2::PixelGeometryManager::PixelChipLength
virtual double PixelChipLength()=0
PixelGeoDC2::PixelGeometryManager::PixelCableDeltaZ
virtual double PixelCableDeltaZ()=0
DEBUG
#define DEBUG
Definition: page_access.h:11
PixelGeoDC2::GeoPixelTubeCables::m_theBox
GeoIntrusivePtr< GeoLogVol > m_theBox
Definition: PixelDetectorDC1DC2.h:367
Amg::Translation3D
Eigen::Translation< double, 3 > Translation3D
Definition: GeoPrimitives.h:44
PixelGeoDC2::PixelGeometryManager::PixelChipWidth
virtual double PixelChipWidth()=0
PixelGeoDC2::OraclePixGeoManager::GetBarrelModuleName
virtual std::string GetBarrelModuleName() override
Definition: PixelDetectorDC1DC2.cxx:2115
StoredMaterialManager::getMaterial
virtual const GeoMaterial * getMaterial(const std::string &name)=0
PixelGeoDC2::PixelGeometryManager::isBarrel
virtual bool isBarrel()=0
StoredMaterialManager
This class holds one or more material managers and makes them storeable, under StoreGate.
Definition: StoredMaterialManager.h:28
PixelGeoDC2::PixelGeometryManager::PixelLayerRadius
virtual double PixelLayerRadius()=0
PixelGeoDC2::GeoPixelLadder::m_theLadder
GeoIntrusivePtr< GeoLogVol > m_theLadder
Definition: PixelDetectorDC1DC2.h:224
PixelGeoDC2::OraclePixGeoManager::DesignPitchZ
virtual double DesignPitchZ(bool isBLayer) override
Definition: PixelDetectorDC1DC2.h:1107
PixelGeoDC2::PixelGeometryManager::PixelEndcapZMax
virtual double PixelEndcapZMax()=0
PixelGeoDC2::OraclePixGeoManager::PixelServiceR
virtual double * PixelServiceR(std::string, int) override
Definition: PixelDetectorDC1DC2.cxx:1947
PixelGeoDC2::OraclePixGeoManager::m_barrelInFrames
int m_barrelInFrames
Definition: PixelDetectorDC1DC2.h:649
PixelGeoDC2::PixelGeometryManager::PixelGeometryManager
PixelGeometryManager()
Definition: PixelDetectorDC1DC2.cxx:2256
PixelGeoDC2::GeoPixelServices
Definition: PixelDetectorDC1DC2.h:284
PixelGeoDC2::OraclePixGeoManager::PixelBoardActiveLen
virtual double PixelBoardActiveLen() override
Definition: PixelDetectorDC1DC2.cxx:1775
PixelGeoDC2::GeoPixelServices::initialize
void initialize(const std::string &)
Definition: PixelDetectorDC1DC2.cxx:1063
PixelGeoDC2::OraclePixGeoManager::DesignZActiveArea
virtual double DesignZActiveArea() override
Definition: PixelDetectorDC1DC2.h:1098
InDetDD::Undefined
@ Undefined
Definition: DetectorDesign.h:46
PixelGeoDC2::GeoPixelEndCap
Definition: PixelDetectorDC1DC2.h:176
PixelGeoDC2::GeoPixelLadder::GeoPixelLadder
GeoPixelLadder(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, GeoPixelSiCrystal &theSensor)
Definition: PixelDetectorDC1DC2.cxx:675
PixelDiodeTreeBuilder.h
PixelGeoDC2::GeoPixelServices::m_rmax
std::vector< double > m_rmax
Definition: PixelDetectorDC1DC2.h:295
CaloCondBlobAlgs_fillNoiseFromASCII.tag
string tag
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:23
PixelGeoDC2::OraclePixGeoManager::G3CompatibleDigits
virtual bool G3CompatibleDigits() const override
Definition: PixelDetectorDC1DC2.cxx:2064
PixelGeoDC2::PixelGeometryManager::PixelCableZMax
virtual double PixelCableZMax()=0
PixelGeoDC2::PixelGeometryManager::PixelECSiDz2
virtual double PixelECSiDz2()=0
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
PixelGeoDC2::GeoPixelServices::SetCylinder
void SetCylinder(int n)
Definition: PixelDetectorDC1DC2.h:291
InDetDD::detail::kNDirections
@ kNDirections
Definition: PixelGeoUtils.h:20
PixelGeoDC2::GeoPixelLadderStruct::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:794
PixelGeoDC2::OraclePixGeoManager::InitialLayout
virtual bool InitialLayout() const override
Definition: PixelDetectorDC1DC2.cxx:2068
PixelGeoDC2::GeoPixelModule::Length
double Length()
Definition: PixelDetectorDC1DC2.cxx:996
PixelGeoDC2::GeoPixelModule::m_theModule
GeoIntrusivePtr< GeoLogVol > m_theModule
Definition: PixelDetectorDC1DC2.h:274
InDetDD::detail::makePixelDiodeTree
PixelDiodeTree makePixelDiodeTree(T_MsgParent *gmt_mgr, InDetDD::PixelReadoutTechnology readoutTechnology, const std::array< int, kNDirections > &circuits, const std::array< int, kNDirections > &dimPerCircuit, const std::array< std::array< double, kNDirections >, kNPixelLocations > &pitch)
Definition: PixelGeoUtils.h:46
PixelGeoDC2::OraclePixGeoManager::SetBarrel
virtual void SetBarrel() override
Definition: PixelDetectorDC1DC2.cxx:1699
IGeoModelSvc.h
PixelGeoDC2::GeoPixelEnvelope::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:543
PixelID
Definition: PixelID.h:67
PixelDiodeTree.h
pow
constexpr int pow(int base, int exp) noexcept
Definition: ap_fixedTest.cxx:15
PixelGeoDC2::OraclePixGeoManager::m_PixelModule
IRDBRecordset_ptr m_PixelModule
Definition: PixelDetectorDC1DC2.h:624
PixelGeoDC2::GeoVPixelFactory
Definition: PixelDetectorDC1DC2.h:43
PixelGeoDC2::GeoVPixelFactory::~GeoVPixelFactory
virtual ~GeoVPixelFactory()
Definition: PixelDetectorDC1DC2.cxx:1559
PixelGeoDC2::GeoPixelDiskSupports::NCylinders
int NCylinders()
Definition: PixelDetectorDC1DC2.h:142
PixelGeoDC2::OraclePixGeoManager::Alignable
virtual bool Alignable() const override
Definition: PixelDetectorDC1DC2.cxx:2076
StoreGateSvc.h
InDetDD::SiNumerology::setNumPhiModulesForLayer
void setNumPhiModulesForLayer(int layer, int nPhiModules)
Definition: SiNumerology.cxx:61
length
double length(const pvec &v)
Definition: FPGATrackSimLLPDoubletHoughTransformTool.cxx:26
PixelGeoDC2::OraclePixGeoManager::m_blayerDesignName
std::string m_blayerDesignName
Definition: PixelDetectorDC1DC2.h:685
PixelGeoDC2::PixelGeometryManager::PixelNModule
virtual int PixelNModule()=0
MakeSliceSet.logname
logname
Definition: MakeSliceSet.py:34
PixelGeoDC2::OraclePixGeoManager::PixelChipLength
virtual double PixelChipLength() override
Definition: PixelDetectorDC1DC2.cxx:1830
PixelGeoDC2::PixelGeometryManager::PixelHalfLength
virtual double PixelHalfLength()=0
python.SystemOfUnits.pc
float pc
Definition: SystemOfUnits.py:114
PixelGeoDC2::PixelGeometryManager::DesignDiodeColumnsPerCircuit
virtual int DesignDiodeColumnsPerCircuit(bool isBLayer)=0
InDetDD::electrons
@ electrons
Definition: InDetDD_Defs.h:17
PixelGeoDC2::GeoPixelDiskSupports::m_rmin
std::vector< double > m_rmin
Definition: PixelDetectorDC1DC2.h:146
PixelGeoDC2::PixelGeometryManager::PixelRMin
virtual double PixelRMin()=0
InDetDD::SiNumerology::addBarrel
void addBarrel(int id)
Definition: SiNumerology.cxx:97
PixelGeoDC2::OraclePixGeoManager::setCommonItems
virtual void setCommonItems(InDetDD::SiCommonItems *commonItems) override
Definition: PixelDetectorDC1DC2.cxx:2236
PixelGeoDC2::PixelGeometryManager::PixelDiskPosition
virtual double PixelDiskPosition()=0
InDetDD::PixelDetectorManager::addDetectorElement
virtual void addDetectorElement(SiDetectorElement *element) override
Add elememts.
Definition: PixelDetectorManager.cxx:128
PixelGeoDC2::PixelGeometryManager::SetEta
virtual void SetEta(int eta)=0
PixelGeoDC2::PixelGeometryManager::PixelBalcony
virtual double PixelBalcony()=0
PixelGeoDC2::GeoPixelServices::m_rmin
std::vector< double > m_rmin
Definition: PixelDetectorDC1DC2.h:295
PixelGeoDC2::GeoPixelSubDisk::m_theSubDisk
GeoIntrusivePtr< GeoLogVol > m_theSubDisk
Definition: PixelDetectorDC1DC2.h:348
PixelGeoDC2::OraclePixGeoManager::PixelBoardLength
virtual double PixelBoardLength() override
Definition: PixelDetectorDC1DC2.cxx:1760
PixelGeoDC2::GeoPixelBarrel::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:56
PixelGeoDC2::PixelGeometryManager::DesignPitchZ
virtual double DesignPitchZ(bool isBLayer)=0
python.LArMinBiasAlgConfig.float
float
Definition: LArMinBiasAlgConfig.py:65
PixelGeoDC2::OraclePixGeoManager::m_commonItems
InDetDD::SiCommonItems * m_commonItems
Definition: PixelDetectorDC1DC2.h:667
PixelGeoDC2::PixelGeometryManager::PixelEndcapRMax
virtual double PixelEndcapRMax()=0
PixelGeoDC2::PixelGeometryManager::PixelCableThickness
virtual double PixelCableThickness()=0
PixelGeoDC2::OraclePixGeoManager::m_pDDmgr
InDetDD::PixelDetectorManager * m_pDDmgr
Definition: PixelDetectorDC1DC2.h:670
PixelGeoDC2::OraclePixGeoManager::SetBarrelModuleName
virtual void SetBarrelModuleName(std::string) override
Definition: PixelDetectorDC1DC2.cxx:2111
Identifier
Definition: IdentifierFieldParser.cxx:14