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